QNAP [Tuto] Installation de Wordpress + MariaDB + Adminer en Docker sur un NAS QNAP ( Container Station )

EVO

Administrateur
Membre du personnel
25 Novembre 2019
10 742
2 367
288
/var/run/docker.sock
Installation de Wordpress + MariaDB + Adminer en Docker sur un NAS QNAP ( Container Station )

Wordpress, c'est quoi ?
WordPress est un outil de blogging gratuit et open source et un système de gestion de contenu (CMS) basé sur PHP et MySQL, qui fonctionne sur un service d'hébergement web.. Plus d'info sur le site officiel : fr.wordpress.org

MariaDB, c'est quoi ?
Le serveur MariaDB est l'un des serveurs de bases de données les plus populaires au monde. Il a été conçu par les développeurs originaux de MySQL et garantit le maintien de l'open source. Plus d'info sur le site officiel : mariadb.org
Note : Pour le déploiement de MariaDB dans ce tutoriel, nous allons utiliser l'image linuxserver/mariadb.

Adminer, c'est quoi ?
Adminer (anciennement phpMinAdmin) est un outil de gestion de base de données complet écrit en PHP. Plus d'info sur le site officiel : adminer.org/


Disclamer :
Le but de ce tuto sera de rendre cette installation facile et accessible a tous, bien que loin d’être un expert, n’hésiter pas à répondre à ce sujet avec vos interrogations, .. Pour ceux qui sont plus a l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...

Pré-requis :
- Un NAS QNAP compatible avec Container Station ( Voir : [Mémo] Installation de Container Station sur un NAS QNAP )
- Cette stack est compatible avec les CPUs de type : AMD64, ARM64v8, ARMv7

Sommaire :
1/ Récupération de l'ID de votre utilisateur
2/ Création des conteneurs
4/ Accès et 1ère configuration de Wordpress
5/ Accès a Adminer




1/ Récupération de l'ID de votre utilisateur

Récupérer l'ID de votre utilisateur : [Mémo] Connaitre l'UID ( ou ID ou PUID ) d'un utilisateur sur un NAS QNAP




2/ Création des conteneurs

Dans la fenêtre de création d'application :
- Indiquer le nom de l'application ( au choix ), dans mon cas j'indique "wordpress_mariadb".
- Le code YAML :

YAML:
services:
  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8989:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - /share/Container/wordpress/html:/var/www/html
    depends_on:
      db:
        condition: service_healthy

  db:
    image: lscr.io/linuxserver/mariadb:latest
    restart: always
    environment:
      PUID: 1000
      PGID: 100
      TZ: Europe/Paris
      MYSQL_ROOT_PASSWORD: ROOT_ACCESS_PASSWORD
      MYSQL_DATABASE: wordpress
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
    volumes:
      - /share/Container/wordpress/mariadb:/config
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
      start_period: 15s
      interval: 60s
      timeout: 10s
      retries: 3

  adminer:
    image: adminer
    restart: always
    ports:
      - 9090:8080

1753434718266.png

Dans ce code, il y a plusieurs choses a modifier :

Tout d’abord, le lieu de stockage des fichiers, j'ai choisi de tout placer dans un dossier "wordpress" dans le dossier partagé "Container" par défaut de Container Station. Mais vous pouvez le changer si vous le souhaitez :
- /share/Container/wordpress/html:/var/www/html, dans cette ligne modifier la 1ere partie avant les : pour que cela correspond au chemin absolu vers le répertoire ou vous souhaitez stocker la configuration de Wordpress.
- /share/Container/wordpress/mariadb:/config, dans cette ligne modifier la 1ere partie avant les : pour que cela correspond au chemin absolu vers le répertoire ou vous souhaitez stocker la configuration de MariaDB.

Nous allons reporter le PUID trouvé lors de l'étape 1 du tutoriel.
Dans la ligne :
- PUID=1000 remplacer 1000 pour le PUID trouvé au point 1.

