Table des matières

Diacamma

Présentation d'installation d'une instance Diacamma sur debian 9.
Dans cette présentation, nous allons configurer un site https://test.sleto.net.

Nous utiliserons les variables DBNAME, DBUSER et DBPASSWD respectivement pour le nom, l'utilisateur et le mot de passe de base de données.

Dépendances

Utilise un Serveur web sécurisé (Nginx / Let's Encrypt).
Nécessite également les outils :

sudo apt-get install -y python3-dev python3-pip python3-tk python3-pil libxml2-dev libxml2 libxslt1-dev libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev postgresql postgresql-contrib supervisor

Remarque: privilégier l'installation de Python 3.7 (ou ultérieur).

Vous devrez également ajouter le domaine test.sleto.net dans le Serveur DNS (bind9)

Pré-configuration

Création d'un utilisateur test:

adduser --system --home-dir "/home/test" create-home "test"

Création d'un environement virtuel Python:

cd /home/test
python3 -m virtualenv -p "python3.7" virt

Installation

Installer les composants Python dans l'environnement virtuel:

cd /home/test
source virt/bin/activate
pip install -U lucterios-standard diacamma-asso diacamma-syndic diacamma-pro gunicorn psycopg2-binary

Base de données

Nous allons créé une base de donnée PostgreSQL:

sudo -u postgres psql -c "CREATE USER $DBUSER;"
sudo -u postgres psql -c "ALTER USER $DBUSER PASSWORD '$DBPASSWD';"
sudo -u postgres psql -c "CREATE DATABASE $DBNAME OWNER $DBUSER;"

Configuration

Pour lancer l'installation d'une instance Diacamma:

Pour Diacamma Asso:

cd /home/test
source virt/bin/activate
lucterios_admin.py add -n test -p 'diacamma.asso' -m 'lucterios.contacts,lucterios.documents,lucterios.mailing,diacamma.member,diacamma.event,diacamma.accounting,diacamma.invoice,diacamma.payoff' -e "$OPTION" -d $DATABASE

Pour Diacamma Syndic:

cd /home/test
source virt/bin/activate
lucterios_admin.py add -n test -p 'diacamma.syndic' -m 'lucterios.contacts,lucterios.documents,lucterios.mailing,diacamma.condominium,diacamma.accounting,diacamma.payoff' -e "$OPTION" -d $DATABASE

Avec:

OPTION='{"ALLOWED_HOSTS":["localhost","127.0.0.1","test.sleto.net"],"DEBUG": False,"LANGUAGE_CODE": "fr","LOGGING": {"version": 1,"disable_existing_loggers": True}}'
DATABASE="postgresql:name=$DBNAME,user=$DBUSER,password=$DBPASSWD,host=localhost"

Ensuite, pour définir le mot de passe du compte “admin”:

cd /home/test
source virt/bin/activate
lucterios_admin.py security -n test -e "PASSWORD=xxxxx"

Configuration web

Générer des documents statics de Diacamma/Django:

cd /home/test
source virt/bin/activate
python "manage_test.py" collectstatic --noinput -l

Un certain nombre d'éléments statics sont par contre à supprimer pour des raisons de sécurité:

cd /home/test
rm -rf test/static/static
rm -rf test/static/tmp
rm -rf test/static/usr
rm -rf test/static/__pycache__
rm -rf test/static/settings.py
rm -rf test/static/__init__.py

Créer une fichier pour supervisor “supervisor-test.conf”:

[program:%s]\n" % instancename)
environment=DJANGO_SETTINGS_MODULE='test.settings'
directory=/home/test
command=/home/test/virt/bin/gunicorn lucterios.framework.wsgi --bind 0.0.0.0:8100 -w 1 --timeout 600 --access-logfile /home/test/access.log --error-logfile /home/test/error.log
user=test
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/test.log
redirect_stderr=true

Créer également un fichier pour nginx “nginx-test”:

# Configuration du server
server {
    listen      80;
    server_name test.sleto.net;
    return 301 https://test.sleto.net/;
}

server {
    listen      443 ssl;
    server_name test.sleto.net;

    include /opt/ssl/test.sleto.net.conf;

    charset     utf-8;
    access_log /var/log/nginx/test.sleto.net.access.log;
    error_log  /var/log/nginx/test.sleto.net.error.log;
    root /home/test/;

    client_max_body_size 100M;

    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css text/xml text/javascript application/javascript application/x-javascript application/xml application/json application/pdf;

    fastcgi_buffers  16 16k;
    fastcgi_buffer_size  32k;

    location = /index.html {
	return 301 $scheme://$host;
    }

    location /web/ {
        alias /home/test/test/static/lucterios.framework/web/;
    }

    location /static/ {
        alias /home/test/test/static/;
    }

    location / {
    	proxy_pass http://127.0.0.1:8100;
	proxy_read_timeout    300;
	proxy_connect_timeout 300;
	proxy_redirect        off;
    }
}

Notons que /opt/ssl/test.sleto.net.conf contiendra les informations relatives aux clefs privé et public HTTPS/SSL (voir Serveur web sécurisé (Nginx / Let's Encrypt)).

Activer la configuration web par:

ln -sf /home/test/nginx-test /etc/nginx/sites-enabled/
ln -sf /home/test/supervisor-test.conf /etc/supervisor/conf.d/

Rechargement

Pour rafraîchir le supervisor

supervisorctl reread
supervisorctl add test
supervisorctl restart test

Pour rafraîchir les services nginx

service nginx restart   

Sauvegarde/restauration

Des commandes spécifiques Diacamma permette de réaliser la sauvegarde:

cd /home/test
source virt/bin/activate
lucterios_admin.py archive -n test -f "/path/to/savefile"

Et la restauration:

cd /home/test
source virt/bin/activate
lucterios_admin.py restore -n test -f "/path/to/restorefile"
supervisorctl restart test

Mais il est également possible de réaliser une sauvegarde en réalisant un “dump” de la base de donnée:

sudo -u postgres pg_dump $DBNAME > backup_data.sql

Ainsi que la sauvegarde de fichiers contenu dans “/home/test/test” (excepté “/home/test/test/static”) créé par Diacamma.

Mise à jour

Pour réaliser une mise à jour:

cd /home/test
source virt/bin/activate
lucterios_admin.py update
python "manage_test.py" collectstatic --noinput -l