diff options
Diffstat (limited to 'install')
| -rw-r--r-- | install/README | 9 | ||||
| -rwxr-xr-x | install/deploy-helper.sh | 102 | ||||
| -rw-r--r-- | install/sidekiq-stif-boiv.service | 52 | ||||
| -rwxr-xr-x | install/stif-boiv-setup.sh | 84 | ||||
| -rw-r--r-- | install/stif-boiv.conf | 38 | ||||
| -rw-r--r-- | install/template-stif-boiv.sql | 11 |
6 files changed, 296 insertions, 0 deletions
diff --git a/install/README b/install/README new file mode 100644 index 000000000..9825e6575 --- /dev/null +++ b/install/README @@ -0,0 +1,9 @@ +Script d'initialisation de l'environnement logiciel pour accueillir le BOIV +Prérequis : debian 8 (Jessie) netinst + +Paramètres : exporter les variables d'environnements +DATABASE_HOST permet de régler l'hôte qui héberge la base de données +valeur par défaut : localhost + +Procédure : en tant qu'utilisateur root, exécuter la commande depuis le répertoire courrant +./stif-boiv-setup.sh diff --git a/install/deploy-helper.sh b/install/deploy-helper.sh new file mode 100755 index 000000000..487c4539c --- /dev/null +++ b/install/deploy-helper.sh @@ -0,0 +1,102 @@ +#!/bin/bash -e + +export BASEDIR=$PREFIX/var/www/stif-boiv + +export RUN_USER=www-data +export RUN_GROUP=src + +export SUDO="" + +function setup() { + mkdir -p $BASEDIR + mkdir -p $BASEDIR/releases $BASEDIR/shared + + $SUDO mkdir -p $PREFIX/etc/stif-boiv + ln -fs $PREFIX/etc/stif-boiv $BASEDIR/shared/config + + mkdir -p $BASEDIR/shared/config/environments + + mkdir -p $BASEDIR/shared/public + mkdir -p $BASEDIR/shared/public/uploads + mkdir -p $BASEDIR/shared/public/assets + + mkdir -p $BASEDIR/shared/tmp/uploads + + $SUDO chown $RUN_USER:$RUN_GROUP $BASEDIR/shared/public/uploads $BASEDIR/shared/tmp/uploads + + default_config +} + +function default_config() { + DATABASE_PASSWORD=${DATABASE_PASSWORD:-FIXME} + DATABASE_HOST=${DATABASE_HOST:-"localhost"} + + cd $BASEDIR/shared/config + + if [ ! -f secrets.yml ]; then + cat > secrets.yml <<EOF +production: + secret_key_base: `echo $RANDOM | sha512sum | cut -f1 -d' '` +EOF + fi + + if [ ! -f database.yml ]; then + cat > database.yml <<EOF +production: + adapter: postgresql + encoding: unicode + pool: 5 + + host: $DATABASE_HOST + database: stif-boiv + + username: stif-boiv + password: $DATABASE_PASSWORD +EOF + fi +} + +function install() { + tar_file=$1 + + # stif-boiv-20160617154541.tar + release_name=`echo $tar_file | sed 's/.*-\([0-9]*\)\.tar/\1/g'` + + RELEASE_PATH=$BASEDIR/releases/$release_name + + if [ -d $RELEASE_PATH ]; then + echo "Release directory $RELEASE_PATH already exists" + return + fi + + mkdir -p $RELEASE_PATH + + tar -xf $tar_file -C $RELEASE_PATH + + cd $RELEASE_PATH + + mkdir -p tmp + + for directory in public/uploads tmp/uploads public/assets; do + local_directory=$BASEDIR/shared/$directory + release_directory=$directory + + rm -rf $release_directory + ln -s $local_directory $release_directory + done + + for file in secrets.yml database.yml environments/production.rb; do + local_file=$BASEDIR/shared/config/$file + release_file=config/$file + + rm $release_file && ln -fs $local_file $release_file + done + + echo "Release installed into $RELEASE_PATH" +} + +command=$1 +shift + +set -x +$command $@ diff --git a/install/sidekiq-stif-boiv.service b/install/sidekiq-stif-boiv.service new file mode 100644 index 000000000..90c6ed391 --- /dev/null +++ b/install/sidekiq-stif-boiv.service @@ -0,0 +1,52 @@ +# +# systemd unit file for CentOS 7, Ubuntu 15.04 +# +# Customize this file based on your bundler location, app directory, etc. +# Put this in /usr/lib/systemd/system (CentOS) or /lib/systemd/system (Ubuntu). +# Run: +# - systemctl enable sidekiq +# - systemctl {start,stop,restart} sidekiq +# +# This file corresponds to a single Sidekiq process. Add multiple copies +# to run multiple processes (sidekiq-1, sidekiq-2, etc). +# +# See Inspeqtor's Systemd wiki page for more detail about Systemd: +# https://github.com/mperham/inspeqtor/wiki/Systemd +# +[Unit] +Description=sidekiq stif-boiv +# start us only once the network and logging subsystems are available, +# consider adding redis-server.service if Redis is local and systemd-managed. +After=syslog.target network.target + +# See these pages for lots of options: +# http://0pointer.de/public/systemd-man/systemd.service.html +# http://0pointer.de/public/systemd-man/systemd.exec.html +[Service] +Type=simple +WorkingDirectory=/var/www/stif-boiv/current +PIDFile=/var/run/sidekiq-stif-boiv.pid + +PermissionsStartOnly=true +ExecStartPre=-/bin/touch /var/run/sidekiq-stif-boiv.pid +ExecStartPre=/bin/chown www-data:www-data /var/run/sidekiq-stif-boiv.pid + +ExecStart= /usr/local/bin/bundle exec sidekiq -e production -P /var/run/sidekiq-stif-boiv.pid + +User=www-data +Group=www-data +UMask=0002 + +# if we crash, restart +RestartSec=10 +Restart=on-failure + +# output goes to /var/log/syslog +StandardOutput=syslog +StandardError=syslog + +# This will default to "bundler" if we don't specify it +SyslogIdentifier=stif-boiv/sidekiq + +[Install] +WantedBy=multi-user.target diff --git a/install/stif-boiv-setup.sh b/install/stif-boiv-setup.sh new file mode 100755 index 000000000..a2b8bd4a6 --- /dev/null +++ b/install/stif-boiv-setup.sh @@ -0,0 +1,84 @@ +#!/bin/bash -e + +DATABASE_HOST=${DATABASE_HOST:-"localhost"} + +# mandatory packages and distribution upgrade +apt-get update && apt-get dist-upgrade +apt-get install -y wget sudo + +# ruby +echo "==== Installation de Ruby 2.3" +cat > /etc/apt/sources.list.d/bearstech.list <<EOF +deb http://deb.bearstech.com/debian jessie-bearstech main +EOF + +wget -q -O - http://deb.bearstech.com/bearstech-archive.gpg | apt-key add - +apt-get update +apt-get install -y ruby2.3 ruby2.3-dev +apt-get install -y libsqlite3-dev libproj-dev libpq-dev +gem2.3 install bundler + +# Apache / Passenger +echo "==== Installation de Apache 2.4 et Passenger" +apt-get install -y apache2 libapache2-mod-passenger + +cp stif-boiv.conf /etc/apache2/sites-available/ + +a2enmod expires +a2ensite stif-boiv + +# Redis + +echo "==== Installation de Redis" + +apt-get install -y redis-server + +# Sidekiq + +echo "==== Installation de Sidekiq comme service" +cp sidekiq-stif-boiv.service /etc/systemd/system/ +systemctl enable sidekiq-stif-boiv + + +echo "==== Installation de PostgreSQL" +if [ "x$DATABASE_HOST" = "xlocalhost" ]; then +apt-get install -y postgresql-9.4 postgresql-9.4-postgis-2.1 postgresql-contrib-9.4 +[ -d /usr/local/share/postgresql ] || mkdir -p /usr/local/share/postgresql/ +cp template-stif-boiv.sql /usr/local/share/postgresql/ +pushd . +cd /usr/local/share/postgresql +sudo -u postgres createdb --encoding UTF-8 template_stif_boiv < template-stif-boiv.sql +popd +echo "Saisissez le mot de passe de la base de données. Il vous sera redemandé ultérieurement" +sudo -u postgres createuser --pwprompt stif_boiv +sudo -u postgres createdb --owner stif_boiv --template template_stif_boiv stif_boiv +else +echo "W! Base de donnée externe : Pas d'installation" +fi + +# NodeJS + +echo "==== Installation de NodeJS 5.x" +apt-get install -y apt-transport-https + +cat > /etc/apt/sources.list.d/nodesource.list <<EOF +deb https://deb.nodesource.com/node_5.x jessie main +EOF + +wget -q -O - https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - +apt-get update + +apt-get install -y nodejs + +# Configuration de l'applicatif + +echo "==== Paramétrage de l'applicatif" +echo -n "Veuillez saisir à nouveau le mot de passe d'accès à la base de données :" +read -s DATABASE_PASSWORD + +export DATABASE_PASSWORD + +PGPASSWORD=$DATABASE_PASSWORD PGHOST=$DATABASE_HOST PGUSER=stif_boiv psql -q -c 'select 1' stif_boiv >/dev/null 2>&1 && echo "Mot de passe correct" +./deploy-helper.sh setup + +echo "!!! Configuration intiale terminée. Vous pouvez maintenant déployer l'applicatif" diff --git a/install/stif-boiv.conf b/install/stif-boiv.conf new file mode 100644 index 000000000..6b2abe4eb --- /dev/null +++ b/install/stif-boiv.conf @@ -0,0 +1,38 @@ +<VirtualHost *:80> + ServerName boiv.stif.info + + DocumentRoot /var/www/stif-boiv/current/public + + PassengerDefaultUser www-data + PassengerUserSwitching off + + PassengerRuby /usr/bin/ruby2.3 + RackEnv production + + ExpiresActive On + + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType application/x-javascript "access plus 1 year" + ExpiresByType application/x-shockwave-flash "access plus 1 year" + ExpiresByType image/gif "access plus 1 year" + ExpiresByType image/ico "access plus 1 year" + ExpiresByType image/jpeg "access plus 1 year" + ExpiresByType image/jpg "access plus 1 year" + ExpiresByType image/png "access plus 1 year" + ExpiresByType image/vnd.microsoft.icon "access plus 1 year" + ExpiresByType image/x-icon "access plus 1 year" + ExpiresByType text/css "access plus 1 year" + ExpiresByType text/javascript "access plus 1 year" + ExpiresByType font/truetype "access plus 1 year" + ExpiresByType application/x-font-ttf "access plus 1 year" + + <Directory /var/www/stif-boiv/current/public> + AllowOverride None + Require all granted + </Directory> + + <Location /sidekiq> + # Replace with correct policy + Require all denied + </Location> +</virtualHost> diff --git a/install/template-stif-boiv.sql b/install/template-stif-boiv.sql new file mode 100644 index 000000000..4d4a19afe --- /dev/null +++ b/install/template-stif-boiv.sql @@ -0,0 +1,11 @@ +set ON_ERROR_STOP=on; + +CREATE SCHEMA shared_extensions; +GRANT ALL ON SCHEMA shared_extensions TO PUBLIC; +CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA shared_extensions; +CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA shared_extensions; + +UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_stif_boiv'; + +VACUUM FULL FREEZE; + |
