Serveur
Cette page sert à documenter le travail réalisé sur le container fourni (et ça peut s'avérer utile si jamais le container lâche).
poweruser@menufinder $ cp ~/www/app/index.php ~/www/index.php.bak # On sait jamais...
Mettre en place sur le serveur un dépôt Git permettant de simplifier le déploiement de l'application à l'aide la hook Git post_receive.
Créer un dépôt "nu" (bare) sur le container :
poweruser@menufinder $ git init --bare ~/menufinder.git
poweruser@menufinder $ touch ~/menufinder.git/hooks/post_receive
poweruser@menufinder $ chmod 775 ~/menufinder.git/hooks/post-receive
Puis copier le contenu de ce fichier dans ~/menufinder.git/hooks/post-receive
user@host $ git remote add production ssh://poweruser@srvz-webapp.he-arc.ch:2256/home/poweruser/menufinder.git`
Ça y est ! 💪
Maintenant, pour déployer, il suffit de pusher sur le dépôt de déploiement :
user@host $ git push production master
Il peut être nécessaire d'ajuster quelques "trucs" lors du premier push sur le dépôt de déploiement (DocumentRoot Nginx, .env
, permissions, générer la clé d'application Laravel, etc). Voir ici.
- DocumentRoot Nginx :
/home/poweruser/www/app/public
- Voir variables d'environnement pour la configuration du
.env
- Adresse du proxy à ajouter au champ
X_FORWARDED_TRUSTED_PROXIES
:172.18.0.6
(cf. issue #14)
Il est aussi possible de cloner le projet directement depuis le serveur, mais il faut dans ce cas ajouter une clé de déploiement sur le dépôt GitHub
Générer la paire de clés publique/privée avec :
poweruser@menufinder $ ssh-keygen -o
Puis copier la clé publique généré (par défaut ~/.ssh/id_rsa.pub
) sur le dépôt GitHub (Settings -> Deploy keys).
Ensuite cloner depuis le serveur :
poweruser@menufinder $ git clone git@github.com:HE-Arc/menu-finder.git
PostGIS est une extension pour le serveur Postgres, or celui-ci tourne dans un autre container.
Un nouveau serveur Postgres doit donc être installé directement sur le container Laravel (à moins de demander de compiler PostGIS dans les instructions du Dockerfile comme ici.
Bizarrement, le container semble tourner sur Ubuntu 17.04 (Zesty) qui est en end of life depuis janvier 2018 et donc les dépôts du container sont down. Par conséquent, il faut passer sur 18.04 (Bionic, qui est une version LTS en plus).
Remplacer les sources par celle de Bionic et mettre à jour les paquets
poweruser@menufinder $ find /etc/apt/ -type f -iname '*.list' -exec sudo sed -i.bak 's/zesty/bionic/g' {} \;
poweruser@menufinder $ sudo apt-get update
poweruser@menufinder $ # Se préparer psychologiquement à attendre...
poweruser@menufinder $ sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y
poweruser@menufinder $ lbs_release -a # Permet de vérifier que l'on est bien passé sur Bionic
poweruser@menufinder $ echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" > /etc/apt/sources.list.d/pgdg.list
poweruser@menufinder $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
poweruser@menufinder $ sudo apt-get update
poweruser@menufinder $ sudo apt-get install postgresql postgresql-10-postgis-2.4
poweruser@menufinder $ sudo su postgres
postgres@menufinder $ mkdir /var/lib/postgresql/10/data
postgres@menufinder $ /usr/lib/postgresql/10/bin/initdb /var/lib/postgresql/10/data
postgres@mufinder $ exit # ou CTRL + D
poweruser@menufinder $
Il faut ensuite créer un service runit
pour pouvoir démarrer et gérer le serveur Postgres avec la commande sv
.
poweruser@menufinder $ sudo mkdir /etc/runit/runsvdir/default/postgres/
poweruser@menufinder $ sudo touch /etc/runit/runsvdir/default/postgres/run
poweruser@menufinder $ sudo chmod 755 /etc/runit/runsvdir/default/postgres/run
poweruser@menufinder $ sudo apt-get install daemontools # Nécessaire pour la commande setuidgid utilisée ci-dessous
Puis copier le contenu ci-dessous dans /etc/runit/runsvdir/default/postgres/run
:
#!/bin/bash
# Taken from http://smarden.org/runit/runscripts.html
exec setuidgid postgres /usr/lib/postgresql/10/bin/postmaster \
-D /var/lib/postgresql/10/data 2>&1
Le serveur Postgres tourne maintenant comme un service et peut être géré comme Nginx.
Créer la même config (base de données, user et schémas) que celle fourni de base en se connectant au serveur avec la commande psql
.
postgres=> CREATE USER menufinder WITH password 'foobar42'; -- Utiliser la valeur de $POSTGRESS_PASS à la place
postgres=> CREATE DATABASE menufinder WITH OWNER menufinder LC_COLLATE 'en_US.utf8' LC_CTYPE 'en_US.utf8';
postgres=> GRANT ALL PRIVILEGES ON DATABASE menufinder TO menufinder;
postgres=> ALTER USER menufinder WITH SUPERUSER; -- Une fois l'extension PostGIS configuré, à désactiver avec NOSUPERUSER
menufinder=> CREATE SCHEMA menufinder;
menufinder=> CREATE SCHEMA production;
menufinder=> CREATE SCHEMA test;
menufinder=> SET search_path TO production
menufinder=> CREATE EXTENSION postgis;
Pour se connecter facilement en SSH au container, ajoutez ceci au fichier ~/.ssh/config
:
host menufinder-webapp
hostname srvz-webapp.he-arc.ch
user poweruser
port 2256
Puis se connecter avec :
user@host $ ssh menufinder-webapp
poweruser@menufinder $ echo $GROUPNAME # DB name, DB user
poweruser@menufinder $ echo $POSTGRES_HOST
poweruser@menufinder $ echo $POSTGRES_PASS
Nom des schémas de la base de données:
- menufinder
- production
- test
poweruser@menufinder $ psql -U $GROUPNAME # Connexion au serveur local
menufinder=> \l -- équivalent SHOW DATABASES en MySQL
menufinder=> \dt -- équivalent SHOW TABLES en MySQL
menufinder=> \c menufinder -- équivalent USE menufinder en MySQL
menufinder=> \dn -- montre les schémas de la base de données (production, menufinder et test)
menufinder=> SET search_path TO production; -- Ou menufinder ou test
menufinder=> SELECT * FROM users;
Pour se connecter au serveur Postgres fourni de base :
poweruser@menufinder $ psql -U $GROUPNAME -h $POSTGRES_HOST $GROUPNAME