A deux endroits dans le compose, nous allons retrouver : exampleuser et examplepass.
- A la place de exampleuser , choisissez un nom d'utilisateur pour la base de donnée, et remplacer au deux endroits du compose exampleuser par le nom d'utilisateur voulu.
- A la place de examplepass, choisissez un mot de passe pour la base de donnée, et remplacer au deux endroits du compose examplepass par le mot de passe voulu.

Dernière étape de personnalisation du compose ! Modifier dans le compose ROOT_ACCESS_PASSWORD par un mot de passe de votre choix, cela sera le mot de passe "root" de la base de données.

et on clique sur créer pour lancer la création du conteneur !

Container Station va en 1er télécharger les images des conteneurs, puis créer la DB et Adminer, ensuite il va attendre que la DB soit "ok", et lancer Wordpress ( cela peut prendre quelques minutes ).
1753434829097.png


Après une bonne dizaine de minutes ...
1753435773832.png

Dans l'onglet présentation que l'état est "vert", notre stack est en fonctionnement !
1753435840136.png




3/ Accès et 1ere configuration de Wordpress

Depuis votre navigateur, il vous suffit maintenant de taper l'adresse ip de votre NAS suivi du port 8989 pour se connecter a l'interface Web de Wordpress.
Exemple : Si l'ip de votre NAS est 192.168.0.20 alors l'adresse est http://192.168.0.20:8989


Dans mon cas, l'IP de mon NAS est 192.168.1.170, donc j'utilise http://192.168.1.170:8989

Je sélectionne Français, puis "Continuer"
1753435878724.png

Je renseigne un titre pour mon site, un pseudo et un mot de passe qui me serviront pour la connexion a l'interface d'administration de Wordpress, et un mail.
Enfin je clique sur "Installer Wordpress"
1753435922374.png

Wordpress m'indique que tout est bon, je clique sur "Se connecter" pour m'identifier :
1753435980786.png

Et j'arrive sur l'interface de gestion de Wordpress :)
1753436026147.png




4/ Accès a Adminer

Depuis votre navigateur, il vous suffit maintenant de taper l'adresse ip de votre NAS suivi du port 9090 pour se connecter a l'interface Web de Adminer.
Exemple : Si l'ip de votre NAS est 192.168.0.20 alors l'adresse est http://192.168.0.20:9090

Pour plus d'info sur l'utilisation d'Adminer, rendez vous ici : Utiliser Adminer pour administrer votre base MariaDB10 sur un NAS QNAP



2025-07-25 - clarification du point 1, correction orthographique, ajout d'image, modification du point 3 pour montrer la 1ere configuration
2023-02-24 - Création
 
Dernière édition:
Bonjour et merci pour cet excellent tuto,

J'arrive à bien me connecter à mon wordpress en iplocal:8989, mais je n'arrive pas à me connecter depuis myqnapcloud
De plus lorsque je fais http://monNAS.myqnapcloud.com, il pointe vers un fichier html dans /web/index.html

image_2023-02-26_133904889.png
En rajoutant les ports :8989 ou :8989/wordpress j'ai un timeout

image_2023-02-26_134112424.png


Autre détail de moindre importance, les liens Adminer et wordpress on disparu, je peux quand même accéder à ma base adminer et wordpress en entrant l'URL. La seule chose que j'ai fait est d'avoir installé Qsync et HybridMount
image_2023-02-26_135227903.png
 
Dernière édition:
Salut,
Il te faut ouvrir le port 8989 dans ta box pour y accéder via ton nom de domaine myqnapcloud et indiquer ce port en fin d'url

Myqnapcloud ne gère pas les sous domaine/reverse proxy donc soit tu expose le port comme au dessus, soit tu désactive le webserveur et tu recréer le conteneur WordPress en exposant le port 443 au lieu de 8989
 
  • J'aime
Réactions: pierre75
j'avais mis le port 89 et non 8989
Merci beaucoup
 
Dernière édition:
Bonjour,
Tu peux suivre mon tutorial pour le Reverse Proxy si tu veux. (voir ma signature en dessous)
 
UPDATE ! Clarification du point 1, correction orthographique, ajout d'image, modification du point 3 pour montrer la 1ere configuration
 
Pour ceux qui sont plus a l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...
Salut @EVO ,

Quelques modifs à opérer pour que cela fonctionne aux petits oignons :

1. L'image doit être (à ce jour) wordpress : php8.4
L'image wordpress: lastest à (actuellement) une version de php périmée et WP le signalera.
2. Il faut ajouter l'image redis:latest
Puis la lier avec l'extention sur WP (par le fichier "wp-config.php")
3. Rajouter 2 fichiers .ini --> 1 pour définir l'upload des fichiers (Important) - 1 pour php.ini (facultatif pour certains thémes)
4. Il est conseillé d'activer WP directement sur un NDD en https (Proxy Inversé) - les modifs à opérer par la suite sont compliquées et délicates. Acriver WP sur un port en http posera rapidement des soucis (activation des extensions et thémes, validité au niveau du navigateur etc) - sauf si c'est pour du Lab.

J'enverai les fichiers complémentaires et les manips à opérer ce soir ;)
 
  • J'aime
Réactions: EVO
Bonjour,
Je débute en matière de Container Station, sur Qnap
Je suis en train d'essayer de comprendre comment installer effectivement Wordpress, notamment
J'ai donc essayé de suivre ce tuto, mais il y a plusieurs choses que je ne comprends pas, ou que je ne vois pas
En l’occurrence, il s'agit de l'accès à la bdd, car visiblement, je n'ai pas la possibilité de voir le fichier YAML, et donc, j'ignore totalement le nom d'utilisateur et mot de passe (même si à priori, il s'agit utilisateur PUID que j'ai retrouvé bien sûr, et le mot de passe que j'utilise sur le NAS)
J'ai fait une installation somme toute classique, sans passer par le mode avancé

Est-ce que quelqu'un peut m'aider ?
Merci beaucoup
 
Dans le fichier YAML de ce tuto, dans cette partie tu as la base de données et ses logins/mot de passe que tu peux changer :

Capture_2025-08-17_12-52-56.png
 
Bon, j'avance très petitement, mais quand même
J'ai fini par comprendre comment on devait faire pour faire une installation "personnalisée"
En fait, j'avais cliqué sur "create container", et non dans application "create"
Par contre, en remplissant mes données, pour avoir mon nom d'utilisateur, mot de passe, mot de passe root, et PUID, ça lane l'installation, et ça bloque à 89%
D'autre part, il n'y a pas, contrairement à l'installation par container par défaut le lien style http:19.168.0.3:8989
Bref, pour le moment, je nage
Message automatiquement fusionné :

Enfin, je ne comprends pas trop tout cela :

Salut @EVO ,

Quelques modifs à opérer pour que cela fonctionne aux petits oignons :

1. L'image doit être (à ce jour) wordpress : php8.4 ===> j'en conclue que je dois mettre wordpress: php8.4 au début du YALM
L'image wordpress: lastest à (actuellement) une version de php périmée et WP le signalera.
2. Il faut ajouter l'image redis:latest ===> j'en conclue que je dois mettre redis:latest en dessous des informations wordpress ci-dessus
Puis la lier avec l'extention sur WP (par le fichier "wp-config.php") ====> comment fait on cela ?
3. Rajouter 2 fichiers .ini --> 1 pour définir l'upload des fichiers (Important) - 1 pour php.ini (facultatif pour certains thémes) ===> quel fichier .ini ?
4. Il est conseillé d'activer WP directement sur un NDD en https (Proxy Inversé) - les modifs à opérer par la suite sont compliquées et délicates. Acriver WP sur un port en http posera rapidement des soucis (activation des extensions et thémes, validité au niveau du navigateur etc) - sauf si c'est pour du Lab.

