公司需求需要批量部署nginx,闲来无事,改进了原先手动部署的方式,写了一个ansible-playbook
- hosts: web
gather_facts: yes
vars:
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
tasks:
- name: add group
group:
name: nginx
state: present
- name: add user
user:
name: nginx
state: present
group: nginx
shell: /sbin/nologin
- name: check path
stat:
path: /usr/local/nginx
register: file_stat
- name: unarchive
unarchive:
src: /etc/ansible/files/nginx/nginx.tar.gz
dest: /usr/local/
owner: nginx
group: nginx
when: file_stat.stat.exists == False
- name: check path
stat:
path: /apps/nginx/conf
register: file_stat_nginx
- name: compile and install
shell:
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: chown
shell:
cmd: "chown -R nginx.nginx /apps/nginx && ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx"
ignore_errors: yes
- name: mkdir pid
file:
path: /apps/nginx/run
state: directory
owner: nginx
group: nginx
recurse: yes
- name: conf file
template:
src: /etc/ansible/files/nginx/nginx.conf
dest: /apps/nginx/conf/nginx.conf
owner: nginx
group: nginx
- name: mkdir pid
file:
path: /apps/nginx/conf.d
state: directory
owner: nginx
group: nginx
recurse: yes
- name: conf.d file
template:
src: /etc/ansible/files/nginx/bbs.com.conf
dest: /apps/nginx/conf.d/bbs.com.conf
owner: nginx
group: nginx
- name: service file
template:
src: /etc/ansible/files/nginx/nginx.service
dest: /lib/systemd/system/nginx.service
changed_when: False
- name: start nginx
service:
name: nginx
state: restarted
enabled: 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