Snap! a un servidor intermediari invers emprant Dockers
Contingut
Previ
Cal tenir una Servidor intermediari invers. Farem servir la mateixa xarxa interna de dockers al Node-RED i al servidor intermediari invers.
Podeu veure quins dockers són connectats a la xarxa interna:
docker network inspect net
Baixada del codi font
Baixeu el codi font del Snap! a GitHub:
jordi@vps:~/bin/html$ wget https://github.com/jmoenig/Snap/archive/refs/heads/master.zip
Descomprimiu (en cas de no tenir l'eina unzip feu sudo apt install unzip per a tenir-la):
jordi@vps:~/bin/html$ unzip master.zip jordi@vps:~/bin/html$ cd master jordi@vps:~/bin/html/master$
Personalització del Snap!
Opció de JavaScript activada per defecte
Per raons de seguretat, s'ha desactivat el JavaScript per defecte. Si us munteu el vostre propi servei al núvol, per a poder cridar programes vostres amb funcions amb JavaScript, heu d'afegir aquesta línia, en negreta, a l'arxiu snap.html:
<script> Process.prototype.enableJS = true; // <-- Per a tenir seleccionat el JS per defecte var world; window.onload = function () { if ('serviceWorker' in navigator) { navigator.serviceWorker.register('sw.js'); } world = new WorldMorph(document.getElementById('world')); new IDE_Morph().openIn(world); loop(); }; function loop() { requestAnimationFrame(loop); world.doOneCycle(); } </script>
Inclusió de nous exemples
A la carpeta Examples hi afegiu el nou exemple amb extensió .xml i editeu l'arxiu EXAMPLES. En aquest exemple d'edició de l'arxiu EXAMPLES s'ha afegit el nom de l'arxiu .xml (IoT-Vertebrae.xml) afegit a la carpeta Examples i separat per un tabulador una descripció mínima de l'exemple:
animal-game.xml Animal Game Codification.xml Codification copter.xml Copter count-change.xml Count Change icecream-visual.xml Icecream Visual IoT-Vertebrae.xml Interaction with IoT-Vertebrae JSfunctions.xml JSfunctions live-tree.xml Live Tree swimmer.xml Swimmer tree.xml Tree vee.xml Vee
Construcció del docker
Creació de Dockerfile i default
Dins de la carpeta a on hi l'arxiu index.html feu un nou arxiu anomenat default:
jordi@vps:~/bin/html/master$ nano default
I hi afegiu aquest contingut:
server { listen 80 default_server; listen [::]:80 default_server; root /usr/share/nginx/html; index index.html index.htm; server_name _; location / { try_files $uri $uri/ =404; } }
Dins de la carpeta a on hi l'arxiu index.html feu un nou arxiu anomenat Dockerfile:
jordi@vps:~/bin/html/master$ nano Dockerfile
I hi afegiu aquest contingut:
FROM nginx:alpine COPY . /usr/share/nginx/html EXPOSE 80
Volum de dades
Per a poder fer modificacions persistents al docker caldrà crear un volum. A aquest exemple, el nom del volum és snap_data_vol:
jordi@vps:~$ docker volume create --name snap_data_vol node_red_data_vol jordi@vps:~$ docker volume ls DRIVER VOLUME NAME local 4c6fef4d8230506f389bfb915256365bac80be875d55077ec4eff4c6672d89 local 316f02665e61720a8165c30d9cec6de5a8b3c6ecc4175c3faecc00dafe548d local c278d7565bba5de8fb48f98951c293d27818604683012c4bac202281db07ca local e9e43b1bb654f05dedf8352c6f4074a3089e5b1c3cf8e7efddb6400a753893 local node_red_data_vol local reverse-proxy_certs local reverse-proxy_dhparam local reverse-proxy_html local reverse-proxy_vhost local snap_data_vol
Accés al volum de dades:
jordi@vps:~$ sudo bash root@vps:~# cd /var/lib/docker/volumes/snap_data_vol/_data/ root@vps:/var/lib/docker/volumes/snap_data_vol/_data# cd Examples/ root@vps:/var/lib/docker/volumes/snap_data_vol/_data/Examples# cat EXAMPLES animal-game.xml Animal Game Codification.xml Codification copter.xml Copter count-change.xml Count Change icecream-visual.xml Icecream Visual IoT-Vertebrae.xml IoT-Vertebrae JSfunctions.xml JSfunctions live-tree.xml Live Tree swimmer.xml Swimmer tree.xml Tree vee.xml Vee root@vps:/var/lib/docker/volumes/snap_data_vol/_data/Examples# ls Codification.xml IoT-Vertebrae.xml animal-game.xml count-change.xml live-tree.xml tree.xml EXAMPLES JSfunctions.xml copter.xml icecream-visual.xml swimmer.xml vee.xml
Construcció del docker
Construïu el docker (ha d'haver l'arxiu Dockerfile, creat a un pas previ, al mateix directori):
jordi@vps:~/bin/html/master$ docker build -t snap9:v2.13 .
Posada en marxa del docker
Al vostre proveïdor de dominis apunteu el nou subdomini (a l'exemple és snap.binefa.cat) al vostre VPS al núvol. A la llista de DNS feu servir el tipus A si apunteu a una IP o el tipus CNAME si apunteu a un altre nom de domini.
Poseu el docker en marxa sense persistència:
jordi@vps:~/bin/html/master$ docker run --rm --name snap9 -e VIRTUAL_HOST=snap.binefa.cat -e LETSENCRYPT_HOST=snap.binefa.cat -e VIRTUAL_PORT=80 --network net -d snap9:v2.13
Poseu el docker en marxa amb persistència de les personalitzacions:
jordi@vps:~/bin/html/master$ docker run --rm --name snap9 -e VIRTUAL_HOST=snap.binefa.cat -e LETSENCRYPT_HOST=snap.binefa.cat -e VIRTUAL_PORT=80 --network net -v snap_data_vol:/usr/share/nginx/html -d snap9:v2.13
Documentació
How to Build Docker Image : Comprehensive Beginners Guide (Fa servir com a Linux base un Ubuntu 18.04)
How I Deployed my Website as a Docker Container (Fa servir com a base un docker que és un servidor nginx instal·lat dins d'un Linux Alpine. Alpine és un Linux minimalista)