Introduzione¶
Ci sono diversi modi per eseguire una copia di mkdocs
per vedere esattamente come apparirà il documento Rocky Linux una volta unito sul sistema live. Questo particolare documento tratta l'uso di un container LXD sulla vostra postazione locale per separare il codice python in mkdocs
da altri progetti su cui potreste lavorare.
Si consiglia di tenere i progetti separati per evitare di creare problemi con il codice della propria workstation.
Questo è anche un documento di accompagnamento alla versione Docker qui.
Prerequisiti e presupposti¶
- Familiarità e comfort con la riga di comando
- Essere a proprio agio con l'uso di strumenti per l'editing, SSH e la sincronizzazione, o essere disposti a seguire e imparare
- Riferimento a LXD - c'è un lungo documento sulla costruzione e utilizzo di LXD su un server qui, ma si utilizzerà solo un'installazione di base sulla nostra workstation Linux
- Utilizzo di
lsyncd
per il mirroring dei file. Vedere documentazione in merito qui - Avrete bisogno di chiavi pubbliche generate per il vostro utente e per l'utente "root" sulla vostra postazione locale usando questo documento
- La nostra interfaccia bridge è in esecuzione su 10.56.233.1 e il nostro container è in esecuzione su 10.56.233.189 nei nostri esempi. Tuttavia i vostri IP per il bridge e il container potrebbero essere diversi.
- "youruser" in questo documento rappresenta l'id dell'utente
- Il presupposto è che si stia già sviluppando la documentazione con un clone del repository della documentazione sulla propria workstation
Il container mkdocs
¶
Creare il container¶
Il primo passo è creare il contenitore LXD. L'uso delle impostazioni predefinite del container (interfaccia del bridge) vanno benissimo in questo caso.
Si aggiungerà un container Rocky alla nostra workstation per mkdocs
. Chiamatelo semplicemente "mkdocs":
lxc launch images:rockylinux/8 mkdocs
Il container deve essere un proxy. Per impostazione predefinita, quando mkdocs serve
si avvia, viene gestito all'indirizzo 127.0.0.1:8000. Questo va bene quando ci si trova sulla propria workstation locale senza un container. Tuttavia, quando si trova in un container LXD sulla workstation locale, è necessario impostare il container con una porta proxy. Eseguire questa operazione con:
lxc config device add mkdocs mkdocsport proxy listen=tcp:0.0.0.0:8000 connect=tcp:127.0.0.1:8000
Nella riga precedente, "mkdocs" è il nome del nostro container, "mkdocsport" è un nome arbitrario che si dà alla porta proxy, il tipo è "proxy" e si è in ascolto su tutte le interfacce TCP sulla porta 8000 e ci si connette al localhost per quel container sulla porta 8000.
Nota
Se si esegue l'istanza di lxd su un'altra macchina della rete, assicurarsi che la porta 8000 sia aperta nel firewall.
Installazione dei pacchetti¶
Per prima cosa, entrare nel container con:
lxc exec mkdocs bash
Modifiche al file requirements.txt per 8.x
L'attuale `requirements.txt' richiederà una versione di Python più recente di quella installata di default in Rocky Linux 8.5 o 8.6. Per poter installare tutte le altre dipendenze, procedere come segue:
sudo dnf module enable python38
sudo dnf install python38
Se si utilizza Rocky Linux 8.x, per l'installazione dei pacchetti utilizzare la seguente procedura:
dnf install git openssh-server rsync
Non installare `python3-pip'
Per Rocky Linux 9.x sono necessari alcuni pacchetti (per l'installazione dei pacchetti 8.x vedere "Modifiche al file requirements.txt per 8.x"):
dnf install git openssh-server python3-pip rsync
Una volta installato, è necessario abilitare e avviare sshd
:
systemctl enable --now sshd
Utenti del container¶
È necessario impostare una password per l'utente root e quindi aggiungere il nostro utente (l'utente utilizzato sulla macchina locale) all'elenco dei sudoer. In questo momento siete l'utente "root". Per modificare la password, inserire:
passwd
Impostare una password sicura e memorizzabile.
Quindi, aggiungete il vostro utente e impostate una password:
adduser youruser
passwd youruser
Aggiungete il vostro utente al gruppo sudoers:
usermod -aG wheel youruser
Dovreste essere in grado di accedere al container con l'utente root o con l'utente della vostra workstation e di inserire una password. Assicuratevi di poterlo fare prima di continuare.
SSH per root e per il vostro utente¶
In questa procedura, l'utente root (come minimo) deve essere in grado di entrare in SSH nel container senza inserire una password; questo a seguito del processo lsyncd
che verrà implementato. Il presupposto è che si possa usare sudo come utente root sulla propria stazione di lavoro locale:
sudo -s
Si presuppone inoltre che l'utente root abbia una chiave id_rsa.pub
nella directory ./ssh
. In caso contrario, generarne una con questa procedura:
ls -al .ssh/
drwx------ 2 root root 4096 Feb 25 08:06 .
drwx------ 14 root root 4096 Feb 25 08:10 ..
-rw------- 1 root root 2610 Feb 14 2021 id_rsa
-rw-r--r-- 1 root root 572 Feb 14 2021 id_rsa.pub
-rw-r--r-- 1 root root 222 Feb 25 08:06 known_hosts
Per ottenere l'accesso SSH al nostro container senza dover inserire una password, a condizione che la chiave id_rsa.pub
esista, come sopra, basta eseguire:
ssh-copy-id root@10.56.233.189
Per il nostro utente, invece, è necessario copiare l'intera cartella .ssh/
nel nostro container. Per questo utente si manterrà tutto uguale, in modo che l'accesso a GitHub tramite SSH sia lo stesso.
Per copiare tutto nel nostro container, basta farlo come utente, non sudo:
scp -r .ssh/ youruser@10.56.233.189:/home/youruser/
Quindi, accedere al container con SSH come utente:
ssh -l youruser 10.56.233.189
È necessario che le cose siano identiche. Lo si fa con ssh-add
. Per farlo, è necessario assicurarsi di avere a disposizione il ssh-agent
:
eval "$(ssh-agent)"
ssh-add
Clonare i repository¶
È necessario clonare due repository, ma non è necessario aggiungere alcun git
remote. Il repository della documentazione qui visualizzerà solo la documentazione corrente ( in mirroring dalla propria postazione di lavoro) e i documenti.
Il repository rockylinux.org serve per eseguire mkdocs serve
e userà il mirror come sorgente. Eseguite tutti questi passaggi come utente non root. Se non si riesce a clonare i repository con il proprio userid, allora c'è un problema con la propria identità per quanto concerne git
e occorre rivedere gli ultimi passi per ricreare la chiave d'ambiente (sopra).
Per prima cosa, clonare la documentazione:
git clone git@github.com:rocky-linux/documentation.git
Successivamente, clonare docs.rockylinux.org:
git clone git@github.com:rocky-linux/docs.rockylinux.org.git
Se si verificano degli errori, tornare ai passaggi precedenti e assicurarsi che siano tutti corretti prima di continuare.
Configurazione di mkdocs
¶
L'installazione dei plugin necessari si effettua con pip3
e il file "requirements.txt" nella directory docs.rockylinux.org. Anche se questo processo contesterà l'uso dell'utente root per scrivere le modifiche alle directory di sistema, è necessario eseguirlo come root.
Lo si fa con sudo
qui.
Entrare nella directory:
cd docs.rockylinux.org
Quindi eseguire:
sudo pip3 install -r requirements.txt
Successivamente è necessario impostare mkdocs
con una cartella aggiuntiva. mkdocs
richiede la creazione di una cartella docs e di una cartella documentation/docs collegata ad essa. Eseguire questa operazione con:
mkdir docs
cd docs
ln -s ../../documentation/docs
Testare mkdocs
¶
Ora che avete configurato mkdocs
, provate ad avviare il server. Ricordate che questo processo sosterrà che si tratta di una produzione. Non lo è, quindi ignorate l'avvertimento. Avviare mkdocs serve
con:
mkdocs serve -a 0.0.0.0:8000
Nella console verrà visualizzato qualcosa di simile a questo:
INFO - Building documentation...
WARNING - Config value: 'dev_addr'. Warning: The use of the IP address '0.0.0.0' suggests a production environment or the use of a
proxy to connect to the MkDocs server. However, the MkDocs' server is intended for local development purposes only. Please
use a third party production-ready server instead.
INFO - Adding 'sv' to the 'plugins.search.lang' option
INFO - Adding 'it' to the 'plugins.search.lang' option
INFO - Adding 'es' to the 'plugins.search.lang' option
INFO - Adding 'ja' to the 'plugins.search.lang' option
INFO - Adding 'fr' to the 'plugins.search.lang' option
INFO - Adding 'pt' to the 'plugins.search.lang' option
WARNING - Language 'zh' is not supported by lunr.js, not setting it in the 'plugins.search.lang' option
INFO - Adding 'de' to the 'plugins.search.lang' option
INFO - Building en documentation
INFO - Building de documentation
INFO - Building fr documentation
INFO - Building es documentation
INFO - Building it documentation
INFO - Building ja documentation
INFO - Building zh documentation
INFO - Building sv documentation
INFO - Building pt documentation
INFO - [14:12:56] Reloading browsers
Ora il momento della verità! Se avete fatto tutto correttamente, dovreste essere in grado di aprire un browser web e andare all'IP del vostro container sulla porta :8000 e vedere il sito della documentazione.
Nel nostro esempio, inserite quanto segue nell'indirizzo del browser (NOTA Per evitare URL non funzionanti, l'IP è stato modificato in "your-server-ip". È sufficiente sostituire l'IP):
http://your-server-ip:8000
lsyncd
¶
Se avete visto la documentazione nel browser web, ci siete quasi. L'ultimo passo consiste nel mantenere la documentazione del container sincronizzata con quella della workstation locale.
Come indicato in precedenza, questo si fa qui con lsyncd
.
L'installazione di lsyncd
varia a seconda della versione di Linux. Questo documento descrive i modi per installarlo su Rocky Linux e anche dai sorgenti. Se si utilizzano altri tipi di Linux (Ubuntu, per esempio), in genere hanno i loro pacchetti, ma hanno delle differenze.
Ubuntu, ad esempio, denomina il file di configurazione in modo diverso. Si tenga presente che se si utilizza un altro tipo di workstation Linux diverso da Rocky Linux e non si vuole installare dai sorgenti, probabilmente sono disponibili pacchetti per la propria piattaforma.
Per ora, si presume che si stia usando una workstation Rocky Linux e che si stia usando il metodo di installazione RPM del documento incluso.
Configurazione¶
Nota
L'utente root deve eseguire il demone, quindi è necessario essere root per creare i file di configurazione e i logs. A tal fine si assume sudo -s
.
È necessario avere a disposizione dei file di registro su cui lsyncd
possa scrivere:
touch /var/log/lsyncd-status.log
touch /var/log/lsyncd.log
È inoltre necessario creare un file di esclusione, anche se in questo caso non si sta escludendo nulla:
touch /etc/lsyncd.exclude
Infine, è necessario creare il file di configurazione. In questo esempio, usiamo vi
come editor, ma potete usare qualsiasi editor con cui vi sentite a vostro agio:
vi /etc/lsyncd.conf
Quindi inserire questo contenuto nel file e salvarlo. Assicuratevi di sostituire "youruser" con il vostro attuale utente, e l'indirizzo IP con il vostro IP del container:
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd-status.log",
statusInterval = 20,
maxProcesses = 1
}
sync {
default.rsyncssh,
source="/home/youruser/documentation",
host="root@10.56.233.189",
excludeFrom="/etc/lsyncd.exclude",
targetdir="/home/youruser/documentation",
rsync = {
archive = true,
compress = false,
whole_file = false
},
ssh = {
port = 22
}
}
Supponendo di aver abilitato lsyncd
al momento dell'installazione, a questo punto è sufficiente avviare o riavviare il processo:
systemctl restart lsyncd
Per assicurarsi che le cose funzionino, controllare i log, in particolare lsyncd.log
, che dovrebbe mostrare qualcosa di simile se tutto è stato avviato correttamente:
Fri Feb 25 08:10:16 2022 Normal: --- Startup, daemonizing ---
Fri Feb 25 08:10:16 2022 Normal: recursive startup rsync: /home/youruser/documentation/ -> root@10.56.233.189:/home/youruser/documentation/
Fri Feb 25 08:10:41 2022 Normal: Startup of "/home/youruser/documentation/" finished: 0
Fri Feb 25 08:15:14 2022 Normal: Calling rsync with filter-list of new/modified files/dirs
Conclusione¶
Ora mentre lavorate alla vostra documentazione sulla stazione di lavoro, sia che si tratti di un git pull
o di un ramo che create per fare un documento (come questo!), vedrete le modifiche apparire nella vostra documentazione sul container, e mkdocs serve
vi mostrerà il contenuto nel vostro browser web.
La prassi raccomandata è che tutto il Python venga eseguito separatamente da qualsiasi altro codice Python che si sta sviluppando. I container LXD possono facilitare questo compito. Provate questo metodo e vedete se funziona per voi.
Author: Steven Spencer
Contributors: Ezequiel Bruni, Ganna Zhyrnova