簡介
我們總會有需要配置新伺服器的時候。這可能是為了分擔工作負載,或者只是單純需要更多伺服器。在設置新伺服器時,使用者需要利用伺服器自動化來進行配置。這樣做是為了將手動干預降到最低。Ansible 是其中一種組態管理工具,可用於自動配置新伺服器,從而減少手動設置伺服器時發生人為錯誤的機率。
Ansible 是一款功能豐富且架構簡單的工具。它透過指令碼來簡化伺服器的配置。由於其簡潔的架構,Ansible 不需要維護節點上安裝任何其他軟體。
在本教學中,我們將向您展示如何使用 Ansible 自動在 Ubuntu 伺服器上安裝運行 LAMP 架構的 WordPress。 WordPress 是一款用於建立網誌和網站的 CMS,它使用 PHP 作為編碼語言,並使用 MySQL 資料庫來儲存資料。安裝 WordPress 後,使用者可以使用網頁前端來管理網站。
先決條件
- 由於本教學是基於 Ubuntu,您需要安裝最新版本的 Ubuntu 並具有 sudo 權限。如果您尚未安裝 Ubuntu,可以參考我們的 如何設置您的 Ubuntu 伺服器.
- 我們還需要一個 Ansible 控制節點。它必須是一個具有 sudo 權限且已啟用防火牆的控制節點。在 Ubuntu 20.04 上安裝與配置 Ansible 包含如何配置 Ansible 的詳細指南。
- 我們還需要 遠端 Ansible 主機 運行最新版本的 Ubuntu。這些主機本質上是 Ansible 中的受控節點。
Ansible Playbook 執行動作摘要
在本節中,我們將了解執行 Ansible Playbook 時它會做些什麼。此步驟是此處提供的手動設置的替代方案:如何在 Ubuntu 20.04 上使用 LAMP 安裝 WordPress.
當我們執行 Playbook 時,Ansible 將會:
- 安裝 aptitude ,這是首選的 Ansible 套件管理工具。
- 安裝並配置 PHP 擴充功能和 LAMP 套件。
- 建立一個新的 Apache VirtualHost 以用於 WordPress 網站。
- 啟用 mod_rewrite 模組,並停用 Apache 提供的預設網站。
- 設定 MySQL root 使用者的密碼。
- 移除匿名的 MySQL 帳戶和測試資料庫。
- 建立新使用者和新資料庫。這些將供 WordPress 網站使用。
- 設定 UFW 以允許在配置的連接埠( 80 預設)上進行 HTTP 流量傳輸。
- 下載並解壓縮 WordPress。
- 設定目錄權限和擁有權。
- 配置一個新的 wp-config.php 檔案(使用其範本)。
WordPress on LAMP Ansible Playbook 指南
首先,我們必須從 do-community/ansible-playbooks 儲存庫中獲取 WordPress on LAMP playbook 及其相依性。我們將在 Ansible 控制節點中複製此儲存庫。
您可以執行 git pull 指令,如下所示:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
請確保您已更新拉取上述儲存庫。這是針對您之前已經複製過該儲存庫的情況。以下是獲取更新的方法:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
現在我們必須找到 wordpress-lamp_ubuntu 資料夾中的檔案。此資料夾的名稱可能會因您使用的 Ubuntu 版本而有所不同。一目了然,您會在此目錄中看到以下結構:

讓我們在下方總結這些檔案的用途:
- files/apache.conf.j2:Apache 使用 VirtualHost。此檔案用於指定 VirtualHost.
- files/wp-config.php.j2:此檔案包含配置 WordPress 的設定。
- vars/default.yml:它用於配置 playbook 設定。
- playbook.yml:如果有需要在遠端伺服器上執行的任務,此檔案用於配置這些任務。
- readme.md:使用 playbook 的指南。
我們必須編輯 playbook 的變數檔案以自訂安裝。首先,打開 vars/default.yaml 檔案,它位於上述目錄中:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
這個檔案相當長。它有許多設定可以幫助我們進行安裝:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #系統設定 php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL 設定 mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP 設定 http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
在這裡,我們關注以下變數:
- php_modules:一個包含應安裝以支援您的 WordPress 設定的 PHP 擴充功能的陣列。如果您想安裝更多模組,可以在此處指定。
- mysql_root_password:MySQL root 帳戶的密碼。
- mysql_db:這指定了 WordPress 將使用的 MySQL 資料庫名稱。
- mysql_user:應為 WordPress 建立的 MySQL 使用者名稱。
- mysql_password:新 MySQL 使用者的密碼。
- http_host:伺服器的網域名稱或 IP。
- http_conf:將在 Apache 中建立的設定檔名稱。
- http_port:此虛擬主機的 HTTP 連接埠。此連接埠用於存取網站。預設值為 80。
接下來,在上述檔案中輸入數值並儲存關閉。對於使用 nano 編輯器的使用者,請按 CTRL+X, Y,然後按 ENTER.
現在您已準備好執行此 playbook。您可以在一部或多部伺服器上執行此 playbook。如果您想在任何特定伺服器上執行此 playbook,可以使用 -l 旗標。此外,如果您需要指定連接到遠端伺服器的使用者,請使用 -u 旗標指定使用者。
假設我們想在任何一部伺服器上執行我們的 playbook, srvr1,並使用使用者 u1,我們可以執行以下指令:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
執行上述指令後,您將獲得如下輸出:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [收集 系統資訊] ******************************************************************************** ok: [server1] TASK [安裝 必要條件] ******************************************************************************** ok: [server1] |
等待 playbook 執行完成。然後,在您的網頁瀏覽器中導覽至 server_name :
|
1 |
http://server_host_or_ip/ |
您將看到以下畫面:

