initial commit with redbot and vaultwarden migrated
This commit is contained in:
commit
15c1b9c2ea
18 changed files with 267 additions and 0 deletions
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