A nossa segunda role irá instalar e configurar o Servidor Web (Apache2 + PHP) e todos os módulos necessários. No diretório do projeto, vamos criar a nossa role:
cd roles
ansible-galaxy init web-server
No diretório roles/web-server/tasks
vamos criar o arquivo install-Ubuntu-focal.yml
:
---
- name: Incluindo Váriaveis
include_vars: "vars-{{ansible_distribution}}-{{ansible_distribution_release}}.yml"
- name: Instalando servidor web
apt:
name: "{{ packages }}"
state: present
- name: Criando Vhost
template: src=templates/vhost.conf.j2 dest="{{sites_available}}/{{item.id|string}}-{{item.record}}.{{item.zone}}.conf"
with_items: "{{apps}}"
- name: Ativando Vhost
file:
src: "{{sites_available}}/{{item.id|string}}-{{item.record}}.{{item.zone}}.conf"
dest: "{{sites_enabled}}/{{item.id|string}}-{{item.record}}.{{item.zone}}.conf"
state: "link"
with_items: "{{apps}}"
notify: Reiniciar Apache2
E vamos incluir este arquivo no roles/web-server/tasks/main.yml
- include: "install-packages-{{ansible_distribution}}-{{ansible_distribution_release}}.yml"
No diretório roles/web-server/vars
vamos criar o arquivo vars-Ubuntu-focal.yml
:
apachedir: /etc/apache2
apachelogdir: /var/log/apache2
apachedocroot: /var/www
conf_available: "{{apachedir}}/conf-available"
conf_enabled: "{{apachedir}}/conf-enabled"
mods_available: "{{apachedir}}/mods-available"
mods_enabled: "{{apachedir}}/mods-enabled"
sites_available: "{{apachedir}}/sites-available"
sites_enabled: "{{apachedir}}/sites-enabled"
packages:
- apache2
- libapache2-mod-php
- php-common
- php7.4-cli
- php7.4-common
- php7.4-curl
- php7.4-fpm
- php7.4-gd
- php7.4-gmp
- php7.4-intl
- php7.4-json
- php7.4-mbstring
- php7.4-mysql
- php7.4-opcache
- php7.4-readline
- php7.4-soap
- php7.4-xml
- php7.4-xmlrpc
- php7.4-zip
No diretório roles/web-server/handlers
vamos editar o arquivo main.yml
:
- name: Reiniciar Apache2
service:
name: apache2
state: restarted
No diretório roles/web-server/templates
vamos adicionar o arquivo vhost.conf.j2
:
<VirtualHost *:80>
ServerAdmin {{ item.admin}}
ServerName {{ item.dominio }}
ServerAlias www.{{ item.dominio }}
DocumentRoot /var/www/{{ item.dominio }}
<Directory />
Options FollowSymLinks
</Directory>
<Directory /var/www/{{ item.dominio }}>
Options Indexes FollowSymLinks MultiViews
Order allow,deny
allow from all
AllowOverride All
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
SetEnv BD_HOST {{ item.dbhost }}
SetEnv BD_USER {{ item.dbuser }}
SetEnv BD_PASS {{ item.dbpass }}
SetEnv BD_NAME {{ item.dbname }}
SetEnv AUTH_KEY {{ item.wp_auth_key }}
SetEnv SECURE_AUTH_KEY {{ item.wp_secure_auth_key }}
SetEnv LOGGED_IN_KEY {{ item.wp_logged_in_key }}
SetEnv NONCE_KEY {{ item.wp_nonce_key }}
SetEnv AUTH_SALT {{ item.wp_auth_salt }}
SetEnv SECURE_AUTH_SALT {{ item.wp_secure_auth_salt }}
SetEnv LOGGED_IN_SALT {{ item.wp_logged_in_salt }}
SetEnv NONCE_SALT {{ item.wp_nonce_salt }}
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/{{ item.dominio }}.error.log
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/{{ item.dominio }}.access.log combined
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Ná raiz do projeto vamos criar um diretório de váriáveis globais:
mkdir group_vars
cd group_vars
touch all.yml
E vamos criar as variáveis de duas aplicações:
---
apps:
- { id: '0001',
admin: [email protected],
dominio: diegoneves.tk,
apphost: 187.84.229.244,
dbhost: 187.84.229.245,
dbname: diegotk,
dbuser: sa_diegotk,
dbpass: bIPf48nUplke34p,
wp_auth_key: B1P9l8OID5K7b97O7F45oLaxr,
wp_secure_auth_key: bIjidIM9k4cRQnXNV2bp261yo,
wp_logged_in_key: 13w12155ejOmT2O33IBN95u4u,
wp_nonce_key: 184jY2k760U8674588z0grs6Q,
wp_auth_salt: ls4397gruzVXP729ao4mht0Ph,
wp_secure_auth_salt: rU0qYZ0T9L4NNI6914Yn8K63e,
wp_logged_in_salt: N69zsxunT5h8zd7dTxwB21zWO,
wp_nonce_salt: 529YF370r8gF8NAJ646uwqN1M }
- { id: '0002',
admin: [email protected],
dominio: diegoneves.ml,
apphost: 187.84.229.244,
dbhost: 187.84.229.245,
dbname: diegoml,
dbuser: sa_diegoml,
dbpass: Y64X90eVR5g833I,
wp_auth_key: 5k98yJ15W48999PTX2L44aT8H,
wp_secure_auth_key: 2B57ZqPb5DHujSleR65NM4cdI,
wp_logged_in_key: emybEzEiMus7yqMCvnSxWRPhi,
wp_nonce_key: 03d7y8Pb292n62W043w9e2V5x,
wp_auth_salt: 6odMo1zZ6GKc0HLfNL110RHGY,
wp_secure_auth_salt: AP46pKBnm40Hu75CgRCHK5r6l,
wp_logged_in_salt: L3l5fg6KU028Z5L7WUf26CX5R,
wp_nonce_salt: 1949qYs9pzvthu9k77cHRTRzK }
E agora vamos adicionar a execussão dessa role no arquivo main.yml
na raiz do projeto:
- hosts: web
become: yes
user: ubuntu
roles:
- { role: web-server, tags: ["web-server_role"]}