接下來,選擇您想要的語言並按下 繼續。您將看到下一個畫面,提示輸入一些詳細資訊以完成安裝:

之後,輸入資訊並按下 安裝 WordPress。 這需要一些時間,然後您將看到如下畫面:

選擇 登入 以登入您的網站並設定相關設定:

Ansible Playbook 內容
記住 wordpress-lamp_ubuntu 資料夾。它包含一些檔案。讓我們逐一查看它們:
● vars/default.yml
此檔案包含用於設定 WordPress 網站設定的數值:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#系統設定 php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL 設定 mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP 設定 http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
● files/apache.conf.j2
此檔案用於設定 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
此檔案用於設定 WordPress。它包含由雜湊函數產生的唯一金鑰和鹽值:
|
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 /** * WordPress 的基本設定 * * wp-config.php 建立指令碼在安裝過程中會使用此檔案。 * 您不一定要使用網站,您可以 * 將此檔案複製為 "wp-config.php" 並填入值。 * * 此檔案包含以下設定: * * * MySQL 設定 * * 密鑰 * * 資料庫資料表前綴 * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** MySQL 設定 - 您可以從您的網頁主機商取得此資訊 ** // /** WordPress 的資料庫名稱 */ define( 'DB_NAME', '{{ mysql_db }}' ); /** MySQL 資料庫使用者名稱 */ define( 'DB_USER', '{{ mysql_user }}' ); /** MySQL 資料庫密碼 */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** MySQL 主機名稱 */ define( 'DB_HOST', 'localhost' ); /** 建立資料庫資料表時使用的資料庫字元集。 */ define( 'DB_CHARSET', 'utf8' ); /** 資料庫對照類型。若有疑問請勿變更此設定。 */ define( 'DB_COLLATE', '' ); /** 檔案系統存取 **/ define('FS_METHOD', 'direct'); /**#@+ * 唯一金鑰與密鑰。 * * 將這些變更為不同的唯一字串! * 您可以使用 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 密鑰產生服務} 來產生這些金鑰 * 您可以隨時變更這些設定以使所有現有的 Cookie 失效。這將強制所有使用者必須重新登入。 * * @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') }}' ); /**#@-*/ /** * WordPress 資料庫資料表前綴。 * * 如果您為每個安裝分配一個 * 唯一的前綴,您可以在單一資料庫中建立多個安裝。請僅使用數字、字母和底線! */ $table_prefix = 'wp_'; /** * 供開發人員使用:WordPress 偵錯模式。 * * 將此值變更為 true 以在開發期間顯示提示訊息。 * 強烈建議外掛和佈景主題開發人員使用 WP_DEBUG * 於其開發環境中。 * * 如需了解可用於偵錯的其他常數資訊, * 請造訪 Codex。 * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* 就是這樣,請停止編輯!祝寫作愉快。 */ /** WordPress 目錄的絕對路徑。 */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** 設定 WordPress 變數及引入檔案。 */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
此檔案包含此設定中定義的所有任務。它首先列出此設定所針對的一組伺服器。它包含 vars/default.yml 變數檔案以載入組態選項:
|
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: 安裝 必要條件 apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: 安裝 LAMP 套件 apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: 安裝 PHP 擴充功能 apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Apache 設定 - name: 建立 文件 根目錄 file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: 設定 up Apache 虛擬主機 template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: 重新載入 Apache tags: [ apache ] - name: 啟用 重寫 模組 shell: /usr/sbin/a2enmod rewrite notify: 重新載入 Apache tags: [ apache ] - name: 啟用 新 網站 shell: /usr/sbin/a2ensite {{ http_conf }} notify: 重新載入 Apache tags: [ apache ] - name: 停用 預設 Apache 網站 shell: /usr/sbin/a2dissite 000-default.conf notify: 重新啟動 Apache tags: [ apache ] # MySQL 設定 - name: 設定 the root 密碼 mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: 移除 所有 匿名 使用者 帳號 mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 移除 the MySQL 測試 資料庫 mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 建立 資料庫 給 WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: 建立 MySQL 使用者 用於 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 ] # UFW 設定 - name: "UFW - 允許連接埠 {{ http_port }} 上的 HTTP" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # WordPress 設定 - name: 下載 並 解壓縮 最新版 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: 設定 所有權 file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: 設定 權限 用於 目錄 shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: 設定 權限 用於 檔案 shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: 設定 up wp-設定 template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: 重新載入 Apache service: name: apache2 state: reloaded - name: 重新啟動 Apache service: name: apache2 state: restarted |
您可以根據需要修改這些檔案,以符合您正在建立的網站的特定需求。
結論
在本教學中,我們示範了如何使用 Ansible 在最新的 Ubuntu 作業系統上,自動安裝和設定運行於 LAMP 架構上的 WordPress 網站。
如需更多關於使用 Ansible 的指南,您可以查看以下教學,位於 我們的部落格:
祝您運算愉快!
留言
目前尚無留言。成為第一個留言的人吧。