Simplicite OSI SABOM

docker
Simplicite OSI SABOM
0
Tags: #<Tag:0x00007f5ff8f01928>
(Fernandez) #1

Bonjour,

Pour l’installation voici les commandes que j’ai passé :

lancer un terminal en root

installation de docker

yum install docker

systemctl enable docker

systemctl start docker

gedit /etc/sysconfig/docker

saisir :

HTTP_PROXY=http://???:???/

HTTPS_PROXY=http://???:???/

NO_PROXY= ???,???

systemctl restart docker

docker login

docker pull simplicite/platform

groups osi

usermod -aG dockerroot osi

Modifier le fichier /etc/docker/daemon.json

{

"group": "dockerroot"

}

systemctl restart docker

exit

le terminal est sur l’utilisateur osi

newgrp dockerroot

créer une bd postgres avec un utilisateur postgres / mdp

depuis un terminal en root

yum install postgresql-server

yum install postgresql-contrib

postgresql-setup initdb

systemctl start postgresql

pour que postgres démarre au démarrage

systemctl enable postgresql

création de l’utilisateur

su - postgres

createdb simplicite

createsuser simplicite --pwprompt

–> saisir mdp

psql simplicite

GRANT ALL PRIVILEGES ON DATABASE simplicite TO simplicite;

ctrl + D

aller dans var/lib/pgsql/data/, modifier le fichier pg_hba.conf

host all all 127.0.0.1/32 ident -> host all all 127.0.0.1/32 md5

systemctl restart postgresql

Pour tester la connexion : psql -U simplicite simplicite -W -h 127.0.0.1 et saisir le mdp

Ctrl + D

docker run -d --restart=always -p 80:8080 -p 443:8443

-e DB_SETUP=true

-e DB_VENDOR=“postgresql”

-e DB_HOST=127.0.0.1

-e DB_PORT=5432

-e DB_USER=“simplicite”

-e DB_PASSWORD=“tgbyhn123”

-e DB_NAME=“simplicite” simplicite/platform:latest

-> identifiant généré

(Fernandez) #2

lorsque je saisi dans firefox sur le serveur OSI http://localhost :

(David AZOULAY) #3

L’adresse IP passée au container Docker ne peut pas être 127.0.0.1

Il faut lui passer l’adresse IP vue de l’interface réseau Docker (docker0), pour connaitre cette adresse IP il faut taper la commande suivante:

ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+'

En général le résultat est 172.17.0.1 mais pas toujours, Docker est parfois mystérieux…

Ensuite l’autre point à vérifier c’est si votre base de données est bien autorisée à écouter sur cette adresse IP. Dans le /var/lib/pgsql/data/pg_hba.conf il faut donc une ligne du genre:

host all all all md5

ou pour être plus restrictif:

host all all 172.17.0.0/16 md5

Début édit

Faites écouter votre serveur PostgreSQL sur toutes les adresses: dans /var/lib/pgsql/data/postgresql.conf ajoutez/modifiez:

listen_adresses = '*'

ou pour être plus restrictif:

listen_adresses = 'localhost,172.17.0.1'

Fin edit

Puis redémarrer votre service PostgreSQL.

Ensuite pour voir facilement ce qui se passe au démarrage du container il faut dans un premier temps le démarrer en mode “éphémère” en remplaçant -d --restart=always par -it --rm

S’il y a un pb les messages dans la console seront normalement assez explicites.

En résumé, une fois faite la manip au niveau PostgreSQL, la commande à lancer c’est :

docker run -it --rm -p 80:8080 \
 -e DB_SETUP=true \
 -e DB_VENDOR=postgresql \
 -e DB_HOST=172.17.0.1 \
 -e DB_PORT=5432 \
 -e DB_USER=simplicite \
 -e DB_PASSWORD=tgbyhn123 \
 -e DB_NAME=simplicite \
 simplicite/platform:latest

si l’addresse IP est bien 172.17.0.1 sinon remplacez là par la bonne.

Lancez là et renvoyez nous les logs affichées.

PS: assurez vous bien d’avoir killé et supprimé tous les éventuels containers tournant en tâche de fond (docker ls --all puis docker kill <id> puis docker rm <id> sur tous les ids)

(Fernandez) #4

Bonjour,

merci pour votre réponse.

Ça bloque à la connexion sur la bd postgres :

(Fernandez) #5

J’ai bien modifié le fichier pg_hba.conf

et j’ai bien relancé avec la commande systemctl restart postgresql

(Fernandez) #6

j’ai remplacé par cette ligne host all all all md5 et même message lorsque je lance la commande docker

(Fernandez) #7

image

(David AZOULAY) #8

Essayez avec :

host all all 0.0.0.0/0 md5
(David AZOULAY) #9

