-
Delaigue Olivier authored0fc1747e
- Guide d'installation d'OpenBDOH
- Prérequis
- Serveur
- Communications sécurisées
- Conventions
- Procédure d'installation
- Installation des paquets systèmes
- Installation d'OpenBDOH
- Paramétrage de PostgreSQL
- (Optionel) Accès rapide à la base de données pour l'utilisateur devops
- Environnement de l'utilisateur devops
- Rotation des logs
- Configuration du protocole SSL :
- Paramétrage de PHP :
- Installation de Composer et Yarn :
- Déploiement de l'application
- Paramétrage d'Apache2 :
- Installation de l'éxécuteur de jobs
Guide d'installation d'OpenBDOH
Prérequis
Serveur
Ce guide est rédigé pour une installation sur un serveur ou machine virtuel vérifiant les prérequis suivants :
- système d'exploitation : système d'exploitation Debian, version Buster
- le réseau est déjà configuré et le serveur a un accès complet à Internet
- réserver un espace d'au moins 1,5 Go, et de 2 Go de préférence
- la locale fr_FR.UTF-8 et le fuseau horaire sont configurés, selon la localisation du serveur
- un compte utilisateur non-administrateur a été crée. Il peut utiliser
sudo
pour exécuter des commandes en tant que superutillisateur (root
) - une archive de BDOH v4.0.0 est disponible sur le serveur, par exemple : https://gitlab.irstea.fr/pole-is/bdoh/-/archive/v4.0.2/bdoh-v4.0.2.tar.bz2
Il est possible d'installer facilement OpenBDOH sur une distribution Linux dérivée de Debian, comme Ubuntu Linux, par exemple. En revanche, l'installation sur une autre distribution, comme RedHad, CentOS..., nécessiterait des adaptations dans les commandes, les noms de paquets, les chemins de fichiers... qui ne seront pas abordées dans ce guide.
Communications sécurisées
Pour la mise en place de communications sécurisée (protocole HTTPS au lieu de HTTP), il est nécessaire d'obtenir :
- un nom d'hôte complet inscrit dans le DNS,
- une clef privée ainsi qu'un certificat SSL correspondant au nom ci-dessous.
Conventions
Pour la suite de ce guide, les informations suivantes seront utilisées dans les exemples. Veillez à adapter à votre cas.
- nom du site web :
openbdoh.example.com
- compte non-privilégié :
devops
- chemin d'installation :
/var/www/bdoh
- mot de passe de la base de données :
MotDePasseOpenBDOH
- chemin de l'archive OpenBDOH :
/home/devops/bdoh-v4.0.2.tar.bz2
Les commandes à exécuter sont indiquées dans des blocs comme ci-dessous. Il est prévu de les exécuter en tant que devops
.
echo "une commande"
Procédure d'installation
Installation des paquets systèmes
Certaines versions des logiciels n'étant pas disponibles dans la version de base de Debian, des dépôts APT tierce-partie sont utilisés :
-
Installer les paquets nécessaires pour utiliser les dépôts tierces.
sudo apt-get install -yq apt-transport-https ca-certificates wget lsb-release gpg
- Configurer APT pour utiliser les dépôts APT supplémentaires :
sudo wget -O /usr/share/keyrings/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
wget -qO - https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/nodesource.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_12.x $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/nodesource.list
- Installer l'ensemble des packages nécessaires :
sudo apt-get update -yq
sudo apt-get install -yq acl apache2 cron libpq-dev nodejs php7.1 php7.1-apcu php7.1-apcu-bc php7.1-common php7.1-common php7.1-gd php7.1-intl php7.1-json php7.1-mbstring php7.1-pgsql php7.1-pgsql php7.1-sodium php7.1-xml php7.1-xml php7.1-zip postgis postgresql postgresql-client postgresql-11-postgis-2.5 postgresql-11-postgis-2.5-scripts git-core unzip
Installation d'OpenBDOH
sudo mkdir -p -m 02755 /var/www/bdoh
sudo chown devops:www-data /var/www/bdoh
tar xfj /home/devops/bdoh-v4.0.2.tar.bz2 --directory=/var/www/bdoh --strip-components=1
Paramétrage de PostgreSQL
- Configurer les modes de connexion :
# Ajoute une ligne 'local all devops peer' après la ligne 'local ... postgres'
# et remplace la ligne 'local all all peer' par 'local all all md5'
sudo sed -i \
-e '/^local.*postgres/alocal all devops peer' \
-e '/^local.*all.*all.*peer/clocal all all md5' \
/etc/postgresql/11/main/pg_hba.conf
- (Ré)démarrer Postgresql :
sudo systemctl restart postgresql
- Créer les utilisateurs devops et bdoh :
sudo -u postgres psql <<EOF
CREATE USER devops SUPERUSER;
CREATE USER bdoh WITH PASSWORD 'MotDePasseOpenBDOH';
EOF
- Créer la base de données BDOH :
psql template1 devops <<'EOF'
CREATE DATABASE bdoh ENCODING 'UTF8' LC_COLLATE "fr_FR.UTF-8" LC_CTYPE "fr_FR.UTF-8";
ALTER DATABASE bdoh SET search_path = "bdoh", "$user", public;
\c bdoh
CREATE EXTENSION postgis;
CREATE SCHEMA bdoh;
CREATE SCHEMA temp AUTHORIZATION bdoh;
EOF
- (optionel) Installer le script de backup automatique de la base de données :
sudo cp files/local_pg_dump /etc/cron.daily/
sudo chmod 0555 /etc/cron.daily/local_pg_dump
(Optionel) Accès rapide à la base de données pour l'utilisateur devops
On configure les variables d'environnement PG* dans ~/.profile et on enregistre le mot de passe dans ~/.pgpass.
echo "export PGDATABASE=bdoh PGUSER=devops PGHOST=/run/postgresql PGPORT=5432" >>~/.profile
echo "localhost:5432:bdoh:bdoh:MotDePasseOpenBDOH" >~/.pgpass
chmod 0400 ~/.pgpass
Environnement de l'utilisateur devops
On configure les variables d'environnement SYMFONY_ENV et SYMFONY_DEBUG.
echo "export SYMFONY_ENV=prod SYMFONY_DEBUG=0" >>~/.profile
. ~/.profile
Rotation des logs
On ajoute un fichier de configuration pour l'outil logrotate :
sudo tee /etc/logrotate.d/bdoh <<EOF
/var/www/bdoh/app/logs/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
su www-data www-data
}
EOF
Configuration du protocole SSL :
- afin d'offrir aux utilisateurs une connexion HTTPS, permettant de chiffrer les données échangées avec OpenBDOH il s'avère nécessaire de configurer le protocole SSL. Pour ce faire plusieurs étapes sont nécessaires :
- obtenir les certificats SSL
- installer les certificats SSL sur le serveur OpenBDOH :
- /etc/ssl/certs/ pour le certificat public
- /etc/ssl/private/ pour la clef privée
- configurer Apache2 afin d'utiliser les certificats nouvellement installés
Paramétrage de PHP :
- activer les modules PHP nécessaires :
sudo tee /etc/php/7.1/mods-available/owasp-security.ini <<'EOF'
; priority=99
session.use_trans_sid = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.entropy_file = /dev/urandom
session.entropy_length = 16
display_errors = Off
display_startup_errors = Off
expose_php = Off
EOF
sudo phpenmod -v 7.1 apcu apcu_bc ctype gd iconv intl json mbstring pdo pdo_pgsql pgsql posix readline sodium tokenizer xml xsl zip owasp-security
Installation de Composer et Yarn :
- Installer Composer :
wget -O - https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer --version=1.10.22
- installer Yarn :
sudo npm install --global --production yarn
Déploiement de l'application
- Se placer dans le répertoire d'installation :
cd /var/www/bdoh
- Installer les librairies
composer install --verbose --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader --no-suggest
yarn install --pure-lockfile
- Configurer l'application. Pour cela, il faut modifier le fichier
/var/www/bdoh/app/config/parameters.yml
qui a été généré à l'étape précédente pour renseigner les paramètres tels ques :-
database_*
: les informations de connexion à la base de données, -
mailer_*
: le informations de connexion au serveur STMP sortant, -
secret
: un "secret" pour la sécurisation des sessions, -
theia_password_secret_key
: un "secret" pour la sécurisation des mots de passe Theia ; ce doit être une valeur de 32 octets en hexadécimal (i.e. 64 caractères), -
router.request_context.host
: le nom d'hôte. - les paramètres
logo_long_web_link
,logo_short_web_link
etmini_logo_sonata
peuvent être modifiés pour afficher des logos ; le chemin est relatif à/var/www/bdoh/web
.
-
# Exemple :
cat >/var/www/bdoh/app/config/parameters.yml <<'EOF'
parameters:
database_driver: pdo_pgsql
database_host: /run/postgresql
database_port: 5432
database_name: bdoh
database_user: bdoh
database_password: MotDePasseOpenBDOH
database_server_version: 11
mailer_transport: smtp
mailer_host: smtp
mailer_user: ~
mailer_password: ~
secret: f07fb2a3cec442aa23f1dc6a25db0171
trusted_proxies: []
dev_toolbar: false
project_guest_path: /var/www
project_host_path: .
theia_password_secret_key: f680e41b1f4f08e5199654803255774b64ef7b9022cf023063e455cc87e4f7e7
uri_theia_ozcar: https://in-situ.theia-land.fr
uri_theia_send_data: https://in-situ.theia-land.fr/data/
uri_theia_ozcar_schema_json: https://in-situ.theia-land.fr/json-schema/pivotSchemaDraft7.json
logo_long_web_link: images/Logo_INRAE_REPUBLIQUE.png
logo_short_web_link: images/Logo_INRAE.png
mini_logo_sonata: images/MiniLogo_INRAE_REPUBLIQUE.png
router.request_context.host: 'openbdoh.example.com'
EOF
- Régénérer le cache de Symfony
app/console cache:clear --no-interaction
- Générer les ressources front-end
composer install-assets --no-interaction
yarn run encore production
- Définir les permissions sur les dossiers :
mkdir -p app/{cache,logs,imports,exports} web/{uploads,css/themes}
setfacl -R -m u:www-data:rwX -m u:devops:rwX app/{cache,logs,imports,exports} web/{uploads,css/themes}
setfacl -R -d -m u:www-data:rwX -m u:devops:rwX app/{cache,logs,imports,exports} web/{uploads,css/themes}
- Appliquer les migrations de la base de données :
app/console doctrine:migrations:migrate --no-interaction --allow-no-migration --write-sql
# La commande a généré un fichier doctrine_migration_AAAAMMJJHHMMSS.sql, on l'exécute :
psql bdoh devops <doctrine_migration_*.sql
Paramétrage d'Apache2 :
- Créer la configuration du site :
sudo tee /etc/apache2/sites-available/openbdoh.conf <<'EOF'
ServerName openbdoh.example.org
CustomLog /var/log/apache2/openbdoh-access.log common
ErrorLog /var/log/apache2/openbdoh-error.log
DocumentRoot /var/www/bdoh/web
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header set X-Content-Type-Options: "nosniff"
Header set X-XSS-Protection: "1; mode=block"
Header set X-Frame-Options: "sameorigin"
<Directory /var/www/bdoh/web>
SetEnv SYMFONY_ENV prod
Require all granted
AllowOverride None
Options FollowSymLinks
FallbackResource /app.php
</Directory>
<LocationMatch ^/?(assets|bundles|css|documents|images|uploads)/>
FallbackResource disabled
</LocationMatch>
EOF
- Désactiver tous les sites, modules et fichiers de configuration :
sudo a2dismod -f '*'
sudo a2disconf -f '*'
sudo a2dissite 000-default
- Activer les sites, modules et fichiers de configuration nécessaires :
sudo a2enmod php7.1 alias authz_core deflate dir env expires headers mime negotiation rewrite setenvif unique_id
sudo a2ensite openbdoh
- Tester la configuration et redémarrer le service Apache2 :
sudo apache2ctl configtest
sudo systemctl restart apache2
Installation de l'éxécuteur de jobs
- Installer le service bdoh-job-worker
sudo cp /var/www/bdoh/app/config/bdoh-job-worker.service /etc/systemd/system/
sudo chown root:root /etc/systemd/system/bdoh-job-worker.service
sudo chmod 644 /etc/systemd/system/bdoh-job-worker.service
sudo systemctl daemon-reload
sudo systemctl enable --now bdoh-job-worker.service