Ubuntu20.04(Nginx)でAnsibleを使用して静的HTMLWebサイトをデプロイする方法
このシリーズのすべてのパートをフォローしている場合は、この時点で、システムパッケージのインストール、テンプレートの適用、およびAnsibleプレイブックでのハンドラーの使用に精通している必要があります。 シリーズのこのパートでは、これまでに見たものを使用して、Ubuntu20.04で静的HTMLWebサイトをホストするためのリモートNginxサーバーのセットアップを自動化するプレイブックを作成します。
まず、Ansibleコントロールノードに新しいディレクトリを作成します。このディレクトリで、Ansibleファイルとデモ用の静的HTMLWebサイトをリモートサーバーにデプロイするように設定します。 これは、ホームフォルダ内の任意の場所に配置できます。 この例では、 ~/ansible-nginx-demo
.
- mkdir ~/ansible-nginx-demo
- cd ~/ansible-nginx-demo
次に、既存のインベントリファイルを新しいディレクトリにコピーします。 この例では、このシリーズの最初に設定したものと同じインベントリを使用します。
- cp ~/ansible-practice/inventory .
これにより、という名前のファイルがコピーされます inventory
名前の付いたフォルダから ansible-practice
ホームディレクトリに保存し、現在のディレクトリに保存します。
デモWebサイトの取得
このデモンストレーションでは、HTMLでコーディングする方法シリーズの主題である静的なHTMLWebサイトを使用します。 次のコマンドを実行して、デモWebサイトファイルをダウンロードすることから始めます。
- curl -L https://github.com/do-community/html_demo_site/archive/refs/heads/main.zip -o html_demo.zip
あなたは必要になるでしょう unzip
このダウンロードの内容を解凍します。 このツールがインストールされていることを確認するには、次を実行します。
- sudo apt install unzip
次に、デモWebサイトファイルを次のコマンドで解凍します。
- unzip html_demo.zip
これにより、という新しいディレクトリが作成されます html_demo_site-main
現在の作業ディレクトリ。 ディレクトリの内容は、 ls -la
指図:
- ls -la html_demo_site-main
Outputtotal 28
drwxrwxr-x 3 sammy sammy 4096 sep 18 2020 .
drwxrwxr-x 5 sammy sammy 4096 mrt 25 15:03 ..
-rw-rw-r-- 1 sammy sammy 1289 sep 18 2020 about.html
drwxrwxr-x 2 sammy sammy 4096 sep 18 2020 images
-rw-rw-r-- 1 sammy sammy 2455 sep 18 2020 index.html
-rw-rw-r-- 1 sammy sammy 1079 sep 18 2020 LICENSE
-rw-rw-r-- 1 sammy sammy 675 sep 18 2020 README.md
Nginxの構成用のテンプレートの作成
次に、リモートWebサーバーを構成するために必要なNginxテンプレートを設定します。 内に新しいフォルダを作成します ansible-demo
プレイブック以外のファイルを保持するディレクトリ:
- mkdir files
次に、という新しいファイルを開きます nginx.conf.j2
:
- nano files/nginx.conf.j2
このテンプレートファイルには、静的HTMLWebサイトのNginxサーバーブロック構成が含まれています。 3つの変数を使用します。 document_root
, app_root
、 と server_name
. これらの変数は、後でプレイブックを作成するときに定義します。 次のコンテンツをテンプレートファイルにコピーします。
server {
listen 80;
root {{ document_root }}/{{ app_root }};
index index.html index.htm;
server_name {{ server_name }};
location / {
default_type "text/html";
try_files $uri.html $uri $uri/ =404;
}
}
完了したら、ファイルを保存して閉じます。
新しいAnsiblePlaybookの作成
次に、新しいAnsibleプレイブックを作成し、このガイドの前のセクションで使用した変数を設定します。 名前の付いた新しいファイルを開きます playbook.yml
:
- nano playbook.yml
このプレイブックは hosts
定義をに設定 all
と become
デフォルトでrootユーザーとしてすべてのタスクを実行するようにAnsibleに指示するディレクティブ(手動でコマンドを実行するのと同じ) sudo
). このプレイブック内 var
セクションでは、3つの変数を作成します。 server_name
, document_root
、 と app_root
. これらの変数は、Nginx構成テンプレートで使用され、このWebサーバーが応答するドメイン名またはIPアドレス、およびWebサイトファイルがサーバー上にある場所へのフルパスを設定します。 このデモでは、 ansible_default_ipv4.address
リモートサーバーのパブリックIPアドレスが含まれているため、fact変数ですが、DNSサービス内でこのサーバーを指すようにドメイン名が適切に構成されている場合は、この値をサーバーのホスト名に置き換えることができます。
---
- hosts: all
become: yes
vars:
server_name: "{{ ansible_default_ipv4.address }}"
document_root: /var/www/html
app_root: html_demo_site-main
tasks:
今のところ、このファイルを開いたままにしておくことができます。 次のセクションでは、このプレイブックを完全に機能させるために含める必要のあるすべてのタスクについて説明します。
必要なパッケージのインストール
次のタスクは、を更新します apt
キャッシュしてからインストールします nginx
リモートノード上のパッケージ:
. . .
- name: Update apt cache and install Nginx
apt:
name: nginx
state: latest
update_cache: yes
リモートノードへのWebサイトファイルのアップロード
次のタスクでは、 copy
Webサイトファイルをリモートドキュメントルートにアップロードするための組み込みモジュール。 を使用します document_root
アプリケーションフォルダを作成するサーバー上の宛先を設定する変数。
. . .
- name: Copy website files to the server's document root
copy:
src: "{{ app_root }}"
dest: "{{ document_root }}"
mode: preserve
カスタムNginx構成の適用と有効化
次に、静的HTMLファイルをホストするようにWebサーバーを構成するNginxテンプレートを適用します。 構成ファイルがに設定された後 /etc/nginx/sites-available
、そのファイルへのシンボリックリンクを内部に作成します /etc/nginx-sites-enabled
後から再起動するようにNginxサービスに通知します。 プロセス全体には、2つの別個のタスクが必要です。
. . .
- name: Apply Nginx template
template:
src: files/nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart Nginx
- name: Enable new site
file:
src: /etc/nginx/sites-available/default
dest: /etc/nginx/sites-enabled/default
state: link
notify: Restart Nginx
UFWでポート80を許可する
次に、ポート80でtcpアクセスを有効にするタスクを含めます。
. . .
- name: Allow all access to tcp port 80
ufw:
rule: allow
port: '80'
proto: tcp
. . .
Nginxサービスのハンドラーの作成
このプレイブックを完成させるために残された唯一のことは、 Restart Nginx
ハンドラ:
. . .
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
完成したプレイブックの実行
プレイブックファイルに必要なすべてのタスクを含めると、次のようになります。
---
- hosts: all
become: yes
vars:
server_name: "{{ ansible_default_ipv4.address }}"
document_root: /var/www
app_root: html_demo_site-main
tasks:
- name: Update apt cache and install Nginx
apt:
name: nginx
state: latest
update_cache: yes
- name: Copy website files to the server's document root
copy:
src: "{{ app_root }}"
dest: "{{ document_root }}"
mode: preserve
- name: Apply Nginx template
template:
src: files/nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart Nginx
- name: Enable new site
file:
src: /etc/nginx/sites-available/default
dest: /etc/nginx/sites-enabled/default
state: link
notify: Restart Nginx
- name: Allow all access to tcp port 80
ufw:
rule: allow
port: '80'
proto: tcp
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
インベントリファイルで設定したサーバーでこのプレイブックを実行するには、次を実行します。 ansible-playbook
このシリーズの紹介で接続テストを実行するときに使用したのと同じ接続引数を使用します。 ここでは、という名前のインベントリファイルを使用します inventory
sammyユーザーがリモートサーバーに接続します。 プレイブックには sudo
実行するには、 -K
リモートユーザーを提供する引数 sudo
Ansibleによってプロンプトが表示されたときのパスワード:
- ansible-playbook -i inventory playbook.yml -u sammy -K
次のような出力が表示されます。
OutputBECOME password:
PLAY [all] **********************************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [203.0.113.10]
TASK [Update apt cache and install Nginx] ***************************************************************
ok: [203.0.113.10]
TASK [Copy website files to the server's document root] *************************************************
changed: [203.0.113.10]
TASK [Apply Nginx template] *****************************************************************************
changed: [203.0.113.10]
TASK [Enable new site] **********************************************************************************
ok: [203.0.113.10]
TASK [Allow all access to tcp port 80] ******************************************************************
ok: [203.0.113.10]
RUNNING HANDLER [Restart Nginx] *************************************************************************
changed: [203.0.113.10]
PLAY RECAP **********************************************************************************************
203.0.113.10 : ok=7 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
プレイブックが完成したら、ブラウザに移動してサーバーのホスト名またはIPアドレスにアクセスすると、次のページが表示されます。
おめでとうございます。Ansibleを使用して、静的HTMLWebサイトのリモートNginxサーバーへの展開を正常に自動化しました。
デモWebサイトのファイルのいずれかに変更を加えると、プレイブックを再度実行して、 copy
タスクは、ファイルの変更がリモートホストに反映されていることを確認します。 Ansibleにはべき等の動作があるため、プレイブックを複数回実行しても、システムにすでに加えられた変更はトリガーされません。