Synology [Complément] Installer Wordpress sur votre NAS Synology avec Docker

morgyann

Grand Maître Jedi
2 Février 2023
1 267
253
118
BZH
Contrairement à l’installation de Wordpress (WP) sur un navigateur Web, il y a pas mal de tutos concernant l’installation de WP avec Docker.

Ce tuto sera plus un complément à ce tuto du Blog de Marius que j’ai sélectionné (étapes pas à pas et bien illustré) – pour l’installation de WP en Docker (plus particulièrement sur un Synology mais aussi valable sur un autre OS).

Je reprendrais donc les mêmes étapes de ce tuto en apportant quelques précisions ainsi que des compléments indispensables pour le bon fonctionnement du WP :


  • Étape 2 : Installer « Éditeur de texte »

  • Étape 3 : Installer Portainer (Indispensable pour la suite du tuto ainsi que pour la maintenance de votre pile WP)

  • Étape 4 : Obtenir un certificat SSL pour votre Nom de Domaine (NDD) ou un wildcard Syno

  • Étape 5, 6, 7, 8 : Configurer le Proxy Inversé (le port proposé est le 8195 mais vous pouvez mettre un autre dans la mesure qu’il n’est pas occupé par une autre application).
Important : Retournez à Panneau de conf -> Sécurité -> Certificat et mettez en correspondance Service et Certificat (NDD = NDD).
  • Étape 11 et 12 : Créer le dossier wordpress (que vous pouvez appeler différemment si vous avez plusieurs sites en WP). Créer les sous dossiers db et redis (si vous souhaitez l’installer – si ce n’est pas le cas, il ne faudra pas mettre le script concernant redis) – Aussi, vous pouvez créer un sous dossier html dans lequel vous pouvez regrouper WP (il faudra indiquer le chemin dans votre script)

  • Étape 13 : Créer un fichier upload.ini (avec l’éditeur de texte) avec le script suivant :
Code:
file_uploads = On
memory_limit = 256M
upload_max_filesize = 512M (ou mettez 1000M si vous souhaitez)
post_max_size = 512M (ou mettez 1000M si vous souhaitez)
max_execution_time = 600

Si votre thème le nécessite, vous pouvez aussi créer un fichier php.ini (il ne faudra pas oublier d’indiquer le chemin dans le script) :
Code:
max_input_vars = 7000

  • Étape 14 : Se connecter à Portainer et ajouter une pile

  • Étape 15 : Donnez un nom à la pile et modifier à votre convenance le script (explicatif dans les parenthèses - à enlever si vous utiliser ces scripts) :
Code:
version: '3.9'
services:
  wordpress:
    image: wordpress:latest (la version php8.3 a présentée des "bugs" pour certains de mes sites)
    container_name: Monsite (nom choisi)
    hostname: monsite (nom choisi)
    healthcheck:
     test: curl -f http://localhost:80/ || exit 1
    ports:
      - 8184:80 (port choisi lors de la config du Proxy Inversé)
    depends_on:
      db:
        condition: service_started
      redis:
        condition: service_healthy
      phpmyadmin:
        condition: service_healthy
    volumes:
      - /volume1/docker/mon site:/var/www/html:rw (si vous avez créez un sous dossier html le chemin sera /volume1/docker/html/mon site)
      - /volume1/docker/monsite/uploads.ini:/usr/local/etc/php/conf.d/upload.ini:rw (chemin du fichier upload)
      - /volume1/docker/monsite/php.ini:/usr/local/etc/php/conf.d/php.ini:rw (chemin du fichier php si besoin)
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: mapomme
      WORDPRESS_DB_PASSWORD: monmotdepasse
      WORDPRESS_DB_NAME: monsite_db
    restart: on-failure:5

  db:
    image: mariadb:latest
    container_name: Monsite-DB
    security_opt:
      - no-new-privileges:true
    hostname: monsite-db

    environment:
      MYSQL_DATABASE: monsite_db
      MYSQL_USER: mapomme
      MYSQL_PASSWORD: monmotdepasse
      MYSQL_ROOT_PASSWORD: monmotdepasse
      TZ: Europe/Paris
    volumes:
      - /volume1/docker/monsite/db:/var/lib/mysql:rw
    restart: on-failure:5

  redis: (optionnel si vous souhaitez installer Redis)
    image: redis
    hostname: monsite-redis
    container_name: Monsite-REDIS
    user: 1026:100 (à vérifier)
    healthcheck:
     test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    volumes:
      - /volume1/docker/monsite/redis:/data:rw
    environment:
      TZ: Europe/Paris
    restart: on-failure:5
      
  phpmyadmin: (optionnel)
    image: phpmyadmin
    hostname: monsite-phpmyadmin
    healthcheck:
     test: curl -f http://localhost:80/ || exit 1
    container_name: Monsite-phpMyAdmin
    ports:
      - 2800:80
    environment:
     PMA_HOST: monsite-db
     PMA_PORT: 3306
    restart: on-failure:5

  • Étape 16 et 17 : Déployez la pile

