GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Stellen Sie WordPress auf Docker mit Ansible bereit

Übersicht

Der folgende Artikel behandelt die Schritte zum Bereitstellen von WordPress auf Docker mit Ansible. Zweck dieses Verfahrens ist es, den Bereitstellungsprozess von WordPress auf Docker mit dem Ansible Playbook zu automatisieren.

Um WordPress mit Ansible erfolgreich auf Docker bereitzustellen, müssen zunächst einige Anforderungen konfiguriert werden (unten in den Voraussetzungen aufgeführt)

Voraussetzungen

  • Docker auf dem Zielhostcomputer installiert und ausgeführt (Docker-Installation kann auch mit Ansible automatisiert werden – Link zum POST)
  • SSH-Zugriff auf den Remote-Hosts mit den in der Ansible-Hosts-Datei voreingestellten Anmeldeparametern aktiviert
  • Ansible auf Client-Rechner (Ihrem Rechner) installiert
  • Python und Python-Docker-Modul für Ansible auf dem Zielcomputer installiert
  • Python auf Ihrem lokalen Rechner installiert

Installieren Sie das Python-Docker-Modul für Ansible

Die meisten Linux-Distributionen haben Python3 vorinstalliert, aber für andere fehlt möglicherweise das Python-Docker-Modul, das Ansible verwendet. Sie werden wissen, dass dies der Fall ist, wenn Sie eine Fehlermeldung erhalten, in der erwähnt wird, dass das Modul fehlt oder nicht gefunden wurde. Beispielbild des Fehlers unten:

Das erwähnte Modul ist eigentlich das Docker SDK, das Python verwendet, um mit Docker zu arbeiten. Am einfachsten lässt sich das Python-Docker-Modul mit dem Tool „pip“ installieren. Wenn das „pip“-Tool fehlt, können Sie einfach das Python-Docker-Modul installieren und dann damit installieren:

Debian/Ubuntu

sudo apt install python3-pip

Fedora

sudo dnf install python3-pip

CentOS/RedHat

sudo yum python3-pip

Nachdem Sie das Pip installiert haben, führen Sie den Befehl aus, um das Docker-Modul zu installieren:

pip3 install docker

Wenn Sie zufällig auf einen Fehler in Ansible stoßen, dass das Python-Modul nicht gefunden werden kann, fügen Sie eine Python-Interpreter-Variable in Ihre Hosts-Datei ein. In den meisten Fällen befindet es sich entweder in "/usr/bin/python3" oder "/usr/lib/python3" .

Fehler sieht in etwa so aus:

Die Interpreter-Variable in der Hosts-Datei sieht etwa so aus:

ansible_python_interpreter=/usr/bin/python3

Notieren Sie die Hosts in der Hosts-Datei mit den Anmeldeparametern

Erster Schritt – Hinzufügen der erforderlichen Parameter in der Hosts-Datei, damit Ansible unsere Maschine erreichen, sich anmelden und mit ihr interagieren kann:

sudo nano /etc/ansible/hosts

Fügen Sie in der Hosts-Datei die Parameter hinzu, die ungefähr so ​​aussehen:

Nachdem die erforderlichen Parameter für unseren Remote-Host hinzugefügt wurden, speichern Sie die Datei und beenden Sie.

Ansible-Playbook für die WordPress-Bereitstellung auf Docker

Für diese Bereitstellung verwenden wir das folgende Playbook:

---
- hosts: docker
    vars:
      db_volume: mariadb
      wordpress: wordpress
    tasks:
      - name: Deploy MariaDB server
        docker_container:
          image: mariadb
          name: mariadb
          volumes:
            - "{{db_volume}}:/var/lib/mysql"
          env:
            MYSQL_ROOT_PASSWORD: somerootpassword
            MYSQL_PASSWORD: somemysqlpassword
            MYSQL_DATABASE: db
            MYSQL_USER: mysqluser

      - name: Deploy WordPress
        docker_container:
          image: wordpress
          name: wordpress
          restart_policy: always
          ports:
            - "8080:80"
          links:
            - "{{db_volume}}:/var/lib/mysql"
          volumes:
            - "{{wordpress}}:/var/www/html"
          env:
            MYSQL_PASSWORD: somemysqlpassword
            MYSQL_DATABASE: db
            MYSQL_USER: mysqluser
            MYSQL_HOST: mariadb

