ansible 배포 nginx 클 라 이언 트

ansible 에 캐릭터 모듈 이 있 습 니 다. 처음 배우 고 nginx 서버 를 배치 한 다음 에 관리 할 수 있 습 니 다.
먼저 공개 키 를 클 라 이언 트 에 전송:
[root@ansibleserver ~]# ssh-keygen
[root@ansibleserver ~]# ssh-copy-id 192.168.40.147

동기 화 시간:
[root@ansibleserver ~]# ntpdate 0.cn.pool.ntp.org
23 Oct 20:19:16 ntpdate[90632]: step time server 202.204.48.8 offset 62430.508769 sec
[root@centos3 ~]# ntpdate 0.cn.pool.ntp.org
23 Oct 20:19:27 ntpdate[9383]: adjust time server 202.204.48.8 offset -0.012253 sec

먼저 nginx 캐릭터 를 설치 하 는 경 로 를 정의 합 니 다:
[root@ansibleserver ~]# cat /etc/ansible/nginx.yaml
- hosts: 192.168.40.147
  remote_user: root
  roles:
  - nginx

그리고 role 디 렉 터 리 에 들 어가 캐릭터 퀘 스 트 를 만 듭 니 다:
[root@ansibleserver ~]# cd /etc/ansible/roles/
[root@ansibleserver roles]# cd nginx
[root@ansibleserver nginx]# ls
files  handlers  tasks  templates  vars

files 디 렉 터 리 는 소프트웨어 설치 패 키 지 를 저장 합 니 다.
handlers 디 렉 터 리 는 다른 main. yml 파일 의 트리거 를 정의 합 니 다. 최소한 main. yml 파일 이 있 습 니 다.
tasks 디 렉 터 리 는 설치 과정 을 정의 합 니 다. 최소한 main. yml 파일 이 있 습 니 다.
templates 디 렉 터 리 는 원 격 으로 보 내 는 설정 파일 을 정의 합 니 다.
vars 디 렉 터 리 는 변 수 를 정의 합 니 다. 최소한 main. yml 파일 이 있 습 니 다.
nginx 설치 패키지:
[root@ansibleserver nginx]# ls files/
nginx-1.12.0.tar.gz

트리거 를 정의 합 니 다. 조건 에서 출발 하면 nginx 는 reload 됩 니 다.
[root@ansibleserver nginx]# ls handlers/
main.yml
[root@ansibleserver nginx]# cat handlers/main.yml
- name: reload nginx
shell: /opt/nginx/sbin/nginx -s reload

nginx 설치 과정:
[root@ansibleserver nginx]# ls tasks/
main.yml
[root@ansibleserver nginx]# cat tasks/main.yml
- name: sent nginx
  copy: src=nginx-1.12.0.tar.gz dest=/tmp/nginx-1.12.0.tar.gz    ##         ,   files       。
- name: tar nginx
  shell: cd /tmp;tar -xf nginx-1.12.0.tar.gz     ##      。
- name: install packages
  yum: name={{ item }} state=latest        ##  with       。
  with_items:
  - openssl-devel
  - pcre-devel
  - name: install nginx
  shell: cd /tmp/nginx-1.12.0;./configure --user=nginx --group=nginx --prefix=/opt/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre;make && make install           ##    nginx
- name: useradd nginx
  shell: useradd nginx -s /sbin/nologin      ##  nginx  。
- name: copy nginx.conf
  template: src=nginx.conf dest=/opt/nginx/conf/nginx.conf    ##                ,   templates      。
  tags: copynginx.conf     ##     。
- name: start nginx
  shell: /opt/nginx/sbin/nginx    ##  nginx  
  notify: reload nginx    ##   ,                handlers      。
nginx    ,         ,           nginx。


