Diferència entre revisions de la pàgina «Grup 3 - Posada en producció classVRroom dockeritzat (Azure)»

De Wiket
Salta a la navegació Salta a la cerca
 
(16 revisions intermèdies per 2 usuaris que no es mostren)
Línia 11: Línia 11:
 
<pre>
 
<pre>
 
services
 
services
├── .secrets
 
│   ├── mysql_root_password
 
│   └── mysql_wp_password
 
 
├── apache
 
├── apache
 
│   ├── Dockerfile
 
│   ├── Dockerfile
Línia 26: Línia 23:
 
│   └── NYI
 
│   └── NYI
 
└── higiene-postural
 
└── higiene-postural
 +
    ├── .secrets
 +
    │   ├── mysql_root_password
 +
    │   └── mysql_wp_password
 
     └── docker-compose.yml
 
     └── docker-compose.yml
 
</pre>
 
</pre>
Línia 52: Línia 52:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Per tal de fer visibles els nostres serveis per part del proxy, hem d'afegir-los a la xarxa <code>proxy_services</code>. El <code>docker-compose.yml</code> del nostre WordPress quedarà doncs de la següent manera.
 
Per tal de fer visibles els nostres serveis per part del proxy, hem d'afegir-los a la xarxa <code>proxy_services</code>. El <code>docker-compose.yml</code> del nostre WordPress quedarà doncs de la següent manera.
<syntaxhighlight lang="yaml" line highlight="36-37,49-51">
+
<syntaxhighlight lang="yaml" line highlight="36-38,50-52">
 
version: "3.3"
 
version: "3.3"
  
Línia 89: Línia 89:
 
       - mysql_wp_password
 
       - mysql_wp_password
 
     networks:
 
     networks:
 +
      - default
 
       - proxy_services
 
       - proxy_services
  
 
secrets:
 
secrets:
 
   mysql_wp_password:
 
   mysql_wp_password:
     file: ../.secrets/mysql_wp_password
+
     file: .secrets/mysql_wp_password
 
   mysql_root_password:
 
   mysql_root_password:
     file: ../.secrets/mysql_root_password
+
     file: .secrets/mysql_root_password
  
 
volumes:
 
volumes:
Línia 107: Línia 108:
 
Com hem declarat la xarxa com externa, tots els <code>docker-compose.yml</code> s'intentaran connectar a una xarxa preexistent anomenada <code>proxy_services</code>, per tal d'enllestir aquesta xarxa hem de crear-la específicament dins del nostre Docker.
 
Com hem declarat la xarxa com externa, tots els <code>docker-compose.yml</code> s'intentaran connectar a una xarxa preexistent anomenada <code>proxy_services</code>, per tal d'enllestir aquesta xarxa hem de crear-la específicament dins del nostre Docker.
 
<syntaxhighlight lang="shell">docker network create proxy_services</syntaxhighlight>
 
<syntaxhighlight lang="shell">docker network create proxy_services</syntaxhighlight>
 +
 +
=== Desplegant classVRroom en producció ===
 +
Un finalitzada la reestructuració del nostre projecte, afegir el nostre [[Grup 3 - Dockerització del projecte Django|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.
 +
<syntaxhighlight lang="shell">wget https://github.com/sarkamist/VRClassRoom/archive/refs/heads/(branch).zip</syntaxhighlight>
 +
<syntaxhighlight lang="shell">wget https://raw.githubusercontent.com/sarkamist/VRClassRoom/Pro/requirements.txt</syntaxhighlight>
 +
<syntaxhighlight lang="shell">scp -i (private key) ./Dockerfile  (user)@(ip):~/services/classVRroom/Dockerfile</syntaxhighlight>
 +
<syntaxhighlight lang="shell">scp -i (private key) ./start.sh  (user)@(ip):~/services/classVRroom/start.sh</syntaxhighlight>
 +
<pre>
 +
classVRroom
 +
├── Dockerfile
 +
├── docker-compose.yml
 +
├── lms
 +
│   ├── documents
 +
│   ├── lms
 +
│   ├── manage.py
 +
│   ├── static
 +
│   └── vroom
 +
├── requirements.txt
 +
└── start.sh
 +
</pre>
 +
Amb tots els arxius necessaris per desplegar classVRroom, només ens queda crear un <code>docker-compose.yml</code> des d'on llençar el nostre servei i afegir un nou ''site'' a la configuració del nostre ''reverse proxy''.
 +
<syntaxhighlight lang="yaml" line>
 +
version: "3.3"
 +
 +
services:
 +
  class:
 +
    build: .
 +
    image: local/classroom-site:v1
 +
    restart: unless-stopped
 +
    networks:
 +
      - default
 +
      - proxy_services
 +
 +
networks:
 +
  proxy_services:
 +
    external: true
 +
</syntaxhighlight>
 +
<syntaxhighlight lang="apache" line>
 +
<VirtualHost *:80>
 +
        ServerName grup3ieti.tk
 +
        ServerAlias classroom.grup3ieti.tk
 +
 +
        RewriteEngine On
 +
        RewriteCond %{SERVER_NAME} =classroom.grup3ieti.tk
 +
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
 +
</VirtualHost>
 +
<VirtualHost *:443>
 +
        ServerName grup3ieti.tk
 +
        ServerAlias classroom.grup3ieti.tk
 +
 +
        Header always set Strict-Transport-Security "max-age=15780000; includeSubDomains"
 +
 +
        SSLEngine On
 +
        SSLProxyEngine On
 +
        SSLCertificateFile /opt/ssl/live/grup3ieti.tk/fullchain.pem
 +
        SSLCertificateKeyFile /opt/ssl/live/grup3ieti.tk/privkey.pem
 +
        Include /opt/ssl/options-ssl-apache.conf
 +
 +
        RequestHeader set X-Forwarded-Proto https
 +
        ProxyPreserveHost On
 +
 +
        ProxyPass / http://class/
 +
        ProxyPassReverse / http://class/
 +
 +
        ErrorLog ${APACHE_LOG_DIR}/classroom.grup3ieti.tk-error.log
 +
        CustomLog ${APACHE_LOG_DIR}/classroom.grup3ieti.tk-access.log combined
 +
</VirtualHost>
 +
</syntaxhighlight>
 +
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.
  
 
== Referències ==
 
== Referències ==
 
* [https://docs.docker.com/compose/networking/ Docker Compose - Networking]
 
* [https://docs.docker.com/compose/networking/ Docker Compose - Networking]

Revisió de 16:26, 31 març 2022

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.

Referències