Port docker-compose resources and service details

This commit is contained in:
2021-11-15 01:31:39 -05:00
parent eb569c05c7
commit be9c658589
11 changed files with 988 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
---
version: "{{ skylab_compose_version }}"
networks:
meta:
name: meta
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.ext }}
volumes:
{% for key, value in app.volumes.items() %}
meta-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
services:
proxy:
image: nginx:{{ app.versions.proxy }}
hostname: proxy
networks:
- meta
extra_hosts:
- "dockerloopback:{{ app.settings.loopback_address }}"
ports:
- published: {{ app.ports.80 }}
target: 80
protocol: tcp
mode: ingress
- published: {{ app.ports.443 }}
target: 443
protocol: tcp
mode: ingress
volumes:
- type: volume
source: meta-nginx
target: /etc/nginx
read_only: true
- type: volume
source: meta-letsencrypt-config
target: /etc/letsencrypt
read_only: true
deploy:
replicas: 2
placement:
max_replicas_per_node: 1
certbot:
image: certbot/certbot:{{ app.versions.certbot }}
hostname: certbot
command: renew --standalone
networks:
- meta
ports:
- published: 8088 # This is hardcoded to avoid conflicts
target: 80
protocol: tcp
mode: ingress
volumes:
- type: volume
source: meta-letsencrypt-config
target: /etc/letsencrypt
read_only: false
- type: volume
source: meta-letsencrypt-data
target: /var/lib/letsencrypt
read_only: false
deploy:
replicas: 1
restart_policy:
condition: any
delay: 24h

View File

@@ -0,0 +1,53 @@
---
version: "{{ skylab_compose_version }}"
networks:
adguard:
name: adguard
driver: overlay
ipam:
driver: default
config:
- subnet: "{{ app.networks.ext }}"
volumes:
{% for key, value in app.volumes.items() %}
adguard-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
services:
server:
image: adguard/adguardhome:{{ app.versions.server }}
hostname: adguard
networks:
- adguard
dns:
{% for server in app.settings.upstream %}
- {{ server }}
{% endfor %}
ports:
- published: {{ app.ports.53 }}
target: 53
protocol: udp
mode: ingress
- published: {{ app.ports.53 }}
target: 53
protocol: tcp
mode: ingress
- published: {{ app.ports.8064 }}
target: 8064
protocol: tcp
mode: ingress
volumes:
- type: volume
source: adguard-config
target: /opt/adguardhome/conf
read_only: false
- type: volume
source: adguard-data
target: /opt/adguardhome/work
read_only: false
deploy:
replicas: 1

View File

