{"id":80,"date":"2021-02-20T14:17:23","date_gmt":"2021-02-20T13:17:23","guid":{"rendered":"https:\/\/www.webdot.fr\/blog\/?p=80"},"modified":"2021-04-30T10:26:11","modified_gmt":"2021-04-30T08:26:11","slug":"installation-dun-serveur-apache-en-docker","status":"publish","type":"post","link":"https:\/\/www.webdot.fr\/blog\/2021\/02\/installation-dun-serveur-apache-en-docker\/","title":{"rendered":"Installation d&rsquo;un serveur Apache en docker sur un NAS ASUSTOR"},"content":{"rendered":"\n<p>Comme je l&rsquo;ai expliqu\u00e9 dans un post pr\u00e9c\u00e9dent, il est impossible pour l&rsquo;instant d&rsquo;utiliser le serveur natif d&rsquo;ADM car il emp\u00eache l&rsquo;utilisation correcte de Traefik. Le probl\u00e8me, c&rsquo;est qu&rsquo;il mobilise les ports 80 et 443, et si on le d\u00e9sactive, ADM lance automatiquement un autre serveur lighttpd qui prend la main sur ces ports et <a rel=\"noreferrer noopener\" href=\"https:\/\/forum.asustor.com\/viewtopic.php?f=23&amp;t=9939&amp;hilit=traefik\" target=\"_blank\">emp\u00eache le lancement de Traefik<\/a>.<\/p>\n\n\n\n<p>Il existe malgr\u00e9 tout un moyen de s&rsquo;en sortir <strong>en routant les ports externes 80 et 443 de votre box internet sur des ports internes  non utilis\u00e9s du NAS, par exemple 49 et 889<\/strong>. Ces ports peuvent ensuite \u00eatre introduits dans le docker Traefik, sur ses ports internes 80 et 443. Enfin, dans Traefik, on peut renvoyer les ports 80 et 443 sur le serveur Apache du NAS. Entre-temps, on sera pass\u00e9 par Traefik qui aura jou\u00e9 son r\u00f4le b\u00e9n\u00e9fique de reverse proxy.<\/p>\n\n\n\n<p>Si malgr\u00e9 tout vous souhaitez installer un serveur Apache en docker, voici les choses \u00e0 faire ci-dessous. <\/p>\n\n\n\n<p>J&rsquo;ai  cr\u00e9\u00e9 un fichier de configuration pour d\u00e9ployer un docker Apache destin\u00e9 \u00e0 remplacer le serveur natif. Voici le fichier en question :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Dockerfile\nFROM php:7.4-apache\nADD https:\/\/github.com\/mlocati\/docker-php-extension-installer\/releases\/latest\/download\/install-php-extensions \/usr\/local\/bin\/\nRUN chmod +x \/usr\/local\/bin\/install-php-extensions &amp;&amp; sync &amp;&amp; \\\ninstall-php-extensions sockets bz2 mcrypt opcache mysqli gd xdebug zip pdo_mysql intl ldap imap bcmath gmp exif apcu memcached imagick pcntl redis smbclient\nRUN mv \"$PHP_INI_DIR\/php.ini-production\" \"$PHP_INI_DIR\/php.ini\"\nRUN a2enmod rewrite\nRUN apt-get update\nRUN apt-get upgrade -y\nRUN apt-get install -y libimage-exiftool-perl imagemagick poppler-utils libjpeg-turbo-progs ffmpeg<\/code><\/pre>\n\n\n\n<p>L&rsquo;image est cr\u00e9\u00e9e \u00e0 partir de l&rsquo;image existante \u00ab\u00a0php:7.4-apache\u00a0\u00bb, il s&rsquo;agit en fait d&rsquo;une image de PHP mais qui tourne \u00e9videmment sur Apache2. L\u00e0-dessus, j&rsquo;ajoute les extensions php n\u00e9cessaires au bon fonctionnement des applications\/services que je souhaite utiliser, en particulier <em>Nextcloud<\/em> et <em>Roundcubemail<\/em>. C&rsquo;est l&rsquo;objet des lignes \u00ab\u00a0ADD\u00a0\u00bb et de la ligne :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RUN chmod +x \/usr\/local\/bin\/install-php-extensions &amp;&amp; sync &amp;&amp; \\\ninstall-php-extensions sockets bz2 mcrypt opcache mysqli gd xdebug zip pdo_mysql intl ldap imap bcmath gmp exif apcu memcached imagick pcntl redis smbclient<\/code><\/pre>\n\n\n\n<p>La ligne suivante permet d&rsquo;activer la configuration d&rsquo;Apache et de PHP du docker.<\/p>\n\n\n\n<pre id=\"block-0b46d062-bd46-4eda-a440-1903974cf595\" class=\"wp-block-code\"><code>RUN mv \"$PHP_INI_DIR\/php.ini-production\" \"$PHP_INI_DIR\/php.ini\"\nRUN a2enmod rewrite<\/code><\/pre>\n\n\n\n<p>Enfin les lignes en fin de fichier permettent de finaliser l&rsquo;installation avec des programmes \u00e0 installer dans le syst\u00e8me du docker :<\/p>\n\n\n\n<pre id=\"block-0b46d062-bd46-4eda-a440-1903974cf595\" class=\"wp-block-code\"><code>RUN apt-get update\nRUN apt-get upgrade -y\nRUN apt-get install -y libimage-exiftool-perl imagemagick poppler-utils libjpeg-turbo-progs ffmpeg<\/code><\/pre>\n\n\n\n<p>La derni\u00e8re ligne sert \u00e0 installer dans l&rsquo;image des packages n\u00e9cessaires \u00e0 l&rsquo;utilisation de Nextcloud. Vous pouvez ici ajouter les packages qui seraient n\u00e9cessaires \u00e0 l&rsquo;utilisation d&rsquo;une autre application, l&rsquo;image sera g\u00e9n\u00e9r\u00e9e avec le package et sera compatible avec ladite application.<\/p>\n\n\n\n<p>Il suffit alors de lancer la commande suivante pour cr\u00e9er l&rsquo;image Apache :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@astorus:\/volume1\/Docker\/Traefik# docker build -t apache .<\/code><\/pre>\n\n\n\n<p>Et pour lancer le container, la commande suivante permettra de &#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>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<\/code><\/pre>\n\n\n\n<p>Dans l&rsquo;ordre, cette commande :<\/p>\n\n\n\n<ul><li>nomme le container \u00ab\u00a0Apache\u00a0\u00bb<\/li><li>\u00e9tablit la police de red\u00e9marrage \u00e0 \u00ab\u00a0always\u00a0\u00bb (au cas o\u00f9 le serveur \u00ab\u00a0tombe\u00a0\u00bb)<\/li><li>monte le r\u00e9pertoire Web du NAS (\/volume1\/Web) dans le r\u00e9pertoire du container (\/var\/www\/html)<\/li><li>lie le fichier \/volume1\/Docker\/Apache2\/php.ini au fichier du docker \/usr\/local\/etc\/php\/php.ini, pour conserver les modifications qu&rsquo;on peut faire dans ce fichier : si on l&rsquo;\u00e9dite dans le r\u00e9pertoire du NAS, il sera conserv\u00e9 et utilis\u00e9 en lieu et place du fichier php.ini du docker \u00e0 son lancement<\/li><li>lie pour les m\u00eames raisons que ci-dessus le fichier 000-default.conf \u00e0 son homologue dans le container<\/li><li>lie le port interne du docker (80) \u00e0 un port du syst\u00e8me (j&rsquo;ai choisi 28800)<\/li><\/ul>\n\n\n\n<p>Et normalement, on doit voir appara\u00eetre le docker dans Portainer :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"26\" src=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-1024x26.png\" alt=\"\" class=\"wp-image-84\" srcset=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-1024x26.png 1024w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-300x8.png 300w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-768x20.png 768w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3-590x15.png 590w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-3.png 1338w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"691\" src=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-6-1024x691.png\" alt=\"\" class=\"wp-image-88\" srcset=\"https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-6-1024x691.png 1024w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-6-300x203.png 300w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-6-768x519.png 768w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-6-444x300.png 444w, https:\/\/www.webdot.fr\/blog\/wp-content\/uploads\/2021\/02\/image-6.png 1355w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comme je l&rsquo;ai expliqu\u00e9 dans un post pr\u00e9c\u00e9dent, il est impossible pour l&rsquo;instant d&rsquo;utiliser le serveur natif d&rsquo;ADM car il emp\u00eache l&rsquo;utilisation correcte de Traefik. Le probl\u00e8me, c&rsquo;est qu&rsquo;il mobilise les ports 80 et 443, &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,7],"tags":[],"_links":{"self":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts\/80"}],"collection":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/comments?post=80"}],"version-history":[{"count":12,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts\/80\/revisions"}],"predecessor-version":[{"id":490,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/posts\/80\/revisions\/490"}],"wp:attachment":[{"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/media?parent=80"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/categories?post=80"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webdot.fr\/blog\/wp-json\/wp\/v2\/tags?post=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}