Přehled
Následující článek se bude zabývat kroky, jak nasadit WordPress na Docker pomocí Ansible. Účelem tohoto postupu je automatizovat proces nasazení WordPressu na Docker pomocí Ansible playbooku.
Aby bylo možné úspěšně nasadit wordpress na docker pomocí ansible, musíte nejprve nakonfigurovat některé požadavky (uvedené níže v předpokladech)
Předpoklady
- Docker nainstalován a spuštěn na cílovém hostitelském počítači (Instalaci Dockeru lze také automatizovat pomocí Ansible – odkaz na POST)
- Přístup SSH povolen na vzdálených hostitelích s přihlašovacími parametry přednastavenými v souboru Ansible hosts
- Ansible nainstalovaný na klientském počítači (váš počítač)
- Nainstalovaný modul Python a Python docker pro Ansible na cílovém počítači
- Na vašem místním počítači nainstalovaný Python
Nainstalujte modul Python Docker pro Ansible
Většina linuxových distribucí má Python3 předinstalovaný, ale u jiných může chybět modul Python Docker, který Ansible používá. Poznáte to, pokud se zobrazí chyba, že modul chybí nebo nebyl nalezen. Obrázek níže uvedené chyby:
Zmíněný modul je vlastně Docker SDK, který Python používá pro práci s Dockerem. Nejjednodušší způsob instalace modulu Python Docker je pomocí nástroje „pip“. Pokud nástroj „pip“ chybí, můžete snadno nainstalovat a poté s ním nainstalovat modul python docker:
Debian/Ubuntu sudo apt install python3-pip Fedora sudo dnf install python3-pip CentOS/RedHat sudo yum python3-pip
Po instalaci modulu pip spusťte příkaz k instalaci modulu docker:
pip3 install docker
Pokud náhodou narazíte v Ansible na chybu, že nemůže najít modul Python, přidejte proměnnou interpretu pythonu do svého souboru hosts. Ve většině případů se nachází buď v „/usr/bin/python3“ nebo „/usr/lib/python3“ .
Chyba vypadá asi takto:
Proměnná interpret v souboru hosts vypadá asi takto:
ansible_python_interpreter=/usr/bin/python3
Zapište si hostitele do souboru hostitelů s parametry přihlášení
První krok – Přidání nezbytných parametrů do souboru hostitelů, aby se Ansible mohl dostat, přihlásit se a komunikovat s naším strojem:
sudo nano /etc/ansible/hosts
V souboru hosts přidejte parametry, aby vypadaly nějak takto:
Po přidání nezbytných parametrů pro našeho vzdáleného hostitele soubor uložte a ukončete.
Příručka Ansible pro nasazení WordPress na Docker
Pro toto nasazení budeme používat následující příručku:
--- - 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
Klidně si to zkopírujte.
Rozdělení příručky:
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)
Nasaďte WordPress na Docker pomocí Ansible
Jakmile budeme mít naši příručku Ansible, spusťte ji:
docker deploy-wordpress.yml -l docker
Očekávané výsledky:
Zkontrolujte, zda jsou kontejnery spuštěny a zda je WordPress přístupný prostřednictvím prohlížeče:
Shrnutí
Abychom článek shrnuli – podařilo se nám úspěšně nasadit WordPress na Docker pomocí Ansible a tím jsme zautomatizovali proces nasazení WordPressu na Docker. Aby byl tento proces úspěšný, bylo nutné prostředí Ansible nastavit pomocí modulu Python a Python Docker. Poté jsme napsali a spustili Ansible playbook, který nasazuje WordPress s databází a má také perzistenci dat, takže data a soubory nejsou uloženy v kontejneru Docker.
Děkuji za váš čas…