@@ -0,0 +1,214 @@
---
version: "{{ skylab_compose_version }}"
x-global-env: &globalenv
LOCAL_UID: "{{ _app_account.uid }}"
LOCAL_GID: "{{ _app_account.uid }}"
ASPNETCORE_ENVIRONMENT: Production
globalSettings__selfHosted: "true"
globalSettings__baseServiceUri__vault: https://{{ app.domain }}
globalSettings__baseServiceUri__api: https://{{ app.domain }}/api
globalSettings__baseServiceUri__identity: https://{{ app.domain }}/identity
globalSettings__baseServiceUri__admin: https://{{ app.domain }}/admin
globalSettings__baseServiceUri__notifications: https://{{ app.domain }}/notifications
globalSettings__baseServiceUri__internalNotifications: http://bitwarden_notifications:5000
globalSettings__baseServiceUri__internalAdmin: http://bitwarden_admin:5000
globalSettings__baseServiceUri__internalIdentity: http://bitwarden_identity:5000
globalSettings__baseServiceUri__internalApi: http://bitwarden_api:5000
globalSettings__baseServiceUri__internalVault: http://bitwarden_web:5000
globalSettings__pushRelayBaseUri: https://push.bitwarden.com
globalSettings__installation__identityUri: https://identity.bitwarden.com
globalSettings__sqlServer__connectionString: "Data Source=tcp:mssql,1433;Initial Catalog=vault;Persist Security Info=False;User ID=sa;Password=e934c0bb-3b5a-4e6b-b525-cd6d83004e1a;MultipleActiveResultSets=False;Connect Timeout=30;Encrypt=True;TrustServerCertificate=True"
globalSettings__identityServer__certificatePassword: {{ app.settings.certificatePassword }}
globalSettings__attachment__baseDirectory: /etc/bitwarden/core/attachments
globalSettings__attachment__baseUrl: https://{{ app.domain }}/attachments
globalSettings__dataProtection__directory: /etc/bitwarden/core/aspnet-dataprotection
globalSettings__logDirectory: /etc/bitwarden/logs
globalSettings__licenseDirectory: /etc/bitwarden/core/licenses
globalSettings__internalIdentityKey: {{ app.settings.internalIdentityKey }}
globalSettings__duo__aKey: {{ app.settings.duo__aKey }}
globalSettings__installation__id: {{ app.settings.installation__id }}
globalSettings__installation__key: {{ app.settings.installation__key }}
globalSettings__yubico__clientId: REPLACE
globalSettings__yubico__key: REPLACE
globalSettings__mail__replyToEmail: noreply@enp.one
globalSettings__mail__smtp__host: REPLACE
globalSettings__mail__smtp__port: "587"
globalSettings__mail__smtp__ssl: "false"
globalSettings__mail__smtp__username: REPLACE
globalSettings__mail__smtp__password: REPLACE
globalSettings__disableUserRegistration: "false"
globalSettings__hibpApiKey: REPLACE
adminSettings__admins: ""
volumes:
{% for key, value in app.volumes.items() %}
bitwarden-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
networks:
bitwarden_internal:
internal: true
name: bitwarden_internal
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.internal }}
bitwarden_external:
internal: false
name: bitwarden_external
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.external }}
services:
mssql:
image: bitwarden/mssql:{{ app.versions.mssql }}
stop_grace_period: 60s
networks:
- bitwarden_internal
volumes:
- bitwarden-db-data:/var/opt/mssql/data
- bitwarden-db-backup:/etc/bitwarden/mssql/backups
- bitwarden-logs-db:/var/opt/mssql/log
environment:
LOCAL_UID: "{{ _app_account.uid }}"
LOCAL_GID: "{{ _app_account.uid }}"
ACCEPT_EULA: "Y"
MSSQL_PID: Express
SA_PASSWORD: {{ app.settings.SA_PASSWORD }}
deploy:
replicas: 1
web:
image: bitwarden/web:{{ app.versions.web }}
networks:
- bitwarden_internal
volumes:
- bitwarden-web:/etc/bitwarden/web
environment: *globalenv
deploy:
replicas: 1
attachments:
image: bitwarden/attachments:{{ app.versions.attachments }}
networks:
- bitwarden_internal
volumes:
- bitwarden-core:/etc/bitwarden/core
environment: *globalenv
deploy:
replicas: 1
api:
image: bitwarden/api:{{ app.versions.api }}
volumes:
- bitwarden-core:/etc/bitwarden/core
- bitwarden-ca-certs:/etc/bitwarden/ca-certificates
- bitwarden-logs-api:/etc/bitwarden/logs
environment: *globalenv
networks:
- bitwarden_external
- bitwarden_internal
deploy:
replicas: 1
identity:
image: bitwarden/identity:{{ app.versions.identity }}
volumes:
- bitwarden-identity:/etc/bitwarden/identity
- bitwarden-core:/etc/bitwarden/core
- bitwarden-ca-certs:/etc/bitwarden/ca-certificates
- bitwarden-logs-identity:/etc/bitwarden/logs
environment: *globalenv
networks:
- bitwarden_external
- bitwarden_internal
deploy:
replicas: 1
admin:
image: bitwarden/admin:{{ app.versions.admin }}
depends_on:
- mssql
volumes:
- bitwarden-core:/etc/bitwarden/core
- bitwarden-ca-certs:/etc/bitwarden/ca-certificates
- bitwarden-logs-admin:/etc/bitwarden/logs
environment: *globalenv
networks:
- bitwarden_external
- bitwarden_internal
deploy:
replicas: 1
icons:
image: bitwarden/icons:{{ app.versions.icons }}
volumes:
- bitwarden-ca-certs:/etc/bitwarden/ca-certificates
- bitwarden-logs-icons:/etc/bitwarden/logs
environment: *globalenv
networks:
- bitwarden_external
- bitwarden_internal
deploy:
replicas: 1
notifications:
image: bitwarden/notifications:1.40.0
volumes:
- bitwarden-ca-certs:/etc/bitwarden/ca-certificates
- bitwarden-logs-notifications:/etc/bitwarden/logs
environment: *globalenv
networks:
- bitwarden_external
- bitwarden_internal
deploy:
replicas: 1
events:
image: bitwarden/events:{{ app.versions.events }}
volumes:
- bitwarden-ca-certs:/etc/bitwarden/ca-certificates
- bitwarden-logs-events:/etc/bitwarden/logs
environment: *globalenv
networks:
- bitwarden_external
- bitwarden_internal
deploy:
replicas: 1
nginx:
image: bitwarden/nginx:{{ app.versions.nginx }}
depends_on:
- web
- admin
- api
- identity
ports:
- published: {{ app.ports.8080 }}
target: 8080
protocol: tcp
mode: ingress
- published: {{ app.ports.8443 }}
target: 8443
protocol: tcp
mode: ingress
volumes:
- bitwarden-nginx-data:/etc/bitwarden/nginx
- bitwarden-ssl:/etc/ssl
- bitwarden-logs-nginx:/var/log/nginx
environment: *globalenv
networks:
- bitwarden_external
- bitwarden_internal
deploy:
replicas: 1

