gwift-book/adoc/deploy/centos.adoc

6.3 KiB
Raw Blame History

Connexion et préparation du serveur

yum update
groupadd --system webapps
groupadd --system gunicorn_sockets
useradd --system --gid webapps --shell /bin/bash --home /home/medplan medplan
mkdir -p /home/medplan
chown medplan:webapps /home/medplan
---

### Installation des dépendances systèmes

[source,bash]

yum install python36 git tree -y

CentOS 7 ne dispose que de la version 3.7 dSQLite. On a besoin dune version 3.8 au minimum:

### Préparation de l'environnement utilisateur

[source,bash]

su - medplan cp /etc/skel/.bashrc . cp /etc/skel/.bash_profile . ssh-keygen mkdir bin mkdir .venvs mkdir webapps python3.6 -m venv .venvs/medplan source .venvs/medplan/bin/activate cd /home/medplan/webapps git clone git@vmwmedtools:institutionnel/medplan.git

La clé SSH doit ensuite être renseignée au niveau du dépôt, afin de pouvoir y accéder.

A ce stade, on devrait déjà avoir quelque chose de fonctionnel en démarrant les commandes suivantes:

[source,bash]

en tant quutilisateur 'medplan'

source .venvs/medplan/bin/activate pip install -U pip pip install -r requirements/base.txt pip install gunicorn cd webapps/medplan gunicorn config.wsgi:application --bind localhost:3000 --settings=config.settings_production

### Configuration de l'application

[source,bash]

SECRET_KEY=<set your secret key here> ALLOWED_HOSTS=* STATIC_ROOT=/var/www/medplan/static

### Création des répertoires de logs

[source,text]

mkdir -p /var/www/medplan/static

### Création du répertoire pour le socket

Dans le fichier /etc/tmpfiles.d/medplan.conf:
D /var/run/webapps 0775 medplan gunicorn_sockets -

Suivi de la création par systemd :
systemd-tmpfiles --create

### Gunicorn

[source,bash]

#!/bin/bash

defines settings for gunicorn

NAME="Medplan" DJANGODIR=/home/medplan/webapps/medplan SOCKFILE=/var/run/webapps/gunicorn_medplan.sock USER=medplan GROUP=gunicorn_sockets NUM_WORKERS=5 DJANGO_SETTINGS_MODULE=config.settings_production DJANGO_WSGI_MODULE=config.wsgi

echo "Starting $NAME as `whoami`"

source /home/medplan/.venvs/medplan/bin/activate cd $DJANGODIR export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE export PYTHONPATH=$DJANGODIR:$PYTHONPATH

exec gunicorn ${DJANGO_WSGI_MODULE}:application \ --name $NAME \ --workers $NUM_WORKERS \ --user $USER \ --bind=unix:$SOCKFILE \ --log-level=debug \ --log-file=-

### Supervision

[source,bash]

yum install supervisor -y

On crée ensuite le fichier /etc/supervisord.d/medplan.ini:

[source,bash]

command=/home/medplan/bin/start_gunicorn.sh user=medplan stdout_logfile=/var/log/medplan/medplan.log autostart=true autorestart=unexpected redirect_stdout=true redirect_stderr=true

Et on crée les répertoires de logs, on démarre supervisord et on vérifie quil tourne correctement: mkdir /var/log/medplan chown medplan:nagios /var/log/medplan

systemctl enable supervisord systemctl start supervisord.service systemctl status supervisord.service ● supervisord.service - Process Monitoring and Control Daemon Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2019-12-24 10:08:09 CET; 10s ago Process: 2304 ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf (code=exited, status=0/SUCCESS) Main PID: 2310 (supervisord) CGroup: /system.slice/supervisord.service ├─2310 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf ├─2313 /home/medplan/.venvs/medplan/bin/python3 /home/medplan/.venvs/medplan/bin/gunicorn config.wsgi:…​ ├─2317 /home/medplan/.venvs/medplan/bin/python3 /home/medplan/.venvs/medplan/bin/gunicorn config.wsgi:…​ ├─2318 /home/medplan/.venvs/medplan/bin/python3 /home/medplan/.venvs/medplan/bin/gunicorn config.wsgi:…​ ├─2321 /home/medplan/.venvs/medplan/bin/python3 /home/medplan/.venvs/medplan/bin/gunicorn config.wsgi:…​ ├─2322 /home/medplan/.venvs/medplan/bin/python3 /home/medplan/.venvs/medplan/bin/gunicorn config.wsgi:…​ └─2323 /home/medplan/.venvs/medplan/bin/python3 /home/medplan/.venvs/medplan/bin/gunicorn config.wsgi:…​ ls /var/run/webapps/

### Ouverture des ports

[source,text]

firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload

### Installation d'Nginx

[source]

yum install nginx -y usermod -a -G gunicorn_sockets nginx

On configure ensuite le fichier /etc/nginx/conf.d/medplan.conf:

upstream medplan_app { server unix:/var/run/webapps/gunicorn_medplan.sock fail_timeout=0; }

server { listen 80; server_name <server_name>; root /var/www/medplan; error_log /var/log/nginx/medplan_error.log; access_log /var/log/nginx/medplan_access.log;

client_max_body_size 4G;
keepalive_timeout 5;
gzip on;
gzip_comp_level 7;
gzip_proxied any;
gzip_types gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
location /static/ {
        access_log off;
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
        add_header Vary "Accept-Encoding";
        try_files $uri $uri/ =404;
}
location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
                proxy_pass http://medplan_app;
        }
}
### Configuration des sauvegardes

Les sauvegardes ont été configurées avec borg: yum install borgbackup.

C'est l'utilisateur medplan qui s'en occupe.

mkdir -p /home/medplan/borg-backups/ cd /home/medplan/borg-backups/ borg init medplan.borg -e=none borg create medplan.borg::{now} ~/bin ~/webapps

Et dans le fichier crontab :

0 23 * * * /home/medplan/bin/backup.sh