Important : Depuis qques temps, les autorisations d’accès à votre dossier wordpress changent lors du déploiement de la pile – Avant de configurer, vous retournez dans File Station puis : ->docker->wordpress (ou nom donné si changement)->Propriétés (clic droit) et changer le propriétaire par votre id. Puis dans l'onglet -> Permissions (retirer les utilisateurs créés pendant le déploiement souvent des numéros) -> créer (si pas présent) -> votre id admin (control) + SYSTEM (lire+écrire) + Everyone (lire) -> Appliquer à ce dossier ... Valider.
  • Étape 19 et vous pouvez maintenant continuer le tuto référencé

CRON : Marius propose aussi en complément d'utiliser cette fonctionnalité via votre Syno plutôt que celle intégrée à WP - Cette méthode fonctionne en général bien - En revanche, certains plugins sont incompatibles avec cette manip et vous demanderont de réactiver cette fonction via le CMS WP.

Mise à jour d'images (Plus particulièrement WP et DB)
Les mises à jour d'images sont assez fréquentes sur ce type d'installation et génèrent des dysfonctionnements :

- Uploads non autorisés
-> Dans ce cas, il vous faut "re-sauvegarder" les autorisations (avec "appliquer à ce dossier ...") au niveau du dossier WP -> Propriétés -> Autorisations.

- Base de Données injoignable -> Dans ce cas, vous ouvrez Portainer -> Stacks -> wordpress -> (onglet) Editor -> (en bas de la page) Update the stack -> (sur le pop-up) repousser l'image - La pile va se redéployer et tout devrait redevenir à la normale :)
 
Dernière édition:
Dans ce cas, il vous faut "re-sauvegarder" les autorisations (avec "appliquer à ce dossier ...") au niveau du dossier WP -> Propriétés -> Autorisations.
J'ai 5 WP en Docker, et je rencontre un problème d'autorisations d'accès au dossier pour 2 d'entres eux.
C'était déjà arrivé il y a 15 jours pour l'un de ces WP : Je n'ai pas réussi à "réactiver" les autorisations d'accès (disons qu'elles sont bien activées - mais pas opérationnelles) - WP demande de se connecter en FTP pour l'accès ...
Face à cette situation, j'ai donc recréé de nouveau dossiers et redéployer ma pile via Portainer et, pas de souci, tout refonctionnait nickel ... Mais ce WE rebelotte :cry: pour ce même WP ...
Un 2ème WP m'indique dans "le bilan de santé" qu'il faut des id pour l'upload en FTP - mais tout fonctionne normalement (réinstall de la version WP - upload d'image etc.) ????
J'ai fait qques recherches rien trouvé sur le web mise à part :
Mais pour ma part : tout est OK ???

Est-ce un phénomène spécifique à Syno ??? une autorisation à rajouter sur le script de Portainer ??? Une indication à rajouter dans un fichier de WP (config php par ex) ???

J'ai regardé dans les journaux de Portainer et Container Manager - pas vu de refus d'accès tout semble "sain" ???

En attendant je vais transférer cette app sur mon 2ème Nas - voir si j'ai le même phénomène ???

Si qqu'un a des pistes "de config stables" ?
 
je rencontre un problème d'autorisations d'accès au dossier
Problème Résolu 💡 💡💡:) - Si sur votre WP en Docker - il vous est demandé de vous connecter en FTP -
- Ouvrer - File Station -> web -> wordpress -> wp-config-php (fichier) ---- Faites un clic droit et sélectionner "ouvrir avec un éditeur de texte" et ajouter (copier/coller) en bas de la page :
Code:
//**La ligne suivante permet les téléchargements directs*/
define('FS_METHOD', 'direct');

Image1.png

Il faut faire la même manip qu'indiquée sur mon tuto (voir signature) - installer WP via web station.
 
Dernière édition:
Bonjour!

je répond à ce poste car j'ai suivi le même tuto (à la base^^) et je rencontre un problème similaire.

