Initial commit
This commit is contained in:
parent
e99efc68e3
commit
bba5262e57
8 changed files with 231 additions and 0 deletions
12
hosts.yml
Normal file
12
hosts.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
# file: hosts
|
||||||
|
|
||||||
|
nginx_cluster:
|
||||||
|
hosts:
|
||||||
|
ws01:
|
||||||
|
ansible_host: 10.10.10.14
|
||||||
|
ws02:
|
||||||
|
ansible_host: 10.10.10.18
|
||||||
|
|
||||||
|
vars:
|
||||||
|
ansible_user: ansible
|
7
nginx_cluster.yml
Normal file
7
nginx_cluster.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
# file: nginx_cluster.yml
|
||||||
|
|
||||||
|
- hosts: nginx_cluster
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- nginx_cluster
|
20
roles/nginx_cluster/defaults/main.yml
Normal file
20
roles/nginx_cluster/defaults/main.yml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
# file: roles/nginx_cluster/defaults/main.yml
|
||||||
|
|
||||||
|
nginx_cluster_user: root
|
||||||
|
nginx_cluster_private_key: "/root/.ssh/lsyncd"
|
||||||
|
|
||||||
|
nginx_cluster_temp_dir: "/tmp/lsyncdSyncTemp"
|
||||||
|
|
||||||
|
nginx_cluser_sync_site_dir: "/var/www/html"
|
||||||
|
nginx_cluser_sync_config_dir: "/etc/nginx"
|
||||||
|
nginx_cluser_sync_php_config_dir: "/etc/php.d"
|
||||||
|
|
||||||
|
nginx_cluser_lsyncd_mode: "rsyncssh"
|
||||||
|
nginx_cluser_lsyncd_delay: "0"
|
||||||
|
nginx_cluser_lsyncd_rsync_times: "true"
|
||||||
|
nginx_cluser_lsyncd_rsync_archive: "true"
|
||||||
|
nginx_cluser_lsyncd_rsync_compress: "true"
|
||||||
|
nginx_cluser_lsyncd_rsync_perms: "true"
|
||||||
|
nginx_cluser_lsyncd_rsync_acls: "true"
|
||||||
|
nginx_cluser_lsyncd_rsync_owner: "true"
|
16
roles/nginx_cluster/handlers/main.yml
Normal file
16
roles/nginx_cluster/handlers/main.yml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
# file: roles/haproxy/handlers/main.yml
|
||||||
|
|
||||||
|
- name: Daemon Reload
|
||||||
|
systemd:
|
||||||
|
daemon_reload: yes
|
||||||
|
|
||||||
|
- name: Restart lsyncd
|
||||||
|
service:
|
||||||
|
name: lsyncd
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: Restart SSH
|
||||||
|
service:
|
||||||
|
name: sshd
|
||||||
|
state: restarted
|
83
roles/nginx_cluster/tasks/main.yml
Normal file
83
roles/nginx_cluster/tasks/main.yml
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
---
|
||||||
|
# file: roles/nginx_cluster/tasks/main.yml
|
||||||
|
|
||||||
|
- name: Install EPEL RPM
|
||||||
|
package:
|
||||||
|
name: "https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_distribution_major_version }}.noarch.rpm"
|
||||||
|
state: present
|
||||||
|
disable_gpg_check: True
|
||||||
|
when: ansible_distribution == 'RedHat' or ansible_distribution == 'AlmaLinux' or ansible_distribution == 'Rocky'
|
||||||
|
|
||||||
|
- name: Install prereq packages
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- nginx
|
||||||
|
- php
|
||||||
|
- lsyncd
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
- name: Create temp directory
|
||||||
|
file:
|
||||||
|
path: "{{ nginx_cluster_temp_dir }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ nginx_cluster_user }}"
|
||||||
|
group: "{{ nginx_cluster_user }}"
|
||||||
|
mode: '700'
|
||||||
|
|
||||||
|
- name: Create sync directory
|
||||||
|
file:
|
||||||
|
path: "{{ nginx_cluser_sync_site_dir }}"
|
||||||
|
state: directory
|
||||||
|
owner: "nginx"
|
||||||
|
group: "nginx"
|
||||||
|
mode: '755'
|
||||||
|
|
||||||
|
- name: Generate ssh keypair for cluster communication
|
||||||
|
user:
|
||||||
|
name: "{{ nginx_cluster_user }}"
|
||||||
|
generate_ssh_key: yes
|
||||||
|
ssh_key_type: ed25519
|
||||||
|
ssh_key_bits: 4096
|
||||||
|
ssh_key_file: "{{ nginx_cluster_private_key }}"
|
||||||
|
ssh_key_passphrase: ""
|
||||||
|
force: no
|
||||||
|
|
||||||
|
- name: Get the public key
|
||||||
|
slurp:
|
||||||
|
src: "{{ nginx_cluster_private_key }}.pub"
|
||||||
|
register: slurped_pub_key
|
||||||
|
|
||||||
|
- name: Decode the pub key and store as fact
|
||||||
|
set_fact:
|
||||||
|
nginx_cluster_public_key: "{{ slurped_pub_key.content | b64decode }}"
|
||||||
|
|
||||||
|
- name: Setup access for other servers
|
||||||
|
include_tasks: setup-server.yml
|
||||||
|
loop: "{{ groups['nginx_cluster']|difference([inventory_hostname]) }}"
|
||||||
|
loop_control:
|
||||||
|
extended: yes
|
||||||
|
|
||||||
|
- name: Create variable of other members IPs to be included into the cluster
|
||||||
|
set_fact: nodelist={%for host in groups['nginx_cluster']|difference([inventory_hostname])%}"{{hostvars[host].ansible_host}}"{% if not loop.last %},{% endif %}{% endfor %}
|
||||||
|
|
||||||
|
- name: Update lsyncd config
|
||||||
|
template:
|
||||||
|
src: "lsynd.conf.j2"
|
||||||
|
dest: "/etc/lsyncd.conf"
|
||||||
|
notify: Restart lsyncd
|
||||||
|
|
||||||
|
- name: Start and enable lsyncd
|
||||||
|
service:
|
||||||
|
name: lsyncd
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Start and enable nginx
|
||||||
|
service:
|
||||||
|
name: nginx
|
||||||
|
state: started
|
||||||
|
|
||||||
|
- name: Start and enable php
|
||||||
|
service:
|
||||||
|
name: php-fpm
|
||||||
|
state: started
|
20
roles/nginx_cluster/tasks/setup-server.yml
Normal file
20
roles/nginx_cluster/tasks/setup-server.yml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
# file: roles/nginx_cluster/tasks/setup-server.yml
|
||||||
|
|
||||||
|
- name: "{{ hostvars[item]['ansible_hostname'] }} - Setup block for ssh connection between members"
|
||||||
|
blockinfile:
|
||||||
|
path: /etc/ssh/sshd_config.d/60-nginx-cluster.conf
|
||||||
|
marker: "# {mark} ANSIBLE MANAGED BLOCK {{ hostvars[item]['ansible_hostname'] }}"
|
||||||
|
create: true
|
||||||
|
block: |
|
||||||
|
## Allow root login from cluster member {{ hostvars[item]['ansible_host'] }}
|
||||||
|
Match Address {{ hostvars[item]['ansible_host'] }}
|
||||||
|
PermitRootLogin yes
|
||||||
|
notify: Restart SSH
|
||||||
|
when: nginx_cluster_user == "root"
|
||||||
|
|
||||||
|
- name: "{{ hostvars[item]['ansible_hostname'] }} - Setup authorized key for the user"
|
||||||
|
authorized_key:
|
||||||
|
user: "{{ nginx_cluster_user }}"
|
||||||
|
state: present
|
||||||
|
key: "{{ hostvars[item]['nginx_cluster_public_key'] }}"
|
69
roles/nginx_cluster/templates/lsynd.conf.j2
Normal file
69
roles/nginx_cluster/templates/lsynd.conf.j2
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
targets = { {{ nodelist }} }
|
||||||
|
|
||||||
|
settings {
|
||||||
|
logfile = "/var/log/lsyncd/lsyncd.log",
|
||||||
|
statusFile = "/var/log/lsyncd/lsyncd.status",
|
||||||
|
statusInterval = 1,
|
||||||
|
nodaemon = true,
|
||||||
|
insist = true
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, target in ipairs( targets )
|
||||||
|
do
|
||||||
|
-- Site Data Sync
|
||||||
|
sync {
|
||||||
|
default.{{ nginx_cluser_lsyncd_mode }},
|
||||||
|
host = target,
|
||||||
|
source = "{{ nginx_cluser_sync_site_dir }}",
|
||||||
|
targetdir = "{{ nginx_cluser_sync_site_dir }}",
|
||||||
|
delay = {{ nginx_cluser_lsyncd_delay }},
|
||||||
|
rsync = {
|
||||||
|
times = {{ nginx_cluser_lsyncd_rsync_times }},
|
||||||
|
archive = {{ nginx_cluser_lsyncd_rsync_archive }},
|
||||||
|
compress = {{ nginx_cluser_lsyncd_rsync_compress }},
|
||||||
|
perms = {{ nginx_cluser_lsyncd_rsync_perms }},
|
||||||
|
acls = {{ nginx_cluser_lsyncd_rsync_acls }},
|
||||||
|
owner = {{ nginx_cluser_lsyncd_rsync_owner }},
|
||||||
|
rsh = "/usr/bin/ssh -l {{ nginx_cluster_user }} -i {{ nginx_cluster_private_key }} -o StrictHostKeyChecking=no",
|
||||||
|
temp_dir = "{{ nginx_cluster_temp_dir }}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Nginx Config Sync
|
||||||
|
sync {
|
||||||
|
default.{{ nginx_cluser_lsyncd_mode }},
|
||||||
|
host = target,
|
||||||
|
source = "{{ nginx_cluser_sync_config_dir }}",
|
||||||
|
targetdir = "{{ nginx_cluser_sync_config_dir }}",
|
||||||
|
delay = {{ nginx_cluser_lsyncd_delay }},
|
||||||
|
rsync = {
|
||||||
|
times = {{ nginx_cluser_lsyncd_rsync_times }},
|
||||||
|
archive = {{ nginx_cluser_lsyncd_rsync_archive }},
|
||||||
|
compress = {{ nginx_cluser_lsyncd_rsync_compress }},
|
||||||
|
perms = {{ nginx_cluser_lsyncd_rsync_perms }},
|
||||||
|
acls = {{ nginx_cluser_lsyncd_rsync_acls }},
|
||||||
|
owner = {{ nginx_cluser_lsyncd_rsync_owner }},
|
||||||
|
rsh = "/usr/bin/ssh -l {{ nginx_cluster_user }} -i {{ nginx_cluster_private_key }} -o StrictHostKeyChecking=no",
|
||||||
|
temp_dir = "{{ nginx_cluster_temp_dir }}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- PHP Config Sync
|
||||||
|
sync {
|
||||||
|
default.{{ nginx_cluser_lsyncd_mode }},
|
||||||
|
host = target,
|
||||||
|
source = "{{ nginx_cluser_sync_php_config_dir }}",
|
||||||
|
targetdir = "{{ nginx_cluser_sync_php_config_dir }}",
|
||||||
|
delay = {{ nginx_cluser_lsyncd_delay }},
|
||||||
|
rsync = {
|
||||||
|
times = {{ nginx_cluser_lsyncd_rsync_times }},
|
||||||
|
archive = {{ nginx_cluser_lsyncd_rsync_archive }},
|
||||||
|
compress = {{ nginx_cluser_lsyncd_rsync_compress }},
|
||||||
|
perms = {{ nginx_cluser_lsyncd_rsync_perms }},
|
||||||
|
acls = {{ nginx_cluser_lsyncd_rsync_acls }},
|
||||||
|
owner = {{ nginx_cluser_lsyncd_rsync_owner }},
|
||||||
|
rsh = "/usr/bin/ssh -l {{ nginx_cluster_user }} -i {{ nginx_cluster_private_key }} -o StrictHostKeyChecking=no",
|
||||||
|
temp_dir = "{{ nginx_cluster_temp_dir }}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
4
site.yml
Normal file
4
site.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
## This playbook deploys the whole application stack in this site.
|
||||||
|
|
||||||
|
- import_playbook: nginx_cluster.yml
|
Loading…
Reference in a new issue