Add Container Mailarchive
This commit is contained in:
parent
303e16c1a2
commit
f49a059675
8 changed files with 133 additions and 0 deletions
13
ansible/roles/deploy_container_mailarchive/defaults/main.yml
Normal file
13
ansible/roles/deploy_container_mailarchive/defaults/main.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
container_mailarchive_version: latest
|
||||
container_mailarchive_domain: mailarchive.example.com
|
||||
container_mailarchive_postgres_version: 17-alpine
|
||||
container_mailarchive_postgres_user: postgres_user
|
||||
container_mailarchive_postgres_password: postgres_password
|
||||
container_mailarchive_auth_enable: true
|
||||
container_mailarchive_auth_user: login_user
|
||||
container_mailarchive_auth_password: login_password
|
||||
container_mailarchive_session_timeout: 60 # Minutes
|
||||
container_mailarchive_sync_interval: 15 # Minutes
|
||||
container_mailarchive_sync_timeout: 60 # Minutes
|
||||
container_mailarchive_connection_timeout: 180 # Seconds
|
||||
container_mailarchive_command_timeout: 60 # Seconds
|
0
ansible/roles/deploy_container_mailarchive/meta/main.yml
Normal file
0
ansible/roles/deploy_container_mailarchive/meta/main.yml
Normal file
26
ansible/roles/deploy_container_mailarchive/tasks/main.yml
Normal file
26
ansible/roles/deploy_container_mailarchive/tasks/main.yml
Normal file
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
- name: Ensure data directories exist
|
||||
ansible.builtin.file:
|
||||
path: "{{ container_base_dir }}/{{ item.dir }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
become: false
|
||||
loop:
|
||||
- {dir: "data/db"}
|
||||
|
||||
- name: Deploy Docker Compose and .env files
|
||||
ansible.builtin.template:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ container_base_dir }}/{{ item.dest }}"
|
||||
mode: '0644'
|
||||
loop:
|
||||
- { src: 'docker-compose.yml.j2', dest: 'docker-compose.yml' }
|
||||
- { src: '.env.j2', dest: '.env' }
|
||||
become: false
|
||||
|
||||
- name: Start Container
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ container_base_dir }}"
|
||||
pull: always
|
||||
docker_host: "unix:///run/user/1000/docker.sock"
|
||||
become: false
|
13
ansible/roles/deploy_container_mailarchive/templates/.env.j2
Normal file
13
ansible/roles/deploy_container_mailarchive/templates/.env.j2
Normal file
|
@ -0,0 +1,13 @@
|
|||
MAILARCHIVE_VERSION={{ container_mailarchive_version }}
|
||||
MAILARCHIVE_DOMAIN={{ container_mailarchive_domain }}
|
||||
POSTGRES_VERSION={{ container_mailarchive_postgres_version }}
|
||||
DB_USER={{ container_mailarchive_postgres_user }}
|
||||
DB_PASSWORD={{ container_mailarchive_postgres_password }}
|
||||
AUTH_ENABLE={{ container_mailarchive_auth_enable }}
|
||||
AUTH_USER={{ container_mailarchive_auth_user }}
|
||||
AUTH_PASSWORD={{ container_mailarchive_auth_password }}
|
||||
AUTH_SESSION_TIMEOUT_IN_MINUTES={{ container_mailarchive_session_timeout }}
|
||||
MAIL_SYNC_INTERVAL_IN_MINUTES={{ container_mailarchive_sync_interval }}
|
||||
MAIL_SYNC_TIMEOUT_IN_MINUTES={{ container_mailarchive_sync_timeout }}
|
||||
MAIL_CONNECTION_TIMEOUT_IN_SECONDS={{ container_mailarchive_connection_timeout }}
|
||||
MAIL_COMMAND_TIMEOUT_IN_SECONDS={{ container_mailarchive_command_timeout }}
|
|
@ -0,0 +1,80 @@
|
|||
---
|
||||
services:
|
||||
mailarchive:
|
||||
image: s1t5/mailarchiver:${MAILARCHIVE_VERSION}
|
||||
container_name: mailarchive
|
||||
restart: always
|
||||
networks:
|
||||
- traefik
|
||||
- mailarchive
|
||||
environment:
|
||||
# Database Connection
|
||||
- ConnectionStrings__DefaultConnection=Host=postgres;Database=MailArchiver;Username=${DB_USER};Password=${DB_PASSWORD};
|
||||
|
||||
# Authentication Settings
|
||||
- Authentication__Enabled=${AUTH_ENABLE}
|
||||
- Authentication__Username=${AUTH_USER}
|
||||
- Authentication__Password=${AUTH_PASSWORD}
|
||||
- Authentication__SessionTimeoutMinutes=${AUTH_SESSION_TIMEOUT_IN_MINUTES}
|
||||
- Authentication__CookieName=MailArchiverAuth
|
||||
|
||||
# MailSync Settings
|
||||
- MailSync__IntervalMinutes=${MAIL_SYNC_INTERVAL_IN_MINUTES}
|
||||
- MailSync__TimeoutMinutes=${MAIL_SYNC_TIMEOUT_IN_MINUTES}
|
||||
- MailSync__ConnectionTimeoutSeconds=${MAIL_CONNECTION_TIMEOUT_IN_SECONDS}
|
||||
- MailSync__CommandTimeoutSeconds=${MAIL_COMMAND_TIMEOUT_IN_SECONDS}
|
||||
|
||||
# BatchRestore Settings
|
||||
- BatchRestore__AsyncThreshold=50
|
||||
- BatchRestore__MaxSyncEmails=150
|
||||
- BatchRestore__MaxAsyncEmails=50000
|
||||
- BatchRestore__SessionTimeoutMinutes=30
|
||||
- BatchRestore__DefaultBatchSize=50
|
||||
|
||||
# BatchOperation Settings
|
||||
- BatchOperation__BatchSize=50
|
||||
- BatchOperation__PauseBetweenEmailsMs=50
|
||||
- BatchOperation__PauseBetweenBatchesMs=250
|
||||
|
||||
# Npgsql Settings
|
||||
- Npgsql__CommandTimeout=900
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.docker.network=traefik"
|
||||
- "traefik.http.routers.mailarchive.entrypoints=http"
|
||||
- "traefik.http.routers.mailarchive.rule=Host(`${MAILARCHIVE_DOMAIN}`)"
|
||||
- "traefik.http.middlewares.mailarchive-https-redirect.redirectscheme.scheme=https"
|
||||
- "traefik.http.routers.mailarchive.middlewares=mailarchive-https-redirect"
|
||||
- "traefik.http.routers.mailarchive-secure.entrypoints=https"
|
||||
- "traefik.http.routers.mailarchive-secure.rule=Host(`${MAILARCHIVE_DOMAIN}`)"
|
||||
- "traefik.http.routers.mailarchive-secure.tls=true"
|
||||
- "traefik.http.routers.mailarchive-secure.service=mailarchive"
|
||||
- "traefik.http.services.mailarchive.loadbalancer.server.port=5000"
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
|
||||
|
||||
postgres:
|
||||
image: postgres:${POSTGRES_VERSION}
|
||||
container_name: mailarchive-db
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_DB: MailArchiver
|
||||
POSTGRES_USER: ${DB_USER}
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
volumes:
|
||||
- ./data/db:/var/lib/postgresql/data
|
||||
networks:
|
||||
- mailarchive
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U mailuser -d MailArchiver"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
external: true
|
||||
postgres:
|
1
ansible/roles/deploy_container_mailarchive/vars/main.yml
Normal file
1
ansible/roles/deploy_container_mailarchive/vars/main.yml
Normal file
|
@ -0,0 +1 @@
|
|||
container_base_dir: /opt/docker/mailarchive
|
Loading…
Add table
Reference in a new issue