voici tout d'abord mon yml:
Code:
version: '3.8'

services:
  wordpress:
    image: wordpress:php8.3
    container_name: portfolio-wordpress
    hostname: wordpress
    environment:
      WORDPRESS_DB_HOST: portfolio-db:3306
      WORDPRESS_DB_USER: monnom
      WORDPRESS_DB_PASSWORD: monmdp
      WORDPRESS_DB_NAME: portfolio_db
      REDIS_HOST: redis
    volumes:
      - /volume2/docker/wordpress-portfolio:/var/www/html:rw
      - /volume2/docker/wordpress-portfolio/upload/upload.ini:/usr/local/etc/php/conf.d/uploads.ini:ro
    ports:
      - 8195:80
    depends_on:
      - db
      - redis
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      retries: 3
      timeout: 10s
      start_period: 25s

  db:
    image: mariadb:10.7
    container_name: portfolio-db
    hostname: portfolio-db
    environment:
      MYSQL_ROOT_PASSWORD: unpasswordaupif
      MYSQL_DATABASE: portfolio_db
      MYSQL_USER: monnom
      MYSQL_PASSWORD: monmdp
    volumes:
      - /volume2/docker/wordpress-portfolio/db:/var/lib/mysql:rw
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]  # Vérifie que MariaDB répond via mysqladmin
      interval: 30s
      retries: 3
      timeout: 10s
      start_period: 15s

  redis:
    image: redis
    container_name: portfolio-redis
    hostname: portfolio-redis
    volumes:
      - /volume2/docker/wordpress-portfolio/redis:/data:rw
    restart: always

dans ma config j'ai juste enlevé phpmyadmin car je n'en voyais pas l'utilité et d'autres configs plus simples (et fonctionnelles !) n'utilisent que wordpress et une db

Mon problème est toujours le suivant: wordpress n'arrive pas à communiquer avec mariadb. J'ai essayé différentes versions de mariadb, j'ai essayé avec mysql aussi et le problème semble toujours l'absence de communication entre mes conteneurs, qui sont pourtant dans le même réseau créé par docker et me semblent nommés/appelés correctement.
ou j'ai un problème de permissions quelque part qui m'échappe.

Lorsque je demande les logs de mariadb j'obtiens[Warning] Access denied for user 'root'@'localhost' (using password: NO), et une erreur 500 du coté de wordpress.

Je bloque là dessus et je voulais savoir si:
_qulequ'un avait déjà rencontré ce problème
_mieux: quelqu'un a-t-il déjà résolu ce problème
_je ne passe pas par portainer car le gui de container manager me convient, portainer m'apporterait-il quelque chose ? (si ça vient de la vous pourrez pointer le doigt de la honte sur moi)

Merci !

ps:
_j'ai déjà essayé plusieurs variantes du yaml, je suis peut-être passé à coté d'une faute evidente type typo
_j'ai aussi cherché sur le forum et des forums et je n'ai rien trouvé de concluant sur mon problème
 
Mon problème est toujours le suivant: wordpress n'arrive pas à communiquer avec mariadb.
Donc tu n'arrive pas à déployer ton container correctement ?
Il y a qques années, je déployais WP en docker via la console qui à l'époque n'avait pas d'onglet "projet". donc toute la config en mode manuel.

Je fais un test avec ton fichier et je reviens ...
 
Bon ça fonctionne :p
J'ai repris exactement ton fichier (ça tombait bien mon dossier docker est aussi sur le Vol 2 sur mon Nas de test) que j'ai réduit au mini à savoir juste le html et la DB (jute en sous dossier).

Code:
version: '3.8'

services:
  wordpress:
    image: wordpress:php8.3
    container_name: portfolio-wordpress
    hostname: wordpress
    environment:
      WORDPRESS_DB_HOST: portfolio-db
      WORDPRESS_DB_USER: monnom
      WORDPRESS_DB_PASSWORD: monmdp
      WORDPRESS_DB_NAME: portfolio_db
    volumes:
      - /volume2/docker/wordpress-portfolio:/var/www/html:rw
    ports:
      - 8195:80
    depends_on:
      - db
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      retries: 3
      timeout: 10s
      start_period: 25s

  db:
    image: mariadb:10.7
    container_name: portfolio-db
    hostname: portfolio-db
    environment:
      MYSQL_ROOT_PASSWORD: unpasswordaupif
      MYSQL_DATABASE: portfolio_db
      MYSQL_USER: monnom
      MYSQL_PASSWORD: monmdp
    volumes:
      - /volume2/docker/wordpress-portfolio/db:/var/lib/mysql:rw
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]  # Vérifie que MariaDB répond via mysqladmin
      interval: 30s
      retries: 3
      timeout: 10s
      start_period: 15s

