Diferència entre revisions de la pàgina «Cas pràctic: dockeritzar una aplicació. Hauk»

De wikijoan
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «=Introducció= (TBD) =Instal·lar i configurar= <pre> què és REDIS? al final del fitxer config.php posem: "public_url" => 'https://jquintana.ddns.net/' inst...».)
 
m
Línia 1: Línia 1:
 
=Introducció=
 
=Introducció=
(TBD)
+
'''Hauk''' és una aplicació per compartir la teva posició des del mòbil. En el github es proporciona l'aplicació Android (companion Android app), i el codi del backend que està basat en PHP.
 +
*https://github.com/bilde2910/Hauk
 +
Per tal d'emmagatzemar la informació en el backend no es fa servir cap base de dades, sinó que es fa servir ''memcached, ''memcache'', o bé ''redis''.
 +
 
 +
En el Github es proporciona el codi i les instruccions d'instal·lació, però també es proporciona un docker, que és el que farem aquí. Instal·larem el contenidor en el servidor OVH del núvol.
 +
*https://blogprog.gonzalolopez.es/articulos/como-usar-redis-con-php.html
 
=Instal·lar i configurar=
 
=Instal·lar i configurar=
 +
Instal·lem en el servidor OVH del Jaume Balmes el ''docker-compose'', que encara no estava instal·lat.
 +
 +
Seguim els passos: primer creem la carpeta ''/home/joan/docker-hauk'' com a directori del projecte, i aquí dins la carpeta ''config/hauk'' que contindrà el fitxer config.php, que copiem de l'exemple del github. Deixo l'autenticació bàsica de ''PASSWORD'', i per tant no toco res.
 +
 +
Primer fem una prova en local, a veure si funciona. El docker-compose té com a fitxer de configuració el ''docker-compose.yml'':
 
<pre>
 
<pre>
què és REDIS?
+
version: '3.4'
  
al final del fitxer config.php posem:
+
services:
"public_url"        => 'https://jquintana.ddns.net/'
+
  hauk:
 
+
    image: bilde2910/hauk
instal·lem en el servidor del Jaume Balmes essential el docker-compose
+
    container_name: hauk
 +
    volumes:
 +
      - ./config/hauk:/etc/hauk
 +
</pre>
  
 +
<pre>
 
$ docker-compose up
 
$ docker-compose up
 
Creating network "docker-hauk_default" with the default driver
 
Creating network "docker-hauk_default" with the default driver
Línia 28: Línia 42:
  
 
http://172.20.0.2/
 
http://172.20.0.2/
 +
</pre>
 +
I ara anem a l'aplicació mòbil
  
I ara anem a l'aplicació mòbil:
+
Però des del mòbil no em deixa connectar a 172.17.0.2
  
però des del mòbil no em deixa connectar a 172.17.0.2
+
Això és perquè el port 80 el tinc ocupat per l'Apache (mirar més avall).
això és perquè el port 80 el tinc ocupat (mirar més avall).
 
 
 
ho provo directament en el servidor.
 
  
 +
Ho provem directament en el servidor.
 +
<pre>
 
$ docker-compose up
 
$ docker-compose up
 
Starting hauk ... done
 
Starting hauk ... done
Línia 42: Línia 57:
 
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
 
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
 
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
 
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
 +
</pre>
 +
però què faig amb el 172.18.0.2, que és la IP del docker?
 +
 +
Si mirem a ''dockerhub'' el contingut del cotenidor  ''bilde2910/hauk''
 +
*https://hub.docker.com/r/bilde2910/hauk
 +
*https://hub.docker.com/layers/bilde2910/hauk/1.6/images/sha256-089f9fa42ff3c8103aa4031ab5449c558fdf12dfc8faade3a857db5d712c833e?context=explore
 +
<pre>
 +
EXPOSE 80/tcp
 +
</pre>
 +
