125 lines
3.4 KiB
Bash
125 lines
3.4 KiB
Bash
#!/bin/bash
|
|
|
|
# The credentials of the database. Can be public since they will only be used in
|
|
# the local development environment
|
|
DBUSER="event_gestion"
|
|
DBNAME="event_gestion"
|
|
DBPASSWD="4KZt3nGPLVeWSvtBZPsd9jdssdJMds78"
|
|
|
|
# Not critical either
|
|
REDIS_PASSWD="dummy"
|
|
|
|
# It is used in quite a few places
|
|
SETTINGS="evenementiel.settings.dev"
|
|
|
|
# Fills a "templated file" with the information specified in the variables above
|
|
# e.g. every occurrence of {{DBUSER}} in the file will be replaced by the value
|
|
# of the variable $DBUSER
|
|
function fill_template {
|
|
sed "s/{{DBUSER}}/$DBUSER/" -i $1
|
|
sed "s/{{DBNAME}}/$DBNAME/" -i $1
|
|
sed "s/{{DBPASSWD}}/$DBPASSWD/" -i $1
|
|
sed "s/{{REDIS_PASSWD}}/$REDIS_PASSWD/" -i $1
|
|
sed "s/{{SETTINGS}}/$SETTINGS/" -i $1
|
|
}
|
|
|
|
# ---
|
|
# Installs the dependencies
|
|
# ---
|
|
|
|
# System packages
|
|
apt-get update && apt-get upgrade -y
|
|
apt-get install -y python3-pip python3-dev python3-venv libpq-dev postgresql \
|
|
postgresql-contrib libjpeg-dev nginx redis-server
|
|
|
|
# Python packages, in a virtual environment
|
|
sudo -H -u vagrant python3 -m venv ~vagrant/venv
|
|
sudo -H -u vagrant ~vagrant/venv/bin/pip install -U pip wheel
|
|
sudo -H -u vagrant ~vagrant/venv/bin/pip install -U -r /vagrant/requirements-devel.txt
|
|
|
|
|
|
# ---
|
|
# Setup the production-like environment
|
|
# ---
|
|
|
|
# Database and User
|
|
sudo -u postgres createdb $DBNAME
|
|
sudo -u postgres createuser -SDR $DBUSER
|
|
sudo -u postgres psql -c "ALTER USER $DBUSER WITH PASSWORD '$DBPASSWD';"
|
|
sudo -u postgres psql -c "ALTER USER $DBUSER CREATEDB;"
|
|
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DBNAME TO $DBUSER;"
|
|
|
|
# The working directory for Daphne and cie
|
|
mkdir -p /srv/GE/{media,static}
|
|
chown -R vagrant:vagrant /srv/GE
|
|
|
|
# Nginx
|
|
cp /vagrant/provisioning/nginx.conf /etc/nginx/sites-available/ge.conf
|
|
if [ ! -h /etc/nginx/sites-enabled/ge.conf ]
|
|
then
|
|
# If the configuration file is not activated yet, activates it
|
|
ln -s /etc/nginx/sites-available/ge.conf /etc/nginx/sites-enabled/ge.conf
|
|
fi
|
|
rm -f /etc/nginx/sites-enabled/default # We do not need this
|
|
service nginx restart
|
|
|
|
# Daphne and the worker(s)
|
|
for service in {daphne,worker}.service
|
|
do
|
|
cp /vagrant/provisioning/$service /etc/systemd/system/$service
|
|
fill_template /etc/systemd/system/$service
|
|
systemctl enable $service
|
|
systemctl start $service
|
|
done
|
|
|
|
# Redis
|
|
redis-cli CONFIG SET requirepass $REDIS_PASSWD
|
|
if [ ! $? ]
|
|
then
|
|
# In case the requirepass command failed, checks that it was because the
|
|
# password was already set *to the right value*.
|
|
redis-cli AUTH $REDIS_PASSWD
|
|
fi
|
|
redis-cli -a $REDIS_PASSWD CONFIG REWRITE
|
|
|
|
|
|
# ---
|
|
# Prepare Django
|
|
# ---
|
|
|
|
cd /vagrant
|
|
|
|
# Setup the secrets
|
|
sudo -H -u vagrant cp evenementiel/settings/secret_example.py \
|
|
evenementiel/settings/secret.py
|
|
fill_template evenementiel/settings/secret.py
|
|
|
|
# Run the usual django admin commands
|
|
function venv_python {
|
|
sudo -H -u vagrant DJANGO_SETTINGS_MODULE=$SETTINGS \
|
|
~vagrant/venv/bin/python \
|
|
$@
|
|
}
|
|
|
|
venv_python manage.py collectstatic --noinput
|
|
venv_python manage.py migrate
|
|
|
|
|
|
# ---
|
|
# Setup a friendly environment for the user
|
|
# ---
|
|
|
|
cat > ~vagrant/.bash_profile <<EOF
|
|
# Use the .bashrc file provided by Debian
|
|
source .bashrc
|
|
|
|
# Use the development settings
|
|
export DJANGO_SETTINGS_MODULE="$SETTINGS"
|
|
|
|
# Move to the code's folder
|
|
cd /vagrant
|
|
|
|
# Activate the virtualenv
|
|
source ~vagrant/venv/bin/activate
|
|
EOF
|
|
chown vagrant: ~vagrant/.bashrc
|