Fühlen Sie sich frei, es einfach zu kopieren.

Playbook-Aufschlüsselung:

hosts: docker // variable to target only machine hosts that are in the docker group
vars: 

db_volume: mariadb 

wordpress: wordpress  // [OPTIONAL] defined variables for each container. These are used for setting volumes on the host and are matching the container names.
tasks: // Defined a task which will deploy a MariaDB container(MariaDB database server in container form). Task will pull down the official Docker image of MariaDB from the Docker hub, set a name container name "mariadb" and set a persistent volume on the host machine for the database storage.

- name: Deploy MariaDB server // Task name

docker_container: // Docker function that Ansible will use

image: mariadb  // Docker image to pull down

name: mariadb // Specify the container name

volumes: - "{{db_volume}}:/var/lib/mysql" // Specify a volume on the host machine for persistent storage
env: // Environment variables to define parameters for the database such as the root password, admin user password, name of the database and the user name of the new user on the MariaDB server

MYSQL_ROOT_PASSWORD: somerootpassword // MySQL root password

MYSQL_PASSWORD: somemysqlpassword // MySQL admin/standard user password to be used by WordPress

MYSQL_DATABASE: db // MySQL database name

MYSQL_USER: mysqluser // Admin/standard user username for WordPress to use
// This the task that will deploy the WordPress Docker container. Same just like for the MariaDB container, Ansible will pull down the official WordPress image from the Docker hub. Here we also specified the container restart policy(when to restart the container) and also set number of ports to expose on the container and bind to the host, so that the container can be accessible via browser and http protocol.

- name: Deploy WordPress // Task name

docker_container: // Docker function that Ansible will use

image: wordpress // Docker image to pull down

name: wordpress // Specify the container name

restart_policy: always // Set attribute for container restart

ports: - "8080:80" // Specify ports to expose on the container to be accessible via web browser

links:
- "{{db_volume}}:/var/lib/mysql // Variable to specify the link to the MySQL server so that WordPress can connect to the database

volumes: - "{{wordpress}}:/var/www/html" // Specify a volume on the host machine for persistent storage
// Environment variables for the MariaDB database, for WordPress to use in order to connect to the database and use the database for data storage.
env: 

MYSQL_PASSWORD: somemysqlpassword // Variable to specify MySQL for WordPress to use

MYSQL_DATABASE: db // MySQL database name which will WordPress connect to 

MYSQL_USER: mysqluser // MySQL user for WordPress to use

MYSQL_HOST: mariadb // MySQL database server to connect to(docker container name we previously set)

Bereitstellen von WordPress auf Docker mit Ansible

Sobald wir unser Ansible-Playbook haben, führen Sie das Playbook aus:

docker deploy-wordpress.yml -l docker

Erwartete Ergebnisse:

Überprüfen Sie, ob die Container ausgeführt werden und ob WordPress über den Browser zugänglich ist:

Zusammenfassung

Um den Artikel zusammenzufassen – wir haben es geschafft, WordPress auf Docker mit Ansible erfolgreich bereitzustellen und damit den Prozess der Bereitstellung von WordPress auf Docker zu automatisieren. Die Ansible-Umgebung musste jedoch mit Python und dem Python-Docker-Modul eingerichtet werden, damit dieser Prozess erfolgreich war. Danach haben wir das Ansible-Playbook geschrieben und ausgeführt, das WordPress mit der Datenbank bereitstellt und auch über Datenpersistenz verfügt, sodass die Daten und Dateien nicht im Docker-Container gespeichert werden.

Vielen Dank für Ihre Zeit…


Docker
  1. Virtuelle Multipass-Maschinen mithilfe von Ansible

  2. Richten Sie Nextcloud mit Redis mit Docker ein

  3. Stellen Sie WordPress auf Docker mit Ansible bereit

  4. Stellen Sie Nextcloud auf Docker mit Ansible bereit

  5. So installieren Sie Docker mit Ansible [Debian/Ubuntu]

So installieren Sie Ansible unter Ubuntu 20.04

So stellen Sie Pi-Hole unter Debian 11 bereit

Installieren Sie Navidrome mit Docker

So installieren Sie Gitea auf Ubuntu mit Docker

Stellen Sie eine Produktions-Docker-MariaDB-Installation bereit

Verwenden von Docker Desktop zum Verwalten eines Containers