-
Ansible: 앤서블을 이용한 Nginx TLS 자동화 (feat. Vagrant)Ansible 2021. 9. 23. 13:11
이번 포스팅은 vagrant를 이용해서 vm을 생성한 후,
앤서블을 이용해서 nginx를 https로 배포합니다.
환경은 다음과 같습니다.
- ansible core : ubuntu 18.04 로컬에서 진행합니다.
- virtual box에서 ubuntu 18.04 이미지를 사용합니다.
최종 디렉토리 구조는 다음과 같습니다.
seung@seung-15Z990-VR5DK:~/vagrant/nginx$ tree . . ├── ansible.cfg ├── files │ ├── nginx.crt │ └── nginx.key ├── hosts ├── templates │ ├── index.html.j2 │ └── nginx.conf.j2 ├── ubuntu-bionic-18.04-cloudimg-console.log ├── Vagrantfile └── web-tls.yml
1. vm 생성하기
Vagrantfile을 작성합니다.
VAGRANTFILE_API_VERSION= "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box='ubuntu/bionic64' config.vm.network "forwarded_port" , guest: 80 , host: 8080 config.vm.network "forwarded_port" , guest: 443 , host: 8443 end
로컬 8443 포트와 vm의 443번 포트를 바인딩합니다.
vm을 생성합니다.
vagrant up
2. ansible 설정
ansible 사용을 위한 hosts파일과 ansible.cfg 파일을 작성합니다.
vagrant ssh-config 커맨드를 참고하여 작성합니다.
< hosts >
nginx ansible_host=127.0.0.1 ansible_port=2222 ansible_python_interpreter=/usr/bin/python3
사용할 vm의 hostname을 nginx라고 합니다.
< ansible.cfg >
[defaults] inventory = hosts remote_user = vagrant private_key_file = .vagrant/machines/default/virtualbox/private_key host_key_checking = False
사용할 inventory명과 user, 그리고 vagrant ssh-config를 통해 알아낸 private key의 위치를 적어줍니다.
3. templates 디렉토리 생성하기
template 폴더를 생성한 뒤 nginx configuration에 사용할 파일을 생성합니다.
jinja2 템플릿을 사용할 것이므로 j2 확장자를 이용합니다.
<index.html.j2>
<html> <head> <title>Welcome to ansible</title> </head> <body> <h1>nginx, configured by Ansible</h1> <p>If you can see this, Ansible successfully installed nginx.</p> <p>Running on {{ inventory_hostname }}</p> </body> </html>
<nginx.conf.j2>
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; listen 443 ssl; root /usr/share/nginx/html; index index.html index.htm; server_name {{ server_name }}; ssl_certificate {{ cert_file }}; ssl_certificate_key {{ key_file }}; location / { try_files $uri $uri/ =404; } }
4. key 생성하기
files 폴더를 생성한 후, files 내부에서 tls 사용을 위한 key와 인증서를 생성합니다.
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -subj /CN=localhost \ -keyout files/nginx.key -out nginx.crt
5. ansible-playbook 실행하기
마지막으로 ansible-playbook을 작성합니다.
<web-tls.yml>
--- - name: Configure webserver with nginx and tls hosts: nginx # nginx 호스트에 대해서 실행할 playbook become: True # root 권한으로 실행 vars: # ansible에서 사용할 변수 지정 key_file: /etc/nginx/ssl/nginx.key cert_file: /etc/nginx/ssl/nginx.crt conf_file: /etc/nginx/sites-available/default server_name: localhost tasks: - name: Install nginx apt: name=nginx update_cache=yes cache_valid_time=3600 - name: create directories for TLS certificates file: path=/etc/nginx/ssl state=directory - name: copy TLS key copy: src=files/nginx.key dest={{ key_file }} owner=root mode=0600 notify: restart nginx - name: copy TLS certificate copy: src=files/nginx.crt dest={{ cert_file }} notify: restart nginx # template 모듈을 이용하여 j2 확장자를 처리 - name: copy nginx config file template: src=templates/nginx.conf.j2 dest={{ conf_file }} notify: restart nginx - name: enable configuration file: dest=/etc/nginx/sites-enabled/default src={{ conf_file }} state=link notify: restart nginx - name: copy index.html template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644 # task에 의해 notify된 경우에 실행 handlers: - name: restart nginx service: name=nginx state=restarted
ansible-playbook을 실행합니다.
ansible-playbook web-tls.yml
6. nginx 설치 확인하기
ansible-playbook이 완료되면 https://localhost:8443으로 접속해서 Nginx가 잘 설치 되었는지 확인합니다.
반응형'Ansible' 카테고리의 다른 글
Ansible: 디렉토리 구조와 커맨드 정리(feat. Vagrant) (0) 2021.09.18 Vagrant를 이용한 Minikube 환경 구성 (0) 2021.09.04 Ansible 디버그(Debug)와 디버거(Debugger) (0) 2021.08.29 Ansible를 이용한 nfs 서버와 클라이언트 구성 (feat. CentOS) (0) 2021.08.26 Ansible를 이용한 Timezone 설정 (feat. CentOS) (0) 2021.08.26