Compare commits

...
36 Commits
Author SHA1 Message Date
Alex Tavarez cf174b5655 added some more container services 2026-08-22 13:35:57 -04:00
Alex Tavarez 55ebe6d250 added a volume mount to allow access to surge token file 2026-08-14 09:47:19 -04:00
Alex Tavarez 35eeae13c4 changed user and group IDs in container service respective environment variable or user value 2026-08-12 15:39:59 -04:00
Alex Tavarez 5a7e6048d9 re-included environment variables for forge container service 2026-08-12 11:39:37 -04:00
Alex Tavarez 55ae0ea2ba removing many environment variables from forge container service for testing purposes 2026-08-12 10:57:20 -04:00
Alex Tavarez 6b21fc54ac renamed container volume mounts, removed mount from surge container service 2026-08-12 10:16:20 -04:00
Alex Tavarez 3dca5aa0ac removed a volume mount for dash container service 2026-08-12 07:32:47 -04:00
Alex Tavarez 80a5201eac changed some things 2026-08-11 14:33:54 -04:00
Alex Tavarez 0cd73e11f1 changed some things 2026-08-11 14:31:21 -04:00
Alex Tavarez ff22da230c removed all environment variables so reliant only on configuration file 2026-08-10 12:50:45 -04:00
Alex Tavarez 60d168476c adding a user attribute for surge container service 2026-08-09 19:08:15 -04:00
Alex Tavarez 179b45bdc0 added back user specifications, as seems unrelated 2026-08-09 18:26:15 -04:00
Alex Tavarez 13d049ebd0 added localtime volume mount for additional container services 2026-08-09 18:09:14 -04:00
Alex Tavarez 53f19fbead removed environment variables specifying proper user 2026-08-09 09:46:15 -04:00
Alex Tavarez 06a9d66115 changed networking for tailnet-related containers 2026-08-08 20:00:02 -04:00
Alex Tavarez 2a3b1a508b changed dash container service image version 2026-08-08 18:55:16 -04:00
Alex Tavarez 0350bb84de fixed aria container service port publication to avoid port publication conflicts 2026-08-08 18:02:55 -04:00
Alex Tavarez 0afad3742f added more specific image sources per container service 2026-08-07 20:28:26 -04:00
Alex Tavarez 190a437ef8 added srv volume container mount for cloud container service 2026-08-07 13:14:45 -04:00
Alex Tavarez 7266b9c1c0 fixed port mappings placement given inherited container service networks; added environment file for gist service 2026-08-07 11:01:55 -04:00
Alex Tavarez 9fdd7c0314 removed dependency declarations, as lead to name-related errors 2026-08-07 09:36:35 -04:00
Alex Tavarez 950165c296 added opengist secret 2026-08-07 09:01:06 -04:00
Alex Tavarez b6455000d1 fix: moved tailclient container service, modified to have proper nesting for 'depends_on' attr 2026-08-07 08:36:36 -04:00
Alex Tavarez 1a0aa15a37 changed default ssh port for forge 2026-08-07 08:08:14 -04:00
Alex Tavarez d810bcf285 feature: added container services 2026-08-07 07:27:39 -04:00
Alex Tavarez c937746dd5 fixed reference to unexistent environment file 2026-07-26 18:18:22 -04:00
Alex Tavarez 87c9918ec8 changed forge version control container service from gitea to forgejo--added uid/gid environment variables for some containers 2026-07-23 19:07:12 -04:00
Alex Tavarez 520bd50739 changed host path mounted as volume into also now changed container directory path 2026-07-16 10:35:10 -04:00
Alex Tavarez e43e12d531 added and removed some comments listing potential new Compose services; removed unnecessary TCP port publication in wgclient service 2026-07-16 00:18:43 -04:00
Alex Tavarez 461303ad4b changed some containers to have network mode adopting network stack of main VPN client container 2026-07-12 13:14:00 -04:00
Alex Tavarez 5147235289 removed entrypoint and bind volume to instead reference an environment variable 2026-07-11 15:41:31 -04:00
Alex Tavarez 0c83ed66c8 changed volume mount path to mysql configuration files 2026-07-11 11:45:25 -04:00
Alex Tavarez 81570bcb2d errors from using src_valid_mark for ipv6, so commented out 2026-07-11 09:48:40 -04:00
Alex Tavarez 53a25cc400 removed mount volume path that does not exist on host 2026-07-10 21:04:41 -04:00
Alex Tavarez 5491bc9502 changed tilde back to home directory environment variable 2026-07-10 20:19:04 -04:00
Alex Tavarez 5a98dd1ca9 changed container networking 2026-07-10 20:03:40 -04:00
+478 -211
View File
@@ -13,6 +13,8 @@ volumes:
redis-data: redis-data:
mysql-lib: mysql-lib:
opengist-data: opengist-data:
stash-cache:
stash-blobs:
secrets: secrets:
headscale.key: headscale.key:
file: ~/.podsecrets/headscale.key file: ~/.podsecrets/headscale.key
@@ -24,6 +26,8 @@ secrets:
file: ~/.podsecrets/email.pass file: ~/.podsecrets/email.pass
redis.pass: redis.pass:
file: ~/.podsecrets/redis.pass file: ~/.podsecrets/redis.pass
aria.token:
file: ~/.podsecrets/aria.token
# opengist.secret: # opengist.secret:
# file: ~/.podsecrets/opengist.secret # file: ~/.podsecrets/opengist.secret
@@ -39,148 +43,56 @@ services:
# - NET_RAW # - NET_RAW
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- /lib/modules:/lib/modules:ro - /lib/modules:/lib/modules:ro
- ~/.wg/containerized:/config/wg-confs:Z - ~/.wg/authorized_clients.d:/config/wg_confs:Z
networks: networks:
- wg - wg
hostname: wgnet hostname: wgnet
ports: ports:
- 51820:51820/udp - 51820:51820/udp
- 80:80
- 443:443
- 443:443/udp
- 6379:6379
- 3306:3306
- 8999:8999
- ${FORGEJO_SSH_PORT:-2121}:${FORGEJO_SSH_PORT:-2121}
- ${OG_SSH_PORT:-2323}:${OG_SSH_PORT:-2323}
sysctls: sysctls:
- net.ipv4.ip_forward=1 - net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1 - net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.forwarding=1 - net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.all.src_valid_mark=1 environment:
PUID: 1000
PGID: 1000
env_file: env_file:
- ~/.all.env - ${HOME}/.all.env
- ${HOME}/.forgejo.env
- ${HOME}/.opengist.env
labels: labels:
glance.name: Wireguard glance.name: Wireguard
glance.id: wireguard glance.id: wireguard
glance.icon: "si:wireguard" glance.icon: "si:wireguard"
glance.description: VPN client connection glance.description: VPN client connection
# @NOTE https://tailscale.com/docs/features/containers/docker
# @NOTE https://tailscale.com/blog/docker-tailscale-guide
tailclient:
image: tailscale/tailscale:latest
container_name: tailclient
cap_add:
- SYS_MODULE
- NET_ADMIN
restart: unless-stopped
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /lib/modules:/lib/modules:ro
- "tailscale-lib:/var/lib/tailscale"
- ~/.config/tailscale:/config:Z
networks:
- hs
hostname: tailnet
env_file:
- ~/.all.env
# - ~/.tailscale.env
environment:
TS_AUTHKEY_FILE: /run/secrets/headscale.key
TS_SERVE_CONFIG: /config/conf.json
TS_EXTRA_ARGS: "--advertise-tags=tag:container"
TS_STATE_DIR: /var/lib/tailscale
secrets:
- headscale.key
# @TODO make subsequent containers have 'network_mode' attrbute set to value 'service:wgclient'/'service:tailclient' # @TODO make subsequent containers have 'network_mode' attrbute set to value 'service:wgclient'/'service:tailclient'
# OR make subsequent containers have 'networks' attribute set to list value with 'container:wgclient'/'contaner:tailclient' item # OR make subsequent containers have 'networks' attribute set to list value with 'container:wgclient'/'contaner:tailclient' item
# @NOTE https://hub.docker.com/_/caddy/
# @NOTE https://blog.genxnotes.com/en/tech/how-to-move-the-hugo-public-folder-outside-the-project-root/
# @NOTE https://www.turtlestoffel.com/My-Quartz-Configuration#explorer-component-with-custom-content-folder
revproxy0:
image: caddy:latest
container_name: revproxy0
cap_add:
- NET_ADMIN
restart: unless-stopped
expose:
- 80
- 443
- 443/udp
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- ~/.config/caddy:/etc/caddy:Z
- ~/srv/${SERVER_FQDN}:/srv/${SERVER_FQDN}:z
- ~/srv/certbot.${SERVER_FQDN}:/srv/certbot.${SERVER_FQDN}:ro,z
- ~/srv/notes.${SERVER_FQDN}:/srv/notes.${SERVER_FQDN}:z
- ~/srv/blog.${SERVER_FQDN}:/srv/blog.${SERVER_FQDN}:z
- ~/srv/${NEXTCLOUD_SUBDOMAIN}.${SERVER_FQDN}:/srv/${NEXTCLOUD_SUBDOMAIN}.${SERVER_FQDN}:ro,z
# - ~/srv/${GITEA_SUBDOMAIN}.${SERVER_FQDN}:/srv/${GITEA_SUBDOMAIN}.${SERVER_FQDN}:ro,z
# - ~/srv/${OG_SUBDOMAIN}.${SERVER_FQDN}:/srv/${OG_SUBDOMAIN}.${SERVER_FQDN}:ro,z
- "caddy-share:/usr/share/caddy"
- "caddy-data:/data:z"
- ~/.caddy:/config:Z
networks:
- "container:wgclient"
depends_on:
- wgclient
env_file:
- ~/.all.env
labels:
glance.name: Caddy
glance.id: caddy
glance.icon: "si:caddy"
glance.url: "${SERVER_FQDN_SCHEME}://${SERVER_FQDN}"
glance.description: HTTPS reverse proxy server
# @NOTE https://github.com/nbraun1/certbot
sslcerts:
image: nbraun1/certbot
container_name: sslcerts
restart: on-failure
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- ~/.config/letsencrypt:/etc/letsencrypt:z
- "certbot-lib:/var/lib/letsencrypt"
- ~/srv/certbot.${SERVER_FQDN}:/srv/certbot.${SERVER_FQDN}:z
networks:
- "container:wgclient"
depends_on:
- revproxy0
- wgclient
env_file:
- ~/.all.env
- ~/.certbot.env
environment:
EMAIL: ${CERTBOT_EMAIL}
DOMAINS: ${CERTBOT_CHALLENGED_DOMAINS:-"${SERVER_FQDN},*.${SERVER_FQDN}"}
AUTHENTICATOR: ${CERTBOT_AUTHENTICATOR}
WEBROOT_PATH: ${SERVER_WEBROOT_PATH}
ISSUANCE_TIMEOUT: 300
# CRON: ${CERTBOT_CRON}
# entrypoint: ["certonly"]
cache0: cache0:
image: redis:trixie image: docker.io/redis:trixie
container_name: cache0 container_name: cache0
restart: unless-stopped restart: unless-stopped
expose: expose:
- 6379 - 6379
volumes: volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- "redis-data:/data:z" - "redis-data:/data:z"
- ~/.config/redis:/etc/redis:Z network_mode: "container:wgclient"
networks:
- "container:wgclient"
depends_on:
- wgclient
env_file: env_file:
- ~/.all.env - ${HOME}/.all.env
entrypoint: ["redis-server", "--save 60 1", "--loglevel warning", "/etc/redis/redis.conf"] environment:
REDIS_ARGS: ${REDIS_PARAMS}
labels: labels:
glance.name: Redis glance.name: Redis
glance.id: redis glance.id: redis
@@ -189,25 +101,21 @@ services:
# @NOTE https://hub.docker.com/_/mysql # @NOTE https://hub.docker.com/_/mysql
db0: db0:
image: mysql:lts image: docker.io/mysql:lts
container_name: db0 container_name: db0
restart: unless-stopped restart: unless-stopped
expose: expose:
- 3306 - 3306
volumes: volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
# @TODO use Ansible to adjust/edit configuration below # @TODO use Ansible to adjust/edit configuration below
# @NOTE https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html # @NOTE https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html
- ~/.config/mysql/sql.cnf:/etc/my.cnf:Z - ~/.config/mysql:/etc/mysql/conf.d:Z
- mysql-lib:/var/lib/mysql - mysql-lib:/var/lib/mysql
networks: network_mode: "container:wgclient"
- "container:wgclient"
depends_on:
- wgclient
env_file: env_file:
- ~/.all.env - ${HOME}/.all.env
- ~/.mysql.env - ${HOME}/.mysql.env
environment: environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/root-mysql.pass MYSQL_ROOT_PASSWORD_FILE: /run/secrets/root-mysql.pass
MYSQL_USER: ${MYSQL_DB_USER:-admin} MYSQL_USER: ${MYSQL_DB_USER:-admin}
@@ -226,27 +134,20 @@ services:
# @NOTE https://hub.docker.com/_/nextcloud # @NOTE https://hub.docker.com/_/nextcloud
cloud: cloud:
image: nextcloud:stable-fpm image: docker.io/nextcloud:stable-fpm
container_name: cloud container_name: cloud
restart: unless-stopped restart: unless-stopped
expose: expose:
- 9000 - 9000
volumes: volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- ~/srv/${NEXTCLOUD_SUBDOMAIN}.${SERVER_FQDN}:/var/www/html:z - ~/srv/${NEXTCLOUD_SUBDOMAIN}.${SERVER_FQDN}:/var/www/html:z
networks: network_mode: "container:wgclient"
- "container:wgclient"
depends_on:
- cache0
- db0
- revproxy0
- wgclient
env_file: env_file:
- ~/.all.env - ${HOME}/.all.env
- ~/.email.env - ${HOME}/.email.env
- ~/.mysql.env - ${HOME}/.mysql.env
- ~/.nextcloud.env - ${HOME}/.nextcloud.env
environment: environment:
REDIS_HOST: cache0 REDIS_HOST: cache0
REDIS_HOST_PASSWORD_FILE: /run/secrets/redis.pass REDIS_HOST_PASSWORD_FILE: /run/secrets/redis.pass
@@ -285,76 +186,88 @@ services:
# @NOTE https://docs.gitea.com/administration/reverse-proxies # @NOTE https://docs.gitea.com/administration/reverse-proxies
# @NOTE https://docs.gitea.com/administration/config-cheat-sheet # @NOTE https://docs.gitea.com/administration/config-cheat-sheet
forge: forge:
image: docker.gitea.com/gitea:1.26.4 image: codeberg.org/forgejo/forgejo:16
container_name: forge container_name: forge
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- ~/.config/gitea:/data:z - ~/.config/forgejo:/data:z
expose: expose:
- 3000 - 3000
- ${GITEA_SSH_PORT:-2323} - ${FORGEJO_SSH_PORT:-2121}
networks: network_mode: "container:wgclient"
- "container:wgclient"
depends_on:
- db0
- revproxy0
- wgclient
env_file: env_file:
- ~/.all.env - ${HOME}/.all.env
- ~/.email.env - ${HOME}/.email.env
- ~/.mysql.env - ${HOME}/.mysql.env
- ~/.gitea.env - ${HOME}/.forgejo.env
environment: environment:
GITEA_DEFAULT_RUN_USER: ${GITEA_MODE:-dev} USER_UID: 1000
GITEA_DEFAULT_APP_NAME: ${GITEA_NAME} USER_GID: 1000
GITEA_server_PROTOCOL: http FORGEJO__RUN_USER: ${FORGEJO_MODE:-dev}
GITEA_server_DOMAIN: ${GITEA_SUBDOMAIN}.${SERVER_FQDN} FORGEJO__APP_NAME: ${FORGEJO_NAME}
FORGEJO__APP_SLOGAN: ${FORGEJO_SLOGAN}
FORGEJO__ui.meta_AUTHOR: ${SERVER_FQDN%.*}
FORGEJO__ui.meta_DESCRIPTION: ${FORGEJO_DESC}
FORGEJO__server_PROTOCOL: ${FORGEJO_PROTOCOL}
FORGEJO__server_DOMAIN: ${FORGEJO_SUBDOMAIN}.${SERVER_FQDN}
# @NOTE https://gist.github.com/erik-toth/087262f19941da9bf4c2ce449fe98a47 # @NOTE https://gist.github.com/erik-toth/087262f19941da9bf4c2ce449fe98a47
GITEA_server_SSH_PORT: ${GITEA_SSH_PORT:-2323} FORGEJO__server_SSH_PORT: ${FORGEJO_SSH_PORT:-2323}
GITEA_server_SSH_EXPOSE_ANONYMOUS: "false" FORGEJO__server_SSH_EXPOSE_ANONYMOUS: false
GITEA_server_START_SSH_SERVER: "false" FORGEJO__server_START_SSH_SERVER: false
GITEA_server_LANDING_PAGE: ${GITEA_LANDING:-explore} FORGEJO__server_SSH_AUTHORIZED_KEYS_BACKUP: true
GITEA_admin_DEFAULT_EMAIL_NOTIFICATIONS: onmention FORGEJO__server_LANDING_PAGE: ${FORGEJO_LANDING:-explore}
GITEA_security_REVERSE_PROXY_TRUSTED_PROXIES: ${GITEA_TRUSTED_PROXIES} FORGEJO__admin_DEFAULT_EMAIL_NOTIFICATIONS: onmention
GITEA_security_PASSWORD_COMPLEXITY: lower,upper,digit,spec FORGEJO__security_REVERSE_PROXY_TRUSTED_PROXIES: ${FORGEJO_TRUSTED_PROXIES}
GITEA_security_PASSWORD_CHECK_PWN: "true" FORGEJO__security_PASSWORD_COMPLEXITY: lower,upper,digit,spec
GITEA_service_REGISTER_EMAIL_CONFIRM: "true" FORGEJO__security_PASSWORD_CHECK_PWN: true
GITEA_service_DISABLE_REGISTRATION: ${GITEA_PROHIBIT_REGISTRATION:-false} FORGEJO__security_GLOBAL_TWO_FACTOR_REQUIREMENT: true
GITEA_service_DEFAULT_KEEP_EMAIL_PRIVATE: "true" FORGEJO__service_REGISTER_EMAIL_CONFIRM: true
GITEA_service_ENABLE_NOTIFY_MAIL: "true" FORGEJO__service_DEFAULT_KEEP_EMAIL_PRIVATE: true
GITEA_picture_REPOSITORY_AVATAR_FALLBACK: image FORGEJO__service_DISABLE_REGISTRATION: ${FORGEJO_PROHIBIT_REGISTRATION:-true}
GITEA_picture_REPOSITORY_AVATAR_FALLBACK_IMAGE: img/repo_default.svg FORGEJO__service_ENABLE_NOTIFY_MAIL: true
GITEA_log_MODE: file FORGEJO__security_ENABLE_CAPTCHA: true
GITEA_log_ENABLE_SSH_LOG: "true" FORGEJO__picture_REPOSITORY_AVATAR_FALLBACK: image
GITEA_mailer_ENABLED: "true" # FORGEJO__picture_REPOSITORY_AVATAR_FALLBACK_IMAGE: img/repo_default.svg
GITEA_mailer_PROTOCOL: ${EMAIL_SEND_PROTOCOL:-smtp}s FORGEJO__picture_ENABLE_FEDERATED_AVATAR: true
GITEA_mailer_SMTP_ADDR: ${EMAIL_SMTP_HOST} FORGEJO__log_MODE: file
GITEA_mailer_SMTP_PORT: ${EMAIL_SMTP_PORT:-465} FORGEJO__mailer_ENABLED: true
GITEA_mailer_USER: ${EMAIL_SMTP_USERNAME} FORGEJO__mailer_PROTOCOL: ${EMAIL_SEND_PROTOCOL:-smtp}s
GITEA_mailer_PASSWD_FILE: /run/secrets/email.pass FORGEJO__mailer_SMTP_ADDR: ${EMAIL_SMTP_HOST}
GITEA_mailer_FROM: ${EMAIL_SMTP_USER_ALIAS:-admin}@${EMAIL_SMTP_EMAIL_ALIAS} FORGEJO__mailer_SMTP_PORT: ${EMAIL_SMTP_PORT:-465}
GITEA_database_DB_TYPE: ${GITEA_DB_TYPE:-mysql} FORGEJO__mailer_USER: ${EMAIL_SMTP_USERNAME}
GITEA_database_HOST: "${MYSQL_DB_HOST}:3306" FORGEJO__mailer_PASSWD_URI: file:/run/secrets/email.pass
GITEA_database_NAME: ${GITEA_DB_NAME:-gitea} FORGEJO__mailer_FROM: "\"${SERVER_FQDN%.*} Administrator\" <${EMAIL_SMTP_USER_ALIAS:-admin}@${EMAIL_SMTP_EMAIL_ALIAS}>"
GITEA_database_USER: ${MYSQL_DB_USER:-admin} FORGEJO__database_DB_TYPE: ${FORGEJO_DB_TYPE:-mysql}
GITEA_database_PASSWD_FILE: /run/secrets/user-mysql.pass FORGEJO__database_HOST: "${MYSQL_DB_HOST}:3306"
GITEA_repository_DEFAULT_BRANCH: main FORGEJO__database_NAME: ${FORGEJO_DB_NAME:-forgejo}
GITEA_repository_DEFAULT_PRIVATE: private FORGEJO__database_USER: ${MYSQL_DB_USER:-admin}
GITEA_repository_ORG_MAX_CREATION_LIMIT: 75 FORGEJO__database_PASSWD_URI: file:/run/secrets/user-mysql.pass
GITEA_repository_ENABLE_PUSH_CREATE_USER: "true" FORGEJO__repository_DEFAULT_BRANCH: main
GITEA_repository_DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH: "true" FORGEJO__repository_DEFAULT_PRIVATE: private
GITEA_repository.issue_MAX_PINNED: 6 FORGEJO__repository_ENABLE_PUSH_CREATE_USER: true
GITEA_federation_ENABLED: "true" FORGEJO__repository_DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH: true
FORGEJO__repository.issue_MAX_PINNED: 6
FORGEJO__repository.issue_LOCK_REASON: ${FORGEJO_LOCK_REASONS}
FORGEJO__federation_ENABLED: true
FORGEJO__cors_ENABLED: true
FORGEJO__cors_ALLOW_DOMAIN: "${FORGEJO_PROTOCOL}://${SERVER_FQDN} ${FORGEJO_PROTOCOL}://${OG_SUBDOMAIN}.${SERVER_FQDN}"
FORGEJO__cors_ALLOW_CREDENTIALS: true
FORGEJO__ui_SHOW_USER_EMAIL: false
FORGEJO__ui_ONLY_SHOW_RELEVANT_REPOS: true
FORGEJO__project_PROJECT_BOARD_BASIC_KANBAN_TYPE: ${FORGEJO_KANBAN_COLUMNS}
FORGEJO__project_PROJECT_BOARD_BUG_TRIAGE_TYPE: ${FORGEJO_TRIAGE_CATEGORIES}
FORGEJO__migrations_ALLOW_DOMAINS: "*.${SERVER_FQDN},*.bebopfederation.org,github.com,*.github.com,gitlab.com,*.gitlab.com,codeberg.org,*.codeberg.org,sr.ht,*.sr.ht"
FORGEJO__moderation_ENABLED: true
FORGEJO__repository.editor_LINE_WRAP_EXTENSIONS: .txt,.md,.markdown,.mdown,.mkd,.livemd
secrets: secrets:
- "user-mysql.pass" - "user-mysql.pass"
- email.pass - email.pass
labels: labels:
glance.name: Gitea glance.name: ForgeJO
glance.id: gitea glance.id: forgejo
glance.icon: "si:gitea" glance.icon: "si:forgejo"
glance.url: "${SERVER_FQDN_SCHEME}://${GITEA_SUBDOMAIN}.${SERVER_FQDN}" glance.url: "${SERVER_FQDN_SCHEME}://${FORGEJO_SUBDOMAIN}.${SERVER_FQDN}"
glance.description: Git version control forge server glance.description: Git version control forge server
gist: gist:
@@ -362,29 +275,23 @@ services:
container_name: gist container_name: gist
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- opengist-data:/opengist:z - opengist-data:/opengist:z
expose: expose:
- 6157 - 6157
- ${OG_SSH_PORT:-2323} - ${OG_SSH_PORT:-2323}
networks: network_mode: "container:wgclient"
- "container:wgclient"
depends_on:
- revproxy0
- wgclient
env_file: env_file:
- ~/.all.env - ${HOME}/.all.env
- ~/.mysql.env - ${HOME}/.opengist.env
- ${HOME}/.mysql.env
environment: environment:
OG_OPENGIST_HOME: /opengist OG_OPENGIST_HOME: /opengist
OG_LOG_OUTPUT: file OG_LOG_OUTPUT: file
OG_GIT_DEFAULT_BRANCH: main OG_GIT_DEFAULT_BRANCH: main
OG_HTTP_GIT_ENABLED: "true" OG_HTTP_GIT_ENABLED: true
OG_EXTERNAL_URL: "${SERVER_FQDN_SCHEME}://${OG_SUBDOMAIN}.${SERVER_FQDN}" OG_EXTERNAL_URL: "${SERVER_FQDN_SCHEME}://${OG_SUBDOMAIN}.${SERVER_FQDN}"
OG_CUSTOM_NAME: ${OG_NAME} OG_CUSTOM_NAME: ${OG_NAME}
OG_CUSTOM_LOGO: ${OG_LOGO:-logo.svg}
OG_CUSTOM_FAVICON: ${OG_FAVICON:-logo.ico}
secrets: secrets:
- "user-mysql.pass" - "user-mysql.pass"
# - opengist.secret # - opengist.secret
@@ -395,24 +302,176 @@ services:
glance.url: "${SERVER_FQDN_SCHEME}://${OG_SUBDOMAIN}.${SERVER_FQDN}" glance.url: "${SERVER_FQDN_SCHEME}://${OG_SUBDOMAIN}.${SERVER_FQDN}"
glance.description: Pastebin server glance.description: Pastebin server
# @TODO below in need of skato-ansible integration
forum:
# build: ../builds/nodebb
image: ghcr.io/nodebb/nodebb:latest
container_name: forum
restart: unless-stopped
expose:
- 4567
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.config/nodebb:/opt/config:Z
- ~/.local/nodebb:/usr/src/app:z # @NOTE where setup.json for nodeBB goes
env_file:
- ${HOME}/.all.env
labels:
glance.name: NodeBB
glance.id: nodebb
glance.icon: "si:nodebb"
glance.url: "${SERVER_FQDN_SCHEME}://${NODEBB_SUBDOMAIN}.${SERVER_FQDN}"
glance.description: Synchronized video playback server
# @NOTE https://hub.docker.com/_/caddy/
# @NOTE https://blog.genxnotes.com/en/tech/how-to-move-the-hugo-public-folder-outside-the-project-root/
# @NOTE https://www.turtlestoffel.com/My-Quartz-Configuration#explorer-component-with-custom-content-folder
revproxy0:
image: docker.io/caddy:latest
container_name: revproxy0
cap_add:
- NET_ADMIN
restart: unless-stopped
expose:
- 80
- 443
- 443/udp
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.config/caddy:/etc/caddy:Z
- ~/srv/${SERVER_FQDN}:/srv/${SERVER_FQDN}:z
- ~/srv/notes.${SERVER_FQDN}:/srv/notes.${SERVER_FQDN}:z
- ~/srv/blog.${SERVER_FQDN}:/srv/blog.${SERVER_FQDN}:z
- ~/srv/certbot.${SERVER_FQDN}:/srv/certbot.${SERVER_FQDN}:ro,z
- ~/srv/${NEXTCLOUD_SUBDOMAIN}.${SERVER_FQDN}:/srv/${NEXTCLOUD_SUBDOMAIN}.${SERVER_FQDN}:z
- "caddy-share:/usr/share/caddy"
- "caddy-data:/data"
- ~/.caddy:/config:Z
volumes_from:
- cloud:ro
network_mode: "container:wgclient"
env_file:
- ${HOME}/.all.env
labels:
glance.name: Caddy
glance.id: caddy
glance.icon: "si:caddy"
glance.url: "${SERVER_FQDN_SCHEME}://${SERVER_FQDN}"
glance.description: HTTPS reverse proxy server
# @NOTE https://github.com/nbraun1/certbot
sslcerts:
image: docker.io/nbraun1/certbot:v1.2.0
container_name: sslcerts
restart: on-failure
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.config/letsencrypt:/etc/letsencrypt:z
- "certbot-lib:/var/lib/letsencrypt"
volumes_from:
- revproxy0:rw
network_mode: "container:wgclient"
env_file:
- ${HOME}/.all.env
- ${HOME}/.certbot.env
environment:
EMAIL: ${CERTBOT_EMAIL}
DOMAINS: ${CERTBOT_CHALLENGED_DOMAINS:-"${SERVER_FQDN},*.${SERVER_FQDN}"}
AUTHENTICATOR: ${CERTBOT_AUTHENTICATOR}
WEBROOT_PATH: ${SERVER_WEBROOT_PATH}
ISSUANCE_TIMEOUT: 300
CRON: ${CERTBOT_CRON}
# entrypoint: ["certonly"]
# @TODO all below until tailclient in need of skato-ansible integration
syncplay:
image: docker.io/dnomd343/syncplay:latest
container_name: syncplay
restart: always
expose:
- 8999
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.config/letsencrypt:/certs:z
- ~/.config/syncplay:/data:Z
network_mode: "container:wgclient"
env_file:
- ${HOME}/.all.env
- ${HOME}/.syncplay.env
environment:
PASSWORD: ${SYNCPLAY_PASSWORD}
MOTD: ${SYNCPLAY_MOTD}
SALT: ${SYNCPLAY_SALT}
PERSISTENT: ON
ENABLE_TLS: ${SYNCPLAY_TLS}
PERMANENT_ROOMS: "seasonal_live-action seasonal_anime annual_features shorts"
LISTEN_IPV4: "127.0.0.1"
LISTEN_IPV6: "::1"
labels:
glance.name: SyncPlay
glance.id: syncplay
glance.icon: "si:syncplay"
glance.url: "${SERVER_FQDN_SCHEME}://${SYNCPLAY_SUBDOMAIN}.${SERVER_FQDN}"
glance.description: Synchronized video playback server
# @NOTE https://tailscale.com/docs/features/containers/docker
# @NOTE https://tailscale.com/blog/docker-tailscale-guide
tailclient:
image: docker.io/tailscale/tailscale:latest
container_name: tailclient
cap_add:
- SYS_MODULE
- NET_ADMIN
restart: unless-stopped
devices:
- /dev/net/tun:/dev/net/tun
ports:
- 8080:8080
- 1700:1700
- 6800:6800
- 6940:6940
- 6940:6940/udp
- 6880:6880
- 5050:5050
- 5030:5030
- 50300:50300
- 9283:80
- 5000:5000
# - ${STASH_LISTEN_PORT:-9999}:${STASH_LISTEN_PORT:-9999}
# - ${ACTUAL_LISTEN_PORT:-5006}:${ACTUAL_LISTEN_PORT:-5006}
volumes:
- /etc/localtime:/etc/localtime:ro
- /lib/modules:/lib/modules:ro
- "tailscale-lib:/var/lib/tailscale"
- ~/.config/tailscale:/config:Z
networks:
- hs
hostname: tailnet
env_file:
- ${HOME}/.all.env
# - ${HOME}/.actual.env
# - ${HOME}/.stash.env
# - ${HOME}/.tailscale.env
environment:
TS_AUTHKEY_FILE: /run/secrets/headscale.key
TS_SERVE_CONFIG: /config/conf.json
TS_EXTRA_ARGS: "--advertise-tags=tag:container"
TS_STATE_DIR: /var/lib/tailscale
secrets:
- headscale.key
dash: dash:
image: glanceapp/glance image: docker.io/glanceapp/glance:latest
container_name: dash container_name: dash
restart: unless-stopped restart: unless-stopped
expose: expose:
- 8080 - 8080
volumes: volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
# Optionally, also mount docker socket if you want to use the docker containers widget
- /var/run/docker.sock:/var/run/docker.sock:ro
# @NOTE https://github.com/glanceapp/glance/blob/main/docs/configuration.md#configuring-glance # @NOTE https://github.com/glanceapp/glance/blob/main/docs/configuration.md#configuring-glance
- ~/.config/glance:/app/config:Z # @NOTE internal container server port is changed via 'glance.yml' config file; default is 8080 - ~/.config/glance:/app/config:Z # @NOTE internal container server port is changed via 'glance.yml' config file; default is 8080
- ~/.local/glance:/app/assets:Z - ~/.local/glance:/app/assets:Z
networks: network_mode: "container:tailclient"
- "container:tailclient"
depends_on:
- tailclient
# @NOTE https://github.com/glanceapp/glance/blob/main/docs/configuration.md#environment-variables # @NOTE https://github.com/glanceapp/glance/blob/main/docs/configuration.md#environment-variables
labels: labels:
glance.name: Self glance.name: Self
@@ -421,6 +480,214 @@ services:
# glance.url: "${SERVER_MAGICDN_SCHEME}://${SERVER_MAGICDN}" # glance.url: "${SERVER_MAGICDN_SCHEME}://${SERVER_MAGICDN}"
glance.description: Dashboard glance.description: Dashboard
surge:
image: ghcr.io/surgedm/surge
container_name: surge
restart: unless-stopped
user: "${UID:-1000}:${GID:-1000}"
expose:
- 1700
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.local/surge:/root/.local/state/surge:Z # token file goes in here
- ~/downloads:/downloads:z
- ~/media:/media:z
- ~/.xxx:/.xxx:z
network_mode: "container:tailclient"
labels:
glance.name: SurgeDM
glance.id: surge
glance.description: Download manager
logging:
options:
max-size: "10m"
max-file: "3"
aria:
image: docker.io/p3terx/aria2-pro:latest
container_name: aria
restart: unless-stopped
expose:
- ${ARIA_RPC_LISTEN_PORT:-6800}
- ${ARIA_TRNT_LISTEN_PORT:-6940}
- ${ARIA_TRNT_LISTEN_PORT:-6940}/udp
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.aria2:/config:Z
- ~/downloads:/downloads:z
- ~/media:/media:z
- ~/.xxx:/.xxx:z
network_mode: "container:tailclient"
env_file:
- ${HOME}/.aria.env
environment:
PUID: 1000
PGID: 1000
# UMASK_SET: 022
# RPC_PORT: ${ARIA_RPC_LISTEN_PORT:-6800}
# RPC_SECRET_FILE: /run/secrets/aria.token
# LISTEN_PORT: ${ARIA_TRNT_LISTEN_PORT:-6940}
labels:
glance.name: Aria2
glance.id: aria
glance.description: Download manager
logging:
options:
max-size: "1m"
ariang:
image: docker.io/p3terx/ariang:latest
container_name: ariang
restart: unless-stopped
expose:
- 6880
volumes:
- /etc/localtime:/etc/localtime:ro
network_mode: "container:tailclient"
labels:
glance.name: AriaNG
glance.id: ariang
glance.description: Aria Web UI
logging:
options:
max-size: "1m"
flexget:
image: docker.io/flexget/flexget:latest
container_name: flexget
expose:
- 5050
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.flexget:/config:Z
- ~/downloads:/downloads:z
- ~/media:/media:z
- ~/.xxx:/.xxx:z
network_mode: "container:tailclient"
labels:
glance.name: FlexGet
glance.id: flexget
glance.description: Download automator
command:
- daemon
- start
- "--autoreload-config"
soulseek:
image: docker.io/slskd/slskd:latest
container_name: soulseek
restart: unless-stopped
expose:
- 5030
- 50300
network_mode: "container:tailclient"
environment:
SLSKD_REMOTE_CONFIGURATION: true
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.local/slskd:/app:Z
- ~/downloads:/downloads:z
- ~/media:/media:z
- ~/.xxx:/.xxx:z
labels:
glance.name: SoulSeek
glance.id: soulseek
glance.description: File-sharing client
# @TODO all below in need of skato-ansible integration
grocy:
image: lscr.io/linuxserver/grocy:latest
container_name: grocy
restart: unless-stopped
expose:
- 80 # 9283
network_mode: "container:tailclient"
environment:
PUID: 1000
PGID: 1000
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.config/grocy:/config:Z
labels:
glance.name: Grocy
glance.id: grocy
glance.description: Home economy manager
budget:
image: docker.io/actualbudget/actual-server:latest
container_name: budget
restart: unless-stopped
expose:
- ${ACTUAL_LISTEN_PORT:-5006}
network_mode: "container:tailclient"
env_file:
- ${HOME}/.actual.env
environment:
# ACTUAL_HTTPS_KEY: /data/selfhost.key
# ACTUAL_HTTPS_CERT: /data/selfhost.crt
ACTUAL_PORT: ${ACTUAL_LISTEN_PORT:-5006}
# ACTUAL_UPLOAD_FILE_SYNC_SIZE_LIMIT_MB: 20
# ACTUAL_UPLOAD_SYNC_ENCRYPTED_FILE_SYNC_SIZE_LIMIT_MB: 50
# ACTUAL_UPLOAD_FILE_SIZE_LIMIT_MB: 20
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.local/actual:/data:Z
labels:
glance.name: Actual
glance.id: actual
glance.description: Financial budgeting server
reader:
image: docker.io/jvmilazz0/kavita:latest
container_name: reader
restart: unless-stopped
expose:
- 5000
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/downloads:/downloads:z,ro
- ~/media:/media:z,ro
- ~/.xxx:/.xxx:z,ro
- ~/.config/kavita:/kavita
labels:
glance.name: Kavita
glance.id: kavita
glance.description: Ebook catalogue and reader
stash:
image: docker.io/stashapp/stash:latest
container_name: stash
restart: unless-stopped
expose:
- ${STASH_LISTEN_PORT:-9999}
network_mode: "container:tailclient"
logging:
driver: "json-file"
options:
max-file: "10"
max-size: "2m"
env_file:
- ${HOME}/.stash.env
environment:
- STASH_STASH=/data/
- STASH_GENERATED=/generated/
- STASH_METADATA=/metadata/
- STASH_CACHE=/cache/
- STASH_PORT=${STASH_LISTEN_PORT:-9999}
volumes:
- /etc/localtime:/etc/localtime:ro
- ~/.config/stash:/root/.stash:Z
- ~/.xxx:/data:z,ro
- ~/downloads:/downloads:z,ro
- ~/.local/stash/metadata:/metadata:z
- ~/.local/stash/generated:/generated:Z
- stash-cache:/cache:Z
- stash-blobs:/blobs:Z
labels:
glance.name: Stash
glance.id: stash
glance.description: NSFW media streamer
# @NOTE https://github.com/glanceapp/glance/blob/main/docs/configuration.md#docker-containers # @NOTE https://github.com/glanceapp/glance/blob/main/docs/configuration.md#docker-containers
# @TODO apply labels to each container that allows it to show up in Glance dashboard # @TODO apply labels to each container that allows it to show up in Glance dashboard
@@ -450,6 +717,7 @@ services:
# - https://shibumi.dev/posts/how-to-setup-your-own-wkd-server/ # - https://shibumi.dev/posts/how-to-setup-your-own-wkd-server/
# - https://dario.griffo.io/posts/ultimate-guide-debian-repository-hosting/ # - https://dario.griffo.io/posts/ultimate-guide-debian-repository-hosting/
# - https://gitlab.com/fdroid/docker-executable-fdroidserver # - https://gitlab.com/fdroid/docker-executable-fdroidserver
# - https://papis.readthedocs.io/en/latest/, https://github.com/papis/papis
# @NOTE The following is a list of additional private container services to add # @NOTE The following is a list of additional private container services to add
# - https://www.keycloak.org/, https://www.keycloak.org/server/containers # - https://www.keycloak.org/, https://www.keycloak.org/server/containers
@@ -467,7 +735,6 @@ services:
# - https://stashapp.cc/, https://docs.stashapp.cc/installation/docker/ # - https://stashapp.cc/, https://docs.stashapp.cc/installation/docker/
# - https://droposs.org/, https://droposs.org/docs/admin/quickstart/ # - https://droposs.org/, https://droposs.org/docs/admin/quickstart/
# - https://jellyfin.org/, https://jellyfin.org/docs/general/installation/container # - https://jellyfin.org/, https://jellyfin.org/docs/general/installation/container
# - https://papra.app/en/, https://docs.papra.app/self-hosting/using-docker-compose/
# - https://docs.paperless-ngx.com/, https://docs.paperless-ngx.com/setup/#docker # - https://docs.paperless-ngx.com/, https://docs.paperless-ngx.com/setup/#docker
# - https://atomicserver.eu/, https://docs.atomicdata.dev/atomic-data-overview # - https://atomicserver.eu/, https://docs.atomicdata.dev/atomic-data-overview
# - https://github.com/sassanix/warracker # - https://github.com/sassanix/warracker