Introduzione¶
Ci sono diversi modi per eseguire una copia di mkdocs
in modo da poter vedere esattamente come apparirà il vostro documento Rocky Linux quando sarà incorporato nel 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.
È consigliabile mantenere i progetti separati per evitare di causare problemi con il codice della vostra stazione di lavoro.
Questo è anche un documento partner della versione Docker qui.
Prerequisiti e presupposti¶
Alcune cose che dovresti avere/conoscere/essere:
- 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
- Faremo riferimento a LXD - c'è un lungo documento su costruzione e utilizzo di LXD su un server qui, ma noi useremo solo un'installazione di base sulla nostra workstation Linux. Questo documento presuppone che stiate già usando LXD per altre cose, e non copre la costruzione e l'inizializzazione di LXD.
- Useremo
lsyncd
per il mirroring dei file, e puoi trovare la documentazione a riguardo 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 nei nostri esempi qui sotto su 10.56.233.189.
- "youruser" in questo documento rappresenta il tuo id utente, quindi sostituiscilo con il tuo.
- Diamo per scontato che tu stia già sviluppando la documentazione con un clone del repository della documentazione sulla tua stazione di lavoro.
Il container mkdocs¶
Creare il Container¶
Il nostro primo passo è creare il container LXD. Non c'è bisogno di usare qualcosa di diverso dai valori predefiniti qui, quindi lasciate che il vostro container sia costruito usando l'interfaccia bridge.
Aggiungeremo un container Rocky alla nostra stazione di lavoro per mkdocs
, quindi lo chiameremo semplicemente "mkdocs":
lxc launch images:rockylinux/8 mkdocs
Il container deve essere impostato con un proxy. Per impostazione predefinita, quando mkdocs serve
viene avviato, viene eseguito su 127.0.0.1:8000. Questo va bene quando è sulla vostra stazione di lavoro locale senza un container. Tuttavia, quando è in un container LXD sulla vostra postazione locale, dovete impostare il container con una porta proxy. Questo viene fatto con:
lxc config device add mkdocs mkdocsport proxy listen=tcp:0.0.0.0:8000 connect=tcp:127.0.0.1:8000
Nella riga sopra, "mkdocs" è il nome del nostro contenitore, "mkdocsport" è un nome arbitrario che stiamo dando alla porta proxy, il tipo è "proxy", e poi siamo in ascolto su tutte le interfacce tcp sulla porta 8000 e ci stiamo connettendo al localhost per quel container sulla porta 8000.
Nota
Se stai eseguendo l'istanza di lxd su un'altra macchina nella tua rete, ricordati di assicurarti che la porta 8000 sia aperta nel firewall.
Installazione dei pacchetti¶
In primo luogo, entrare nel container con:
lxc exec mkdocs bash
Cambiamenti nel 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
Si può quindi saltare l'installazione di python3-pip
nei pacchetti che si trovano di seguito.
Avremo bisogno di alcuni pacchetti per realizzare ciò che dobbiamo fare:
dnf install git openssh-server python3-pip rsync
Una volta installato, dobbiamo abilitare e avviare sshd
:
systemctl enable --now sshd
Utenti del container¶
Dobbiamo impostare una password per il nostro utente root, e poi aggiungere il nostro utente (l'utente che usate sulla vostra macchina locale) e aggiungerlo alla lista sudoers. Dovremmo essere l'utente "root" al momento, quindi per cambiare la password digitate:
passwd
E imposta la password su qualcosa di sicuro e memorizzabile.
Poi, aggiungi il tuo utente e imposta una password:
adduser youruser
passwd youruser
E aggiungete il vostro utente al gruppo sudoers:
usermod -aG wheel youruser
A questo punto, dovresti essere in grado di fare SSH nel container usando l'utente root o il tuo utente dalla tua stazione di lavoro e inserendo una password. Assicuratevi di poterlo fare prima di continuare.
SSH per root e il Tuo utente¶
In questa procedura, l'utente root (come minimo) deve essere in grado di fare SSH nel container senza inserire una password; questo a causa del processo lsyncd
che implementeremo. Stiamo assumendo qui che potete fare sudo all'utente root sulla vostra stazione di lavoro locale:
sudo -s
Stiamo anche assumendo che l'utente root abbia una chiave id_rsa.pub
nella directory ./ssh
. In caso contrario, generatene una usando 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 sul nostro container senza dover inserire una password, finché la chiave id_rsa.pub
esiste, come sopra, tutto quello che dobbiamo fare è eseguire:
ssh-copy-id root@10.56.233.189
Nel caso del nostro utente, però, abbiamo bisogno dell'intera directory .ssh/ copiata nel nostro container. La ragione è che manterremo tutto identico per questo utente in modo che il nostro accesso a GitHub su SSH sia lo stesso.
Per copiare tutto nel nostro container, abbiamo solo bisogno di farlo come utente, non sudo:
scp -r .ssh/ youruser@10.56.233.189:/home/youruser/
Successivamente, SSH nel container come tuo utente:
ssh -l youruser 10.56.233.189
Dobbiamo rendere le cose identiche, e questo viene fatto con ssh-add
. Per fare questo, però, dobbiamo assicurarci di avere il ssh-agent
disponibile. Inserire quanto segue:
eval "$(ssh-agent)"
ssh-add
Clonare i repository¶
Abbiamo bisogno di due repository clonati, ma non c'è bisogno di aggiungere alcun git
remoto. Il repository della documentazione qui sarà utilizzato solo per visualizzare la documentazione corrente (replicata sulla tua stazione di lavoro) e i documenti.
Il repository di rockylinux.org sarà usato per eseguire mkdocs serve
e userà il mirror come sorgente. Tutti questi passaggi dovrebbero essere fatti come utente non root. Se non sei in grado di clonare i repository con il tuo userid, significa che Hai un problema con la tua identità per quanto riguarda git
e dovrai rivedere gli ultimi passi per ricreare le tue chiavi dell'ambiente (sopra).
Per prima cosa, clonate la documentazione:
git clone git@github.com:rocky-linux/documentation.git
Supponendo che questo abbia funzionato, allora clonate il docs.rockylinux.org:
git clone git@github.com:rocky-linux/docs.rockylinux.org.git
Se tutto ha funzionato come previsto, allora si può andare avanti.
Impostare mkdocs¶
L'installazione dei plugin necessari viene fatta con pip3
e il file "requirements.txt" nella directory docs.rockylinux.org. Mentre questo processo chiederà di usare l'utente root per farlo, al fine di scrivere le modifiche alle directory di sistema, dovrete praticamente eseguirlo come root.
Qui lo stiamo facendo con sudo
.
Entrare nella directory:
cd docs.rockylinux.org
Quindi eseguire:
sudo pip3 install -r requirements.txt
Poi abbiamo bisogno di impostare mkdocs
con una directory aggiuntiva. Al momento, mkdocs
richiede la creazione di una directory docs e poi la directory documentation/docs collegata sotto di essa. Tutto questo viene fatto con:
mkdir docs
cd docs
ln -s ../../documentation/docs
Testare mkdocs¶
Ora che abbiamo mkdocs
impostato, proviamo ad avviare il server. Ricordate, questo processo sosterrà che sembra che si tratti di produzione. Non lo è, quindi ignorate l'avvertimento. Avviare mkdocs serve
con:
mkdocs serve -a 0.0.0.0:8000
Dovreste vedere qualcosa di simile a questo nella console:
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
E ora il momento della verità! Se avete fatto tutto correttamente sopra, 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, dovremmo inserire il seguente indirizzo nel browser:
http://10.56.233.189:8000
lsyncd¶
Se avete visto la documentazione nel browser web, ci siamo quasi. L'ultimo passo è quello di mantenere la documentazione che è nel vostro container in sincronia con quella sulla vostra stazione di lavoro locale.
Lo stiamo facendo qui con lsyncd
come indicato sopra.
A seconda della versione di Linux che state usando, lsyncd
è installato in modo diverso. Questo documento copre i modi per installarlo su Rocky Linux, e anche da sorgente. Se state usando qualche altro tipo di Linux (Ubuntu per esempio) generalmente hanno i loro propri pacchetti, ma ci sono delle sfumature.
Ubuntu, per esempio, nomina il file di configurazione in modo diverso. Siate solo consapevoli che se state usando un altro tipo di workstation Linux diverso da Rocky Linux, e non volete installare dai sorgenti, probabilmente ci sono pacchetti disponibili per la vostra piattaforma.
Per ora, assumiamo che stiate usando una workstation Rocky Linux e che stiate usando il metodo di installazione RPM dal documento incluso.
Configurazione¶
Nota
L'utente root deve eseguire il demone, quindi è necessario essere root per creare i file di configurazione e i log. Per questo stiamo impiegando sudo -s
.
Abbiamo bisogno di avere dei file di log disponibili per lsyncd
per scriverci:
touch /var/log/lsyncd-status.log
touch /var/log/lsyncd.log
Dobbiamo anche creare un file di esclusione, anche se in questo caso non stiamo escludendo nulla:
touch /etc/lsyncd.exclude
Infine dobbiamo creare il file di configurazione. In questo esempio, stiamo usando vi
come editor, ma potete usare qualsiasi editor con cui vi sentite a vostro agio:
vi /etc/lsyncd.conf
E poi mettete questo contenuto in quel file e salvatelo. 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
}
}
Presumiamo che abbiate abilitato lsyncd
quando lo avete installato, quindi a questo punto dobbiamo solo avviare o riavviare il processo:
systemctl restart lsyncd
Per assicurarsi che le cose stiano funzionando, controllate i log, in particolare il lsyncd.log
, che dovrebbe mostrarvi qualcosa del genere 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.
È una pratica consigliata che tutto il codice Python venga eseguito separatamente da qualsiasi altro codice Python che si potrebbe sviluppare. I container LXD possono renderlo molto più facile; provate questo metodo e vedete se funziona per voi.
Author: Steven Spencer
Contributors: Ezequiel Bruni, Franco Colussi