et 🥁🥁🥁🥁🥁🥁🥁🥁🥁

wp test.png

Bon la soluce : tu enlèves le port 3306 pour la DB (ce que j'ai fait de suite fait quand j'ai rectifié ton yml).
 
Wow tu as été hyper réactif merci beaucoup!!!

j'ai copié/collé ton fichier, pour refaire la config avec les mdp et tout ça après et surprise! ça marche toujours pas sur mon nas 😅

du coup j'ai testé la config sur mon pc, et là via localhost:8195 j'arrive à accéder à l'interface de wordpress 🤯

je dois avoir un problème de permissions quelque part, quand je sors les logs de db j'ai:
2025-01-24 13:43:09 3 [Warning] Access denied for user 'root'@'localhost' (using password: NO)
et wordpress:
127.0.0.1 - - [24/Jan/2025:13:40:42 +0000] "GET / HTTP/1.1" 500 2738 "-" "curl/7.88.1"

j'avoue que je bloque un peu, mais déjà savoir que ça peut marcher m'avance beaucoup!
je vais tenter la technique ancestrale dite du "redémarrage" voir si ça arrange quoi que ce soit
 
j'ai testé la config sur mon pc, et là via localhost:8195
Bah oui :rolleyes: tu accèdes en iplocal:8195 donc type http://192.168.1.3:8195 vu que c'est le port d'accès qui est indiqué ;)

Maintenant, il faut que tu le mette en https sur un NDD (ou DDNS ou Wildcard) avant d'entamer la config. sinon tu auras des soucis notamment pour la connexion à des plugins externes.
 
Bah oui :rolleyes: tu accèdes en iplocal:8195 donc type http://192.168.1.3:8195 vu que c'est le port d'accès qui est indiqué ;)

Maintenant, il faut que tu le mette en https sur un NDD (ou DDNS ou Wildcard) avant d'entamer la config. sinon tu auras des soucis notamment pour la connexion à des plugins externes.
j'ai du mal m'exprimer, j'ai voulu tester voir si la config marchait sur un autre support, mon pc, sur lequel j'ai fait tourner mon conteneur! j'ai juste mis un chemin absolu dans les volumes ("./wordpress") pour pas m'embêter et j'ai lancé le yaml.
Et ça marche bien depuis docker sous windows, j'ai donc bien un soucis sur le nas qui empêche les conteneurs de communiquer (en tout cas il me semble).

Par contre j'ai toujours pas de retour coté nas: iplocale:8195 me donne les mêmes résultats que les logs à savoir "Error establishing a database connection".
Evidemment le but est de faire tourner wordpress sur mon nas donc c'est une bonne info de savoir que ça tourne sur le pc, mais pas sur le nas, maintenant il me faut savoir pourquoi

Après ça devrait rouler pour le reverse proxy avec mon ndd et un certificat, j'ai déjà des conteneurs accessibles comme ça.
 
j'ai donc bien un soucis sur le nas qui empêche
As-tu redémarré à zéro sur le Nas à savoir supprimer les dossiers et recréer de nouveau ?
Sur la console Docker les voyants sont-ils au vert ?

wptest1.pngwptest2.png
que ça tourne sur le pc
Oui tu peux installer Docker, sous la plupart des OS.
Tu devrais avoir sur ton navigateur pour le PC par ex : 192.168.1.4:8195 et pour le Nas par ex : 192.168.1.3:8195

Sinon quand tu re-déploies ton app sur le Nas - il est impératif que tes dossiers soient "neufs".

Après le déploiement, vérifie les propriétés du dossier.
 
Je viens de regarder et même si j'ai toujours accès à la conf de WP, mes autorisations ont sautées pour un inconnu le "33" et je sais que cela va me poser problème par la suite :mad: Déjà noté en gras dans le premier poste du tuto et n'ai toujours pas trouvé la soluce de problème lors du déploiement :unsure:

wptest3.png
wptest4.png

Donc je rectifie tout cela 👷‍♂️👷‍♂️

wptest5.png
wptest6.png

Et j'ai toujours accès, à ma page de conf de WP - mais pour la suite, il est indispensable d'avoir les bonnes autorisations.
 