Et par ailleurs est-ce que vous n’auriez pas un firewall qui bloquerait les connexions sur tcp://172.17.0.1:5432 ?

Idéalement il faut ouvir l’interface réseau docker0 comme cela:

sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload

PS: retirez le -p 443:8443 de votre commande docker run car le port 8443 est un connecteur HTTP destiné à être monté en reverse proxy HTTPS, ce n’est pas un port HTTPS directement exposable.

(Fernandez) #10

Avec un collègue, on vient de trouver le problème.
Il faut modifier le fichier /var/lib/pgsql/data/postgresql.conf :
listen_adresses = ‘*’

Du coup, le docker se lance bien et lorsque je lance http://localhost, j’ai bien l’authentification à Simplicité qui apparait.

Par contre https://localhost ne fonctionne pas. Normal ?

(David AZOULAY) #11

Cf. mon PS de ma dernière réponse:

le port 8443 est un connecteur HTTP destiné à être monté en reverse proxy HTTPS, ce n’est pas un port HTTPS directement exposable

Si vous voulez exposer votre instance en https:// vous avez 2 options:

  1. mettre un reverse proxy (NGINX, Apache, Traefik, …) en frontal qui gère le SSL et attaque en HTTP le port 8443 du container (ou en AJP le port 8009 du container dans le cas de Apache)
  2. vous construire une image custom depuis notre image en ajoutant vos certificats SSL (au format JKS), en configurant un connecteur Tomcat SSL et en l’exposant sur un port adhoc
(Fernandez) #12

Ok ,merci.

Un compte utilisateur pour tester ?

(David AZOULAY) #13

Par défaut vous avez le user designer avec le mot de passe simplicite temporaire à changer à la première connexion.

(David AZOULAY) #14

J’ai ajouté un edit dans mon post initial pour préciser le listen_addresses = '*'

(Fernandez) #15

On partirai sur la solution NGINX :

yum install epel-release
yum install nginx
systemctl start nginx
sudo systemctl enable nginx

Est ce que vous pourriez m’en dire plus sur le paramétrage à réaliser ensuite ?

Merci.

(David AZOULAY) #16

Voici un exemple de fichier de config NGINX adapté à un container Simplicité démarré avec -p 12345:8443 (ici tout le trafic HTTP est redirigé vers HTTPS et le certificat SSL est un certificat gratuit LetsEncrypt, cf. ci-dessous):

server {
    listen 80;
    server_name xxx.yyy.com;
    location ^~ /.well-known/acme-challenge/ {
        root /home/xxx/tomcat/webapps/ROOT;
    }
    location / {
        return 301 https://xxx.yyy.com$request_uri;
    }
}
server {
    listen 443 ssl;
    server_name xxx.yyy.com;
    ssl_certificate /etc/letsencrypt/live/xxx.yyy.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xxx.yyy.com/privkey.pem;
    location / {
        if ($request_method = 'OPTIONS') {
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Credentials true;
            add_header Access-Control-Allow-Headers Content-Type,Authorization,X-Requested-With,X-HTTP-Method-Override,X-Simplicite-Authorization;
            add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,HEAD,OPTIONS;
            add_header Access-Control-Max-Age 1728000;
            add_header Content-Type text/plain;
            add_header Content-Length 0;
            return 204;
        }
        if ($request_method = 'GET') {
            add_header Access-Control-Allow-Origin $http_origin always;
            add_header Access-Control-Allow-Credentials true always;
            add_header Access-Control-Expose-Headers X-Simplicite-SessionID;
        }
        if ($request_method = 'POST') {
            add_header Access-Control-Allow-Origin $http_origin always;
            add_header Access-Control-Allow-Credentials true always;
            add_header Access-Control-Expose-Headers X-Simplicite-SessionID;
        }
        proxy_redirect off;
        proxy_buffering off;
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://localhost:12345;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Le certificat est généré par:

sudo certbot certonly --webroot -w /home/xxx/tomcat/webapps/ROOT -d xxx.yyy.com

NB: Pour avoir certbot il faut faire un sudo yum install certbot d’abord

Le renouvellement d’un tel certificat se fait ensuite par:

sudo certbot renew

Que vous pouvez mettre en tâche cron

(Fernandez) #17

Merci ça fonctionne :

On lance cette commande

docker run -d --restart=always -p 12345:443
-e DB_SETUP=true
-e DB_VENDOR=“postgresql”
-e DB_HOST=127.0.0.1
-e DB_PORT=5432
-e DB_USER=“simplicite”
-e DB_PASSWORD=“tgbyhn123”
-e DB_NAME=“simplicite” simplicite/platform:latest

et on appelle en https:// localhost:12345

Merci beaucoup.

Bon week end,

(David AZOULAY) #18

OK tant mieux (mais je pense qu’il fallait lire -p 12345:8443 dans votre commande)