View File

@@ -0,0 +1,52 @@
---
version: "{{ skylab_compose_version }}"
networks:
gitea:
name: gitea
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.ext }}
volumes:
{% for key, value in app.volumes.items() %}
gitea-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
services:
server:
image: gitea/gitea:{{ app.versions.server }}
hostname: gitea
networks:
- gitea
ports:
- published: {{ app.ports.3000 }}
target: 3000
protocol: tcp
mode: ingress
- published: {{ app.ports.22 }}
target: 22
protocol: tcp
mode: ingress
volumes:
- type: volume
source: gitea-data
target: /data
read_only: false
environment:
USER_UID: "{{ _app_account.uid }}"
USER_GID: "{{ _app_account.uid }}"
APP_NAME: ENP Version Control System
RUN_MODE: prod
ROOT_URL: https://{{ app.domain }}/
DB_TYPE: sqlite3
DISABLE_REGISTRATION: "true"
deploy:
replicas: 1

View File

@@ -0,0 +1,55 @@
---
version: "{{ skylab_compose_version }}"
networks:
minecraft:
name: minecraft
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.ext }}
volumes:
{% for key, value in app.volumes.items() %}
minecraft-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
services:
server:
image: itzg/minecraft-server:latest
hostname: minecraft
networks:
- minecraft
ports:
- published: {{ app.ports.25565 }}
target: 25565
protocol: tcp
mode: ingress
volumes:
- type: volume
source: minecraft-data
target: /data
read_only: false
environment:
EULA: "TRUE"
TZ: Americas/New_York
VERSION: {{ app.versions.server }}
MAX_MEMORY: "8G"
MOTD: "A home for buttery companions"
MODE: survival
OPS: {{ app.settings.admins | default([]) | join(',') }}
WHITELIST: "{{ app.settings.users | default([]) | join(',') }}"
MAX_BUILD_HEIGHT: "512"
SNOOPER_ENABLED: "false"
ICON: https://cdn.enp.one/img/logos/e-w-sm.png
ENABLE_RCON: "false"
UID: "{{ _app_account.uid }}"
GID: "{{ _app_account.uid }}"
deploy:
replicas: 1

View File

@@ -0,0 +1,95 @@
---
version: "{{ skylab_compose_version }}"
networks:
plex:
name: plex
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.ext }}
volumes:
{% for key, value in app.volumes.items() %}
plex-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
plex-data:
name: plex-data
driver: local
driver_opts:
type: nfs
o: "addr={{ app.settings.mediastore }},ro"
device: ":/nfs/plex"
services:
server:
image: plexinc/pms-docker:{{ app.versions.server }}
hostname: plex-media-server
networks:
- plex
ports:
- published: {{ app.ports.32400 }}
target: 32400
protocol: tcp
mode: ingress
- published: {{ app.ports.3005 }}
target: 3005
protocol: tcp
mode: ingress
- published: {{ app.ports.8324 }}
target: 8324
protocol: tcp
mode: ingress
- published: {{ app.ports.32469 }}
target: 32469
protocol: tcp
mode: ingress
- published: {{ app.ports.1900 }}
target: 1900
protocol: udp
mode: ingress
- published: {{ app.ports.32410 }}
target: 32410
protocol: udp
mode: ingress
- published: {{ app.ports.32413 }}
target: 32413
protocol: udp
mode: ingress
- published: {{ app.ports.32414 }}
target: 32414
protocol: udp
mode: ingress
volumes:
- type: volume
source: plex-config
target: /config
read_only: false
- type: volume
source: plex-data
target: /data
read_only: true
- type: volume
source: plex-personal
target: /personal
read_only: false
environment:
TZ: "Americas/New_York"
ALLOWED_NETWORKS: {{ app.settings.internal_subnets | join(',') }}
PLEX_UID: "{{ _app_account.uid }}"
PLEX_GID: "{{ _app_account.uid }}"
deploy:
replicas: 1
placement:
{% if app.settings.exclude_hosts is defined %}
constraints:
{% for host in app.settings.exclude_hosts %}
- node.hostname!={{ host }}
{% endfor %}
{% endif %}

