feat: Webserver installation by Ansible
This commit is contained in:
parent
27df2eb01c
commit
9ee2c6d83f
2
webserver/.gitignore
vendored
Normal file
2
webserver/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
hosts.ini
|
||||
*.pub
|
||||
18
webserver/README.md
Normal file
18
webserver/README.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Install Webserver
|
||||
|
||||
## How to
|
||||
|
||||
Copy then change values of hosts example file
|
||||
|
||||
```bash
|
||||
$ cp hosts.example.ini hosts.ini
|
||||
```
|
||||
|
||||
Then run the playbook:
|
||||
|
||||
```bash
|
||||
DBPASSWORD="$(date +%s | sha256sum | base64 | head -c 32 ; echo)"
|
||||
|
||||
ansible-playbook -i hosts.ini playbook.yml \
|
||||
-e db_root_password=$DBPASSWORD
|
||||
```
|
||||
5
webserver/hosts.example.ini
Normal file
5
webserver/hosts.example.ini
Normal file
@ -0,0 +1,5 @@
|
||||
[webservers]
|
||||
example.com
|
||||
|
||||
[webservers:vars]
|
||||
ansible_python_interpreter=/usr/bin/python3
|
||||
19
webserver/playbook.yml
Normal file
19
webserver/playbook.yml
Normal file
@ -0,0 +1,19 @@
|
||||
---
|
||||
|
||||
- hosts: webservers
|
||||
become: true
|
||||
|
||||
pre_tasks:
|
||||
- name: install commons
|
||||
apt:
|
||||
name:
|
||||
- python3-pip
|
||||
update_cache: yes
|
||||
|
||||
roles:
|
||||
- {role: nginx, tags: nginx}
|
||||
- {role: wwwuser, tags: wwwuser}
|
||||
- {role: certbot, tags: certbot}
|
||||
- {role: php, tags: php}
|
||||
- {role: mariadb, tags: mariadb}
|
||||
- {role: firewall, tags: firewall}
|
||||
17
webserver/roles/certbot/tasks/main.yml
Normal file
17
webserver/roles/certbot/tasks/main.yml
Normal file
@ -0,0 +1,17 @@
|
||||
- name: install letsencrypt
|
||||
apt:
|
||||
name:
|
||||
- letsencrypt
|
||||
- python3-certbot-nginx
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: create letsencrypt's challenge directory
|
||||
file:
|
||||
name: /var/www/letsencrypt
|
||||
state: directory
|
||||
|
||||
- name: generate letsencrypt's dhparams
|
||||
shell: openssl dhparam -out /etc/letsencrypt/ssl-dhparams.pem 2048
|
||||
args:
|
||||
creates: /etc/letsencrypt/ssl-dhparams.pem
|
||||
14
webserver/roles/firewall/tasks/main.yml
Normal file
14
webserver/roles/firewall/tasks/main.yml
Normal file
@ -0,0 +1,14 @@
|
||||
- name: allow ssh
|
||||
ufw:
|
||||
rule: allow
|
||||
name: OpenSSH
|
||||
|
||||
- name: allow http/https
|
||||
ufw:
|
||||
rule: allow
|
||||
name: Nginx Full
|
||||
|
||||
- name: enable and deny by default
|
||||
ufw:
|
||||
state: enabled
|
||||
default: deny
|
||||
30
webserver/roles/mariadb/tasks/main.yml
Normal file
30
webserver/roles/mariadb/tasks/main.yml
Normal file
@ -0,0 +1,30 @@
|
||||
- name: install
|
||||
apt:
|
||||
name:
|
||||
- mariadb-server
|
||||
- libmysqlclient-dev
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: install python client
|
||||
pip:
|
||||
name: mysqlclient
|
||||
state: present
|
||||
|
||||
- name: ensure service is start
|
||||
service:
|
||||
name: mysql
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: change root password
|
||||
mysql_user:
|
||||
name: root
|
||||
password: '{{ db_root_password }}'
|
||||
host: 'localhost'
|
||||
|
||||
- name: write root credentials
|
||||
template:
|
||||
src: my.cnf.j2
|
||||
dest: /root/.my.cnf
|
||||
mode: '0600'
|
||||
3
webserver/roles/mariadb/templates/my.cnf.j2
Normal file
3
webserver/roles/mariadb/templates/my.cnf.j2
Normal file
@ -0,0 +1,3 @@
|
||||
[client]
|
||||
user=root
|
||||
password={{ db_root_password }}
|
||||
4
webserver/roles/nginx/handlers/main.yml
Normal file
4
webserver/roles/nginx/handlers/main.yml
Normal file
@ -0,0 +1,4 @@
|
||||
- name: restart nginx
|
||||
service:
|
||||
name: nginx
|
||||
state: restarted
|
||||
15
webserver/roles/nginx/tasks/main.yml
Normal file
15
webserver/roles/nginx/tasks/main.yml
Normal file
@ -0,0 +1,15 @@
|
||||
- name: install nginx
|
||||
apt:
|
||||
name:
|
||||
- nginx
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: define www user as default user
|
||||
replace:
|
||||
path: "/etc/nginx/nginx.conf"
|
||||
regexp: '{{ item.from }}'
|
||||
replace: "{{ item.to }}"
|
||||
with_items:
|
||||
- {from: '^user (.+);$', to: 'user {{ www_user }};'}
|
||||
notify: restart nginx
|
||||
17
webserver/roles/php/defaults/main.yml
Normal file
17
webserver/roles/php/defaults/main.yml
Normal file
@ -0,0 +1,17 @@
|
||||
php_version: 8.1
|
||||
|
||||
php_packages:
|
||||
- php{{ php_version }}-common
|
||||
- php{{ php_version }}-zip
|
||||
- php{{ php_version }}-pdo
|
||||
- php{{ php_version }}-mbstring
|
||||
- php{{ php_version }}-tokenizer
|
||||
- php{{ php_version }}-xml
|
||||
- php{{ php_version }}-opcache
|
||||
- php{{ php_version }}-mysql
|
||||
- php{{ php_version }}-imap
|
||||
- php{{ php_version }}-curl
|
||||
- php{{ php_version }}-memcached
|
||||
- php{{ php_version }}-intl
|
||||
- php{{ php_version }}-gd
|
||||
- php{{ php_version }}-bcmath
|
||||
4
webserver/roles/php/handlers/main.yml
Normal file
4
webserver/roles/php/handlers/main.yml
Normal file
@ -0,0 +1,4 @@
|
||||
- name: restart php-fpm
|
||||
service:
|
||||
name: php{{ php_version }}-fpm
|
||||
state: restarted
|
||||
35
webserver/roles/php/tasks/main.yml
Normal file
35
webserver/roles/php/tasks/main.yml
Normal file
@ -0,0 +1,35 @@
|
||||
- name: add repository
|
||||
apt_repository:
|
||||
repo: ppa:ondrej/php
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: install package
|
||||
apt:
|
||||
name: "php{{ php_version }}-fpm"
|
||||
state: present
|
||||
update_cache: yes
|
||||
install_recommends: no
|
||||
|
||||
- name: install extensions
|
||||
apt:
|
||||
name: "{{ php_packages | list }}"
|
||||
state: present
|
||||
install_recommends: no
|
||||
|
||||
- name: change default version
|
||||
alternatives:
|
||||
name: php
|
||||
path: /usr/bin/php{{ php_version }}
|
||||
|
||||
- name: define www user as php-fpm's default user
|
||||
replace:
|
||||
path: "/etc/php/{{ php_version }}/fpm/pool.d/www.conf"
|
||||
regexp: '{{ item.from }}'
|
||||
replace: "{{ item.to }}"
|
||||
with_items:
|
||||
- {from: '^user = (.+)$', to: 'user = {{ www_user }}'}
|
||||
- {from: '^group = (.+)$', to: 'group = {{ www_user }}'}
|
||||
- {from: '^listen.owner = (.+)$', to: 'listen.owner = {{ www_user }}'}
|
||||
- {from: '^listen.group = (.+)$', to: 'listen.group = {{ www_user }}'}
|
||||
notify: restart php-fpm
|
||||
3
webserver/roles/wwwuser/defaults/main.yml
Normal file
3
webserver/roles/wwwuser/defaults/main.yml
Normal file
@ -0,0 +1,3 @@
|
||||
www_user: pilot
|
||||
www_group: pilot
|
||||
www_home: "/home/{{ www_user }}"
|
||||
37
webserver/roles/wwwuser/tasks/main.yml
Normal file
37
webserver/roles/wwwuser/tasks/main.yml
Normal file
@ -0,0 +1,37 @@
|
||||
- name: create wwwuser group
|
||||
group:
|
||||
name: "{{ www_group }}"
|
||||
state: present
|
||||
system: true
|
||||
|
||||
- name: create wwwuser user
|
||||
user:
|
||||
name: "{{ www_user }}"
|
||||
group: "{{ www_group }}"
|
||||
comment: "Web user"
|
||||
shell: /bin/bash
|
||||
home: "{{ www_home }}"
|
||||
system: true
|
||||
state: present
|
||||
|
||||
- name: set ssh authorized keys
|
||||
authorized_key:
|
||||
user: "{{ www_user }}"
|
||||
key: "{{ item }}"
|
||||
with_items:
|
||||
- "{{ lookup('file', 'id.pub') }}"
|
||||
|
||||
- name: create app's directory
|
||||
file:
|
||||
path: "{{ www_home }}/apps"
|
||||
state: directory
|
||||
owner: "{{ www_user }}"
|
||||
group: "{{ www_group }}"
|
||||
|
||||
- name: add permission to wwwuser to reload php-fpm
|
||||
lineinfile:
|
||||
dest: /etc/sudoers
|
||||
state: present
|
||||
regexp: '^{{ www_user }} ALL=NOPASSWD: /usr/sbin/service php{{ php_version }}-fpm reload$'
|
||||
line: '{{ www_user }} ALL=NOPASSWD: /usr/sbin/service php{{ php_version }}-fpm reload'
|
||||
validate: 'visudo -cf %s'
|
||||
Loading…
x
Reference in New Issue
Block a user