veurem que està exposant el port 80, i per tant ja veiem què passa, que el port 80 el tenim ocupat. (efectivament, si apaguem l'Apache funciona). Hem de fer una redirecció de ports.
 +
 +
Mirem quins ports estan ocupats:
 +
<pre>
 +
$ sudo lsof -i -P -n | grep LISTEN
 +
</pre>
 +
veig que no puc utilitzar el port 8080 ni el 3000 (entre d'altres), que l'utilitzen el node (la API de tracking_btt que tinc instal·lada). Utilitzaré per exemple el port 81.
  
però què faig amb el 172.18.0.2
+
En un ''docker run'' utilitzem l'opció '''-p''' per fer la redirecció de ports:
 +
<pre>
 +
-p 81:80
 +
</pre>
 +
El docker internament utilitza el port 80, però exposa cap a la màquina host el port 81. Com ho configuro amb el docker-compose? Molt fàcil:
  
----
+
<pre>
ja ho he aconseguit
 
en el docker.compose.yml he posat:
 
 
ports:
 
ports:
- "80:80"
+
- "81:80"
 
+
</pre>
però prèviament he hagut de tancar l'Apache.
 
No puc utilitzar el port 8080 (ni el 3000) perquè ja estan oberts perquè l'està utilitzant la API de tracking_btt
 
  
  
 
Apunteu l'aplicació Hauk a aquest servidor per compartir la vostra ubicació:
 
Apunteu l'aplicació Hauk a aquest servidor per compartir la vostra ubicació:
  
http://vps-89148e22.vps.ovh.net/
+
*http://vps-89148e22.vps.ovh.net:81/
 +
o bé
 +
*http://jquintana.ddns.net:81
  
 
i poso aquesta url en l'aplicació mòbil, i aleshores l'aplicació mòbil em diu que la url per compartir és:
 
i poso aquesta url en l'aplicació mòbil, i aleshores l'aplicació mòbil em diu que la url per compartir és:
  
http://vps-89148e22.vps.ovh.net/?H5J7-TH1F
+
*http://vps-89148e22.vps.ovh.net:81/?H5J7-TH1F
 +
o bé
 +
*http://jquintana.ddns.net:81/?ZCCU-NJ85
  
i també funciona
 
http://jquintana.ddns.net/?ZCCU-NJ85
 
 
el port 8080 el tinc ocupat?
 
linux how to find application using port
 
sudo lsof -i -P -n | grep LISTEN
 
veig que el port 8080 i el 3000 l'utilitzen el node (la API de tracking_btt)
 
 
Obro el port 81 en el servidor
 
 
ja funciona:
 
http://jquintana.ddns.net:81/
 
 
Per tal de què el docker sempre estigui actiu? Mlt fàcil, es demonitza amb l'opció -d
 
  
 +
Per tal de què el docker sempre estigui actiu? Molt fàcil, es demonitza amb l'opció -d
 +
<pre>
 
$ docker-compose up -d
 
$ docker-compose up -d
 +
</pre>
 +
Per tant, el nostre servidor Hauk en el cloud funciona dins d'un contenidor, i ens hem estalviat tot el procés d'instal·lació.
  
NOTA: la redirecció de ports al docker es fa amb l'opció -p (-p 81:80). En el docker compose hi ha la directiva ''ports''.
 
</pre>
 
 
{{Autor}}, maig 2022
 
{{Autor}}, maig 2022

Revisió del 14:02, 20 maig 2022

Introducció

Hauk és una aplicació per compartir la teva posició des del mòbil. En el github es proporciona l'aplicació Android (companion Android app), i el codi del backend que està basat en PHP.

Per tal d'emmagatzemar la informació en el backend no es fa servir cap base de dades, sinó que es fa servir memcached, memcache, o bé redis.

En el Github es proporciona el codi i les instruccions d'instal·lació, però també es proporciona un docker, que és el que farem aquí. Instal·larem el contenidor en el servidor OVH del núvol.

Instal·lar i configurar

Instal·lem en el servidor OVH del Jaume Balmes el docker-compose, que encara no estava instal·lat.

Seguim els passos: primer creem la carpeta /home/joan/docker-hauk com a directori del projecte, i aquí dins la carpeta config/hauk que contindrà el fitxer config.php, que copiem de l'exemple del github. Deixo l'autenticació bàsica de PASSWORD, i per tant no toco res.

Primer fem una prova en local, a veure si funciona. El docker-compose té com a fitxer de configuració el docker-compose.yml:

version: '3.4'

services:
  hauk:
    image: bilde2910/hauk
    container_name: hauk
    volumes:
      - ./config/hauk:/etc/hauk
$ docker-compose up
Creating network "docker-hauk_default" with the default driver
Pulling hauk (bilde2910/hauk:)...
latest: Pulling from bilde2910/hauk
ac2522cc7269: Pull complete
...
b2d9f17ee2ae: Pull complete
Digest: sha256:ca13570054dadcf56b1b6c0be74aea038f54272eb52d3a7b4056defb7a4a518f
Status: Downloaded newer image for bilde2910/hauk:latest
Creating hauk ... done
Attaching to hauk
hauk    | Started
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.0.2. Set the 'ServerName' directive globally to suppress this message
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.0.2. Set the 'ServerName' directive globally to suppress this message
hauk    | [Thu May 19 18:36:24.160216 2022] [mpm_prefork:notice] [pid 18] AH00163: Apache/2.4.38 (Debian) PHP/8.0.3 configured -- resuming normal operations
hauk    | [Thu May 19 18:36:24.160256 2022] [core:notice] [pid 18] AH00094: Command line: '/usr/sbin/apache2 -D FOREGROUND'

http://172.20.0.2/

I ara anem a l'aplicació mòbil

Però des del mòbil no em deixa connectar a 172.17.0.2

Això és perquè el port 80 el tinc ocupat per l'Apache (mirar més avall).

Ho provem directament en el servidor.

$ docker-compose up
Starting hauk ... done
Attaching to hauk
hauk    | Started
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
hauk    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message

però què faig amb el 172.18.0.2, que és la IP del docker?

Si mirem a dockerhub el contingut del cotenidor bilde2910/hauk

EXPOSE 80/tcp

veurem que està exposant el port 80, i per tant ja veiem què passa, que el port 80 el tenim ocupat. (efectivament, si apaguem l'Apache funciona). Hem de fer una redirecció de ports.

Mirem quins ports estan ocupats:

$ sudo lsof -i -P -n | grep LISTEN

veig que no puc utilitzar el port 8080 ni el 3000 (entre d'altres), que l'utilitzen el node (la API de tracking_btt que tinc instal·lada). Utilitzaré per exemple el port 81.

En un docker run utilitzem l'opció -p per fer la redirecció de ports:

-p 81:80

El docker internament utilitza el port 80, però exposa cap a la màquina host el port 81. Com ho configuro amb el docker-compose? Molt fàcil:

ports:
	- "81:80"


Apunteu l'aplicació Hauk a aquest servidor per compartir la vostra ubicació:

o bé

i poso aquesta url en l'aplicació mòbil, i aleshores l'aplicació mòbil em diu que la url per compartir és:

o bé


Per tal de què el docker sempre estigui actiu? Molt fàcil, es demonitza amb l'opció -d

$ docker-compose up -d

Per tant, el nostre servidor Hauk en el cloud funciona dins d'un contenidor, i ens hem estalviat tot el procés d'instal·lació.


creat per Joan Quintana Compte, maig 2022