I don't self-host a lot of things, but I'd say this is not the easiest I've done, just because it involves setting up multiple containers (unlike something like SearXNG). Also thought that I had to set-up an SMTP container, but I got away with not having to do it.
I used ansible (and pass
to store credentials), so this is how I did it (maybe someone can pitch in and tell me what I can improve):
- name: Deploy Wallabag database
community.docker.docker_container:
name: db_wallabag
image: mariadb
recreate: true
state: started
memory: 500MB
restart_policy: always
log_options:
max-size: "10m"
max-file: "1"
env:
MYSQL_ROOT_PASSWORD: "{{ lookup('community.general.passwordstore', 'self_host_containers/wallabag_mysql_root_password', missing='warn') }}"
volumes:
- ~/wallabag/data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 20s
timeout: 3s
- name: Deploy Wallabag redis
community.docker.docker_container:
name: redis_wallabag
image: redis:alpine
recreate: true
state: started
memory: 500MB
restart_policy: always
log_options:
max-size: "10m"
max-file: "1"
links:
- "db_wallabag:db_wallabag"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 20s
timeout: 3s
- name: Deploy Wallabag
community.docker.docker_container:
image: wallabag/wallabag:latest
name: wallabag
recreate: true
state: started
memory: 500MB
restart_policy: always
log_options:
max-size: "10m"
max-file: "1"
links:
- "redis_wallabag:redis_wallabag"
- "db_wallabag:db_wallabag"
ports:
- "80"
env:
MYSQL_ROOT_PASSWORD: "{{ lookup('community.general.passwordstore', 'self_host_containers/wallabag_mysql_root_password', missing='warn') }}"
SYMFONY__ENV__DATABASE_DRIVER: pdo_mysql
SYMFONY__ENV__DATABASE_HOST: db_wallabag
SYMFONY__ENV__DATABASE_PORT: "3306"
SYMFONY__ENV__DATABASE_NAME: db_wallabag
SYMFONY__ENV__DATABASE_USER: db_wallabag
SYMFONY__ENV__DATABASE_PASSWORD: "{{ lookup('community.general.passwordstore', 'self_host_containers/wallabag_symfony_env_database_password', missing='warn') }}"
SYMFONY__ENV__DATABASE_CHARSET: utf8mb4
SYMFONY__ENV__DATABASE_TABLE_PREFIX: "wallabag_"
SYMFONY__ENV__MAILER_DSN: smtp://127.0.0.1
SYMFONY__ENV__FROM_EMAIL: wallabag@example.com
SYMFONY__ENV__DOMAIN_NAME:
SYMFONY__ENV__SERVER_NAME:
volumes:
- ~/wallabag/images:/var/www/wallabag/web/assets/images
- ~/wallabag/data:/var/www/wallabag/data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost"]
interval: 1m
timeout: 3s
Then I set up caddy for the reverse proxy
- name: Upload Caddyfile
ansible.builtin.copy:
src: ./upload_files/Caddyfile
dest: ~/Caddyfile
- name: Deploy caddy
community.docker.docker_container:
image: caddy:2
name: caddy
user: "1000:1000"
recreate: true
state: started
memory: 500MB
restart_policy: always
log_options:
max-size: "10m"
max-file: "1"
links:
- "wallabag:wallabag"
ports:
- "80:80"
- "443:443"
volumes:
- ~/Caddyfile:/etc/caddy/Caddyfile
- ~/caddy_data:/data
- ~/caddy_config:/config
And this is the Caddyfile
my.url.com {
reverse_proxy wallabag:80
}
Finally, you then have to login with user:wallabag and password:wallabag and change them in the webUI. I changed the "wallabag" user to my user and set a new password.