Ansible部署nginx

该文章详细描述了如何在Linux环境中,通过Ansible自动化工具进行Nginx的部署。首先确保已安装JDK和Tomcat,接着安装Epel仓库和Ansible。然后创建Nginx的目录结构,上传并解压Nginx源码,编写自定义的配置文件和测试HTML页面。通过编写Ansibleplaybook,执行包括安装依赖、编译安装Nginx、复制配置文件和测试页面以及启动Nginx服务等一系列任务。最后,验证Nginx服务是否成功启动并通过IP地址访问测试页面。

前提条件部署好jdk、tomcat

1.设置密钥服务

安装依赖

yum install -y http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装ansible

yum -y install ansible

写入主机清单

vim /etc/ansible/hosts

ansible IP -m ping

2.#进入/usr/local/目录

mkdir nginx_test

cd nginx_test

上传nginx压缩包

tar zxf nginx-1.22.1.tar.gz
cd nginx-1.22.1/
cp conf/nginx.conf /usr/local/nginx_test
cd /usr/local/nginx_test
vim index.html
<h1>This is web1!<h1>

3.编写nginx.yml

vim nginx.yml
---
- hosts: 192.168.147.137
  tasks:
      - name: "推送Nginx源码包"
        unarchive: src=nginx-1.22.1.tar.gz dest=/root/
      - name: "安装依赖环境库"
        yum: name=gcc,gcc-c++,pcre-devel,zlib-devel state=latest
      - name: "安装Nginx"
        shell: cd /root/nginx-1.22.1/ && ./configure && make && make install
      - name: "推送配置文件"
        copy: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf
      - name: "推送测试页面"
        copy: src=index.html dest=/usr/local/nginx/html/index.html
      - name: "启动Nginx服务"
        shell: netstat -ntl | grep -qw 80 || /usr/local/nginx/sbin/nginx
4.执行任务
# 用于执行 Ansible playbook --syntax-check 参数表示仅检查 playbook 的语法 , 不执行其中的
任务。
ansible-playbook --syntax-check nginx.yml

