Recherche de site Web

Comment installer BookStack avec Nginx sur Ubuntu 20.04


BookStack est une plateforme auto-hébergée, open source et facile à utiliser pour organiser et stocker des informations. Il peut être utilisé à des fins multiples, comme un wiki, un site Web de documentation et une application de prise de notes. Il est construit à l'aide du framework PHP Laravel et utilise MySQL pour stocker les données. À des fins d'édition, il vous offre le choix entre utiliser un éditeur WYSIWYG ou Markdown. Il prend en charge l'authentification multifacteur et le mode sombre et est multilingue.

Ce didacticiel vous apprendra comment installer BookStack sur un serveur basé sur Ubuntu 20.04.

Conditions préalables

  1. Un serveur exécutant Ubuntu 20.04
  2. Un nom de domaine complet (FQDN) pointant vers le serveur.
  3. Un utilisateur non root avec les privilèges sudo.
  4. PHP version 7.3 ou supérieure.
  5. MySQL>=5.6 et MariaDB>=10.0
  6. Git et Composer.

Étape 1 - Configurer le pare-feu

La première étape consiste à configurer le pare-feu. Ubuntu est livré par défaut avec ufw (Uncomplicated Firewall).

Vérifiez si le pare-feu est en cours d'exécution.

$ sudo ufw status

Vous devriez obtenir le résultat suivant.

Status: inactive

Autorisez le port SSH afin que le pare-feu ne rompe pas la connexion actuelle en l'activant.

$ sudo ufw allow OpenSSH

Autorisez également les ports HTTP et HTTPS.

$ sudo ufw allow 80
$ sudo ufw allow 443

Activer le pare-feu

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Vérifiez à nouveau l'état du pare-feu.

$ sudo ufw status

Vous devriez voir une sortie similaire.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Étape 2 - Installer Git

La première étape consiste à installer Git. Il sera nécessaire de télécharger et de mettre à jour BookStack. Exécutez la commande suivante pour installer Git.

$ sudo apt install git

Vérifiez l'installation.

$ git --version

Étape 3 - Installer PHP et les extensions

Puisque BookStack dépend de PHP, vous devez installer PHP et ses extensions.

Ubuntu est livré avec une version PHP obsolète. Tout d'abord, nous devons ajouter le référentiel PHP d'Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Ensuite, installez PHP et ses extensions requises par BookStack.

$ sudo apt install php7.4-fpm php7.4-mbstring php7.4-gd php7.4-xml unzip php7.4-bcmath php7.4-curl php7.4-mysql

Vérifiez l'installation.

$ php --version
PHP 7.4.25 (cli) (built: Oct 22 2021 12:34:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies

Étape 4 - Installer et configurer MariaDB

Ubuntu est livré avec une ancienne version de MariaDB. Pour installer la dernière version, ajoutez le référentiel officiel MariaDB. Exécutez les commandes suivantes pour ajouter le référentiel.

$ curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ sudo bash mariadb_repo_setup --mariadb-server-version=10.6

Exécutez la commande suivante pour installer le serveur MariaDB.

$ sudo apt install mariadb-server

Sécurisez l’installation de MariaDB.

$ sudo mysql_secure_installation

Vous serez confronté à diverses invites. Répondez-leur comme suit.

Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Type y
Change the root password? [Y/n] Type n
Remove anonymous users? [Y/n] Type y
Disallow root login remotely? [Y/n] Type y
Remove test database and access to it? [Y/n] Type y
Reload privilege tables now? [Y/n] Type y

Connectez-vous au shell MariaDB à l'aide de la commande suivante.

$ sudo mysql

Créez une nouvelle base de données pour Bookstack.

$ create database bookstack;

Créez un nouvel utilisateur de base de données.

$ CREATE USER 'bookstackuser'@'localhost' identified by 'bookstackpassword';

Choisissez un mot de passe fort.

Accordez des autorisations sur la base de données à l'utilisateur.

$ grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `bookstack`.* to 'bookstackuser'@'localhost';

Quittez le shell MySQL.

$ exit

Étape 5 - Installer Composer

Composer est un outil de gestion des dépendances pour PHP et est requis par Laravel sur lequel est basé BookStack.

Téléchargez le script d'installation de Composer.

$ curl -sS https://getcomposer.org/installer -o composer-setup.php

Exécutez les commandes suivantes pour vérifier le programme d'installation.

$ HASH=`curl -sS https://composer.github.io/installer.sig`
$ echo $HASH
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

Les commandes ci-dessus récupèrent la valeur de hachage du programme d'installation et la font correspondre à votre script téléchargé. Vous devriez voir le résultat suivant si le programme d’installation peut être exécuté en toute sécurité.

Installer verified

Installez Composer.

$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Vérifiez l'installation en vérifiant sa version.

$ composer --version
Composer version 2.1.9 2021-10-05 09:47:38

Étape 6 - Téléchargez et installez BookStack

Créez le dossier racine de l'application BookStack.

$ sudo mkdir -p /var/www/bookstack

Remplacez la propriété du répertoire /var/www/bookstack par l'utilisateur actuellement connecté.

$ sudo chown -R $USER:$USER /var/www/bookstack

Clonez la branche de publication du référentiel BookStack Github dans le dossier nouvellement créé.

$ cd /var/www/bookstack
$ git clone https://github.com/BookStackApp/BookStack.git --branch=release --single-branch .

Ne manquez pas le point à la fin de la commande clone. Cela garantit que tous les fichiers sont téléchargés dans le répertoire actuel au lieu d'en créer un nouveau.

Exécutez le programme d'installation de Composer à partir du répertoire /var/www/bookstack.

$ composer install --no-dev

Copiez le fichier .env.example dans .env pour stocker les variables d'environnement pour l'installation.

$ cp .env.example .env

Ouvrez le fichier pour le modifier.

$ sudo nano .env

Remplissez l'URL de l'application et les détails de la base de données. Si vous comptez utiliser les fonctionnalités de messagerie, remplissez les détails SMTP ou supprimez-les du fichier.

APP_URL=https://example.com
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=bookstackpassword

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité une fois terminé. Il existe de nombreux autres paramètres que vous pouvez configurer. Pour en savoir plus, ouvrez le fichier .env.example.complete et copiez ceux dont vous avez besoin dans votre fichier .env.

Générez une clé d'application unique. Cette valeur est automatiquement renseignée dans le fichier .env. Tapez oui pour poursuivre la commande.

$ php artisan key:generate
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? (yes/no) [no]:
 > yes

Application key set successfully.

Mettez à jour la base de données.

$ php artisan migrate
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? (yes/no) [no]:
 > yes
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.12 seconds)
.......

