如果你正在跟随这个系列的所有部分,在这个时候,你应该熟悉安装系统包,应用模板,并在Ansible播放书中使用处理器。
首先,在您的 Ansible 控制节点上创建一个新目录,在那里您将设置 Ansible 文件和一个演示静态 HTML 网站,将其部署到您的远程服务器上。
1mkdir ~/ansible-nginx-demo
2cd ~/ansible-nginx-demo
接下来,将现有库存文件复制到新目录中. 在本示例中,我们将使用您在本系列开始时设置的相同库存:
1cp ~/ansible-practice/inventory .
这将从您的主目录中的名为ansible-practice
的文件夹中复制名为库存
的文件,并将其保存到当前目录中。
获取演示网站
对于这个演示,我们将使用一个静态的HTML网站,这是我们的主题(https://www.digitalocean.com/community/tutorial_series/how-to-build-a-website-with-html)系列。 通过下面的命令下载演示网站文件开始:
1curl -L https://github.com/do-community/html_demo_site/archive/refs/heads/main.zip -o html_demo.zip
你需要unzip
来解包这个下载的内容. 要确保你有这个工具安装,运行:
1sudo apt install unzip
然后,卸载 demo 网站文件:
1unzip html_demo.zip
这将在当前工作目录中创建一个名为html_demo_site-main
的新目录,您可以用ls -la
命令检查目录的内容:
1ls -la html_demo_site-main
1[secondary_label Output]
2total 28
3drwxrwxr-x 3 sammy sammy 4096 sep 18 2020 .
4drwxrwxr-x 5 sammy sammy 4096 mrt 25 15:03 ..
5-rw-rw-r-- 1 sammy sammy 1289 sep 18 2020 about.html
6drwxrwxr-x 2 sammy sammy 4096 sep 18 2020 images
7-rw-rw-r-- 1 sammy sammy 2455 sep 18 2020 index.html
8-rw-rw-r-- 1 sammy sammy 1079 sep 18 2020 LICENSE
9-rw-rw-r-- 1 sammy sammy 675 sep 18 2020 README.md
为 Nginx 配置创建模板
您现在将设置需要配置远程 Web 服务器的 Nginx 模板,在您的ansible-demo
目录中创建一个新的文件夹,以保持非播放书文件:
1mkdir files
然后打开一个名为「nginx.conf.j2」的新文件:
1nano files/nginx.conf.j2
此模板文件包含一个 Nginx 服务器块配置,用于静态 HTML 网站. 它使用三个变量: document_root
, app_root
和 server_name
. 在创建播放簿时,我们将稍后定义这些变量。
1[label ~/ansible-nginx-demo/files/nginx.conf.j2]
2server {
3 listen 80;
4
5 root {{ document_root }}/{{ app_root }};
6 index index.html index.htm;
7
8 server_name {{ server_name }};
9
10 location / {
11 default_type "text/html";
12 try_files $uri.html $uri $uri/ =404;
13 }
14}
保存并关闭文件,当你完成。
创建一个新的 Ansible Playbook
接下来,我们将创建一个新的Ansible播放簿,并设置我们在本指南的上一节中使用的变量:打开名为playbook.yml的新文件:
1nano playbook.yml
本剧本以 " 主持人 " 定义设定为全体 ' ,并用 " 来 " 指示说明 默认情况下可以以 **root** 用户( 和手动运行的) 运行所有任务 。 在本剧本'var'部分,我们将创造出三个变量:'server_name','document_root'和'app-root'. 这些变量被用在Nginx配置模板中来设置这个网络服务器将响应的域名或IP地址,以及网站文件位于服务器的完整路径. 对于这个演示,我们将使用
anbile_default_ ipv4. address` 事实变量,因为它包含远程服务器的公开IP地址,但您可以用您的服务器主机名来替换这个值, 以防它有一个DNS服务内恰当配置的域名来指向这个服务器 :
1[label ~/ansible-nginx-demo/playbook.yml]
2---
3- hosts: all
4 become: yes
5 vars:
6 server_name: "{{ ansible_default_ipv4.address }}"
7 document_root: /var/www/html
8 app_root: html_demo_site-main
9 tasks:
接下来的部分将引导你通过所有任务,你需要包括在这个演讲本,使它完全功能。
安装所需的包
以下任务将更新apt
缓存,然后在远程节点上安装nginx
包:
1[label ~/ansible-nginx-demo/playbook.yml]
2. . .
3 - name: Update apt cache and install Nginx
4 apt:
5 name: nginx
6 state: latest
7 update_cache: yes
将网站文件上传到远程节点
下一个任务将使用内置的复制
模块将网站文件上传到远程文档根中,我们将使用document_root
变量来设置应用程序文件夹应该创建的服务器上的目的地。
1[label ~/ansible-nginx-demo/playbook.yml]
2. . .
3 - name: Copy website files to the server's document root
4 copy:
5 src: "{{ app_root }}"
6 dest: "{{ document_root }}"
7 mode: preserve
应用并启用自定义 Nginx 配置
现在我们将应用 Nginx 模板,该模板将配置 Web 服务器来托管您的静态 HTML 文件. 配置文件设置为 /etc/nginx/sites-available
后,我们将在 /etc/nginx-sites-enabled
中创建一个符号链接到该文件,并通知 Nginx 服务进行后续重新启动。
1[label ~/ansible-nginx-demo/playbook.yml]
2. . .
3 - name: Apply Nginx template
4 template:
5 src: files/nginx.conf.j2
6 dest: /etc/nginx/sites-available/default
7 notify: Restart Nginx
8
9 - name: Enable new site
10 file:
11 src: /etc/nginx/sites-available/default
12 dest: /etc/nginx/sites-enabled/default
13 state: link
14 notify: Restart Nginx
在 UFW 上允许端口 80
接下来,包括在端口 80 上允许 tcp 访问的任务:
1[label ~/ansible-nginx-demo/playbook.yml]
2. . .
3 - name: Allow all access to tcp port 80
4 ufw:
5 rule: allow
6 port: '80'
7 proto: tcp
8. . .
为 Nginx 服务创建处理器
要完成这本书,唯一剩下的就是设置重新启动 Nginx
处理器:
1[label ~/ansible-nginx-demo/playbook.yml]
2. . .
3 handlers:
4 - name: Restart Nginx
5 service:
6 name: nginx
7 state: restarted
运行已完成的剧本
一旦你完成了在播放簿文件中包含所有所需的任务,它将看起来像这样:
1[label ~/ansible-nginx-demo/playbook.yml]
2---
3- hosts: all
4 become: yes
5 vars:
6 server_name: "{{ ansible_default_ipv4.address }}"
7 document_root: /var/www
8 app_root: html_demo_site-main
9 tasks:
10 - name: Update apt cache and install Nginx
11 apt:
12 name: nginx
13 state: latest
14 update_cache: yes
15
16 - name: Copy website files to the server's document root
17 copy:
18 src: "{{ app_root }}"
19 dest: "{{ document_root }}"
20 mode: preserve
21
22 - name: Apply Nginx template
23 template:
24 src: files/nginx.conf.j2
25 dest: /etc/nginx/sites-available/default
26 notify: Restart Nginx
27
28 - name: Enable new site
29 file:
30 src: /etc/nginx/sites-available/default
31 dest: /etc/nginx/sites-enabled/default
32 state: link
33 notify: Restart Nginx
34
35 - name: Allow all access to tcp port 80
36 ufw:
37 rule: allow
38 port: '80'
39 proto: tcp
40
41 handlers:
42 - name: Restart Nginx
43 service:
44 name: nginx
45 state: restarted
要在您在库存文件中设置的服务器(服务器)上运行此播放簿,请运行ansible-playbook
使用您在本系列的介绍中运行连接测试时使用的相同的连接参数。
1ansible-playbook -i inventory playbook.yml -u sammy -K
你会看到这样的输出:
1[secondary_label Output]
2BECOME password:
3
4PLAY [all] **********************************************************************************************
5
6TASK [Gathering Facts] **********************************************************************************
7ok: [203.0.113.10]
8
9TASK [Update apt cache and install Nginx] ***************************************************************
10ok: [203.0.113.10]
11
12TASK [Copy website files to the server's document root] *************************************************
13changed: [203.0.113.10]
14
15TASK [Apply Nginx template] *****************************************************************************
16changed: [203.0.113.10]
17
18TASK [Enable new site] **********************************************************************************
19ok: [203.0.113.10]
20
21TASK [Allow all access to tcp port 80] ******************************************************************
22ok: [203.0.113.10]
23
24RUNNING HANDLER [Restart Nginx] *************************************************************************
25changed: [203.0.113.10]
26
27PLAY RECAP **********************************************************************************************
28203.0.113.10 : ok=7 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
一旦播放簿完成,如果您进入您的浏览器并访问您的服务器的主机名称或IP地址,您现在应该看到以下页面:
恭喜,您已成功自动部署静态HTML网站到远程 Nginx服务器,使用Ansible。
如果您对演示网站中的任何文件进行更改,您可以重新运行播放簿,而复制
任务将确保任何文件更改都反映在远程主机中。