Cas pràctic: dockeritzar una aplicació. Hauk

De wikijoan
Salta a la navegació Salta a la cerca

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"

Prèviament s'ha d'obrir el port 81 en el firewall del servidor. Ara ja funciona, i és aquesta url la que haurem d'introduir en l'aplicació mòbil:

Apunteu l'aplicació Hauk a aquest servidor per compartir la vostra ubicació:
http://vps-89148e22.vps.ovh.net:81/

També podem utiltizar (suposo que per això està la directiva public_url al final del fitxer de configuració)

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ó.

Funcionament

1653056124709.jpg

Ja funciona l'aplicació. La única cosa és que no grava les posicions de forma correcta. Com diu en el missatge d'alerta del primer cop que arrenques, això és per l'estalvi de bateria. Per tal de què l'aplicació Hauk no tingui estalvi de bateria, fem en el mòbil (Android):

  • Configuració > bateria i rendiment > Configuració (icona a dalt a la dreta) > Estalvi de bateria de les aplicacions > cerco i clico sobre Hauk > Sense restriccions.

Per defecte l'aplicació Hauk està amb Economitzador de bateria (recomanat). Ho hem de posar a Sense restriccions.


creat per Joan Quintana Compte, maig 2022