gestioCOF/provisioning/bootstrap.sh
2020-12-07 20:09:25 +01:00

141 lines
4 KiB
Bash

#!/bin/sh
# Arête le script quand :
# - une erreur survient
# - on essaie d'utiliser une variable non définie
# - on essaie d'écraser un fichier avec une redirection (>).
set -euC
# Configuration de la base de données, redis, Django, etc.
# Tous les mots de passe sont constant et en clair dans le fichier car c'est
# pour une installation de dév locale qui ne sera accessible que depuis la
# machine virtuelle.
readonly DBUSER="cof_gestion"
readonly DBNAME="cof_gestion"
readonly DBPASSWD="4KZt3nGPLVeWSvtBZPSM3fSzXpzEU4"
readonly REDIS_PASSWD="dummy"
readonly DJANGO_SETTINGS_MODULE="cof.settings.dev"
# ---
# Installation des paquets systèmes
# ---
get_packages_list () {
sed 's/#.*$//' /vagrant/provisioning/packages.list | grep -v '^ *$'
}
# https://github.com/chef/bento/issues/661
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -y upgrade
get_packages_list | xargs apt-get install -y
# ---
# Configuration de la base de données
# ---
# Postgresql
pg_user_exists () {
sudo -u postgres psql postgres -tAc \
"SELECT 1 FROM pg_roles WHERE rolname='$1'" \
| grep -q '^1$'
}
pg_db_exists () {
sudo -u postgres psql postgres -tAc \
"SELECT 1 FROM pg_database WHERE datname='$1'" \
| grep -q '^1$'
}
pg_db_exists "$DBNAME" || sudo -u postgres createdb "$DBNAME"
pg_user_exists "$DBUSER" || sudo -u postgres createuser -SdR "$DBUSER"
sudo -u postgres psql -c "ALTER USER $DBUSER WITH PASSWORD '$DBPASSWD';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DBNAME TO $DBUSER;"
# ---
# Configuration de redis (pour django-channels)
# ---
# Redis
redis-cli CONFIG SET requirepass "$REDIS_PASSWD"
redis-cli -a "$REDIS_PASSWD" CONFIG REWRITE
# ---
# Préparation de Django
# ---
# Dossiers pour le contenu statique
mkdir -p /srv/gestiocof/media
mkdir -p /srv/gestiocof/static
chown -R vagrant:www-data /srv/gestiocof
# Environnement virtuel python
sudo -H -u vagrant python3 -m venv ~vagrant/venv
sudo -H -u vagrant ~vagrant/venv/bin/pip install -U pip
sudo -H -u vagrant ~vagrant/venv/bin/pip install \
-r /vagrant/requirements-prod.txt \
-r /vagrant/requirements-devel.txt \
# Préparation de Django
cd /vagrant
ln -s -f secret_example.py cof/settings/secret.py
sudo -H -u vagrant \
DJANGO_SETTINGS_MODULE="$DJANGO_SETTINGS_MODULE"\
/bin/sh -c ". ~vagrant/venv/bin/activate && /bin/sh provisioning/prepare_django.sh"
~vagrant/venv/bin/python manage.py collectstatic \
--noinput \
--settings "$DJANGO_SETTINGS_MODULE"
# ---
# Units systemd
# ---
# - Daphne fait tourner le serveur asgi
# - worker = https://channels.readthedocs.io/en/stable/topics/worker.html
# - Mails de rappels du BdA
# - Mails de revente du BdA
ln -sf /vagrant/provisioning/systemd/daphne.service /etc/systemd/system/daphne.service
ln -sf /vagrant/provisioning/systemd/worker.service /etc/systemd/system/worker.service
ln -sf /vagrant/provisioning/systemd/reventes.service /etc/systemd/system/reventes.service
ln -sf /vagrant/provisioning/systemd/rappels.service /etc/systemd/system/rappels.service
ln -sf /vagrant/provisioning/systemd/reventes.timer /etc/systemd/system/reventes.timer
ln -sf /vagrant/provisioning/systemd/rappels.timer /etc/systemd/system/rappels.timer
systemctl enable --now daphne.service
systemctl enable --now worker.service
systemctl enable rappels.timer
systemctl enable reventes.timer
# ---
# Configuration du shell de l'utilisateur 'vagrant' pour utiliser le bon fichier
# de settings et et bon virtualenv.
# ---
# On utilise .bash_aliases au lieu de .bashrc pour ne pas écraser la
# configuration par défaut.
rm -f ~vagrant/.bash_aliases
cat > ~vagrant/.bash_aliases <<EOF
# On utilise la version de développement de GestioCOF
export DJANGO_SETTINGS_MODULE='$DJANGO_SETTINGS_MODULE'
# Charge le virtualenv
. ~/venv/bin/activate
# On va dans /vagrant où se trouve le code de gestioCOF
cd /vagrant
EOF
# ---
# Configuration d'nginx
# ---
ln -s -f /vagrant/provisioning/nginx/gestiocof.conf /etc/nginx/sites-enabled/gestiocof.conf
rm -f /etc/nginx/sites-enabled/default
systemctl reload nginx