# 执行任务
ansible-playbook nginx.yml
然后访问 192.168.147.137:80
<think>我们使用Ansible部署Nginx作为负载均衡器,调度两台Tomcat服务器(192.168.10.10和192.168.10.20)。Nginx服务器IP为192.168.10.30。 步骤: 1. 准备Ansible控制节点(假设在192.168.10.10上,也可以是其他机器,这里以用户提供的引用[1]中的ansible服务器192.168.10.10作为控制节点) 2. 配置主机清单 3. 创建Playbook和模板 4. 执行Playbook 详细步骤: 1. 准备Ansible控制节点(在192.168.10.10上安装Ansible) 根据引用[1]中的步骤,在192.168.10.10上安装Ansible: ```bash yum install -y epel-release yum install -y ansible ``` 2. 配置SSH免密登录 确保控制节点(192.168.10.10)可以无密码登录到三台服务器(192.168.10.10, 192.168.10.20, 192.168.10.30) 在192.168.10.10上执行: ```bash ssh-keygen -t rsa # 一直按回车 ssh-copy-id root@192.168.10.10 # 本机 ssh-copy-id root@192.168.10.20 # 另一台Tomcat ssh-copy-id root@192.168.10.30 # Nginx服务器 ``` 3. 配置主机清单(/etc/ansible/hosts) ```ini [nginx] 192.168.10.30 [tomcat] 192.168.10.10 192.168.10.20 [webservers:children] tomcat ``` 4. 创建Ansible角色目录结构(可选,但推荐使用角色) 在/etc/ansible/目录下创建roles/nginx目录,并创建以下子目录: ```bash mkdir -p /etc/ansible/roles/nginx/{tasks,templates,files} ``` 5. 创建Nginx配置模板 在/etc/ansible/roles/nginx/templates/目录下创建nginx.conf.j2文件,内容如下: ```nginx user nginx; worker_processes {{ ansible_processor_cores }}; # 使用系统变量获取CPU核心数[^2] error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { upstream tomcat_backend { {% for server in groups['tomcat'] %} server {{ hostvars[server].ansible_host }}:8080 weight=1; # 使用hostvars获取主机变量 {% endfor %} } server { listen 80; server_name localhost; location / { proxy_pass http://tomcat_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 注意:这里使用了`groups['tomcat']`来动态获取tomcat组的所有主机,然后通过`hostvars[server].ansible_host`获取主机的IP地址。但注意,在清单中我们直接写IP,所以`ansible_host`就是IP。如果清单中使用别名,则需要调整。 6. 创建Nginx角色的任务文件 在/etc/ansible/roles/nginx/tasks/main.yml中写入: ```yaml --- - name: 安装Nginx yum: name: nginx state: present - name: 配置Nginx template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: restart nginx - name: 启动并设置开机启动 service: name: nginx state: started enabled: yes ``` 7. 创建Nginx角色的handlers 在/etc/ansible/roles/nginx/handlers/main.yml中写入: ```yaml --- - name: restart nginx service: name: nginx state: restarted ``` 8. 创建Playbook文件(/etc/ansible/lb.yml) ```yaml --- - name: 配置Nginx负载均衡 hosts: nginx become: yes roles: - nginx - name: 验证Tomcat服务 hosts: tomcat become: yes tasks: - name: 检查Tomcat端口8080 wait_for: port: 8080 timeout: 10 ``` 9. 执行Playbook ```bash cd /etc/ansible ansible-playbook lb.yml ``` 10. 验证 在浏览器访问http://192.168.10.30,请求将被分发到两台Tomcat服务器(192.168.10.10:8080和192.168.10.20:8080)上。 注意事项: - 确保两台Tomcat服务器已经安装并运行了Tomcat服务,监听8080端口。 - 如果Tomcat不在同一端口,需要调整模板中的端口号。 - 防火墙需要开放80端口(Nginx)和8080端口(Tomcat)。 如果需要配置HTTPS,可以在Nginx配置中添加SSL部分,并配置证书。 引用说明: [^1]: 安装Ansible的步骤参考了引用[1]中的方法。 [^2]: 在模板中使用变量(如`ansible_processor_cores`)参考了引用[2]中的做法。 生成的相关问题: §§相关问题§§ 1. 如何配置Nginx的HTTPS负载均衡? 2. 如何在Ansible中动态获取Tomcat服务器的IP地址? 3. 如何调整Nginx负载均衡的算法(如轮询、权重、ip_hash等)? 4. 如何监控后端Tomcat服务器的健康状态?</think>### Ansible部署Nginx负载均衡调度Tomcat服务器详细步骤 #### 1. 环境准备 - **控制节点**:192.168.10.10(安装Ansible) - **Tomcat节点**:192.168.10.10 和 192.168.10.20 - **Nginx节点**:192.168.10.30 ```bash # 在控制节点安装Ansible(引用[1]) yum install -y epel-release yum install -y ansible ``` #### 2. 配置SSH免密登录 ```bash ssh-keygen -t rsa ssh-copy-id root@192.168.10.10 # Tomcat1 ssh-copy-id root@192.168.10.20 # Tomcat2 ssh-copy-id root@192.168.10.30 # Nginx ``` #### 3. 配置主机清单 (`/etc/ansible/hosts`) ```ini [nginx] 192.168.10.30 [tomcat] 192.168.10.10 192.168.10.20 ``` #### 4. 创建Playbook文件 (`lb_deploy.yml`) ```yaml --- - name: 部署Nginx负载均衡 hosts: nginx become: yes vars: worker_connections: 1024 listen_port: 80 tasks: - name: 安装Nginx yum: name: nginx state: present - name: 配置负载均衡 template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: 重启Nginx - name: 启动Nginx服务 service: name: nginx state: started enabled: yes handlers: - name: 重启Nginx service: name: nginx state: restarted - name: 验证Tomcat服务 hosts: tomcat tasks: - name: 检查8080端口 wait_for: port: 8080 timeout: 10 ``` #### 5. 创建Nginx配置模板 (`nginx.conf.j2`) ```nginx user nginx; worker_processes {{ ansible_processor_cores }}; # 动态获取CPU核心数[^2] events { worker_connections {{ worker_connections }}; } http { upstream tomcat_backend { {% for host in groups['tomcat'] %} server {{ hostvars[host].ansible_host }}:8080; {% endfor %} } server { listen {{ listen_port }}; server_name localhost; location / { proxy_pass http://tomcat_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` #### 6. 执行部署 ```bash ansible-playbook lb_deploy.yml ``` #### 7. 验证负载均衡 ```bash # 在Nginx服务器测试 curl http://localhost # 应交替返回两台Tomcat的响应 ``` --- ### 关键配置说明 1. **动态变量**: - `{{ ansible_processor_cores }}`:自动获取CPU核心数[^2] - `{{ groups['tomcat'] }}`:动态获取Tomcat组主机列表 2. **负载均衡算法**: - 默认轮询(可添加`ip_hash;`实现会话保持) - 权重配置:`server 192.168.10.10:8080 weight=3;` 3. **安全增强**: ```nginx # 在upstream块中添加 server 192.168.10.10:8080 max_fails=3 fail_timeout=30s; ``` > **注意**:确保Tomcat服务器部署并运行在8080端口,防火墙开放80和8080端口。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值