Installer SeaTable sur un serveur avec d'autres services web

Installer SeaTable Enterprise sur votre propre serveur derrière un serveur web

Dans l'article Installer SeaTable Enterprise Edition sur Ubuntu Server 20.04 LTS nous avons expliqué l'installation par défaut de SeaTable Enterprise sur un serveur fonctionnant sous Ubuntu Linux. Dans l'installation par défaut, SeaTable est installé sur un serveur qui ne fait tourner aucune autre application web. Mais que faire si les ports 80 et 443 sont déjà occupés par un autre service tel qu'un serveur web nginx ou Apache ? Nous répondrons à cette question dans ce billet. Comme vous le verrez, la réponse est délicieusement simple.

Exigences

Les conditions requises pour installer SeaTable derrière un serveur web existant sont identiques à celles de l'installation standard :

  • VServer / Serveur dédié avec au moins 4 cœurs, 8 Go de RAM et 10 Go de mémoire.
  • Accès racine au serveur (via SSH ou console)
  • Sous-domaine qui fait référence à l'adresse IP du serveur via un enregistrement A (IPv4) ou un enregistrement AAAA (IPv6).
  • Serveur accessible sur les ports 80 et 443 via le sous-domaine

Préparation et téléchargement

Non seulement les prérequis, mais aussi les premières étapes sont identiques à celles de l'installation standard : installer d'abord docker-compose, puis tirer l'image SeaTable depuis Docker Hub, et enfin enregistrer le fichier docker-compose au format YAML dans le répertoire /opt/seatable.

Utilisez ces commandes pour effectuer ces actions :
apt update
apt upgrade -y
apt install docker-compose -y
docker pull seatable/seatable-ee:latest
mkdir /opt/seatable
cd /opt/seatable
wget -O "docker-compose.yml" "https://docs.seatable.io/f/58f1f83e5ac34258806b/?dl=1"

SeaTable peut également être créé dans un emplacement autre que le répertoire /opt/seatable. Si vous voulez faire cela, cependant, vous devriez également placer tous les autres fichiers SeaTable dans cet autre emplacement pour des raisons de cohérence. Comme cela peut facilement conduire à des erreurs, nous ne le recommandons pas.

Individualisation du fichier docker-compose.yml

Les instructions de l'installation par défaut expliquent la structure et la fonctionnalité du fichier docker-compose. Nous ne le répéterons pas ici. Utilisez ce lien pour passer directement à la partie correspondante du billet sur l'installation standard.

Dans le fichier YAML, il est maintenant nécessaire de procéder à quelques ajustements, d'une part pour tenir compte de vos propres besoins, d'autre part pour permettre le fonctionnement derrière un serveur web.

Les ajustements nécessaires concernent notamment le mot de passe de la base de données, qui doit être modifié dans le conteneur db (MYSQL_ROOT_PASSWORD) et dans le conteneur seatable (DB_ROOT_PASSWD). L'URL sous laquelle SeaTable doit être accessible doit également être modifiée. La valeur SEATABLE_SERVER_HOSTNAME est utilisée à cet effet. Entrez le domaine sans http:// ou https://.

En plus de ces modifications, qui doivent également être effectuées pour l'installation standard, le port HTTP et HTTPS doit également être adapté. La configuration des ports du conteneur à siège se trouve dans la section du même nom. Les valeurs par défaut dans le docker-compose.yml de SeaTable sont :
 - "80:80" #HTTP port
 - "443:443" #HTTPS port

La valeur précédant les deux points est le port du conteneur sur l'hôte Docker, c'est-à-dire le port sur lequel le proxy Docker écoute et transmet au conteneur. La deuxième valeur après les deux points est le port du conteneur Docker vers lequel les demandes sont transférées. Ces deux ports ne doivent pas nécessairement être identiques, et nous tirons parti de cette propriété.

Les ports 80 et 443 étant déjà utilisés sur le serveur, les ports de l'hôte Docker doivent être modifiés. Les ports dans le conteneur, cependant, peuvent et doivent rester inchangés. Cela évite des changements inutiles aux fichiers de configuration de SeaTable. Une configuration alternative des ports pourrait ressembler à ceci :

 - "880:80" #HTTP port
 - "4443:443" #HTTPS port

Les ports 880 et 4443 choisis ici sont des ports alternatifs populaires pour les ports 80 et 443. D'autres numéros de port peuvent également être utilisés à leur place. Ceux-ci doivent être pris en compte lors de la configuration du serveur web sur l'hôte à la place (voir ci-dessous).

Laissez la valeur SEATABLE_SERVER_LETSENCRYPT définie sur False. Cette fonction ne peut être utilisée qu'avec l'installation standard.

Initialisation de la base de données

Avec le docker-compose.yml personnalisé, la base de données de SeaTable peut maintenant être initialisée. Les étapes - comment pourrait-il en être autrement - sont celles de l'installation standard :

