Grup 3 - Posada en producció classVRroom dockeritzat (Azure)
Tornar a Projecte IETI Cloud - Grup 3.
Tasca
25. Posada en producció de classVRroom dockertizat sobre cloud extern (Azure).
Informe
Reestructuració del projecte
De cara a poder aixecar i mantenir els serveis còmodament un cop integrem el projecte classVRroom, hem de reestructurar el projecte per tenir els diversos serveis separats però connectats al reverse proxy mitjançant una xarxa addicional.
En primer lloc ens encarregarem de compartimentalitzar el nostre reverse proxy ja que la resta de serveis depenen d'aquest. La nova estructura partira d'un directori services
on podrem trobar subdirectoris per cada grup de serveis.
services ├── apache │ ├── Dockerfile │ ├── docker-compose.yml │ ├── sites │ │ ├── classroom.grup3ieti.tk.conf │ │ ├── default.conf │ │ ├── default.ssl.conf │ │ └── wordpress.grup3ieti.tk.conf │ └── start.sh ├── classVRroom │ └── NYI └── higiene-postural ├── .secrets │ ├── mysql_root_password │ └── mysql_wp_password └── docker-compose.yml
Un cop tenim aquesta estructura determinada, haurem de modificar el nostre docker-compose.yml
, on entre d'altres afegirem una xarxa especifica a la que es podran connectar la resta de serveis.
1 version: "3.3"
2
3 services:
4 proxy:
5 build: .
6 image: local/apache-proxy:v1
7 restart: unless-stopped
8 volumes:
9 - /etc/letsencrypt:/opt/ssl
10 - /etc/timezone:/etc/timezone:ro
11 - /etc/localtime:/etc/localtime:ro
12 ports:
13 - "80:80"
14 - "443:443"
15 networks:
16 - proxy_services
17
18 networks:
19 proxy_services:
20 external: true
Per tal de fer visibles els nostres serveis per part del proxy, hem d'afegir-los a la xarxa proxy_services
. El docker-compose.yml
del nostre WordPress quedarà doncs de la següent manera.
1 version: "3.3"
2
3 services:
4 db:
5 image: mysql:5.7
6 restart: unless-stopped
7 volumes:
8 - db:/var/lib/mysql
9 environment:
10 MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password
11 MYSQL_DATABASE: wordpress
12 MYSQL_USER: wpadmin
13 MYSQL_PASSWORD_FILE: /run/secrets/mysql_wp_password
14 secrets:
15 - mysql_root_password
16 - mysql_wp_password
17
18 wp:
19 depends_on:
20 - db
21 image: wordpress:5.9.2
22 restart: unless-stopped
23 volumes:
24 - wp:/var/www/html
25 environment:
26 WORDPRESS_DB_HOST: db:3306
27 WORDPRESS_DB_USER: wpadmin
28 WORDPRESS_DB_NAME: wordpress
29 WORDPRESS_DB_PASSWORD_FILE: /run/secrets/mysql_wp_password
30 WORDPRESS_CONFIG_EXTRA: |
31 /* Disable automatic updates */
32 define('AUTOMATIC_UPDATE_DISABLED', true );
33 define('WP_AUTO_UPDATE_CORE', false);
34 secrets:
35 - mysql_wp_password
36 networks:
37 - default
38 - proxy_services
39
40 secrets:
41 mysql_wp_password:
42 file: .secrets/mysql_wp_password
43 mysql_root_password:
44 file: .secrets/mysql_root_password
45
46 volumes:
47 db:
48 wp:
49
50 networks:
51 proxy_services:
52 external: true
Com hem declarat la xarxa com externa, tots els docker-compose.yml
s'intentaran connectar a una xarxa preexistent anomenada proxy_services
, per tal d'enllestir aquesta xarxa hem de crear-la específicament dins del nostre Docker.
docker network create proxy_services
Desplegant classVRroom en producció
Un finalitzada la reestructuració del nostre projecte, afegir el nostre servei local dins la màquina d'Azure sera més senzill. En primer lloc, haurem de descarregar els arxius necessaris del repositori de Github i transferir el nostre Dockerfile i script d'entrada al servei.
wget https://github.com/sarkamist/VRClassRoom/archive/refs/heads/(branch).zip
wget https://raw.githubusercontent.com/sarkamist/VRClassRoom/Pro/requirements.txt
scp -i (private key) ./Dockerfile (user)@(ip):~/services/classVRroom/Dockerfile
scp -i (private key) ./start.sh (user)@(ip):~/services/classVRroom/start.sh
classVRroom ├── Dockerfile ├── docker-compose.yml ├── lms │ ├── documents │ ├── lms │ ├── manage.py │ ├── static │ └── vroom ├── requirements.txt └── start.sh
Amb tots els arxius necessaris per desplegar classVRroom, només ens queda crear un docker-compose.yml
des d'on llençar el nostre servei i afegir un nou site a la configuració del nostre reverse proxy.
1 version: "3.3"
2
3 services:
4 class:
5 build: .
6 image: local/classroom-site:v1
7 restart: unless-stopped
8 networks:
9 - default
10 - proxy_services
11
12 networks:
13 proxy_services:
14 external: true
1 <VirtualHost *:80>
2 ServerName grup3ieti.tk
3 ServerAlias classroom.grup3ieti.tk
4
5 RewriteEngine On
6 RewriteCond %{SERVER_NAME} =classroom.grup3ieti.tk
7 RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
8 </VirtualHost>
9 <VirtualHost *:443>
10 ServerName grup3ieti.tk
11 ServerAlias classroom.grup3ieti.tk
12
13 Header always set Strict-Transport-Security "max-age=15780000; includeSubDomains"
14
15 SSLEngine On
16 SSLProxyEngine On
17 SSLCertificateFile /opt/ssl/live/grup3ieti.tk/fullchain.pem
18 SSLCertificateKeyFile /opt/ssl/live/grup3ieti.tk/privkey.pem
19 Include /opt/ssl/options-ssl-apache.conf
20
21 RequestHeader set X-Forwarded-Proto https
22 ProxyPreserveHost On
23
24 ProxyPass / http://class/
25 ProxyPassReverse / http://class/
26
27 ErrorLog ${APACHE_LOG_DIR}/classroom.grup3ieti.tk-error.log
28 CustomLog ${APACHE_LOG_DIR}/classroom.grup3ieti.tk-access.log combined
29 </VirtualHost>
Finalment, podrem accedir al nostre site des de https://classroom.grup3ieti.tk, on el reverse proxy ja s'encarregarà de totes les gestiones relatives al certificat SSL.