Ansible 가이드: LEMP Stack용 Ansible 플레이북 만들기
이 페이지에서
- 1단계 - Ansible 플레이북 프로젝트 설정\n
- 2단계 - 디렉토리 구조에 대한 Ansible 역할 생성\n
- 3단계 - 호스트 및 site.yml 설정\n
- 3단계 - 공통 역할 설정\n
- 4단계 - 웹 역할 설정\n
- 5단계 - db 역할 설정\n
- 6단계 - Ansible 플레이북 실행\n
- 7단계 - 테스트
- 참조
Ansible은 소프트웨어 애플리케이션 배포, 클라우드 프로비저닝 및 구성 관리를 자동화하는 간단한 자동화 도구입니다. Control Machines라는 단일 위치에서 많은 수의 서버 노드를 관리하고 제어하는 데 도움이 되는 서버 오케스트레이션 도구입니다. Ansible은 2012년 Michael DeHaan에 의해 만들어졌으며 Python 및 Powershell로 작성되었습니다.
이 튜토리얼에서는 Ubuntu 18.04 서버에서 LEMP 스택을 프로비저닝하기 위한 기본 Ansible Playbook을 생성하는 방법을 보여줍니다. WordPress, Nextcloud 등과 같은 다른 PHP 프로젝트 애플리케이션용으로 확장할 수 있는 기본 Ansible 플레이북을 만드는 방법을 배웁니다.
전제 조건
- 2 우분투 OS.
- 10.5.5.20 가능
- 10.5.5.26 조항\n
우리가 할 일:
- Ansible Playbook 프로젝트 설정\n
- Ansible 플레이북 역할 디렉토리 구조 생성\n
- 호스트 및 site.yml 설정\n
- 공통 역할 설정 - 기본 설정\n
- 웹 역할 설정 - Nginx 및 PHP-FPM 구성\n
- DB 역할 설정 - MySQL 데이터베이스 구성\n
- 테스트
1단계 - Ansible 플레이북 프로젝트 설정
Ansible 플레이북은 단일 또는 서버 호스트 그룹에서 실행하기 위해 보내는 일련의 지침입니다. 자동화가 작업으로 정의되고 패키지 설치, 파일 편집과 같은 모든 작업이 ansible 모듈에 의해 수행되는 ansible-provisioning을 나타냅니다.
Ansible 플레이북에는 프로비저닝 서버의 호스트 및 사용자 정보, 프로비저닝 서버에 구현될 작업 목록, 템플릿 및 사용자 지정 구성, 템플릿 및 작업의 변수 그룹을 포함한 몇 가지 기본 구성이 포함되어 있습니다.
먼저 ansible-control 머신에 마스터 프로젝트 디렉토리를 생성합니다. 마스터 프로젝트 디렉토리에는 모든 플레이북 디렉토리, 파일 및 구성이 저장됩니다.
project-lemp라는 Ansible 프로젝트 디렉토리를 만들고 그 디렉토리로 이동합니다.
mkdir project-lemp/
cd project-lemp이제 새 구성 파일 hosts 및 site.yml을 만든 다음, roles라는 새 디렉터리를 만듭니다.
touch hosts site.yml
mkdir -p roles/구성에 대한 세부 정보:
호스트 - ansible이 관리하는 서버에 대한 정보를 포함하는 인벤토리 파일입니다. 이를 통해 인벤토리 파일 자체를 보다 쉽게 관리하고 확장할 수 있는 서버 그룹을 만들 수 있습니다. INI 및 YAML 형식을 포함하여 다양한 형식으로 인벤토리 파일을 생성할 수 있습니다.
site.yml - 사용 가능한 역할을 사용하여 관리할 호스트 그룹이 포함된 마스터 플레이북 파일입니다.
역할 - 서버를 프로비저닝하는 데 사용될 Ansible 플레이북 그룹입니다. Ansible 역할에는 자체 디렉토리 구조가 있으며 각 역할에는 태스크, 핸들러, 변수 등과 같은 디렉토리가 포함됩니다.
2단계 - 디렉터리 구조에 대한 Ansible 역할 생성
이 단계에서는 ansible-galaxy 명령을 사용하여 ansible roles 디렉토리를 생성하려고 했습니다. 공통 역할과 웹 역할이라는 두 가지 역할을 생성합니다.
project-lemp 디렉터리 내에서 역할 디렉터리로 이동합니다.
cd roles/
아래의 ansible-galaxy 명령을 실행하여 일반 및 웹 역할에 대한 역할 구조 디렉터리 및 파일을 생성합니다.
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db그런 다음 다음 명령을 사용하여 사용 가능한 모든 역할 디렉토리 구조를 확인하십시오.
tree .
아래와 같이 결과가 표시됩니다.
3단계 - 호스트 및 site.yml 설정
호스트 파일에는 Ansible이 관리하는 서버의 목록과 그룹이 포함됩니다. 이 가이드에서는 구성원이 server01이고 IP 주소가 10.5.5.26인 lemp라는 그룹을 만듭니다.
vim 편집기를 사용하여 호스트 파일을 편집합니다.
vim hosts
아래에 구성을 붙여넣습니다.
[lemp]
server01 ansible_host=10.5.5.26저장하고 닫습니다.
다음으로 site.yml 구성 파일을 편집합니다.
vim site.yml
아래에 구성을 붙여넣으십시오.
---
- hosts: lemp
remote_user: hakase
become: yes
roles:
- common
- web
- db저장하고 닫습니다.
3단계 - 공통 역할 설정
이 단계에서는 공통 역할을 설정하려고 했습니다. 그러기 위해서는 해야 할 작업 목록을 만들어야 합니다.
공통 역할에서 수행할 작업 목록 아래에 있습니다.
- 저장소 변경
- 저장소 업데이트
- 패키지를 최신 버전으로 업그레이드
- 서버 시간대 설정
이제 공통 디렉토리로 이동하여 tasks/main.yml 구성을 편집하십시오.
cd common/
vim tasks/main.yml리포지토리 변경을 위한 작업을 만들고 파일 디렉터리의 기본 sources.list를 원격 호스트 /etc/apt/에 복사하는 복사 모듈을 사용합니다.
- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
copy:
src: sources.list
dest: /etc/apt/
backup: yes리포지토리 업데이트 작업을 만들고 apt 모듈을 사용하여 모든 패키지를 최신 버전으로 업그레이드합니다.
- name: Update repository and Upgrade packages
apt:
upgrade: dist
update_cache: yes이제 ansible timezone 모듈을 사용하여 시스템 시간대를 구성하는 작업을 생성합니다.
- name: Setup timezone to Asia/Jakarta
timezone:
name: Asia/Jakarta
state: latest저장하고 닫습니다.
그런 다음 파일 디렉토리 내에 새 리포지토리 구성 sources.list를 만듭니다.
vim files/sources.list
서버 위치에서 가장 가까운 저장소를 선택하십시오. 아래는 내 것입니다.
deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse저장하고 닫습니다.
마지막으로 공통 역할 구성이 완료되었습니다.
4단계 - 웹 역할 설정
이 단계에서는 웹 역할을 설정하려고 했습니다. Nginx 웹 서버, 일부 기본 확장이 있는 PHP-FPM 설치, Nginx로 PHP-FPM 구성 등 일부 작업을 수행합니다.
다음은 웹 역할에서 수행할 세부 작업입니다.
- Nginx 설치
- PHP-FPM 설치
- php.ini 구성
- 가상 호스트 만들기\n
- phpinfo 파일 추가
웹 디렉토리로 이동하여 tasks/main.yml 파일을 편집합니다.
cd web/
vim tasks/main.ymlapt 모듈을 사용하여 nginx 설치를 위한 첫 번째 작업을 만듭니다.
- name: Install Nginx
apt:
name: nginx
state: latest이제 몇 가지 기본 확장을 사용하여 PHP-FPM을 설치하기 위한 작업을 생성합니다. 그리고 다중 패키지 설치의 경우 아래와 같은 Python 목록 형식을 사용할 수 있습니다.
- name: Instal PHP-FPM
apt:
name: ['php','php-fpm','php-common','php-cli','php-curl']
state: latest다음으로 blockinfile 모듈을 사용하여 php.ini 구성에 새 줄을 추가합니다. 그리고 줄 끝에 php.ini 파일을 구성한 후 php-fpm 서비스를 다시 시작하도록 ansible에 알립니다.
- name: Configure php.ini
blockinfile:
dest: /etc/php/{{ php_version }}/fpm/php.ini
block: |
date.time = Asia/Jakarta
cgi-fix_pathinfo = 0
backup: yes
notify: restart php-fpm이제 템플릿 모듈을 사용하여 nginx 가상 호스트 구성을 복사합니다. 템플릿 모듈은 템플릿 디렉토리에서 원격 서버로 구성을 복사합니다. jinja2 가상 호스트 템플릿 vhost.j2를 /etc/nginx/sites-enabled/ 디렉토리에 복사하고 마지막으로 nginx 서비스를 다시 시작하도록 ansible에 알립니다.
- name: Create Nginx virtual host
template:
src: vhost.j2
dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
notify: restart nginx그런 다음 파일 모듈을 사용하여 웹 루트 디렉토리를 생성하기 위한 새 작업을 생성하고 index.php 템플릿을 여기에 복사합니다.
- name: Create web-root directory
file:
path: /var/www/{{ domain_name }}
state: directory
- name: Upload index.html and info.php files
template:
src: index.php.j2
dest: /var/www/{{ domain_name }}/index.php저장하고 닫습니다.
이제 nginx 및 php-fpm 서비스를 다시 시작하기 위한 핸들러를 구성하려고 합니다. vim 편집기를 사용하여 handlers/main.yml 구성을 편집합니다.
vim 핸들러/main.yml
아래에 구성을 붙여넣으십시오.
- name: restart nginx
service:
name: nginx
state: restarted
enabled: yes
- name: restart php-fpm
service:
name: php{{ php_version }}-fpm
state: restarted
enabled: yes저장하고 닫습니다.
다음으로 vars/main.yml 구성을 편집합니다. 구성 맨 위에 변수 구성 {{ php_version }} 및 {{ domain_name }}이 표시됩니다. 이러한 변수는 PHP 버전에 대한 환경 설정과 사용될 도메인 이름을 나타냅니다. 이 변수는 기본 구성을 편집하지 않고 변수 구성 vars/main.yml만 편집하면 되기 때문에 ansible을 더 재사용 가능하게 만듭니다.
vim 편집기를 사용하여 변수 구성 vars/main.yml을 편집합니다.
vim vars/main.yml
아래에 구성을 붙여넣으십시오.
php_version: 7.2
domain_name: hakase-labs.io저장하고 닫습니다.
이제 templates/ 디렉토리에 jinja2 템플릿 구성 index.php.j2 및 vhost.j2를 생성합니다.
vim templates/index.php.j2
아래에 구성을 붙여넣습니다.
<html>
<body>
<h1><center>index.html for domain {{ domain_name }}</center></h1>
<p>
<p>
<?php
phpinfo();
?>
</body>
</html>저장하고 닫습니다.
그런 다음 nginx 가상 호스트 구성 vhost.j2에 대한 템플릿을 만듭니다.
vim templates/vhost.j2
아래에 구성을 붙여넣으십시오.
server {
listen 80;
listen [::]:80;
root /var/www/{{ domain_name }};
index index.php index.html index.htm index.nginx-debian.html;
server_name {{ domain_name }};
location / {
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}구성을 저장하고 닫으면 웹 역할 구성이 완료됩니다.
5단계 - db 역할 설정
이 단계에서는 MySQL 데이터베이스 설치 및 구성을 위한 db 역할을 구성하려고 했습니다.
다음은 db 역할에서 수행할 세부 작업입니다.
- mysql 설치
- MySQL 데이터베이스 생성
- MySQL 사용자 만들기
- mysql 재시작
db 디렉토리로 이동하여 tasks/main.yml 구성을 편집합니다.
cd db/
vim tasks/main.yml이제 여러 패키지 설치를 위해 apt 모듈 및 python 목록 형식을 사용하여 MySQL 패키지를 설치합니다.
- name: Install MySQL
apt:
name: ['mysql-server','mysql-client','python-mysqldb']
state: latest
notify: restart mysql그런 다음 MySQL 데이터베이스 및 사용자를 생성하기 위한 새 작업을 생성한 다음 데이터베이스에 사용자의 모든 권한을 부여합니다.
- name: Create database
mysql_db:
name: '{{ db_name }}'
state: present
- name: Create user for the database
mysql_user:
name: '{{ db_user }}'
password: '{{ db_pass }}'
encrypted: yes
priv: '{{ db_name }}.*:ALL'
state: present저장하고 닫습니다.
다음으로 handlers/main.yml 구성을 편집합니다.
vim handlers/main.yml
MySQL 서비스를 다시 시작하기 위한 작업 구성을 붙여넣습니다.
- name: restart mysql
service:
name: mysql
state: restarted
enabled: yes저장하고 닫습니다.
그런 다음 vars 변수 구성 vars/main.yml을 편집합니다.
vim vars/main.yml
아래의 MySQL 데이터베이스 및 사용자 구성에 대해 이러한 변수를 붙여넣습니다.
db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'저장하고 닫습니다.
db_pass 변수에는 MySQL 암호화된 암호가 있으며 온라인 도구를 사용하여 암호화된 MySQL 암호를 생성할 수 있습니다.
6단계 - Ansible 플레이북 실행
Ansible 프로젝트 디렉토리로 이동합니다.
cd project-lemp/
아래의 ansible-playbook 명령을 실행합니다.
ansible-playbook -i hosts site.yml
이제 ansible은 호스트에 할당한 모든 역할을 실행합니다. 완료되면 아래와 같이 결과가 표시됩니다.
오류가 없는지 확인하십시오.
7단계 - 테스트
웹 브라우저를 열고 주소 표시줄 http://hakase-labs.io에 도메인 이름을 입력합니다.
그러면 아래와 같이 phpinfo가 포함된 인덱스 페이지가 표시됩니다.
PHP-FPM과 Nginx가 작동 중입니다.
다음으로 서버 터미널로 돌아가 mysql 역할 변수에서 생성한 사용자와 암호를 사용하여 MySQL 서버에 로그인합니다.
mysql -u hakase -p
PASSWORD: hakasepass사용자가 소유한 데이터베이스 목록을 확인합니다.
show databases;
그러면 MySQL 셸에 로그인되고 목록에 hakase-db라는 데이터베이스가 표시됩니다.
마지막으로 LEMP 스택 설치 및 구성을 위한 Ansible Playbook이 생성되고 성공적으로 테스트되었습니다.
참조