#!/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 de paquets utiles apt-get update # https://github.com/chef/bento/issues/661 export DEBIAN_FRONTEND=noninteractive apt-get -y upgrade # -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \ # upgrade apt-get install -y python3-pip python3-dev python3-venv libpq-dev postgresql \ postgresql-contrib libjpeg-dev nginx git redis-server \ libldap2-dev libsasl2-dev slapd ldap-utils # 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;" # Redis redis-cli CONFIG SET requirepass "$REDIS_PASSWD" redis-cli -a "$REDIS_PASSWD" CONFIG REWRITE # Contenu statique mkdir -p /srv/gestiocof/media mkdir -p /srv/gestiocof/static chown -R vagrant:www-data /srv/gestiocof # 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 # 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" # Quelques 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 # Configure le bash 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 <