Ü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…