cd /opt/seatable
docker-compose up

À l'écran, vous pouvez maintenant observer en direct comment Docker traite les instructions du fichier YAML. Après un certain temps, les activités s'arrêtent. Le dernier message est "Ceci est un script d'attente (boucle infinie) pour maintenir le conteneur en fonctionnement". Abandonnez le processus à ce stade en appuyant sur CTRL + C.

Configuration de l'accès HTTP

Pour que les appels à l'URL de SeaTable aboutissent également au conteneur SeaTable, le fichier de configuration du serveur web sur l'hôte doit être adapté. Plus précisément, les demandes qui arrivent via l'URL de SeaTable et le port 80 doivent être transmises au proxy Docker. Cela écoute - comme défini dans le docker-compose - sur le port 880.

Par exemple, une directive qui fait cela pour nginx ressemble à ceci :

server {
  listen 80;
  listen [::]:80;
  server_name seatable.example.com;

  location / {
   proxy_pass http://127.0.0.1:880;
  }
}

(Nous fournirons un bloc de code pour Apache en temps voulu).

Après avoir ajusté la configuration du serveur Web, redémarrez le serveur Web pour que la modification soit effective.

La communication au sein du conteneur Docker seatable étant inchangée, il n'est pas nécessaire d'apporter des modifications aux différents fichiers de configuration du dossier /opt/seatable/seatable-data/seatable/conf.

Lancement de SeaTable

Maintenant, SeaTable est prêt à être mis en ligne. Tout d'abord, redémarrez tous les conteneurs Docker en exécutant le fichier docker-compose.yml, cette fois en mode dit "détaché", puis appelez le script SH dans le conteneur seatable pour démarrer SeaTable et enfin créer le premier utilisateur administrateur.

docker-compose up -d
docker exec -d seatable /shared/seatable/scripts/seatable.sh start
docker exec -it seatable /shared/seatable/scripts/seatable.sh superuser

Maintenant, vous pouvez déjà atteindre Seatable via le port 80. En appelant le domaine SeaTable (ici dans l'exemple seatable.example.com) vous arriverez à la page de connexion de votre serveur SeaTable.

L'appel de https://seatable.example.com ne fonctionne pas encore. L'accès crypté doit maintenant être mis en place comme dernière étape.

Configuration de l'accès HTTPS

La procédure de configuration de l'accès HTTPS dépend du certificat SSL/TLS utilisé. Si un certificat correspondant est déjà disponible, veuillez suivre les instructions de l'autorité de certification auprès de laquelle vous avez acheté le certificat SSL.

Si vous faites partie de la majorité et souhaitez gérer votre certificat HTTPS à l'aide de Let's Encrypt, il vous suffit de suivre les instructions du site Certbot de l'Electronic Frontier Foundation.

générateur d'instructions certbot

Dans le cas de nginx sur Ubuntu 20.04, seules quatre commandes sont nécessaires pour demander et inclure un certificat SSL Let's Encrypt :
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx

Après avoir appelé la dernière commande, le menu interactif de Certbot est appelé. Suivez les instructions et prenez les décisions nécessaires. Si les conditions requises pour Let's Encrypt sont remplies, le certificat est demandé et inclus. La prochaine fois que l'URL de SeaTable sera appelée, la connexion sera établie via le port 443 et HTTPS.

Si vous demandez à certbot de modifier automatiquement la configuration du serveur web pour inclure le certificat SSL demandé, cela ressemblera ensuite à ceci (ou à quelque chose de similaire) dans le cas de nginx :

server {
  listen 443 ssl; # managed by Certbot
  listen [::]:443 ssl; # managed by Certbot
  server_name seatable.example.com;

  ssl_certificate /etc/letsencrypt/live/seatable.example.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/seatable.example.com/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

  location / {
   proxy_pass http://127.0.0.1:880;
  }
}

Si vous avez décidé de ne pas modifier la configuration du serveur web par Let's Encrypt, vous devez effectuer cette modification manuellement. Important : n'oubliez pas le redémarrage obligatoire du serveur web par la suite.

Enfin, la conversion à HTTPS doit également être prise en compte dans deux fichiers de configuration de SeaTable. Plus précisément, ces deux fichiers de configuration sont situés dans le dossier /opt/seatable/seatable-data/seatable/conf :

  • ccnet.conf
  • dtable_web_settings.py

Dans ccnet.conf, le SERVICE_URL doit être modifié de "http://" à "https://".

Dans dtable_web_settings.py, toutes les URLs doivent être ajustées. Pour DTABLE_SERVER_URL, DTABLE_SOCKET_URL, DTABLE_WEB_SERVICE_URL et FILE_SERVER_ROOT, ajoutez un "s" après le "http" afin que toutes les URL commencent par "https".

Redémarrez SeaTable maintenant et amusez-vous avec SeaTable !