Étape 7 - Installez Let's Encrypt SSL

Pour installer un certificat SSL à l'aide de Let's Encrypt, nous devons installer l'outil Certbot.

Nous utiliserons le programme d'installation du package Snapd pour cela. La plupart des serveurs Ubuntu ne sont pas livrés avec l'outil Snap. Pour résoudre ce problème, installez Snap.

$ sudo apt install snapd

Assurez-vous que votre version de Snapd est à jour.

$ sudo snap install core 
$ sudo snap refresh core

Installez Certbot.

$ sudo snap install --classic certbot

Utilisez la commande suivante pour vous assurer que la commande Certbot peut être exécutée en créant un lien symbolique vers le répertoire /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Vérifiez l'installation.

$ certbot --version
certbot 1.20.0

Générez le certificat SSL.

$ sudo certbot certonly --standalone --agree-tos --preferred-challenges http -m [email  -d example.com

La commande ci-dessus téléchargera un certificat dans le répertoire /etc/letsencrypt/live/etherpad.example.com sur votre serveur.

Générez un certificat de groupe Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Créez un répertoire racine Web de défi pour le renouvellement automatique de Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Créez une tâche Cron pour renouveler le SSL. Il s'exécutera tous les jours pour vérifier le certificat et le renouveler si nécessaire. Pour cela, créez d'abord le fichier /etc/cron.daily/certbot-renew et ouvrez-le pour le modifier.

$ sudo nano /etc/cron.daily/certbot-renew

Collez le code suivant.

#!/bin/sh
certbot renew --cert-name bookstack.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Modifiez les autorisations sur le fichier de tâches pour le rendre exécutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Étape 8 - Installer et configurer Nginx

Ubuntu est livré avec une ancienne version de Nginx. Pour installer la dernière version, vous devez télécharger le référentiel officiel Nginx.

Ajoutez le référentiel pour la version stable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Installez Nginx.

$ sudo apt install nginx

Vérifiez l'installation.

$ nginx -v
nginx version: nginx/1.20.1

Activez le service Nginx.

$ sudo systemctl enable nginx

Configurer PHP-FPM

Ouvrez le fichier /etc/php/7.4/fpm/pool.d/www.conf.

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Nous devons définir l'utilisateur/groupe Unix de processus PHP sur nginx. Recherchez les lignes user=www-data et group=www-data dans le fichier et remplacez-les par nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

Recherchez également les lignes listen.owner=www-data et listen.group=www-data dans le fichier et remplacez-les par nginx.

listen.owner = nginx
listen.group = nginx

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité.

Redémarrez le processus PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Configurer Nginx

Créez et ouvrez le fichier /etc/nginx/conf.d/bookstack.conf pour le modifier.

$ sudo nano /etc/nginx/conf.d/bookstack.conf

Collez-y le code suivant.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  bookstack.example.com;

    access_log  /var/log/nginx/bookstack.access.log;
    error_log   /var/log/nginx/bookstack.error.log;
    
    ssl_certificate      /etc/letsencrypt/live/bookstack.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/bookstack.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/bookstack.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    root /var/www/bookstack/public;
    index index.php index.html;

    location / {
      try_files $uri $uri/ /index.php?$query_string;
    }
  
    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  bookstack.example.com;
    return 301   https://$host$request_uri;
}

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité une fois terminé.

