Skip to content
This repository was archived by the owner on Mar 14, 2020. It is now read-only.

WIP: add ansible docker config #29

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions group_vars/studentenportal
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lets_encrypt_email: [email protected]
3 changes: 3 additions & 0 deletions group_vars/ubuntu
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
apt_cache_time: 3600
ansible_python_interpreter: /usr/bin/python3
ansible_user: root
1 change: 0 additions & 1 deletion group_vars/web_proxy

This file was deleted.

22 changes: 3 additions & 19 deletions inventory/production
Original file line number Diff line number Diff line change
@@ -1,21 +1,5 @@
###############################################################################
# Servers (with connection parameters)
###############################################################################
# Hostname Parameters
vshsr01.nine.ch ansible_ssh_user=root


###############################################################################
# Server class
###############################################################################

[ubuntu]
[studentenportal]
vshsr01.nine.ch

###############################################################################
# Infrastructure location
###############################################################################

# Nine, Zürich
[nine]
vshsr01.nine.ch
[ubuntu:children]
studentenportal
2 changes: 1 addition & 1 deletion provision
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
export ANSIBLE_FORCE_COLOR=true

# Execute playbook
exec ansible-playbook ./provision.yaml $@
exec ansible-playbook ./provision.yml $@

# --vault-id @prompt --vault-password-file ./secrets.yaml $@
7 changes: 0 additions & 7 deletions provision.yaml

This file was deleted.

12 changes: 12 additions & 0 deletions provision.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
- hosts: all
roles:
- role: base
tags: [base]

- hosts: studentenportal
roles:
- role: nickjj.docker
tags: [docker]
- role: studentenportal
tags: [studentenportal]
2 changes: 2 additions & 0 deletions roles/base/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package_update: False
reboot: False
2 changes: 2 additions & 0 deletions roles/base/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- name: restart sshd
service: name=sshd state=restarted
14 changes: 14 additions & 0 deletions roles/base/tasks/fail2ban.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
- name: ensure packages are installed
apt:
name: "{{ packages }}"
state: present
cache_valid_time: "{{ apt_cache_time | int }}"
vars:
packages:
- fail2ban

- name: ensure fail2ban is running
service:
name: fail2ban
state: started
11 changes: 11 additions & 0 deletions roles/base/tasks/firewall.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: ensure ssh is allowed
ufw:
rule: allow
name: OpenSSH

- name: ensure ufw is enabled
ufw:
state: enabled
direction: incoming
policy: deny
27 changes: 0 additions & 27 deletions roles/base/tasks/main.yaml

This file was deleted.

7 changes: 7 additions & 0 deletions roles/base/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
- import_tasks: firewall.yml
- import_tasks: packages.yml
- import_tasks: sshd.yml
- import_tasks: fail2ban.yml
- import_tasks: unattended-upgrades.yml
- import_tasks: reboot.yml
17 changes: 17 additions & 0 deletions roles/base/tasks/packages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
- name: ensure latest package versions are installed
apt:
name: "*"
state: latest
update_cache: yes
when: package_update

- name: remove dependencies that are no longer required
apt:
autoremove: yes
when: package_update

- name: remove useless packages from the cache
apt:
autoclean: yes
when: package_update
11 changes: 11 additions & 0 deletions roles/base/tasks/reboot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: reboot server
command: /sbin/shutdown -r +1 "Ansible-triggered Reboot"
async: 0
poll: 0
when: reboot

- name: wait for the server to finish rebooting
wait_for_connection:
delay: "80"
when: reboot
39 changes: 39 additions & 0 deletions roles/base/tasks/sshd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
- name: define preffered key exchange algorithms
lineinfile:
path: /etc/ssh/sshd_config
regexp: "^KexAlgorithms"
line: KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
notify: restart sshd

- name: define preffered ciphers
lineinfile:
path: /etc/ssh/sshd_config
regexp: "^Ciphers"
line: Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
notify: restart sshd

- name: define preffered message authentication codes
lineinfile:
path: /etc/ssh/sshd_config
regexp: "^MACs"
line: MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]
notify: restart sshd

#- name: only allow root to login through ssh
# lineinfile:
# path: /etc/ssh/sshd_config
# regexp: "^AllowUsers"
# line: AllowUsers root
# notify: restart sshd

- name: ensure ssh is allowed
ufw:
rule: allow
name: OpenSSH

- name: ensure ssh gets limited
ufw:
rule: limit
port: ssh
proto: tcp
25 changes: 14 additions & 11 deletions roles/base/tasks/unattended-upgrades.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
---
- name: Install unattended-upgrade packages
- name: ensure that unattended-upgrade packages are installed
apt:
name: "{{ item }}"
state: present
update-cache: yes
cache_valid_time: 3600
loop:
- unattended-upgrades
- update-notifier-common
name: "{{ packages }}"
state: present
cache_valid_time: "{{ apt_cache_time | int }}"
vars:
packages:
- unattended-upgrades
- update-notifier-common

- name: Create APT {{ item.src }} configuration
- name: ensure apt config {{ item.src }} exists
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: root
group: root
mode: 0644
loop:
- {src: "auto-upgrades", dest: "/etc/apt/apt.conf.d/20auto-upgrades"}
- {src: "unattended-upgrades", dest: "/etc/apt/apt.conf.d/50unattended-upgrades"}
- { src: "auto-upgrades", dest: "/etc/apt/apt.conf.d/20auto-upgrades" }
- {
src: "unattended-upgrades",
dest: "/etc/apt/apt.conf.d/50unattended-upgrades",
}
3 changes: 0 additions & 3 deletions roles/docker/files/daemon.json

This file was deleted.

86 changes: 0 additions & 86 deletions roles/docker/tasks/main.yaml

This file was deleted.

17 changes: 0 additions & 17 deletions roles/firewall/tasks/main.yaml

This file was deleted.

4 changes: 0 additions & 4 deletions roles/firewall/tasks/open-port.yaml

This file was deleted.

11 changes: 0 additions & 11 deletions roles/studentenportal/tasks/main.yaml

This file was deleted.

4 changes: 4 additions & 0 deletions roles/studentenportal/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
- import_tasks: traefik.yml
- import_tasks: postgres.yml
- import_tasks: studentenportal.yml
24 changes: 24 additions & 0 deletions roles/studentenportal/tasks/postgres.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
- name: ensure studentenportal network exists
docker_network:
name: studentenportal
vars:
ansible_python_interpreter: "/usr/bin/env python-docker"

- name: ensure the postgres container runs
docker_container:
name: postgres
image: postgres:9.3-alpine
pull: true
state: started
network_mode: bridge
volumes:
- /var/studentenportal/db:/var/lib/postgresql/data
env:
POSTGRES_USER: "{{ postgres_user }}"
POSTGRES_PASSWORD: "{{ postgres_password }}"
POSTGRES_DB: "{{ postgres_database }}"
networks:
- name: studentenportal
vars:
ansible_python_interpreter: "/usr/bin/env python-docker"
Loading