Wprowadzenie
Zawsze nadchodzi moment, kiedy musimy skonfigurować nowe serwery. Może to służyć rozłożeniu obciążenia lub po prostu wynikać z potrzeby posiadania większej liczby serwerów. Podczas konfiguracji nowych serwerów użytkownicy powinni korzystać z automatyzacji serwerów. Robi się to w celu zminimalizowania ręcznej interwencji. Ansible to jedno z narzędzi do zarządzania konfiguracją, które można wykorzystać do automatycznej konfiguracji nowego serwera, co zmniejsza ryzyko błędu ludzkiego podczas ręcznej konfiguracji.
Ansible to bogate w funkcje narzędzie o prostej architekturze. Ułatwia konfigurację serwerów za pomocą skryptów. Ze względu na swoją zwięzłą architekturę Ansible nie wymaga instalowania żadnego innego oprogramowania na węzłach.
W tym samouczku pokażemy, jak użyć Ansible do automatyzacji instalacji WordPressa ze stosem LAMP działającym na serwerze Ubuntu. WordPress to system CMS służący do tworzenia blogów i stron internetowych, wykorzystujący PHP jako język programowania oraz bazę danych MySQL do przechowywania danych. Po zainstalowaniu WordPressa użytkownicy mogą zarządzać witryną za pomocą interfejsu webowego.
Wymagania wstępne
- Ponieważ ten samouczek opiera się na systemie Ubuntu, musisz mieć zainstalowaną najnowszą wersję Ubuntu z uprawnieniami sudo. Jeśli nie masz zainstalowanego Ubuntu, możesz postępować zgodnie z naszym poradnikiem Jak skonfigurować serwer Ubuntu.
- Będziemy również potrzebować węzła kontrolnego Ansible. Musi to być węzeł kontrolny z uprawnieniami sudo i włączoną zaporą sieciową (firewallem). Instalacja i konfiguracja Ansible na Ubuntu 20.04 zawiera szczegółowy przewodnik dotyczący konfiguracji Ansible.
- Potrzebujemy również zdalnych hostów Ansible z uruchomioną najnowszą wersją Ubuntu. Hosty te są w zasadzie zarządzanymi węzłami w Ansible.
Podsumowanie działań playbooka Ansible
W tej sekcji zobaczymy, co robi nasz playbook Ansible po jego uruchomieniu. Ta procedura jest alternatywą dla ręcznej konfiguracji opisanej tutaj: Jak zainstalować WordPress z LAMP na Ubuntu 20.04.
Po uruchomieniu playbooka Ansible wykona następujące czynności:
- Zainstaluje aptitude który jest preferowanym menedżerem pakietów dla Ansible.
- Zainstaluje i skonfiguruje rozszerzenia PHP oraz pakiety LAMP.
- Utworzy nowy Apache VirtualHost dla witryny WordPress.
- Włączy moduł mod_rewrite i wyłączy domyślną stronę oferowaną przez Apache.
- Ustawi hasło dla użytkownika root bazy MySQL.
- Usunie anonimowe konta MySQL i testową bazę danych.
- Utworzy nowego użytkownika i nową bazę danych. Będą one używane przez witrynę WordPress.
- Skonfiguruje UFW tak, aby zezwalał na ruch HTTP na skonfigurowanym porcie ( 80 domyślnie).
- Pobierze i rozpakuje WordPressa.
- Skonfiguruje uprawnienia i własność katalogów.
- Skonfiguruje nowy plik wp-config.php przy użyciu jego szablonu.
Przewodnik po playbooku Ansible: WordPress na LAMP
Najpierw musimy pobrać playbook WordPress na LAMP wraz z jego zależnościami z repozytorium do-community/ansible-playbooks . Sklonujemy to repozytorium wewnątrz węzła kontrolnego Ansible.
Możesz uruchomić polecenie git pull w sposób opisany poniżej:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Upewnij się, że masz zaktualizowaną wersję wyżej wymienionego repozytorium. Dotyczy to sytuacji, gdy repozytorium zostało sklonowane wcześniej. Poniżej opisano, jak pobrać aktualizację:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
Teraz musimy zlokalizować pliki wewnątrz folderu wordpress-lamp_ubuntu . Nazwa tego folderu może się różnić w zależności od używanej wersji Ubuntu. Na pierwszy rzut oka w tym katalogu zobaczysz następującą strukturę:

Poniżej podsumujmy przeznaczenie tych plików:
- files/apache.conf.j2: Apache używa VirtualHost. Ten plik służy do określania ustawień dla VirtualHost.
- files/wp-config.php.j2: Ten plik zawiera ustawienia służące do konfiguracji WordPressa.
- vars/default.yml: Konfiguruje ustawienia playbooka.
- playbook.yml: Jeśli istnieją zadania, które muszą zostać wykonane na zdalnym serwerze, ten plik służy do ich konfiguracji.
- readme.md: Przewodnik dotyczący korzystania z playbooka.
Musimy edytować plik zmiennych playbooka, aby dostosować instalację. Najpierw otwórz plik vars/default.yaml znajdujący się w wyżej wymienionym katalogu:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
Ten plik jest dość długi. Zawiera szereg konfiguracji, które pomogą nam w instalacji:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #Ustawienia systemowe php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Ustawienia MySQL mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #Ustawienia HTTP http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
W tym miejscu interesują nas następujące zmienne:
- php_modules: Tablica zawierająca rozszerzenia PHP, które powinny zostać zainstalowane w celu obsługi konfiguracji WordPressa. Jeśli chcesz zainstalować więcej modułów, możesz je tutaj określić.
- mysql_root_password: Hasło dla konta root MySQL.
- mysql_db: Określa nazwę bazy danych MySQL, z której będzie korzystać WordPress.
- mysql_user: Nazwa użytkownika MySQL, który powinien zostać utworzony dla WordPressa.
- mysql_password: Hasło dla nowego użytkownika MySQL.
- http_host: Nazwa domeny lub adres IP serwera.
- http_conf: Nazwa pliku konfiguracyjnego, który zostanie utworzony w Apache.
- http_port: Port HTTP dla tego wirtualnego hosta. Ten port służy do uzyskiwania dostępu do strony internetowej. Domyślna wartość to 80.
Następnie wprowadź wartości w powyższym pliku, zapisz go i zamknij. W przypadku użytkowników korzystających z edytora nano naciśnij CTRL+X, Y, a następnie naciśnij ENTER.
Teraz możesz uruchomić ten playbook. Możesz go uruchomić na jednym lub kilku serwerach. Jeśli chcesz uruchomić ten playbook na konkretnym serwerze, możesz użyć flagi -l. Ponadto, jeśli musisz określić użytkownika do połączenia z serwerem zdalnym, określ go za pomocą flagi -u .
Załóżmy, że chcemy uruchomić nasz playbook na jednym serwerze, srvr1 przy użyciu użytkownika u1, możemy uruchomić poniższe polecenie:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
Po uruchomieniu powyższego polecenia otrzymasz dane wyjściowe jak poniżej:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
Poczekaj na zakończenie wykonywania playbooka. Następnie przejdź do server_name w przeglądarce internetowej:
|
1 |
http://server_host_or_ip/ |
Zobaczysz ekran:

Następnie wybierz preferowany język i naciśnij Continue. Zobaczysz kolejny ekran z prośbą o podanie szczegółów w celu zakończenia instalacji:

Następnie wprowadź informacje i naciśnij Install WordPress. Zajmie to chwilę, a następnie zobaczysz ekran jak poniżej:

Wybierz Login aby zalogować się na swojej stronie i skonfigurować ustawienia:

Zawartość Ansible Playbook
Pamiętaj o folderze wordpress-lamp_ubuntu . Zawiera on kilka plików. Omówmy je po kolei:
● vars/default.yml
Ten plik zawiera wartości służące do konfiguracji ustawień Twojej witryny WordPress:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Ustawienia systemu php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Ustawienia MySQL mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "hasło" #Ustawienia HTTP http_host: "twoja_domena" http_conf: "twoja_domena.conf" http_port: "80" |
● files/apache.conf.j2
Ten plik służy do konfiguracji Apache VirtualHost:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
● files/wp-config.php.j2
Ten plik służy do konfiguracji WordPressa. Zawiera unikalne klucze i sole wygenerowane przez funkcje skrótu:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * Podstawowa konfiguracja WordPressa * * Skrypt tworzący plik wp-config.php używa tego pliku podczas * instalacji. Nie musisz korzystać z witryny, możesz * skopiować ten plik do "wp-config.php" i uzupełnić wartości. * * Ten plik zawiera następujące konfiguracje: * * * Ustawienia bazy danych MySQL * * Tajne klucze * * Prefiks tabel w bazie danych * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** Ustawienia bazy danych MySQL - te informacje można uzyskać od dostawcy hostingu ** // /** Nazwa bazy danych dla WordPressa */ define( 'DB_NAME', '{{ mysql_db }}' ); /** Nazwa użytkownika bazy danych MySQL */ define( 'DB_USER', '{{ mysql_user }}' ); /** Hasło do bazy danych MySQL */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** Nazwa hosta bazy danych MySQL */ define( 'DB_HOST', 'localhost' ); /** Kodowanie znaków bazy danych używane przy tworzeniu tabel. */ define( 'DB_CHARSET', 'utf8' ); /** Metoda porównywania znaków w bazie danych (collate). Nie zmieniaj w razie wątpliwości. */ define( 'DB_COLLATE', '' ); /** Dostęp do systemu plików **/ define('FS_METHOD', 'direct'); /**#@+ * Unikalne klucze uwierzytelniania i sole. * * Zmień je na unikalne frazy! * Możesz je wygenerować za pomocą {@link https://api.wordpress.org/secret-key/1.1/salt/ usługi generowania kluczy WordPress.org} * Możesz je zmienić w dowolnym momencie, aby unieważnić wszystkie istniejące ciasteczka. Zmusi to wszystkich użytkowników do ponownego zalogowania się. * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * Przedrostek tabel w bazie danych WordPress. * * Możesz mieć wiele instalacji w jednej bazie danych, jeśli nadasz każdej * unikalny przedrostek. Tylko cyfry, litery i znaki podkreślenia! */ $table_prefix = 'wp_'; /** * Dla programistów: tryb debugowania WordPressa. * * Zmień na true, aby włączyć wyświetlanie powiadomień podczas programowania. * Zdecydowanie zaleca się, aby twórcy wtyczek i motywów używali WP_DEBUG * w swoich środowiskach programistycznych. * * Aby uzyskać informacje o innych stałych, których można użyć do debugowania, * odwiedź Codex. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* To wszystko, koniec edycji! Miłego publikowania. */ /** Ścieżka absolutna do katalogu WordPressa. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Konfiguruje zmienne WordPressa i dołącza pliki. */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
Ten plik zawiera wszystkie zadania zdefiniowane w tej konfiguracji. Rozpoczyna się od wylistowania grupy serwerów, które są celem tej konfiguracji. Zawiera on vars/default.yml plik zmiennych do załadowania opcji konfiguracyjnych:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Zainstaluj wymagania wstępne apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: Zainstaluj LAMP pakiety apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: Zainstaluj PHP rozszerzenia apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Konfiguracja Apache - name: Utwórz katalog główny file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: Skonfiguruj up Apache VirtualHost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Przeładuj Apache tags: [ apache ] - name: Włącz moduł rewrite shell: /usr/sbin/a2enmod rewrite notify: Przeładuj Apache tags: [ apache ] - name: Włącz nową stronę shell: /usr/sbin/a2ensite {{ http_conf }} notify: Przeładuj Apache tags: [ apache ] - name: Wyłącz domyślną Apache stronę shell: /usr/sbin/a2dissite 000-default.conf notify: Zrestartuj Apache tags: [ apache ] # Konfiguracja MySQL - name: Ustaw the root hasło mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: Usuń wszystkie anonimowe konta użytkowników mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Usuń the MySQL testową bazę danych mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Tworzy bazę danych dla WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Utwórz użytkownika MySQL dla WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # Konfiguracja UFW - name: "UFW - Zezwalaj na HTTP na porcie {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # Konfiguracja WordPress - name: Pobierz i rozpakuj najnowszy WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: Ustaw własność file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: Ustaw uprawnienia dla katalogów shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: Ustaw uprawnienia dla plików shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: Skonfiguruj plik wp-config template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Przeładuj Apache service: name: apache2 state: reloaded - name: Zrestartuj Apache service: name: apache2 state: restarted |
Możesz modyfikować te pliki w zależności od potrzeb, aby dostosować je do konkretnych wymagań budowanej witryny.
Podsumowanie
W tym samouczku pokazaliśmy, jak zautomatyzować instalację i konfigurację witryny WordPress działającej na stosie LAMP na najnowszym systemie operacyjnym Ubuntu za pomocą Ansible.
Więcej poradników dotyczących pracy z Ansible można znaleźć w następujących samouczkach na naszym blogu:
- Używanie Ansible z CloudSigma
- Automatyzacja konfiguracji serwera za pomocą Ansible i Ubuntu 20.04
- Instalacja i konfiguracja LAMP na Ubuntu 20.04 za pomocą Ansible
Miłego korzystania!
Komentarze
Brak komentarzy. Bądź pierwszy.