Ouvrez le fichier /etc/nginx/nginx.conf pour le modifier.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Enregistrez le fichier en appuyant sur Ctrl + X et en saisissant Y lorsque vous y êtes invité. Validez à nouveau Nginx.

Vérifiez la syntaxe du fichier de configuration Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Enfin, démarrez le service Nginx pour activer la nouvelle configuration.

$ sudo systemctl start nginx

Remplacez la propriété du répertoire par l'utilisateur nginx afin que le serveur Web puisse accéder au dossier et y écrire.

$ sudo chown -R nginx:nginx /var/www/bookstack

Étape 9 - Exécutez BookStack

Votre Bookstack est prêt à être utilisé. Ouvrez l'URL https://bookstack.example.com dans votre navigateur et vous obtiendrez la page de connexion.

Connectez-vous à l'aide du compte administrateur par défaut [email  avec le mot de passe mot de passe. Ouvrez la page Paramètres >> Utilisateurs et cliquez sur le bouton AJOUTER UN NOUVEL UTILISATEUR.

Remplissez les détails de l'utilisateur, cochez la case Admin sous Rôles de l'utilisateur et décochez Envoyer un e-mail d'invitation à l'utilisateur, car nous n'avons pas défini les détails SMTP. Sélectionnez un mot de passe fort. Cliquez sur Enregistrer lorsque vous avez terminé.

Ensuite, cliquez sur l'utilisateur administrateur par défaut et supprimez l'utilisateur en cliquant sur le bouton Supprimer l'utilisateur.

Transférez la propriété de l'utilisateur administrateur à votre utilisateur nouvellement créé en le sélectionnant dans le menu déroulant avant de le supprimer. Cliquez sur Confirmer pour terminer. Si vous êtes connecté avec cet utilisateur, vous serez automatiquement déconnecté. Vous devrez vous reconnecter avec l'utilisateur nouvellement créé.

Sauvegarder et restaurer BookStack

Sauvegarde de la pile de livres

Vous devez sauvegarder la base de données et les fichiers séparément. Pour sauvegarder la base de données, utilisez l'outil mysqldump.

$ sudo mysqldump -u bookstackuser bookstack > bookstack.backup.sql

Vous devez également sauvegarder les fichiers et dossiers suivants.

  1. .env - fichier contenant une configuration importante.
  2. public/uploads - dossier contenant les images téléchargées.
  3. storage/uploads - dossier contenant les pièces jointes des pages téléchargées.

Exécutez la commande suivante pour créer une archive compressée des fichiers et dossiers ci-dessus.

$ sudo tar -czvf bookstack-files-backup.tar.gz .env public/uploads storage/uploads

Restaurer BookStack

Exécutez la commande suivante pour restaurer la base de données.

$ sudo mysql -u bookstack < bookstack.backup.sql

Si vous restaurez vers une nouvelle version de BookStack, vous devrez exécuter la commande sudo php artisan migrate.

Pour restaurer les fichiers compressés créés ci-dessus, utilisez la commande suivante.

$ sudo tar -xvzf bookstack-files-backup.tar.gz

Vous devrez également modifier les autorisations.

Mettre à jour BookStack

Avant de mettre à jour BookStack, assurez-vous d'effectuer une sauvegarde appropriée en utilisant le processus mentionné précédemment.

Pour mettre à jour BookStack, extrayez les fichiers originaux de son référentiel Git.

$ cd /var/www/bookstack
$ sudo git pull origin release

Exécutez les commandes suivantes pour poursuivre l'installation.

$ sudo composer install --no-dev
$ sudo php artisan migrate

Vous devrez également exécuter les commandes suivantes pour vider le cache.

$ sudo php artisan cache:clear
$ sudo php artisan config:clear
$ sudo php artisan view:clear

Conclusion

Ceci conclut notre tutoriel sur l'installation de BookStack sur un serveur Ubuntu 20.04. Si vous avez des questions, postez-les dans les commentaires ci-dessous.

Articles connexes: