jmb add

Recentemenete (2020) abbiamo cominciato una transizione verso i docker come modalità di deploy delle nostre applicazioni, ed in aggiunta una creazione delle immagini all’interno della mostra CI (Continuous Intergration) fornita da Gitlab/Heptapod.

I nuovi progetti hanno già il necessario.

Per facilitare il passaggio a docker ho creato il comando jmb add che aggiunge i file necessari ai progetti sprovvisti di questi file, prelevandoli dal cookiecutter relativo. Segue un esempio d’uso per un ipotetico progetto django + quasar:

cd www2020.project.it
cd django
jmb add docker

il risultato è:

$ hg st
A .gitlab-ci.yml
A Dockerfile
A uwsgi.ini
M web/settings/__init__.py

dove si vede che sono già stati aggiunti a mercurial i file necessari (spiegati sotto) ed è stato modificato il file settings/__init__.py per rendere facile la generazione dei link simbolici che usiamo per la configurazione anche all’interno del docker.

per la parte quasar in modo analogo:

cd quasar
jmb add docker

opzioni

Per i cms dove si usa weback, occorre usare l’opzione -w:

jmb add docker -w

che installa una versione di Dockerfile che esegue yarn run build

Esiste anche un’opzione che viene passata a cookiecutter e permette di selezionare il branch/topic specifico che si vuole utilizzare. In questo momento ad esempio:

jmb add docker -c docker

spiegazione file

.gitlab-ci.yml:

è il file che configura quale processamento farà gitlab. Il default è di creare una immagine docker

Dockerfile:

è la ricetta per la creazione del file docker, potrebbe essere personalizzata in caso di necessità di pacchetti binari particolari

uwsgi.ini:

è la configurazione di uwsgi (immagine django)

nginx.conf:

la configurazione di nginx (immagine quasar)

settings/__init__.py:
 
la versione installata usa una razionalizzazione fatta

recentemente che può richiedere un ritocco manuale:

  • SETTINGS_PATH => SETTINGS_DIR (teniamo _path per i file)
  • PROJECT_PATH => PROJECT_DIR
  • aggiungiamo staging.py
  • DSN_SENTRY: viene dichiarato nei file staging.py e dev.py e gestito dal __init__
  • ENABLE_TOOLBAR: viene dichiarato nei file dev.py, staging.py e gestito nell’__init__.py.
  • link a settings: viene generata se presenta una variabile ENV
  • local.py viene generato se non presente e viene aggiunta la SECRET_KEY

modifica

Per rendere facili le modifiche future dei file sopra elencati, i suddetti file vengno sovrascritti, sta allo sviluppatore capire se le modifice apportate cancellano eventuali personalizzazioni precedentemente introdotte.

template

I template di questi file sono i relativi cookiecutter. Al momento quello per quasar non è pronto quindi uso il repo specifico

requirements.txt

Ricordo, come detto già in passato, che per creare un docker è necessario che sia correttamente aggiornato il requirements.txt. Se state usando buildout, potete semplicemente usare il comando:

jmb-test-setup -Y > requirements.txt

(Assicuratevi di avere l’ultima versione del pacchetto jmb - apt-get update && apt-get install jmb). Inoltre vi chiedo di prestare attenzione ad utilizzare le ultime versioni dei pacchetti Python compatibili con il vostro progetto. Per questo potete fare un paio di cose a seconda della modalità (buildout/virtualenv).

buildout

Fissate le versioni necessarie (ad es, Django) sia in setup.py che in buildout.cfg, poi procedete così:

echo '[versions]' > versions.cfg
rm -Rf .installed.cfg
rm -Rf .develop-eggs
bin/buildout
jmb-test-setup -Y > requirements.txt

pip

Fate il pinning delle versioni in setup.py e poi eseguite:

pip install -U .
pip freeze > requirements.txt

si, questa volta mettete “.”!

Controllate poi che non ci siano stranezze nel file requirements.txt, come ad esempio setupTest o path relativi.