J'enverai les fichiers complémentaires et les manips à opérer ce soir ;)
 
Bon, pour le moment, rien ne fonctionne
Je pense qu'il faudrait que je fasse des print ecran au fur et à mesure, ou bien que je sois guidé pas à pas en direct
Mais, là, quand je suis le tuto, j'ai bien, à priori, les installations de wordpress, de mariadb, et adminer qui s'effectuent, mais ensuite, je n'ai absolument accès à rien, quand je met http://mon.ip.perso:8989
ça me donne une page d'erreur

Il me manque une info, ou je ne sais quoi

Mon but, après, c'est plusieurs choses :
- Héberger plusieurs sites internet en local mais visibles en internet
- installer probablement owncloud (car je voudrai me débarrasser de dropbox et google drive, pour partager avec mes collègues et/ou amis des fichiers, tout comme google drive, sans les contraintes de place)
- peut-être d'autres choses, suivant les conseils que je pourrai avoir, et les tests que je pourrai avoir vu ou trouvé sur le net
 
Modification par rapport à mon précèdent post :

Bon, pour le moment, ça fonctionne, mais pas avec php8.4 à priori, mais je suis en php 8.2, car ça ne fonctionnait pas en mettant wordpress: php8.4
Je pense qu'il faudrait que je fasse des print ecran au fur et à mesure, ou bien que je sois guidé pas à pas en direct
Il me faudrait réussir à mettre la dernière version de wordpress (je suis avec la 6.8.2) ainsi que la dernière version de php
Est-ce possible sans réinstaller ?

J'ai ça comme informations aussi : Limites de mémoire: WordPress 40MB / Admin WordPress 256MB / PHP 128MB
Cela me semble plutôt faible non ?

Mon but, après, c'est plusieurs choses :
- Héberger plusieurs sites internet en local mais visibles en internet
- installer probablement owncloud (car je voudrai me débarrasser de dropbox et google drive, pour partager avec mes collègues et/ou amis des fichiers, tout comme google drive, sans les contraintes de place)
- peut-être d'autres choses, suivant les conseils que je pourrai avoir, et les tests que je pourrai avoir vu ou trouvé sur le net
 
Mon but, après, c'est plusieurs choses :
- Héberger plusieurs sites internet en local mais visibles en internet
Bonjour,
J'essaierai de trouver le temps de faire un tuto spé à WP en Docker avec un YAML à adapter pour les consoles ou pour Portainer - mais actuellement je suis en plein transfert d'apps (dont 4 WP) d'un serveur à un autre puis, d'un autre au précedent. bref pas trop de temps tout de suite.
Allez je prends 2 mn : (en revanche je viens de prendre un script que j'ai adapté spé pour Casa/ZimaOS - dès que j'ai + de temps je le "renormaliserais" en script classique. celà donne les images actuelles qui fonctionne bien et l'articulation (mais qi tu débutes, tu risques de pas tout comprendre).
Perso, je ne trouve pas très utile d'ajouter une image de gestion de DB (type PhpMyAdmin ou Adminer) - autant sur un serveur web classique c'est utile mais en Docker je n'en ai jamais eu l'utilité).

