Installation d’un serveur Apache en docker sur un NAS ASUSTOR

Un point très gênant de ce NAS, qui par ailleurs est très satisfaisant, c’est la gestion du serveur web natif d’ADM. En effet, c’est un serveur Apache qui est lancé à chaque démarrage, et qui est contrôlé par l’interface ADM :

Comme je l’ai expliqué dans un post précédent, il est impossible pour l’instant d’utiliser le serveur natif d’ADM car il empêche l’utilisation correcte de Traefik. Le problème, c’est qu’il mobilise les ports 80 et 443, et si on le désactive, ADM lance automatiquement un autre serveur lighttpd qui prend la main sur ces ports et empêche le lancement de Traefik :

J’ai donc créé un fichier de configuration pour déployer un docker Apache destiné à remplacer le serveur natif. Voici le fichier en question :

# Dockerfile
FROM php:7.4-apache
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions sockets bz2 mcrypt opcache mysqli gd xdebug zip pdo_mysql intl ldap imap bcmath gmp exif apcu memcached imagick pcntl redis smbclient
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php/php.ini"
RUN a2enmod rewrite
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y libimage-exiftool-perl imagemagick poppler-utils libjpeg-turbo-progs ffmpeg

L’image est créée à partir de l’image existante « php:7.4-apache ». Là-dessus, j’ajoute les extensions php nécessaires au bon fonctionnement des applications/services que je souhaite utiliser, en particulier Nextcloud et Roundcubemail. C’est l’objet des lignes « ADD » et de la ligne :

RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions sockets bz2 mcrypt opcache mysqli gd xdebug zip pdo_mysql intl ldap imap bcmath gmp exif apcu memcached imagick pcntl redis smbclient

La ligne suivante permet d’activer la configuration d’Apache et de PHP du docker.

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php/php.ini"
RUN a2enmod rewrite

Enfin les lignes en fin de fichier permettent de finaliser l’installation avec des programmes à installer dans le système du docker :

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y libimage-exiftool-perl imagemagick poppler-utils libjpeg-turbo-progs ffmpeg

Il suffit alors de lancer la commande suivante pour créer l’image Apache :

root@astorus:/volume1/Docker/Traefik# docker build -t apache .

Et pour lancer le container, la commande suivante permettra de …

root@astorus:/volume1/Docker/Traefik# docker run -d --name Apache --restart always --mount type=bind,source=/volume1/Web,target=/var/www/html --mount type=bind,source=/volume1/Docker/Apache2/php.ini,target=/usr/local/etc/php/php.ini --mount type=bind,source=/volume1/Docker/Apache2/000-default.conf,target=/etc/apache2/sites-available/000-default.conf -p 28800:80 apache:latest

Dans l’ordre, cette commande :

  • nomme le container « Apache »
  • établit la police de redémarrage à « always » (au cas où le serveur « tombe »)
  • monte le répertoire Web du NAS (/volume1/Web) dans le répertoire du container (/var/www/html)
  • lie le fichier /volume1/Docker/Apache2/php.ini au fichier du docker /usr/local/etc/php/php.ini, pour conserver les modifications qu’on peut faire dans ce fichier : si on l’édite dans le répertoire du NAS, il sera conservé et utilisé en lieu et place du fichier php.ini du docker à son lancement
  • lie pour les mêmes raisons que ci-dessus le fichier 000-default.conf à son homologue dans le container
  • lie le port interne du docker (80) à un port du système (j’ai choisi 28800)

Et normalement, on doit voir apparaître le docker dans Portainer :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *