使用 Ansible 通过源码编译安装 Nginx 的完整步骤。
服务器清单
服务器 IP | 操作系统 |
---|---|
192.168.153.221 | Anolis OS 7.9 |
192.168.153.222 | Anolis OS 7.9 |
步骤1 安装 Ansible
在控制节点(运行 Ansible 的机器)上安装 Ansible
sudo yum install epel-release -y
sudo yum install ansible -y
验证安装:
ansible --version
步骤2:配置 Ansible 主机清单
编辑 Ansible 的主机清单文件 /etc/ansible/hosts
,添加目标服务器
sudo vim /etc/ansible/hosts
添加以下内容:
[webservers]
192.168.153.221
192.168.153.222
步骤3:配置 SSH 免密登录
在控制节点上生成 SSH 密钥对,(一直回车)
ssh-keygen -t rsa -b 4096
将公钥复制到目标服务器:
ssh-copy-id root@192.168.153.221
ssh-copy-id root@192.168.153.222
步骤4:创建 Ansible Playbook
创建一个 Playbook 文件 nginx.yml
sudo vim nginx.yml
添加以下内容:
---
- hosts: webservers
become: yes
tasks:
- name: Ensure /opt directory exists
file:
path: /opt
state: directory
- name: Install dependencies
yum:
name:
- gcc-c++
- pcre
- pcre-devel
- zlib
- zlib-devel
- openssl
- openssl-devel
state: present
- name: Download Nginx source code
get_url:
url: https://nginx.org/download/nginx-1.26.2.tar.gz
dest: /opt/nginx-1.26.2.tar.gz
- name: Extract Nginx source code
unarchive:
src: /opt/nginx-1.26.2.tar.gz
dest: /opt
remote_src: yes
- name: Configure Nginx
command: ./configure --prefix=/usr/local/nginx
args:
chdir: /opt/nginx-1.26.2
- name: Compile Nginx
command: make
args:
chdir: /opt/nginx-1.26.2
- name: Install Nginx
command: make install
args:
chdir: /opt/nginx-1.26.2
- name: Start Nginx
command: /usr/local/nginx/sbin/nginx
- name: Ensure firewall allows HTTP and HTTPS
firewalld:
service: "{{ item }}"
permanent: yes
state: enabled
loop:
- http
- https
notify:
- Reload firewall
handlers:
- name: Reload firewall
command: firewall-cmd --reload
步骤5:运行 Playbook
使用以下命令运行 Playbook:
ansible-playbook nginx.yml
步骤6:验证安装
在浏览器中访问以下地址,验证 Nginx 是否正常运行:
-
http://192.168.153.221
-
http://192.168.153.222
如果看到 Nginx 的默认欢迎页面,说明安装成功。
步骤7:把 Nginx 服务添加到systemd管理
创建一个 Playbook 文件 nginx-systemd.yml
sudo vim nginx-systemd.yml
添加以下内容:
---
- hosts: webservers # 指定目标主机组
become: yes # 使用 root 权限执行任务
tasks: # 定义任务列表
- name: Create Nginx systemd service file
copy:
dest: /etc/systemd/system/nginx.service
content: |
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- name: Reload systemd daemon
command: systemctl daemon-reload
- name: Enable and start Nginx service
service:
name: nginx
state: started
enabled: yes
运行 Playbook:
ansible-playbook nginx-systemd.yml
验证:
systemctl status nginx
systemd管理命令
# 重新加载 systemd 管理器配置,以便使新的服务文件或配置变更生效
sudo systemctl daemon-reload
# 设置 Nginx 服务在系统启动时自动启动
sudo systemctl enable nginx
# 启动 Nginx 服务
sudo systemctl start nginx
# 查看 Nginx 服务的当前状态(是否运行中)
sudo systemctl status nginx
#重启Nginx 服务
sudo systemctl restart nginx