View File

@@ -0,0 +1,70 @@
---
version: "{{ skylab_compose_version }}"
networks:
unifi:
name: unifi
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.ext }}
volumes:
{% for key, value in app.volumes.items() %}
unifi-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
services:
wlc:
image: jacobalberty/unifi:{{ app.versions.wlc }}
hostname: en1-unifi-wlc
init: true
networks:
- unifi
ports:
- published: {{ app.ports.8080 }}
target: 8080
protocol: tcp
mode: ingress
- published: {{ app.ports.8443 }}
target: 8443
protocol: tcp
mode: ingress
- published: {{ app.ports.8843 }}
target: 8843
protocol: tcp
mode: ingress
- published: {{ app.ports.8880 }}
target: 8880
protocol: tcp
mode: ingress
- published: {{ app.ports.3478 }}
target: 3478
protocol: udp
mode: ingress
- published: {{ app.ports.6789 }}
target: 6789
protocol: tcp
mode: ingress
- published: {{ app.ports.10001 }}
target: 10001
protocol: udp
mode: ingress
volumes:
- type: volume
source: unifi-data
target: /unifi
read_only: false
environment:
RUNAS_UID0: "false"
UNIFI_UID: "{{ _app_account.uid }}"
UNIFI_GID: "{{ _app_account.uid }}"
TZ: "Americas/New_York"
deploy:
replicas: 1

View File

@@ -0,0 +1,108 @@
---
version: "{{ skylab_compose_version }}"
networks:
vikunja:
name: vikunja
driver: overlay
ipam:
driver: default
config:
- subnet: {{ app.networks.ext }}
volumes:
{% for key, value in app.volumes.items() %}
vikunja-{{ key }}:
name: datastore{{ value }}
driver: glusterfs
{% endfor %}
services:
database:
image: mariadb:{{ app.versions.database }}
hostname: database
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- vikunja
volumes:
- type: volume
source: vikunja-database
target: /var/lib/mysql
read_only: false
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "true"
MYSQL_USER: vikunja
MYSQL_PASSWORD: {{ app.settings.database_password }}
MYSQL_DATABASE: vikunja
deploy:
replicas: 1
cache:
image: redis:{{ app.versions.cache }}
hostname: cache
networks:
- vikunja
deploy:
replicas: 1
proxy:
image: nginx:{{ app.versions.proxy }}
hostname: proxy
networks:
- vikunja
ports:
- published: {{ app.ports.80 }}
target: 80
protocol: tcp
mode: ingress
volumes:
- type: volume
source: vikunja-nginx
target: /etc/nginx/conf.d
read_only: true
deploy:
replicas: 1
api:
image: vikunja/api:{{ app.versions.api }}
hostname: api
networks:
- vikunja
depends_on:
- database
- cache
volumes:
- type: volume
source: vikunja-files
target: /app/vikunja/files
read_only: false
environment:
VIKUNJA_DATABASE_HOST: database
VIKUNJA_DATABASE_PASSWORD: {{ app.settings.database_password }}
VIKUNJA_DATABASE_TYPE: mysql
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_REDIS_ENABLED: "1"
VIKUNJA_REDIS_HOST: cache:6379
VIKUNJA_CACHE_ENABLED: "1"
VIKUNJA_CACHE_TYPE: redis
VIKUNJA_FILES_MAXSIZE: 50MB
deploy:
replicas: 1
web:
image: vikunja/frontend:{{ app.versions.web }}
hostname: web
networks:
- vikunja
depends_on:
- database
- cache
- proxy
environment:
VIKUNJA_API_URL: https://{{ app.domain }}/api/v1
deploy:
replicas: 1