[root@ansibleserver nginx]# ls templates/
nginx.conf
[root@ansibleserver nginx]# cat templates/nginx.conf
#user  nobody;
worker_processes  {{ ansible_processor_vcpus }};    ###ansible    ,      ansible 192.168.40.147 -m setup           。
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
#access_log  logs/access.log  main;
sendfile        on;
#tcp_nopush     on;
#keepalive_timeout  0;
keepalive_timeout  65;
#gzip  on;
server {
listen       {{ nginx_port }};        ###    , vars     。
server_name  {{ server_name }};    ###  , vars     。
#charset koi8-r;
#access_log  logs/host.access.log  main;
location / {
root   /web;
index  index.php index.html index.htm;
}
#error_page  404              /404.html;
# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
# location ~ \.php$ {
#     root           /web;
#     fastcgi_pass   127.0.0.1:9000;
#     fastcgi_index  index.php;
#     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
#     include        fastcgi_params;
# }
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename  alias  another.alias;
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;
#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;
#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;
#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
include vhosts/*.conf;    ###      include,     nginx              ,    。
}

클 라 이언 트 nginx 에 전송 할 프로필 의 변 수 를 정의 합 니 다:
[root@ansibleserver nginx]# ls vars/
main.yml
[root@ansibleserver nginx]# cat vars/main.yml
nginx_port: "8080"
server_name: "www.ls.com"

/ etc / ansible 디 렉 터 리 에서 실 행 됩 니 다.
[root@ansibleserver ansible]# ansible-playbook nginx.yaml
PLAY [192.168.40.147] *********************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.40.147]
TASK: [nginx | sent nginx] ****************************************************
ok: [192.168.40.147]
TASK: [nginx | tar nginx] *****************************************************
changed: [192.168.40.147]
TASK: [nginx | install packages] **********************************************
ok: [192.168.40.147] => (item=openssl-devel,pcre-devel)
TASK: [nginx | install nginx] *************************************************
changed: [192.168.40.147]
TASK: [nginx | useradd nginx] *************************************************
changed: [192.168.40.147]
TASK: [nginx | copy nginx.conf] ***********************************************
ok: [192.168.40.147]
TASK: [nginx | start nginx] ***************************************************
changed: [192.168.40.147]
NOTIFIED: [nginx | reload nginx] **********************************************
changed: [192.168.40.147]
PLAY RECAP ********************************************************************
192.168.40.147             : ok=9    changed=5    unreachable=0    failed=0

nginx 를 관리 하 는 작업 경 로 를 정의 합 니 다:
[root@ansibleserver ansible]# cat nginx_conf.yaml
- hosts: 192.168.40.147
  remote_user: root
  roles:
  - nginx_conf

설정 은 설치 와 기본적으로 같 습 니 다:
[root@ansibleserver nginx_conf]# cd /etc/ansible/roles/nginx_conf/
[root@ansibleserver nginx_conf]# tree
.
├── files
│   └── nginx-1.12.0.tar.gz
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
│   └── server.conf
└── vars
└── main.yml
5 directories, 5 files

tasks 에서 클 라 이언 트 nginx 프로필 에 include 를 이용 하여 가상 호스트 를 추가 합 니 다.
[root@ansibleserver nginx_conf]# cat tasks/main.yml
- name: mkdir vhosts
  shell: mkdir /opt/nginx/conf/vhosts
- name: copy nginx.conf
  template: src=server.conf dest=/opt/nginx/conf/vhosts/{{ server_name }}.conf
  tags: copynginx.conf
  notify: reload nginx

그리고 똑 같은 방식 으로 집행 하면 됩 니 다.
[root@ansibleserver ansible]# ansible-playbook nginx_conf.yaml 
PLAY [192.168.40.147] ********************************************************* 
GATHERING FACTS *************************************************************** 
ok: [192.168.40.147]
TASK: [nginx_conf | mkdir vhosts] ********************************************* 
changed: [192.168.40.147]
TASK: [nginx_conf | copy nginx.conf] ****************************************** 
changed: [192.168.40.147]
NOTIFIED: [nginx_conf | reload nginx] ***************************************** 
changed: [192.168.40.147]
PLAY RECAP ******************************************************************** 
192.168.40.147             : ok=4    changed=3    unreachable=0    failed=0

좋은 웹페이지 즐겨찾기