Code:
name: monwp
services:
  db:
    cpu_shares: 90
    command: []
    container_name: monwp-db
    deploy:
      resources:
        limits:
          memory: 31837M
    environment:
      - MARIADB_DATABASE=monwp_db
      - MARIADB_PASSWORD=Monpasse
      - MARIADB_ROOT_PASSWORD=Monpasse
      - MARIADB_USER=morgyann
    image: mariadb:latest
    labels:
      icon: https://cdn.jsdelivr.net/gh/Cp0204/CasaOS-AppStore-Play@main/Apps/wordpress/icon.png
    restart: unless-stopped
    volumes:
      - type: bind
        source: /DATA/AppData/monwp/db
        target: /var/lib/mysql
    ports: []
    devices: []
    cap_add: []
    networks:
      - monwp
    privileged: false
  redis:
    cpu_shares: 90
    command: []
    container_name: monwp-redis
    deploy:
      resources:
        limits:
          memory: 31837M
    image: redis:latest
    labels:
      icon: https://cdn.jsdelivr.net/gh/Cp0204/CasaOS-AppStore-Play@main/Apps/wordpress/icon.png
    restart: unless-stopped
    volumes:
      - type: bind
        source: /DATA/AppData/monwp/redis
        target: /data
    ports: []
    devices: []
    cap_add: []
    environment: []
    networks:
      - lesco
    privileged: false
  web:
    cpu_shares: 90
    command: []
    container_name: monwp-web
    deploy:
      resources:
        limits:
          memory: 31837M
        reservations:
          memory: "536870912"
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_NAME=monwp_db
      - WORDPRESS_DB_PASSWORD=Monpasse
      - WORDPRESS_DB_USER=morgyann
    image: wordpress:php8.4
    labels:
      icon: https://cdn.jsdelivr.net/gh/Cp0204/CasaOS-AppStore-Play@main/Apps/wordpress/icon.png
    ports:
      - target: 80
        published: "8183"
        protocol: tcp
    restart: unless-stopped
    volumes:
      - type: bind
        source: /DATA/AppData/monwp/web
        target: /var/www/html
      - type: bind
        source: /DATA/AppData/monwwp/web/php.ini
        target: /usr/local/etc/php/conf.d/php.ini
      - type: bind
        source: /DATA/AppData/monwp/web/uploads.ini
        target: /usr/local/etc/php/conf.d/upload.ini
    devices: []
    cap_add: []
    networks:
      - monwp
    privileged: false
networks:
  monwp:
    name: monwp
    driver: bridge

Il est indiqué (sur mon script) que l'on doit déposer 2 fichiers dans le dossier "web" - celui qui est important c'est le "upload.ini" sinon tu seras limité à 20mo d'upload de médias (tu vas pas loin avec cela). les 2 fichiers texte à déposer dans le dossier pré-cité :
upload.ini (là j'ai indiqué 1go d'upload)
Code:
file_uploads = On
memory_limit = 256M
upload_max_filesize = 1000M
post_max_size = 1000M
max_execution_time = 600

php.ini (demandé par certains thèmes - modifier la varaible en fonction de l'exigeance du thème)
Code:
max_input_vars = 7000

il faut aussi pour activer redis modifier le fichier wp-config.php en collant ce code :
Code:
define('WP_REDIS_HOST', 'wordpress-redis');
define('WP_REDIS_PORT', '6379');

à ce niveau - en fait pas comme sur la capture mais après la ligne 121 (en 122 sur la capture) après add ..... stop editing line:

Image1.png


Puis sur le panneau d'admin de WP - activer le plugin "Redis"


Voilà les indications pour que cela marche à 100%

Bon c'est un peu brouillon comme réponse - mais dès que j'ai un peu de temps, je fais un tuto détaillé.
 
1. L'image doit être (à ce jour) wordpress : php8.4
L'image wordpress: lastest à (actuellement) une version de php périmée et WP le signalera.
Quand on indique pas de tag, c'est directement "latest", dans le cas de wordpress : https://hub.docker.com/_/wordpress/tags
Actuellement, latest est actuellement équivalent au tag php8.2 et php8.2-apache

PHP 8.2 n'est pas encore EoL, cependant effectivement il ne subit plus d'amélioration https://www.php.net/supported-versions
 
Actuellement, latest est actuellement équivalent au tag php8.2 et php8.2-apache

Il y a peu l'image "latest" (que je mets habituellement) était en php7.?
Elle a, je suppose, évoluée depuis peu. WP fonctionnait bien avec - donc d'ici peu je la repasserai en mode "latest"
mais c'est simplement + agréable quand tu ouvres ton WP d'avoir ce type d'illustration :

Capture d'écran 2025-08-18 191101.png