公司需求需要批量部署nginx,闲来无事,改进了原先手动部署的方式,写了一个ansible-playbook
- hosts: webgather_facts: yesvars:ansible_ssh_common_args: '-o StrictHostKeyChecking=no'tasks:- name: add groupgroup:name: nginxstate: present- name: add useruser:name: nginxstate: presentgroup: nginxshell: /sbin/nologin- name: check pathstat:path: /usr/local/nginxregister: file_stat- name: unarchiveunarchive:src: /etc/ansible/files/nginx/nginx.tar.gzdest: /usr/local/owner: nginxgroup: nginxwhen: file_stat.stat.exists == False- name: check pathstat:path: /apps/nginx/confregister: file_stat_nginx- name: compile and installshell:cmd: "./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make && make install"chdir: "/usr/local/nginx"when: file_stat_nginx.stat.exists == False- name: chownshell:cmd: "chown -R nginx.nginx /apps/nginx && ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx"ignore_errors: yes- name: mkdir pidfile:path: /apps/nginx/runstate: directoryowner: nginxgroup: nginxrecurse: yes- name: conf filetemplate:src: /etc/ansible/files/nginx/nginx.confdest: /apps/nginx/conf/nginx.confowner: nginxgroup: nginx- name: mkdir pidfile:path: /apps/nginx/conf.dstate: directoryowner: nginxgroup: nginxrecurse: yes- name: conf.d filetemplate:src: /etc/ansible/files/nginx/bbs.com.confdest: /apps/nginx/conf.d/bbs.com.confowner: nginxgroup: nginx- name: service filetemplate:src: /etc/ansible/files/nginx/nginx.servicedest: /lib/systemd/system/nginx.servicechanged_when: False- name: start nginxservice:name: nginxstate: restartedenabled: yes
附加文件
bbs.com.conf
[root@devops nginx]#cat bbs.com.conf
server {listen 80;server_name bbs.com;root /apps/nginx/html;
}[root@devops nginx]#cat nginx.conf
worker_processes 1;
pid /apps/nginx/run/nginx.pid;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;include /apps/nginx/conf.d/*.conf;
}
添加service文件,方便后续管理
[root@devops nginx]#cat nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/apps/nginx/run/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=10000[Install]
WantedBy=multi-user.targe