Automatyzacja serwerów to bezpieczny i niezawodny proces zarządzania serwerami i ich monitorowania w efektywny i nowoczesny sposób. W przeciwieństwie do tradycyjnego stylu zarządzania serwerami w centrach danych kontrolowanych przez dedykowany zespół ekspertów, wszystkie serwery są zarządzane za pomocą automatyzacji. W rezultacie błędy ludzkie są zminimalizowane.
Narzędzia do zarządzania konfiguracją, takie jak Ansible, Puppet, Terraform, by wymienić tylko kilka, są zazwyczaj używane do automatyzacji serwerów. Narzędzia te konfigurują serwery za pomocą automatyzacji, ustanawiając standardowe procedury dla nowych serwerów, jednocześnie eliminując potencjalne błędy występujące przy ręcznym wdrażaniu.
Ansible to solidny projekt open-source. Jest elastyczny, łatwy w użyciu i ma maksymalnie uproszczoną architekturę. Do korzystania z playbooków Ansible nie jest wymagane doświadczenie w programowaniu, nie wymaga on również instalowania oprogramowania na węzłach. Przede wszystkim jest wyposażony w doskonałe możliwości, które pozwalają na pisanie skryptów i usprawnianie automatyzacji.
W tym przewodniku przeprowadzimy Cię przez kroki instalacji i konfiguracji LAMP na Ubuntu 20.04 za pomocą Ansible.
Wymagania wstępne
Aby móc śledzić ten samouczek, będziesz potrzebować:
- Zainstalowanego systemu Ubuntu na swoim komputerze.
- Jednego lub więcej hostów Ansible: Na początku należy skonfigurować jeden lub więcej zdalnych hostów Ansible z najnowszą wersją systemu Ubuntu. W celu konfiguracji postępuj zgodnie z samouczkiem Automatyzacja konfiguracji serwera przy użyciu Ansible i Ubuntu 20.04.
- Jednego węzła kontrolnego Ansible: Maszyny z systemem Ubuntu z zainstalowanym, skonfigurowanym i połączonym z hostami Ansible za pomocą kluczy SSH:
-
- Węzeł kontrolny musi posiadać użytkownika z uprawnieniami sudo oraz zaporę sieciową ustawioną na WŁĄCZONĄ.
- Jeśli potrzebujesz pomocy w konfiguracji Ansible, zapoznaj się z samouczkiem dotyczącym instalacji i konfiguracji Ansible na Ubuntu 20.04.
Jaki jest cel playbooka Ansible?
Ten playbook Ansible to alternatywny sposób na przejście przez procedurę opisaną w naszym przewodniku Konfiguracja stosu LAMP – Linux Apache MySQL PHP.
Uruchomienie playbooka Ansible spowoduje wykonanie następujących działań na hostach Ansible:
-
Zainstalowanie aptitude, alternatywy dla menedżera pakietów apt preferowanej przez Ansible.
-
Zainstalowanie wszystkich niezbędnych pakietów LAMP.
-
Utworzenie nowego Apache VirtualHost i skonfigurowanie dedykowanego katalogu głównego dokumentów.
-
Włączenie WŁĄCZONE nowego VirtualHost.
-
Wyłączenie WYŁĄCZONE domyślnej strony Apache, tj. ustawienie zmiennej disable_default na true.
-
Wybór hasła dla użytkownika MySQL root.
-
Usunięcie anonimowych kont MySQL i testowej bazy danych.
-
Skonfigurowanie UFW w celu zezwolenia na ruch HTTP na skonfigurowanym porcie, gdzie domyślnym jest 80.
-
Skonfigurowanie testowego skryptu PHP.
Po zakończeniu działania playbooka Ansible zobaczysz środowisko internetowe PHP działające na serwerze Apache zgodnie z ustawionymi konfiguracjami.
Korzystanie z playbooka Ansible
Najpierw pobierz playbook LAMP i jego zależności z repozytorium do-community/ansible-playbooks. Następnie sklonuj repozytorium z playbookiem LAMP do lokalnego folderu wewnątrz węzła kontrolnego Ansible.
Uruchom polecenie git pull, aby upewnić się, że masz dostęp do odpowiedniej zawartości, której będziemy używać w tym samouczku:
|
1 2 |
cd ~/ansible-playbooks git pull |
Jeśli korzystasz z repozytorium do-community/ansible-playbooks po raz pierwszy, rozważ sklonowanie repozytorium do swojego folderu domowego:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Przejdź do folderu lamp_ubuntu2004 i zobaczysz strukturę:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Oto przegląd tego, co oznaczają te pliki:
-
files/info.php.j2: To jest plik szablonu, w którym można skonfigurować testową stronę PHP w katalogu głównym serwera WWW.
-
files/apache.conf.j2: Kolejny plik szablonu używany do konfiguracji Apache VirtualHost.
-
vars/default.yml: Jest to plik zmiennych służący do dostosowywania ustawień playbooka.
-
playbook.yml: Ten plik zawiera całą zawartość zadań do wykonania na zdalnym serwerze (lub serwerach).
-
readme.md: Plik zawierający informacje o tym playbooku.
Dostosujmy konfigurację MySQL i Apache, wprowadzając zmiany w pliku zmiennych playbooka. Przejdź do katalogu lamp_ubuntu2004 i otwórz plik vars/default.yml za pomocą nano edytora:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
Po otwarciu pliku vars/default.yml, zobaczysz listę zmiennych, które należy zmodyfikować:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Przyjrzyjmy się szczegółowo każdej ze zmiennych:
-
mysql_root_password: Przechowuje hasło dla konta root MySQL.
-
app_user: Jest to zdalny użytkownik niebędący rootem na hoście Ansible, który działa jako właściciel plików aplikacji.
-
http_host: Wyświetla Twoją nazwę domeny.
-
http_conf: Wyświetla nazwę pliku konfiguracyjnego utworzonego w Apache.
-
http_port: To port HTTP dla tego wirtualnego hosta, a 80 jest domyślny.
-
disable_default: Służy do cofania domyślnych opcji dostarczanych z Apache.
Następnie zapisz i zamknij plik vars/default.yml.
Po zakończeniu konfiguracji jesteśmy gotowi do uruchomienia tego playbooka na serwerach. Domyślnie większość serwerów w playbookach jest skonfigurowana do uruchamiania na każdym serwerze w plikach inventories. Użyjmy flagi -l, aby wpłynąć tylko na pojedynczy serwer lub wybrany podzbiór grup, na które wpływa playbook. Alternatywnie możemy użyć flagi -u, aby uzyskać szczegółowy widok tego, który zdalny serwer jest podłączany i wykonuje zadania na zdalnych hostach.
Uruchommy playbook na jednym serwerze server1 i połączmy go z jednym użytkownikiem jako justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Otrzymasz dane wyjściowe podobne do tych:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Gdy zobaczysz, że działanie playbooka dobiegło końca, przejdź do przeglądarki internetowej i uzyskaj dostęp do hosta serwera. Nie zapomnij dodać /info.php na końcu adresu IP:
|
1 |
http://server_host_or_IP/info.php |
Po kliknięciu w ten adres URL zobaczysz stronę taką jak ta:
|
Ostrzeżenie: Wyświetlona strona zawiera poufne informacje o Twoim środowisku PHP. Dlatego zaleca się usunięcie swoich informacji z serwera za pomocą następującego polecenia: rm -f /var/www/info.php |
Co znajduje się w Playbooku?
Następnie zrozummy znaczenie i istotę plików używanych w ansible-playbook zawartości:
-
vars/default.yml
Plik default.yml ze zmiennymi zawiera nazwę domeny i hasło do konta MySQL root . Są to domyślne wartości używane w ansible-playbook zadaniach:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
Plik apache.conf.j2 to plik szablonu Jinja 2 służący do konfiguracji nowego wirtualnego hosta Apache (VirtualHost). Zmienne użyte w tym szablonie muszą być zdefiniowane w pliku zmiennych vars/default.yml :
|
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/info.php.j2
Podobnie jak files/apache.conf.j2, plik info.php.j2 jest również szablonem Jinja. Używamy tego pliku do skonfigurowania testowego skryptu PHP w katalogu głównym dokumentów nowo skonfigurowanego serwera LAMP:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
Plik playbook.yml definiuje wszystkie zadania z tej konfiguracji. W tym pliku konfigurowane są wszystkie stosy LAMP. Zaczyna się od zdefiniowania grupy serwerów docelowych, która jest ustawiona na all. Przyjmuje również wartość become jako true ( become: true), i definiuje wszystkie zadania, które muszą zostać wykonane. Następnie plik yaml zawiera plik domyślny, którym jest plik zmiennych vars/default.yml , służący do ł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 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Zainstaluj wymagania wstępne apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] #Konfiguracja Apache - name: Zainstaluj LAMP Pakiety apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Utwórz główny katalog dokumentów file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Skonfiguruj up Apache wirtualny host template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Przeładuj Apache - name: Włącz nową stronę shell: /usr/sbin/a2ensite {{ http_conf }} notify: Przeładuj Apache - name: Wyłącz domyślną Apache stronę shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Przeładuj Apache # Konfiguracja MySQL - name: Ustawia the hasło roota mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Usuwa wszystkie anonimowe konta użytkowników mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Usuwa the testową bazę danych MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # Konfiguracja UFW - name: "UFW - Zezwalaj na HTTP na porcie {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # Strona informacyjna PHP - name: Konfiguruje Up stronę informacyjną PHP template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" 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 i wymagań swojego projektu.
Podsumowanie
W tym samouczku przeszliśmy przez kroki instalacji i konfiguracji LAMP na zdalnym serwerze za pomocą Ansible. Istnieje wiele innych opcji dostosowywania, z którymi możesz eksperymentować. Na przykład, korzystając z oficjalnej dokumentacji Ansible i wykorzystując przypadki użycia mysql_user z modułu Ansible to doskonały sposób na wejście na wyższy poziom. Ponadto postępuj zgodnie z krokami omówionymi w tym przewodniku, aby ćwiczyć automatyzację przy użyciu innych narzędzi do zarządzania konfiguracją i systemów operacyjnych, aby zwiększyć poziom trudności.
Czy jesteś nowym użytkownikiem stosu LAMP i chcesz zgłębić ten temat? Zapoznaj się z poniższymi samouczkami na naszym blogu:
- Jak zainstalować WordPress z LAMP na Ubuntu 20.04
- Jak zainstalować stos Linux, Apache, MySQL, PHP (LAMP) na CentOS-7
- Jak zainstalować stos LEMP (Linux, Nginx, MySQL, PHP) na Ubuntu 20.04
Miłego korzystania z komputera!

Komentarze
Brak komentarzy. Bądź pierwszy.