准备源码包:
[root@server1 salt]# pwd
/srv/salt
[root@server1 salt]# ls
apache _modules nfs nginx top.sls
[root@server1 salt]# cd nginx/
[root@server1 nginx]# ls
nginx-1.16.1.tar.gz
编辑init文件安装依赖性及解压源码包:
[root@server1 nginx]# vim init.sls
[root@server1 nginx]# cat init.sls
install-nginx:
pkg.installed:
- pkgs:
- gcc
- make
- pcre-devel
- openssl-devel
archive.extracted:
- name: /mnt #解压目录
- source: salt://nginx/nginx-1.16.1.tar.gz #源码包位置
先推送一下进行测试:
[root@server1 nginx]# salt server3 state.sls nginx
在server3查看:
[root@server3 salt]# ls /mnt/
nginx-1.16.1
[root@server3 salt]# cd /mnt/nginx-1.16.1/
[root@server3 nginx-1.16.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
可以看出解压成功。
接下来进行编译:
[root@server1 nginx]# vim init.sls
[root@server1 nginx]# cat init.sls
install-nginx:
pkg.installed:
- pkgs:
- gcc
- make
- pcre-devel
- openssl-devel
archive.extracted:
- name: /mnt
- source: salt://nginx/nginx-1.16.1.tar.gz
cmd.run:
- name: cd /mnt/nginx-1.16.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
其中cmd.run下面的creates表示判断文件是否存在,如果存在就不再运行,避免再次调用这个文件的时候重复运行。
推送测试:
[root@server1 nginx]# salt server3 state.sls nginx
推送成功表示nginx已经成功编译安装。
接下来需要编辑nginx启动脚本:
[root@server1 nginx]# vim nginx.service
[root@server1 nginx]# cat nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
以上内容参考:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/
更改init文件:
[root@server1 nginx]# vim init.sls
[root@server1 nginx]# cat init.sls
install-nginx:
pkg.installed:
- pkgs:
- gcc
- make
- pcre-devel
- openssl-devel
archive.extracted:
- name: /mnt
- source: salt://nginx/nginx-1.16.1.tar.gz
cmd.run:
- name: cd /mnt/nginx-1.16.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
file.managed:
- name: /lib/systemd/system/nginx.service
- source: salt://nginx/nginx.service
以上内容表示将启动脚本推送到minion,推送测试:
[root@server1 nginx]# salt server3 state.sls nginx
编辑服务管理脚本:
[root@server1 nginx]# vim service.sls
[root@server1 nginx]# cat service.sls
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/nginx.conf
- require:
- sls: nginx
service.running:
- name: nginx
- enable: true
- reload: true
- watch:
- file: /usr/local/nginx/conf/nginx.conf
require字段表示必须先运行nginx目录下的init文件才会运行这个文件,这么做时为了符合部署顺序,即先安装再启动。
同时需要准备配置文件:
[root@server1 nginx]# scp server3:/usr/local/nginx/conf/nginx.conf .
[root@server1 nginx]# ls
init.sls nginx-1.16.1.tar.gz nginx.conf nginx.service service.sls
更改init文件:
[root@server1 nginx]# vim init.sls
[root@server1 nginx]# cat init.sls
install-nginx:
pkg.installed:
- pkgs:
- gcc
- make
- pcre-devel
- openssl-devel
archive.extracted:
- name: /mnt
- source: salt://nginx/nginx-1.16.1.tar.gz
cmd.run:
- name: cd /mnt/nginx-1.16.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
file.managed:
- name: /lib/systemd/system/nginx.service
- source: salt://nginx/nginx.service
include:
- nginx.service
其中include字段表示在运行init.sls文件时还会运行nginx.service文件。
推送:
[root@server1 nginx]# salt server3 state.sls nginx
此时远程nginx部署成功。
当然也可以将init文件与nginx.service写到一起:
[root@server1 nginx]# vim init.sls
[root@server1 nginx]# cat init.sls
install-nginx:
pkg.installed:
- pkgs:
- gcc
- make
- pcre-devel
- openssl-devel
archive.extracted:
- name: /mnt
- source: salt://nginx/nginx-1.16.1.tar.gz
cmd.run:
- name: cd /mnt/nginx-1.16.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
file.managed:
- name: /lib/systemd/system/nginx.service
- source: salt://nginx/nginx.service
service.running:
- name: nginx
- enable: true
- reload: true
- require:
- file: /usr/local/nginx/conf/nginx.conf
- watch:
- file: /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/nginx.conf
直接推送就可以实现部署nginx:
[root@server1 nginx]# salt server3 state.sls nginx
部署成功后测试更改配置文件:
[root@server1 nginx]# vim nginx.conf
[root@server1 nginx]# cat nginx.conf | grep worker_processes
worker_processes 2;
[root@server1 nginx]# salt server3 state.sls nginx
以上表示将nginx 的worker进程设置为2(我们只给虚拟机分配了1个cpu因此默认有一个worker进程),推送后在server3查看:
[root@server3 ~]# ps ax
......
17964 ? Ss 0:00 nginx: master process /usr/local/nginx/sbin/nginx
18017 ? S 0:00 [kworker/0:0]
18078 ? S 0:00 [kworker/0:2]
18101 ? S 0:00 nginx: worker process
18102 ? S 0:00 nginx: worker process
可以看出设置成功。