initial commit with redbot and vaultwarden migrated
This commit is contained in:
commit
15c1b9c2ea
18 changed files with 267 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
.vaultpasswd
|
||||
3
ansible.cfg
Normal file
3
ansible.cfg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[defaults]
|
||||
roles_path = ./roles
|
||||
inventory = inventory/home.yml
|
||||
10
group_vars/vault.yml
Normal file
10
group_vars/vault.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
$ANSIBLE_VAULT;1.1;AES256
|
||||
34666337636238346633666130656239363230316532373261353632643834643933353032663964
|
||||
3062636238396535333534353030383165626666353531630a336435306532313666656231633335
|
||||
66666238363665323262653630316230376232333561626337386434383866653038616133616430
|
||||
3631623636626532650a623763633535666563623864633434646231646530616364623236323166
|
||||
66333264376665356439663031616438336237366435306630393162323637626431306330356161
|
||||
31303730306231643962633232626235643566663836646137303563373034663064636632336663
|
||||
39353862353039303366336361363134626361373961613764363962613031376366643932623936
|
||||
36386334386663306363653032363336393432643335653066656638626364646561313532323938
|
||||
62666163616361386633313131386665383963356566363465313734396635393934
|
||||
11
inventory/home.yml
Normal file
11
inventory/home.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
all:
|
||||
hosts:
|
||||
lead:
|
||||
ansible_host: lead
|
||||
ansible_user: knightos
|
||||
fedora:
|
||||
hosts:
|
||||
lead:
|
||||
caddy:
|
||||
hosts:
|
||||
lead:
|
||||
16
playbooks/home-services.yml
Normal file
16
playbooks/home-services.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
- name: Setup Fedora hosts
|
||||
hosts: fedora
|
||||
become: true
|
||||
roles:
|
||||
- fedora
|
||||
|
||||
- name: Setup Docker and services on home server
|
||||
hosts: lead
|
||||
become: true
|
||||
vars_files:
|
||||
- ../group_vars/vault.yml
|
||||
roles:
|
||||
- docker
|
||||
- caddy
|
||||
- vaultwarden
|
||||
- redbot
|
||||
3
roles/caddy/defaults/main.yml
Normal file
3
roles/caddy/defaults/main.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
service_name: caddy
|
||||
docker_image: caddy
|
||||
docker_image_version: alpine
|
||||
51
roles/caddy/tasks/main.yml
Normal file
51
roles/caddy/tasks/main.yml
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
- name: Ensure Caddy user
|
||||
ansible.builtin.import_tasks: ../../common/tasks/create_service_user.yml
|
||||
|
||||
- name: Set Caddy facts
|
||||
ansible.builtin.set_fact:
|
||||
caddyfiles_directory: '{{ service_root }}/caddyfiles'
|
||||
|
||||
- name: Ensure Caddy directories exist and are writable
|
||||
ansible.builtin.file:
|
||||
path: '{{ item }}'
|
||||
state: directory
|
||||
owner: '{{ service_user }}'
|
||||
group: '{{ service_user }}'
|
||||
mode: '700'
|
||||
loop:
|
||||
- '{{ service_root }}/data'
|
||||
- '{{ service_root }}/config'
|
||||
- '{{ service_root }}/conf'
|
||||
- '{{ caddyfiles_directory }}'
|
||||
|
||||
- name: Set Caddyfile to import caddyfiles directory
|
||||
ansible.builtin.copy:
|
||||
content: |
|
||||
{
|
||||
auto_https off
|
||||
}
|
||||
import /caddyfiles/*
|
||||
dest: '{{ service_root }}/conf/Caddyfile'
|
||||
owner: '{{ service_user }}'
|
||||
group: '{{ service_user }}'
|
||||
mode: '644'
|
||||
|
||||
- name: Deploy caddy compose service
|
||||
ansible.builtin.import_role:
|
||||
name: compose-service
|
||||
vars:
|
||||
docker_volumes:
|
||||
- '{{ service_root }}/data:/data'
|
||||
- '{{ service_root }}/config:/config'
|
||||
- '{{ service_root }}/conf:/etc/caddy'
|
||||
- '{{ caddyfiles_directory }}:/caddyfiles'
|
||||
docker_ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "443:443/udp"
|
||||
|
||||
- name: Add container to Caddy network
|
||||
community.docker.docker_network:
|
||||
name: Caddy
|
||||
connected:
|
||||
- '{{ service_name }}'
|
||||
28
roles/common/tasks/create_service_user.yml
Normal file
28
roles/common/tasks/create_service_user.yml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
- name: Assert mandatory variables
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- service_user is defined
|
||||
|
||||
- name: Ensure service user "{{ service_user }}" exists
|
||||
ansible.builtin.user:
|
||||
name: "{{ service_user }}"
|
||||
comment: "Service user for {{ service_user }}"
|
||||
shell: /sbin/nologin
|
||||
# TODO: service_root should somehow be reflected here
|
||||
home: "/opt/{{ service_user }}"
|
||||
create_home: true
|
||||
system: true
|
||||
|
||||
- name: Ensure directory for "{{ service_user }}"
|
||||
ansible.builtin.file:
|
||||
# TODO: service_root
|
||||
path: "/opt/{{ service_user }}"
|
||||
state: directory
|
||||
owner: "{{ service_user }}"
|
||||
group: "{{ service_user }}"
|
||||
mode: '755'
|
||||
|
||||
- name: Get user info from passwd
|
||||
ansible.builtin.getent:
|
||||
database: passwd
|
||||
key: '{{ service_user }}'
|
||||
6
roles/compose-service/defaults/main.yml
Normal file
6
roles/compose-service/defaults/main.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
service_user: '{{ service_name }}'
|
||||
service_root: '{{ "/opt/" ~ service_name }}'
|
||||
docker_volumes: []
|
||||
docker_env: {}
|
||||
docker_ports: []
|
||||
use_docker_user: true
|
||||
32
roles/compose-service/tasks/main.yml
Normal file
32
roles/compose-service/tasks/main.yml
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
- name: Deploy service
|
||||
block:
|
||||
- name: Assert mandatory variables are defines
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- service_name is defined
|
||||
- docker_image is defined
|
||||
|
||||
- name: Setup {{ service_user }} user and directories
|
||||
ansible.builtin.import_tasks: ../../common/tasks/create_service_user.yml
|
||||
|
||||
- name: Deploy {{ service_name }} docker-compose
|
||||
ansible.builtin.template:
|
||||
src: 'service.yml.j2'
|
||||
dest: '{{ service_root }}/docker-compose.yml'
|
||||
owner: '{{ service_user }}'
|
||||
group: '{{ service_user }}'
|
||||
mode: '0644'
|
||||
|
||||
- name: Start {{ service_name }} container
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: '{{ service_root }}'
|
||||
state: present
|
||||
remove_orphans: true
|
||||
recreate: always
|
||||
|
||||
- name: Add container to Caddy network
|
||||
community.docker.docker_network:
|
||||
name: Caddy
|
||||
connected:
|
||||
- '{{ service_name }}'
|
||||
appends: true
|
||||
27
roles/compose-service/templates/service.yml.j2
Normal file
27
roles/compose-service/templates/service.yml.j2
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
services:
|
||||
{{ service_name }}:
|
||||
container_name: {{ service_name }}
|
||||
image: {{ docker_image }}{% if docker_image_version %}:{{ docker_image_version }}{% endif %}
|
||||
|
||||
{% if use_docker_user %}
|
||||
user: "{{ getent_passwd[service_user].1 }}:{{ getent_passwd[service_user].2 }}"
|
||||
{% endif %}
|
||||
{% if docker_volumes %}
|
||||
volumes:
|
||||
{% for volume in docker_volumes %}
|
||||
- {{ volume }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if docker_env %}
|
||||
environment:
|
||||
{% for key, value in docker_env.items() %}
|
||||
{{ key }}: {{ value }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if docker_ports %}
|
||||
ports:
|
||||
{% for port in docker_ports %}
|
||||
- "{{ port }}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
restart: unless-stopped
|
||||
21
roles/docker/tasks/main.yml
Normal file
21
roles/docker/tasks/main.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
- name: Add Docker repo
|
||||
ansible.builtin.yum_repository:
|
||||
name: docker
|
||||
description: Docker Fedora repo
|
||||
baseurl: https://download.docker.com/linux/fedora/$releasever/$basearch/stable/
|
||||
gpgkey: https://download.docker.com/linux/fedora/gpg
|
||||
|
||||
- name: Install Docker
|
||||
ansible.builtin.dnf5:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-compose-plugin
|
||||
state: present
|
||||
|
||||
- name: Enable and start Docker service
|
||||
ansible.builtin.service:
|
||||
name: docker
|
||||
enabled: true
|
||||
state: started
|
||||
4
roles/fedora/tasks/main.yml
Normal file
4
roles/fedora/tasks/main.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
- name: Install python3-libdnf
|
||||
ansible.builtin.command:
|
||||
cmd: dnf install python3-libdnf5 -y
|
||||
creates: /usr/lib64/python*/site-packages/libdnf5
|
||||
6
roles/redbot/defaults/main.yml
Normal file
6
roles/redbot/defaults/main.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
service_name: redbot
|
||||
docker_image: phasecorex/red-discordbot
|
||||
docker_image_version:
|
||||
data_directory: "{{ service_root }}/data"
|
||||
discord_token: "{{ vault.discord_bot_token }}"
|
||||
bot_prefix: .
|
||||
18
roles/redbot/tasks/main.yml
Normal file
18
roles/redbot/tasks/main.yml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
- name: Ensure data directory exists
|
||||
ansible.builtin.file:
|
||||
path: '{{ data_directory }}'
|
||||
state: directory
|
||||
owner: '{{ service_user }}'
|
||||
group: '{{ service_user }}'
|
||||
mode: '700'
|
||||
|
||||
- name: Deploy Redbot
|
||||
ansible.builtin.import_role:
|
||||
name: compose-service
|
||||
vars:
|
||||
docker_volumes:
|
||||
- '{{ data_directory }}:/data'
|
||||
docker_env:
|
||||
TOKEN: '{{ discord_token }}'
|
||||
PREFIX: '{{ bot_prefix }}'
|
||||
use_docker_user: false
|
||||
4
roles/vaultwarden/defaults/main.yml
Normal file
4
roles/vaultwarden/defaults/main.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
service_name: vaultwarden
|
||||
docker_image: vaultwarden/server
|
||||
docker_image_version: latest
|
||||
data_directory: "{{ service_root }}/data"
|
||||
21
roles/vaultwarden/tasks/main.yml
Normal file
21
roles/vaultwarden/tasks/main.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
- name: Ensure data directory exists
|
||||
ansible.builtin.file:
|
||||
path: '{{ data_directory }}'
|
||||
state: directory
|
||||
owner: '{{ service_user }}'
|
||||
group: '{{ service_user }}'
|
||||
mode: '700'
|
||||
|
||||
- name: Deploy Vaultwarden
|
||||
ansible.builtin.import_role:
|
||||
name: compose-service
|
||||
vars:
|
||||
docker_volumes:
|
||||
- '{{ data_directory }}:/data'
|
||||
|
||||
- name: Deploy Caddyfile for vaultwarden
|
||||
ansible.builtin.template:
|
||||
src: vaultwarden.caddy.j2
|
||||
dest: '{{ caddyfiles_directory }}/vaultwarden'
|
||||
mode: '644'
|
||||
when: "'caddy' in group_names"
|
||||
5
roles/vaultwarden/templates/vaultwarden.caddy.j2
Normal file
5
roles/vaultwarden/templates/vaultwarden.caddy.j2
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
http://{{ service_name }}.{{ ansible_hostname }} {
|
||||
reverse_proxy {{ service_name }}:80
|
||||
encode zstd gzip
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue