Commit a9e02377 authored by JooHan Hong's avatar JooHan Hong

ansible, 2021-03-08, update13

parent 8c750e81
Pipeline #5122 passed with stages
in 2 seconds
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# Ansible의 Jinja2 템플릿을 이용한 Nginx 설정 배포
> Nginx 설정배포를 자동화 할 수 있다.
## 배포 조건
- 각 서버마다 로그기록 기준은 **IP 주소의 끝자리**이다(eg, 123.123.123.**123**). 즉, 만약 `일괄배포로 수행`할 시 로그서버에서 중복된 내역 및 로그가 누락될 수 있는 이슈가 있다.
- default.conf 의 설정에 FQDN 서비스도메인이 100개라고 가정해보자.
- Inventory 파일에 `mip_num` 이라는 호스트 변수를 추가하여, 이를 변수화하여 배포한다.
## Nginx default.conf 파일의 Review
```bash
server { #서비스명
listen 80;
server_name FQDN;
access_log /var/log/nginx/서비스명-{{ mip_num }}.log weblog;
root /www/서비스명;
include /etc/nginx/public_params;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
...중략
```
## Inventory 설정
```bash
# cat hosts
[ALL_HOSTS]
172.16.0.100 managed_ip=172.16.0.100 des="2020-12-03"
[ALL_HOSTS_OK]
```
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로 **ALL_HOSTS_OK** 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
## Host Variables 설정
```bash
# cat host_vars/172.16.0.100
ansible_ssh_host: 172.16.0.100
ansible_ssh_port: SSH_포트번호
ansible_ssh_user: 사용자 아이디
ansible_ssh_pass: "사용자 패스워드"
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: "!root_패스워드"
ansible_python_interpreter: python2.7
```
## Playbook 설정
```python
---
- name: Nginx Config File COPY Playbook
hosts: ALL_HOSTS
vars:
time: "{{lookup('pipe','date \"+%Y%m%d\"')}}"
tasks:
- name: /etc/nginx/conf.d/default.conf file backup copy check
stat:
path: /etc/nginx/conf.d/default.conf_{{ time }}
register: default_conf_backup
- name: /etc/nginx/conf.d/default.conf backup
command: cp -rf /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf_{{ time }}
when: default_conf_backup.stat.exists == False
- name: Local Directory Create
local_action: command mkdir -p NGINX_REWRITE/{{ time }}/{{ managed_ip }}
- name: /etc/nginx/conf.d/default.conf configuration template
template: src=templates/default.conf.j2 dest=/etc/nginx/conf.d/default.conf mode=0644
register: default_conf
- name: Nginx Configure file fetch
fetch:
src: "{{ item }}"
dest: NGINX_REWRITE/{{ time }}/{{ managed_ip }}/
flat: yes
with_items:
['/etc/nginx/conf.d/default.conf']
- name: Nginx Daemon Reload
service:
name: nginx
state: reloaded
enabled: yes
```
`Nginx 설정`에 대한 Playbook 분석
* [ ] 위의 Playbook은 미리 사전에 Nginx의 default.conf 파일을 Fetch해왔고, 수정했다고 가정한다.
* [ ] 큰 틀에서는 기존 설정을 백업하고, 미리 약속된 설정을 배포하는데 유용하다.
* [ ] 설정 적용이 완료되면, Nginx 데몬은 Reload 된다. 즉, 서비스에 영향을 받는다.
## playbook 실행
```bash
# ansible-playbook -i hosts nginx_deploy.yml
```
......@@ -9,4 +9,4 @@
| NO | ITEM | Content | 비고 |
| ------ | ------ | ------ | ------ |
| 1 | Nginx Install | [GO](./Nginx/) | |
| 2 | OS Package Installing (apt) | [GO](./APT/) | |
| 2 | Nginx Config Deploy | [GO](./Config/) | |
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment