首页 > 数据库 > 数据库开发技术 > Ansible自动化部署Nginx攻略
自动化部署Nginx提升效率必备
在现今日益复杂的IT环境中,自动化部署已成为提高运维效率、减少人为错误的必备技能。Ansible作为一款简单易用、功能强大的自动化运维工具,受到了广大运维人员的青睐。本文将为大家介绍如何使用Ansible自动化部署Nginx及其业务应用,并附上详细的优化代码和注释。

除了精彩的内容,我们还为大家精心准备了一份粉丝福利,记得查看文章末尾哦!
部署思路介绍
(1)ansible本地服务器先源码安装NGINX
(2)再使用playbook实现批量部署NGINX

安装依赖库:首先,通过yum包管理器安装Nginx编译所需的依赖库,包括pcre-devel、openssl-devel和zlib-devel。这些库是Nginx编译和运行所必需的。
拷贝Nginx源码包:使用copy模块将Nginx源码包从Ansible playbook所在的本地目录复制到目标主机的/tmp目录下。
创建服务组:通过group模块在目标主机上创建一个名为www的系统组,用于管理Nginx服务相关的用户。
创建服务用户:使用user模块在目标主机上创建一个名为www的系统用户,并将其主组设置为www,同时限制其登录权限。
解压源码包:通过unarchive模块解压Nginx源码包到/usr/src/目录下。
配置Nginx:使用shell模块执行./configure脚本,配置Nginx的安装参数,如指定安装目录、运行用户和组、启用SSL等模块。
编译和安装:再次使用shell模块执行make和make install命令,编译和安装Nginx。
优化服务文件:使用copy模块将Nginx的systemd服务文件复制到目标主机的/usr/lib/systemd/system/目录下,以便通过systemd管理Nginx服务。
启动Nginx服务:通过service模块启动Nginx服务,并设置其为开机自启。
配置防火墙(临时和永久):使用firewalld模块开放TCP 80端口,允许外部访问Nginx服务。首先进行临时开放,然后将其设置为永久开放,以确保重启后依然有效。
wget 命令
wget https://nginx.org/download/nginx-1.26.0.tar.gz
使用
wget工具从https://nginx.org/download/下载nginx-1.26.0.tar.gz这个文件。这个文件是 Nginx 的源代码压缩包。
yum 命令
yum install pcre-devel openssl-devel zlib-devel -y
使用 yum 包管理器来安装 Nginx 编译所依赖的开发库。

groupadd 命令
groupadd -r www
使用 groupadd 命令来创建一个新的系统组 www。
-r 参数表示创建一个系统组,这样的组通常用于运行系统服务

useradd 命令
useradd -r -s /sbin/nologin -M -g www www
使用 useradd 命令来创建一个新的系统用户 www。
-r 参数表示创建一个系统用户。
-s /sbin/nologin 参数表示设置该用户的 shell 为 /sbin/nologin,这样该用户就不能登录系统。
-M 参数表示不创建用户的主目录。
-g www 参数表示将该用户添加到 www 组。

tar命令
tar zxf nginx-1.26.0.tar.gz
使用 tar 命令来解压 nginx-1.26.0.tar.gz 文件

cd nginx-1.26.0/
./configure 命令
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_stub_status_module


make 和 make install 命令
make && make install
make 命令用于编译 Nginx 的源代码。
&& 是一个 shell 操作符,表示如果前一个命令(make)成功执行,则执行后面的命令(make install)。
make install 命令用于将编译好的 Nginx 安装到指定的目录(由 --prefix 参数指定)。


[Unit]Description=My web DaemonAfter=network.target[Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf[Install]WantedBy=multi-user.target
[Unit] 部分Description=My web Daemon这定义了服务的简短描述。After=network.target这表示服务应该在 network.target 启动之后启动。network.target 是一个虚拟目标,它表示网络已经准备好,但具体的网络服务可能还未启动。这通常是一个好的起点,因为它确保了服务在尝试访问网络之前已经有一个可用的网络环境。[Service] 部分Type=forking这表示服务在启动时将会创建子进程。对于 Nginx 来说,这通常是正确的,因为 Nginx 主进程会启动一个或多个工作进程来处理连接。ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf这定义了服务启动时应该执行的命令。在这里,你指定了 Nginx 的可执行文件位置以及配置文件的路径。确保这些路径是正确的,并且 Nginx 的可执行文件有执行权限。[Install] 部分WantedBy=multi-user.target这表示服务应该被添加到 multi-user.target 的 "Wanted" 列表中。multi-user.target 是一个在启动过程中晚于 network.target 运行的虚拟目标,通常用于定义多用户服务的启动顺序。这意味着当系统达到多用户模式时,你的服务将会启动。
systemctl restart nginx

---- hosts: 192.168.8.6tasks:- name: yum1yum: name=pcre-devel state=installed- name: yum2yum: name=openssl-devel state=installed- name: yum3yum: name=zlib-devel state=installed- name: 拷贝nginx源码包copy: src=/ansible_palybook/nginx-1.26.0.tar.gz dest=/tmp- name: 创建服务组group: name=www system=yes state=present- name: 创建服务用户user: name=www system=yes create_home=no shell=/sbin/nologin group=www state=present- name: 解压源码包unarchive: src=/tmp/nginx-1.26.0.tar.gz dest=/usr/src/ remote_src=yes- name: ./configure配置shell: |./configure --prefix=/usr/local/nginx \--user=www \--group=www \--with-http_ssl_module \--with-http_sub_module \--with-http_dav_module \--with-http_flv_module \--with-http_mp4_module \--with-http_stub_status_moduleargs:chdir: /usr/src/nginx-1.26.0/- name: make nginxshell: makeargs:chdir: /usr/src/nginx-1.26.0/- name: make install nginxshell: make installargs:chdir: /usr/src/nginx-1.26.0/- name: 优化nginx服务copy: src=/usr/lib/systemd/system/nginx.service dest=/usr/lib/systemd/system/- name: 启动nginx服务service: name=nginx state=started enabled=yes- name: 配置防火墙(临时)firewalld: port=80/tcp state=enabled- name: 配置防火墙(永久)firewalld: port=80/tcp state=enabled permanent=yes- name: 更改业务目录地址copy:src: /usr/local/nginx/conf/nginx.confdest: /usr/local/nginx/conf/nginx.confowner: wwwgroup: wwwmode: '0644'

安装依赖库:
使用 yum 模块安装 pcre-devel、openssl-devel 和 zlib-devel 这三个依赖库,这些都是 Nginx 编译过程中需要用到的。
拷贝 Nginx 源码包:
使用 copy 模块从 Ansible 控制机的 /ansible_palybook/ 目录拷贝 nginx-1.26.0.tar.gz 源码包到目标主机的 /tmp 目录。
创建服务组和用户:
使用 group 模块创建名为 www 的系统组。
使用 user 模块创建名为 www 的系统用户,并将其归属于 www 组,且没有家目录和登录 shell。
解压源码包并编译安装:
使用 unarchive 模块解压源码包到 /usr/src/ 目录。
使用 shell 模块执行 ./configure 命令进行 Nginx 的配置,指定了安装目录、用户和组,以及启用了多个模块。
接着使用 shell 模块执行 make 和 make install 命令来编译和安装 Nginx。
优化 Nginx 服务:
这一步的copy模块看起来有些冗余,因为它只是将 Nginx的服务文件从同一个位置复制到同一个位置,并且没有改变文件的内容或属性。但可能是为了保持 Ansible Playbook 的结构一致性或用于后续更改服务文件时的占位符。
启动 Nginx 服务:
使用 service 模块启动 Nginx 服务,并将其设置为开机启动。
配置防火墙:
使用 firewalld 模块开放 TCP 80 端口(HTTP 服务默认端口)首先设置为临时生效,然后设置为永久生效。
更改业务目录地址:
注意:这一步其实并没有更改 Nginx 的配置文件位置或内容,它只是将/usr/local/nginx/conf/nginx.conf 文件复制到同一个位置,并更改了文件的所有者和权限。可能是为了设置文件属性或作为后续更改配置文件的占位符。
通过Ansible进行自动化部署,我们可以大大减少人工操作的错误,提高我们的工作效率。而且,一旦我们的playbook编写完成,我们就可以反复使用它来部署我们的业务应用,无论是在测试环境还是在生产环境。
希望我的分享能对您有所帮助,如果您有任何问题或者想要了解更多关于Ansible的知识,欢迎随时向我提问。让我们一起提升效率,享受自动化部署带来的便捷吧!
敬请关注博主,我们将持续为您带来云计算行业及更多前沿技术的最新信息,助您把握技术动态,领先一步!”
若您渴望深入了解云计算知识,或希望与云计算、运维、网络等领域的精英们共同交流学习,欢迎您私信博主,引荐您加入专业交流群。在这里,您可以与各路大咖切磋技艺,共享行业前沿资讯,一同成长进步。期待您的参与,让我们共同开启云计算领域的探索之旅!




🌟亲爱的朋友们,你是否对云计算充满好奇,想要深入了解这一前沿科技?那么,现在就有一个绝佳的机会摆在你面前!🌟
💡**只要简单两步,你就能轻松获取珍贵的云计算资料一份!**💡
1️⃣ 立即关注博主:不错过任何一次与前沿科技近距离接触的机会!
2️⃣ 回复关键词“云计算资料”:打开通往云计算知识宝库的大门!
🎁这份资料包含了云计算的精华内容,无论是初学者还是专业人士,都能从中获得宝贵的启示和收获。🎁

原文作者:网络豆云计算学堂;如有侵权,请联系管理员删除。