As-tu redémarré à zéro sur le Nas à savoir supprimer les dossiers et recréer de nouveau ?
Sur la console Docker les voyants sont-ils au vert ?
oui je supprime tous les dossiers à chaque essai
Le voyant de wordpress passe au bout d'une minute en orange quand le conteneur n'arrive pas à se connecter à db (erreur 500); le voyant de db reste au vert mais les logs montrent que quelque chose ne va pas: [Warning] Access denied for user 'root'@'localhost' (using password: NO)


Tu devrais avoir sur ton navigateur pour le PC par ex : 192.168.1.4:8195 et pour le Nas par ex : 192.168.1.3:8195
je commence à pas trop mal maitriser les notions de base, je voulais juste dire que j'ai essayé sur une autre config pour essayer de diagnostiquer.
Le fait que ça tourne ailleurs me montre bien que le problème ne provient probablement pas du yaml en lui-même, mais d'un problème de configuration quelque part sur le nas en lui même.
Et évidemment je voudrais bien mettre mon site sur le nas.

J'ai aussi essayé de faire tourner différentes configs (version de db; mysql), et à chaque fois je me retrouve avec l'erreur 500 dans mes logs qui veut dire que wordpress ne se connecte pas à la DB, et ma db qui me renvoie aussi une erreur.


je viens d'aller voir les autorisations et effectivement j'ai bien un petit nouveau nommé 33 qui est propriétaire du dossier wordpress aussi^^ je me suis remis comme propriétaire mais ça ne semble pas changer grand chose
 
Dernière édition:
ne se connecte pas à la DB, et ma db qui me renvoie aussi une erreur.
Tu as bien supprimé le port 3306 sur ton script ?

Éventuellement, essaie par Portainer - tu n'es pas le premier sur ce Forum qui n'arrive pas à accéder/afficher la page web ?

J'ai l'impression que sur Syno depuis maintenant au moins 6 mois, il y a un "bug" au niveau de Docker (les autorisations sautent soient à la création et/ou en cours de route). Bug que je ne constate pas sur d'autres machines (comme dans ton cas).
 
  • J'aime
Réactions: Furet
J'ai bien supprimé le :3306 de mon script, rien n'y fait 😅

J'ai l'impression que sur Syno depuis maintenant au moins 6 mois, il y a un "bug" au niveau de Docker (les autorisations sautent soient à la création et/ou en cours de route). Bug que je ne constate pas sur d'autres machines (comme dans ton cas).
c'est là le problème, tous les tutos ou guides que j'ai suivi sont tout simples et marchent, comme sur mon pc
Dès que je suis sur le syno, c'est la galère^^ visiblement personne n'a rencontré ce problème ailleurs, ou en tout cas personne n'en a fait part, et j'ai pas d'info sur les codes erreurs

Je me tate presque à faire un ticket aupres de syno parce que si on peut faire tourner que des conteneurs sans instances, on est très vite limités quand même.
Mais vu le nombre de tutos ici, sur cachem et partout sur les internet, je dois être le seul ou presque dans ce cas.
Je me souviens maintenant avoir eu la même galère pour installer paperless-ngx... et j'avais laissé tombé, j'en avais la curiosité mais pas l'utilité!

Donc je me dit que c'est ma config sur syno quelque part qui bug, mais où ? je sais pas du tout !
 
je dois être le seul ou presque dans ce cas.
Non pas tout seul - j'ai déjà fait plusieurs postes sur ce Forum pour signaler ce "bug" qui semble spécifique à Syno - pas vu ce phénomène pour les autre marques et autres types de machines - mais jamais aucun retour des autres membres.
Pour ma part, j'ai 5 WP en prod (et un grand nombre de services web) - j'avoue que j'en ai un peu marre d'aller sous le capot pour relancer les autorisations qui n'arrêtent pas de sauter. Face à ce souci, je réfléchie actuellement pour transférer l'intégralité de mes docker sur une autre machine :unsure:
faire un ticket aupres de syno
Si tu fais ce ticket, ton retour sera le bienvenue.
 
ahah oui j'aime bien utiliser docker parce que ça me facilite la vie habituellement, mais si tu dois à chaque fois faire des pieds et des mains pour que ça marche ç perd une partie de son intérêt!!


Si tu fais ce ticket, ton retour sera le bienvenue.
promis si j'ai des news je reviens les poster !
Merci pour le coup de main tout cas, on a fait tout ce qu'on a pu!
 
  • J'aime
Réactions: morgyann