Compare commits

...

40 Commits

Author SHA1 Message Date
gyurix
f5130b0c57 Update volume destination paths in service-matrix.json and service-pocketid.json for PostgreSQL data 2025-09-02 14:16:22 +02:00
gyurix
1ef0fd1f5c Update EXTRA configuration in service-matrix.json for container cleanup 2025-09-02 11:31:52 +02:00
gyurix
ca41276ecf Remove unnecessary EXTRA configuration from service-matrix.json 2025-09-02 11:14:15 +02:00
gyurix
7a2a4e90ed Update volume mapping in service-matrix.json for improved clarity 2025-09-02 11:08:41 +02:00
gyurix
4bb61da615 Remove unused PORTS configuration from service-matrix.json 2025-09-02 10:56:19 +02:00
gyurix
e3862bbeb7 Rename matrixserver-setup to matrixserver-dbinit and add new volume mapping for input data 2025-09-02 10:33:26 +02:00
gyurix
fc0197dcf1 Refactor configuration file structure for enhanced readability and organization 2025-09-01 16:22:29 +02:00
gyurix
c30a5ceadb Update SUBPATH details in template.json for clearer usage instructions 2025-09-01 10:17:54 +02:00
gyurix
fcc452af8a Rename LOCAL_PATH to LOCATION in domain-matrix-admin.json for clarity 2025-09-01 10:09:57 +02:00
gyurix
daaa19d32a Update domain keys in configuration files for consistency and clarity 2025-09-01 10:05:22 +02:00
gyurix
2129a7e8f9 Refactor matrix configuration structure for improved clarity and maintainability 2025-08-31 19:57:40 +02:00
gyurix
22e37d90af Update domain and path keys in configuration files for consistency 2025-08-31 14:46:04 +02:00
gyurix
efd077e41a Add DOMAIN_ADMIN and SUB_PATH fields to configuration files 2025-08-31 14:38:12 +02:00
gyurix
3fbdace533 Rename matrix server components and add finalize setup configuration 2025-08-31 14:27:09 +02:00
gyurix
f065b4f6ce Add required fields and types to matrix template configuration 2025-08-31 14:18:20 +02:00
gyurix
05f0a6d10f Add matrix service configuration and update related settings 2025-08-31 14:14:34 +02:00
gyurix
01ca5a196c Refactor database connection string to enhance clarity and consistency 2025-08-31 12:21:26 +02:00
gyurix
b5c693bc8b Add initial configuration files for matrix service and firewalls 2025-08-31 12:15:16 +02:00
gyurix
37e93e661d Update port configuration from 3000 to 1411 in domain, firewall, and service JSON files 2025-08-30 09:48:49 +02:00
gyurix
9c0932bdd4 Rename POSTGRES_CONNECTION_STRING to DB_CONNECTION_STRING in pocketid-secret.json 2025-08-30 09:38:35 +02:00
gyurix
a8f4533991 Update PocketID image reference in service-pocketid.json to use versioned tag 2025-08-30 09:36:14 +02:00
gyurix
feace468dc Update PostgreSQL volume paths in service-pocketid.json 2025-08-30 09:27:26 +02:00
gyurix
4e19534cae Update SERVICE_NAME in domain-pocketid.json from 'vaultwarden' to 'pocketid' 2025-08-30 09:22:15 +02:00
gyurix
5fd409e79c Update Pocketid icon in applications-tree.json to a new SVG representation 2025-08-30 09:21:01 +02:00
gyurix
0e487b02c5 Add PocketID configuration files for PostgreSQL integration and firewall settings 2025-08-30 08:56:08 +02:00
gyurix
3f73d1e42d Refactor Vaultwarden configuration to replace MariaDB with PostgreSQL, update related keys and paths, and remove unnecessary log directory. 2025-08-29 17:20:14 +02:00
gyurix
6d65026806 Update Gitea service configuration to change SERVICE_NAME and DOMAIN settings 2025-08-29 15:38:32 +02:00
gyurix
5aca166c34 Update Gitea secret configuration to change database host to 'giteapostgres-db' 2025-08-29 14:48:12 +02:00
gyurix
70e144b7f8 Update Gitea configuration to replace 'gitea' with 'gitea-app' in service and firewall settings 2025-08-29 14:39:46 +02:00
gyurix
fd179866b2 Update Gitea service configuration to use latest image tag for Gitea 2025-08-29 14:31:01 +02:00
gyurix
46ff9e08cc Fix typo in Gitea service configuration ENV_FILES path 2025-08-29 14:27:48 +02:00
gyurix
5de24e19fe Update Gitea service configuration to use absolute path for ENV_FILES 2025-08-29 14:27:29 +02:00
gyurix
d6fe96f2c7 Update Gitea service configuration to use 'gitea.json' for ENV_FILES and format DNS entries 2025-08-29 14:24:52 +02:00
gyurix
e62029bca4 Remove unnecessary option from MAIL_ENABLE in Gitea template configuration 2025-08-29 14:22:20 +02:00
gyurix
31c72181b4 Refactor service configurations to improve compatibility and streamline setup process 2025-08-29 14:19:09 +02:00
gyurix
459ca0e019 Update Nextcloud PostgreSQL image to version 15 and add Gitea configuration files for PostgreSQL and firewall services 2025-08-29 14:16:43 +02:00
gyurix
324ad45ef3 Update Nextcloud configuration to use PostgreSQL instead of MariaDB and adjust related settings 2025-08-29 10:19:39 +02:00
gyurix
4b91fa6f3f Add .gitignore, update Redis URL and domain placeholders, and expand outline secret configuration 2025-08-29 08:14:08 +02:00
gyurix
f4f66398de Update Jellyfin service configuration to use version placeholder and add version metadata to template 2025-08-25 10:44:18 +02:00
gyurix
b07b6c7800 Add matrix server configuration and update filebrowser command to set ownership 2025-08-23 14:29:12 +02:00
38 changed files with 1938 additions and 117 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*tmp*

File diff suppressed because one or more lines are too long

View File

@@ -21,7 +21,7 @@
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /etc/user/data/jellyfin/media && mkdir -p /etc/user/data/transmission/downloads/complete",
"CMD": "mkdir -p /etc/user/data/jellyfin/media && chown -R 1000:1000 /etc/user/data/jellyfin/media && mkdir -p /etc/user/data/transmission/downloads/complete",
"PRE_START": "null",
"POST_START": "null"
},

60
gitea/domain-gitea.json Normal file
View File

@@ -0,0 +1,60 @@
{
"main": {
"SERVICE_NAME": "gitea",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "safebox/domain-check",
"UPDATE": "true",
"MEMORY": "64M",
"NAME": "domain_checker",
"ROLES": "domain_checker",
"NETWORK": "host",
"SELECTOR": "",
"SCALE": "0",
"EXTRA": "--rm --privileged",
"PRE_START": [],
"DEPEND": [],
"POST_START": [],
"CMD": "",
"ENVS": [
{
"PROXY": "smarthostloadbalancer"
},
{
"TARGET": "gitea-app"
},
{
"PORT": "3000"
},
{
"DOMAIN": "#DOMAIN"
},
{
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
},
{
"OPERATION": "CREATE"
}
],
"VOLUMES": [
{
"SOURCE": "/etc/user/config/smarthost-domains",
"DEST": "/smarthost-domains",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
]
}
]
}

View File

@@ -0,0 +1,76 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"UPDATE": "true",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "gitea-app"
},
{
"TARGET": "coredns"
},
{
"TYPE": "udp"
},
{
"TARGET_PORT": "53"
},
{
"COMMENT": "gitea application access for local dns"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "",
"PRE_START": [],
"POST_START": []
}
]
}

View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "gitea-app"
},
{
"TARGET": "smtp"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "25"
},
{
"COMMENT": "gitea to smtp"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

75
gitea/firewall-gitea.json Normal file
View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "smarthostbackend"
},
{
"TARGET": "gitea-app"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "3000"
},
{
"COMMENT": "gitea"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

22
gitea/gitea-secret.json Normal file
View File

@@ -0,0 +1,22 @@
{
"giteapostgres": {
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
},
"giteaapp": {
"GITEA__database__DB_TYPE": "postgres",
"GITEA__database__HOST": "giteapostgres-db",
"GITEA__database__NAME": "#POSTGRES_DB",
"GITEA__database__USER": "#POSTGRES_USER",
"GITEA__database__PASSWD": "#POSTGRES_PASSWORD",
"GITEA__mailer__ENABLED": "#MAIL_ENABLE",
"GITEA__mailer__FROM": "#MAIL_FROM",
"GITEA__mailer__PROTOCOL": "#MAIL_PROTOCOL",
"GITEA__mailer__SMTP_ADDR": "#MAIL_SMTP_ADDR",
"GITEA__mailer__SMTP_PORT": "#MAIL_SMTP_PORT",
"GITEA__mailer__USER": "#MAIL_USER",
"GITEA__mailer__PASSWD": "#MAIL_PASSWORD"
}
}

110
gitea/service-gitea.json Normal file
View File

@@ -0,0 +1,110 @@
{
"main": {
"SERVICE_NAME": "gitea",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "alpine:latest",
"UPDATE": "true",
"NAME": "gitea-init",
"NETWORK": "host",
"MEMORY": "64M",
"VOLUMES": [
{
"SOURCE": "USER_DATA",
"DEST": "/etc/user/data",
"TYPE": "rw"
}
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /etc/user/data/gitea/db && mkdir -p /etc/user/data/gitea/data && chown -R 1000:1000 /etc/user/data/gitea",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "postgres:15-alpine",
"NAME": "giteapostgres-db",
"UPDATE": "true",
"ROLES": "postgres-db",
"MEMORY": "256M",
"NETWORK": "gitea-net",
"SELECTOR": "giteapostgres-db",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/gitea/db",
"DEST": "/var/lib/postgresql/data",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "5432",
"TYPE": "tcp"
}
],
"ENV_FILES": [
"/etc/user/secret/gitea/gitea.json"
],
"ENVS": [
{
"POSTGRES_INITDB_ARGS": "--encoding=UTF8 --locale=C"
}
],
"EXTRA": "--label logging=promtail_user --label logging_jobname=containers --restart unless-stopped",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": [],
"POST_START": []
},
{
"IMAGE": "gitea/gitea:latest",
"UPDATE": "true",
"NAME": "giteaapp",
"DNS": [
"coredns"
],
"MEMORY": "512M",
"SELECTOR": "gitea-app",
"NETWORK": "gitea-net",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/gitea/data",
"DEST": "/data",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "3000",
"TYPE": "tcp"
},
{
"SOURCE": "null",
"DEST": "22",
"TYPE": "tcp"
}
],
"EXTRA": "null",
"ENV_FILES": [
"/etc/user/secret/gitea/gitea.json"
],
"DEPEND": [],
"START_ON_BOOT": "true",
"CMD": "null",
"PRE_START": "null",
"POST_START": [
"firewall-gitea-dns",
"firewall-gitea-smtp",
"firewall-gitea",
"domain-gitea"
]
}
]
}

87
gitea/template.json Normal file

File diff suppressed because one or more lines are too long

View File

@@ -29,7 +29,7 @@
"POST_START": "null"
},
{
"IMAGE": "jellyfin/jellyfin:latest",
"IMAGE": "jellyfin/jellyfin:#VERSION",
"UPDATE": "true",
"NAME": "jellyfin",
"NETWORK": "host",

View File

@@ -9,6 +9,13 @@
"description": "Domain",
"key": "DOMAIN",
"value": ""
},
{
"description": "Version",
"key": "VERSION",
"value": "2025081105",
"info": "Latest stable official version at the time of template creation.",
"advanced": "true"
}
]
}

View File

@@ -0,0 +1,63 @@
{
"main": {
"SERVICE_NAME": "matrix",
"DOMAIN": "#ADMINDOMAIN"
},
"containers": [
{
"IMAGE": "safebox/domain-check",
"UPDATE": "true",
"MEMORY": "64M",
"NAME": "domain_checker",
"ROLES": "domain_checker",
"NETWORK": "host",
"SELECTOR": "",
"SCALE": "0",
"EXTRA": "--rm --privileged",
"PRE_START": [],
"DEPEND": [],
"POST_START": [],
"CMD": "",
"ENVS": [
{
"PROXY": "smarthostloadbalancer"
},
{
"TARGET": "matrixadmin"
},
{
"PORT": "80"
},
{
"DOMAIN": "#ADMINDOMAIN"
},
{
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
},
{
"LOCATION": "#SUBPATH"
},
{
"OPERATION": "CREATE"
}
],
"VOLUMES": [
{
"SOURCE": "/etc/user/config/smarthost-domains",
"DEST": "/smarthost-domains",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
]
}
]
}

60
matrix/domain-matrix.json Normal file
View File

@@ -0,0 +1,60 @@
{
"main": {
"SERVICE_NAME": "matrix",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "safebox/domain-check",
"UPDATE": "true",
"MEMORY": "64M",
"NAME": "domain_checker",
"ROLES": "domain_checker",
"NETWORK": "host",
"SELECTOR": "",
"SCALE": "0",
"EXTRA": "--rm --privileged",
"PRE_START": [],
"DEPEND": [],
"POST_START": [],
"CMD": "",
"ENVS": [
{
"PROXY": "smarthostloadbalancer"
},
{
"TARGET": "matrixserver"
},
{
"PORT": "8008"
},
{
"DOMAIN": "#DOMAIN"
},
{
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
},
{
"OPERATION": "CREATE"
}
],
"VOLUMES": [
{
"SOURCE": "/etc/user/config/smarthost-domains",
"DEST": "/smarthost-domains",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
]
}
]
}

View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "smarthostbackend"
},
{
"TARGET": "matrixadmin"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "80"
},
{
"COMMENT": "matrixadmin for proxy"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

View File

@@ -0,0 +1,76 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"UPDATE": "true",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "matrixserver"
},
{
"TARGET": "coredns"
},
{
"TYPE": "udp"
},
{
"TARGET_PORT": "53"
},
{
"COMMENT": "matrix nginx access for local dns"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "",
"PRE_START": [],
"POST_START": []
}
]
}

View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "matrixserver"
},
{
"TARGET": "smtp"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "25"
},
{
"COMMENT": "matrix to smtp"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "smarthostbackend"
},
{
"TARGET": "matrixserver"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "8008"
},
{
"COMMENT": "matrix"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

29
matrix/matrix-secret.json Normal file
View File

@@ -0,0 +1,29 @@
{
"matrixpostgres": {
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
},
"matrixserver": {
"DB_TYPE": "psycopg2",
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_HOST": "matrixpostgres-db",
"DB_PORT": "5432",
"SYNAPSE_SERVER_NAME": "#DOMAIN",
"SYNAPSE_REPORT_STATS": "no",
"ADMIN_USERNAME": "#ADMIN_USERNAME",
"ADMIN_PASSWORD": "#ADMIN_PASSWORD",
"SYNAPSE_CONFIG_DIR": "/data",
"SYNAPSE_CONFIG_PATH": "/data/homeserver.yaml",
"SYNAPSE_DATA_DIR": "/data"
},
"matrixadmin": {
"REACT_APP_SERVER": "https://#DOMAIN",
"BASE_PATH": "#ADMINDOMAIN",
"ADMINDOMAIN": "#ADMINDOMAIN",
"SUBPATH": "#SUBPATH"
}
}

199
matrix/service-matrix.json Normal file
View File

@@ -0,0 +1,199 @@
{
"main": {
"SERVICE_NAME": "matrix",
"DOMAIN": "DOMAIN"
},
"containers": [
{
"IMAGE": "alpine:latest",
"UPDATE": "true",
"NAME": "matrix-init",
"NETWORK": "host",
"MEMORY": "64M",
"VOLUMES": [
{
"SOURCE": "USER_DATA",
"DEST": "/etc/user/data",
"TYPE": "rw"
}
],
"ENV_FILES": [
"/etc/user/secret/matrix/matrix.json"
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /etc/user/data/matrix/db && mkdir -p /etc/user/data/matrix/synapse",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "postgres:alpine",
"UPDATE": "true",
"NAME": "matrixpostgres-db",
"ROLES": "postgres-db",
"MEMORY": "256M",
"NETWORK": "matrix-net",
"SELECTOR": "matrixpostgres-db",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/matrix/db",
"DEST": "/var/lib/postgresql/data",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "5432",
"TYPE": "tcp"
}
],
"ENV_FILES": [
"/etc/user/secret/matrix/matrix.json"
],
"ENVS": [
{
"POSTGRES_INITDB_ARGS": "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
}
],
"EXTRA": "--restart unless-stopped",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": [],
"POST_START": []
},
{
"IMAGE": "matrixdotorg/synapse",
"UPDATE": "true",
"NAME": "matrixserver-init",
"ROLES": "backend-www",
"MEMORY": "512M",
"NETWORK": "matrix-net",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/matrix/synapse",
"DEST": "/data",
"TYPE": "rw"
}
],
"ENV_FILES": [
"/etc/user/secret/matrix/matrix.json"
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "bash -c",
"CMD": "if [ ! -f /data/homeserver.yaml ]; then /start.py generate ; else exit 1; fi",
"PRE_START": [],
"POST_START": []
},
{
"IMAGE": "safebox/matrix-setup:latest",
"UPDATE": "true",
"NAME": "matrixserver-dbinit",
"NETWORK": "host",
"MEMORY": "64M",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/matrix/synapse",
"DEST": "/data",
"TYPE": "rw"
}
],
"ENV_FILES": [
"/etc/user/secret/matrix/matrix.json"
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "matrixdotorg/synapse",
"UPDATE": "true",
"NAME": "matrixserver-app",
"ROLES": "backend-www",
"MEMORY": "512M",
"NETWORK": "matrix-net",
"SELECTOR": "matrixserver",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/matrix/synapse",
"DEST": "/data",
"TYPE": "rw"
}
],
"ENV_FILES": [
"/etc/user/secret/matrix/matrix.json"
],
"EXTRA": "--restart unless-stopped",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": [],
"POST_START": [
"firewall-matrix",
"domain-matrix"
]
},
{
"IMAGE": "safebox/matrix-setup:latest",
"UPDATE": "true",
"NAME": "matrixserver-finalize",
"NETWORK": "host",
"MEMORY": "64M",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/matrix/synapse",
"DEST": "/data",
"TYPE": "rw"
},
{
"SOURCE": "SHARED",
"DEST": "/var/tmp/shared",
"TYPE": "rw"
}
],
"ENV_FILES": [
"/etc/user/secret/matrix/matrix.json"
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "awesometechnologies/synapse-admin",
"UPDATE": "true",
"NAME": "matrixadmin",
"ROLES": "backend-www",
"MEMORY": "128M",
"NETWORK": "matrix-net",
"SELECTOR": "matrixadmin",
"VOLUMES": [],
"PORTS": [
{
"SOURCE": "null",
"DEST": "80",
"TYPE": "tcp"
}
],
"EXTRA": "--restart unless-stopped",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": [],
"POST_START": [
"firewall-matrix-admin",
"domain-matrix-admin"
]
}
]
}

69
matrix/template.json Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +1,9 @@
{
"nextcloudmysql": {
"MARIADB_DATABASE": "#MARIADB_DATABASE",
"MARIADB_USER": "#MARIADB_USER",
"MARIADB_PASSWORD": "#MARIADB_PASSWORD",
"MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
"nextcloudpostgres": {
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
},
"nextcloudphp": {
"NEXTCLOUD_ADMIN_USER": "#NEXTCLOUD_ADMIN_USER",
@@ -11,10 +11,10 @@
"NEXTCLOUD_TRUSTED_DOMAINS": "#NEXTCLOUD_TRUSTED_DOMAINS",
"OVERWRITEHOST": "#NEXTCLOUD_TRUSTED_DOMAINS",
"NEXTCLOUD_DATA_DIR": "/var/data",
"MYSQL_DATABASE": "#MARIADB_DATABASE",
"MYSQL_USER": "#MARIADB_USER",
"MYSQL_PASSWORD": "#MARIADB_PASSWORD",
"MYSQL_HOST": "nextcloudmysql-db",
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_HOST": "nextcloudpostgres-db",
"REDIS_HOST": "nextcloud-redis"
}
}

View File

@@ -34,47 +34,31 @@
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /etc/user/data/nextcloud/db && mkdir -p /etc/system/log/nextcloud/db && mkdir -p /etc/user/data/nextcloud/apps && mkdir -p /etc/user/data/nextcloud/config && mkdir -p /etc/user/data/nextcloud/data && chmod 777 -R /etc/user/data/nextcloud && chmod 0770 -R /etc/user/data/nextcloud/data && chown -R 82:82 /etc/user/data/nextcloud/data && chown -R 82:82 /etc/user/data/nextcloud/apps && chown -R 82:82 /etc/user/data/nextcloud/config",
"CMD": "mkdir -p /etc/user/data/nextcloud/db && mkdir -p /etc/user/data/nextcloud/apps && mkdir -p /etc/user/data/nextcloud/config && mkdir -p /etc/user/data/nextcloud/data && chmod 777 -R /etc/user/data/nextcloud && chmod 0770 -R /etc/user/data/nextcloud/data && chown -R 82:82 /etc/user/data/nextcloud/data && chown -R 82:82 /etc/user/data/nextcloud/apps && chown -R 82:82 /etc/user/data/nextcloud/config",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "mariadb:10.5",
"IMAGE": "postgres:15-alpine",
"UPDATE": "true",
"NAME": "nextcloudmysql-db",
"NAME": "nextcloudpostgres-db",
"MEMORY": "256M",
"NETWORK": "nextcloud-net",
"SELECTOR": "nextcloudmysql",
"SELECTOR": "nextcloudpostgres",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/nextcloud/db",
"DEST": "/var/lib/mysql",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/log/nextcloud/db",
"DEST": "/var/lib/mysql/mysql-bin",
"DEST": "/var/lib/postgres",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "3306",
"DEST": "5432",
"TYPE": "tcp"
}
],
"READYNESS": [
{
"tcp": "3306"
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENV_FILES": [
"/etc/user/secret/nextcloud/nextcloud.json"
],
@@ -182,7 +166,7 @@
]
},
{
"IMAGE": "registry.format.hu/nextcloud-nginx:1.23.1",
"IMAGE": "safebox/nextcloud-nginx:latest",
"UPDATE": "true",
"NAME": "nextcloudnginx",
"ROLES": "backend-www",

View File

@@ -32,34 +32,34 @@
{
"description": "Version",
"key": "VERSION",
"value": "26.0.13-fpm-alpine",
"value": "31.0.8-fpm-alpine",
"info": "Please keep in mind you can't upgrade major version without skipping a version!",
"advanced": "true"
},
{
"description": "MYSQL database name",
"key": "MARIADB_DATABASE",
"description": "Postgres database name",
"key": "POSTGRES_DB",
"value": "",
"required": "true",
"generated": "time|md5|8"
},
{
"description": "MYSQL username",
"key": "MARIADB_USER",
"description": "Postgres username",
"key": "POSTGRES_USER",
"value": "",
"required": "true",
"generated": "time|md5|8"
},
{
"description": "MYSQL password for user",
"key": "MARIADB_PASSWORD",
"description": "Postgres password for user",
"key": "POSTGRES_PASSWORD",
"value": "",
"required": "true",
"generated": "random|md5|12"
},
{
"description": "MYSQL root user password",
"key": "MARIADB_ROOT_PASSWORD",
"description": "Postgres root user password",
"key": "POSTGRES_ROOT_PASSWORD",
"value": "",
"required": "true",
"generated": "random|sha256|20"

View File

@@ -7,6 +7,31 @@
"outlineapp": {
"SECRET_KEY": "#SECRET_KEY",
"UTILS_SECRET": "#UTILS_SECRET",
"DATABASE_URL": "postgres://#DB_USER:#DB_PASSWORD@outlinepostgres-db:5432/#DB_NAME"
"DATABASE_URL": "postgres://#DB_USER:#DB_PASSWORD@outlinepostgres-db:5432/#DB_NAME",
"SLACK_CLIENT_ID": "#SLACK_CLIENT_ID",
"SLACK_CLIENT_SECRET": "#SLACK_CLIENT_SECRET",
"GOOGLE_CLIENT_ID": "#GOOGLE_CLIENT_ID",
"GOOGLE_CLIENT_SECRET": "#GOOGLE_CLIENT_SECRET",
"AZURE_CLIENT_ID": "#AZURE_CLIENT_ID",
"AZURE_CLIENT_SECRET": "#AZURE_CLIENT_SECRET",
"AZURE_RESOURCE_APP_ID": "#AZURE_RESOURCE_APP_ID",
"DISCORD_CLIENT_ID": "#DISCORD_CLIENT_ID",
"DISCORD_CLIENT_SECRET": "#DISCORD_CLIENT_SECRET",
"DISCORD_SERVER_ID": "#DISCORD_SERVER_ID",
"OIDC_CLIENT_ID": "#OIDC_CLIENT_ID",
"OIDC_CLIENT_SECRET": "#OIDC_CLIENT_SECRET",
"OIDC_AUTH_URI": "#OIDC_AUTH_URI",
"OIDC_TOKEN_URI": "#OIDC_TOKEN_URI",
"OIDC_USERINFO_URI": "#OIDC_USERINFO_URI",
"OIDC_LOGOUT_URI": "#OIDC_LOGOUT_URI",
"OIDC_USERNAME_CLAIM": "#OIDC_USERNAME_CLAIM",
"OIDC_DISPLAY_NAME": "#OIDC_DISPLAY_NAME",
"OIDC_SCOPES": "#OIDC_SCOPES",
"SMTP_HOST": "#SMTP_HOST",
"SMTP_PORT": "#SMTP_PORT",
"SMTP_SERVICE": "#SMTP_SERVICE",
"SMTP_USERNAME": "#SMTP_USERNAME",
"SMTP_PASSWORD": "#SMTP_PASSWORD",
"SMTP_FROM_EMAIL": "#SMTP_FROM_EMAIL"
}
}

View File

@@ -108,10 +108,10 @@
"DATABASE_CONNECTION_POOL_MAX": ""
},
{
"REDIS_URL": "redis://outlineredis-app:6379"
"REDIS_URL": "redis://outlineredis-server:6379"
},
{
"URL": "https://#OUTLINE_DOMAIN"
"URL": "https://#DOMAIN"
},
{
"PORT": 3000

View File

@@ -52,6 +52,174 @@
"key": "DOMAIN",
"value": "",
"required": "true"
},
{
"description": "Slack client ID",
"key": "SLACK_CLIENT_ID",
"value": "",
"info": "Create a new app in your Slack workspace at https://api.slack.com/apps?new_app=1 and add 'Sign in with Slack' under 'Add features and functionality'. Set the Redirect URL to 'https://<your-domain>/auth/slack.callback'.",
"advanced": "true"
},
{
"description": "Slack client secret",
"key": "SLACK_CLIENT_SECRET",
"value": "",
"advanced": "true"
},
{
"description": "Google client ID",
"key": "GOOGLE_CLIENT_ID",
"value": "",
"info": "Create OAuth 2.0 credentials in Google Cloud Console at https://console.cloud.google.com/apis/credentials and set the Redirect URL to 'https://<your-domain>/auth/google.callback'.",
"advanced": "true"
},
{
"description": "Google client secret",
"key": "GOOGLE_CLIENT_SECRET",
"value": "",
"advanced": "true"
},
{
"description": "Azure client ID",
"key": "AZURE_CLIENT_ID",
"value": "",
"info": "Register an application in Azure AD at https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade and set the Redirect URL to 'https://<your-domain>/auth/azuread.callback'.",
"advanced": "true"
},
{
"description": "Azure client secret",
"key": "AZURE_CLIENT_SECRET",
"value": "",
"advanced": "true"
},
{
"description": "Azure resource app ID",
"key": "AZURE_RESOURCE_APP_ID",
"value": "",
"info": "This is usually the same as the client ID, but can vary based on your Azure AD setup.",
"advanced": "true"
},
{
"description": "Discord client ID",
"key": "DISCORD_CLIENT_ID",
"value": "",
"info": "Create an application in Discord Developer Portal at https://discord.com/developers/applications and set the Redirect URL to 'https://<your-domain>/auth/discord.callback'.",
"advanced": "true"
},
{
"description": "Discord client secret",
"key": "DISCORD_CLIENT_SECRET",
"value": "",
"advanced": "true"
},
{
"description": "Discord server ID (optional)",
"key": "DISCORD_SERVER_ID",
"value": "",
"info": "(Optional) If you want to restrict login to members of a specific Discord server, provide the server ID here.",
"advanced": "true"
},
{
"description": "OpenID Connect client ID",
"key": "OIDC_CLIENT_ID",
"value": "",
"info": "Set up an OpenID Connect application with your provider and set the Redirect URL to 'https://<your-domain>/auth/oidc.callback'.",
"advanced": "true"
},
{
"description": "OpenID Connect client secret",
"key": "OIDC_CLIENT_SECRET",
"value": "",
"advanced": "true"
},
{
"description": "OpenID Connect provider auth URI",
"key": "OIDC_AUTH_URI",
"value": "",
"info": "The authorization endpoint URL of your OpenID Connect provider.",
"advanced": "true"
},
{
"description": "OpenID Connect provider token URI",
"key": "OIDC_TOKEN_URI",
"value": "",
"info": "The token endpoint URL of your OpenID Connect provider.",
"advanced": "true"
},
{
"description": "OpenID Connect provider userinfo URI",
"key": "OIDC_USERINFO_URI",
"value": "",
"info": "The userinfo endpoint URL of your OpenID Connect provider.",
"advanced": "true"
},
{
"description": "OpenID Connect provider logout URI (optional)",
"key": "OIDC_LOGOUT_URI",
"value": "",
"info": "(Optional) The logout endpoint URL of your OpenID Connect provider, if supported.",
"advanced": "true"
},
{
"description": "OpenID Connect username claim",
"key": "OIDC_USERNAME_CLAIM",
"value": "preferred_username",
"info": "The claim in the ID token or userinfo response to use as the username. Defaults to 'preferred_username'.",
"advanced": "true"
},
{
"description": "OpenID Connect display name",
"key": "OIDC_DISPLAY_NAME",
"value": "OpenID Connect",
"info": "The display name for the OpenID Connect authentication option. Defaults to 'OpenID Connect'.",
"advanced": "true"
},
{
"description": "OpenID Connect scopes",
"key": "OIDC_SCOPES",
"value": "openid profile email",
"info": "Space-separated list of scopes to request during authentication. Defaults to 'openid profile email'.",
"advanced": "true"
},
{
"description": "SMTP host",
"key": "SMTP_HOST",
"value": "",
"info": "Used for sending invitation and password reset emails. Leave blank to disable email functionality.",
"advanced": "true"
},
{
"description": "SMTP port",
"key": "SMTP_PORT",
"value": "587",
"info": "(Optional) The port to connect to on the SMTP server. Defaults to 587.",
"advanced": "true"
},
{
"description": "SMTP service (e.g., gmail)",
"key": "SMTP_SERVICE",
"value": "",
"info": "Used for sending invitation and password reset emails. Leave blank to disable email functionality.",
"advanced": "true"
},
{
"description": "SMTP username (email address)",
"key": "SMTP_USERNAME",
"value": "",
"advanced": "true"
},
{
"description": "SMTP password",
"key": "SMTP_PASSWORD",
"value": "",
"advanced": "true"
},
{
"description": "From email address",
"key": "SMTP_FROM_EMAIL",
"value": "",
"info": "(Optional) The email address that emails will be sent from. Defaults to the SMTP username if not set.",
"advanced": "true"
}
]
}

View File

@@ -0,0 +1,60 @@
{
"main": {
"SERVICE_NAME": "pocketid",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "safebox/domain-check",
"UPDATE": "true",
"MEMORY": "64M",
"NAME": "domain_checker",
"ROLES": "domain_checker",
"NETWORK": "host",
"SELECTOR": "",
"SCALE": "0",
"EXTRA": "--rm --privileged",
"PRE_START": [],
"DEPEND": [],
"POST_START": [],
"CMD": "",
"ENVS": [
{
"PROXY": "smarthostloadbalancer"
},
{
"TARGET": "pocketid-app"
},
{
"PORT": "1411"
},
{
"DOMAIN": "#DOMAIN"
},
{
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
},
{
"OPERATION": "CREATE"
}
],
"VOLUMES": [
{
"SOURCE": "/etc/user/config/smarthost-domains",
"DEST": "/smarthost-domains",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
]
}
]
}

View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "coredns"
},
{
"TARGET": "pocketid-app"
},
{
"TYPE": "udp"
},
{
"TARGET_PORT": "53"
},
{
"COMMENT": "dns for pocketid-app"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "pocketid-app"
},
{
"TARGET": "smtp"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "25"
},
{
"COMMENT": "smtp for pocketid-app"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

View File

@@ -0,0 +1,75 @@
{
"main": {
"SERVICE_NAME": "firewalls",
"DOMAIN": "null"
},
"containers": [
{
"IMAGE": "safebox/firewall",
"NAME": "firewall",
"MEMORY": "64M",
"NETWORK": "host",
"SCALE": "0",
"VOLUMES": [
{
"SOURCE": "/run/",
"DEST": "/run/",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/config/services",
"DEST": "/services",
"TYPE": "ro"
},
{
"SOURCE": "/etc/system/data/dns/hosts.local",
"DEST": "/etc/dns/hosts.local",
"TYPE": "ro"
},
{
"SOURCE": "/var/run/docker.sock",
"DEST": "/var/run/docker.sock",
"TYPE": "rw"
}
],
"PORTS": [],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"CHAIN": "DOCKER-USER"
},
{
"SOURCE": "smarthostbackend"
},
{
"TARGET": "pocketid-app"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "1411"
},
{
"COMMENT": "proxy for pocketid-app"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}

View File

@@ -0,0 +1,16 @@
{
"pocketidpostgres": {
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
},
"pocketidapp": {
"PUBLIC_APP_URL": "https://#DOMAIN",
"TRUST_PROXY": "true",
"PUID": "1000",
"PGID": "1000",
"DB_PROVIDER": "postgres",
"DB_CONNECTION_STRING": "postgresql://#POSTGRES_USER:#POSTGRES_PASSWORD@pocketidpostgres-db:5432/#POSTGRES_DB"
}
}

View File

@@ -0,0 +1,99 @@
{
"main": {
"SERVICE_NAME": "pocketid",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "alpine:latest",
"UPDATE": "true",
"NAME": "pocketid-init",
"NETWORK": "host",
"MEMORY": "64M",
"VOLUMES": [
{
"SOURCE": "USER_DATA",
"DEST": "/etc/user/data",
"TYPE": "rw"
}
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /mkdir -p /etc/user/data/pocketid/db",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "postgres:16-alpine",
"NAME": "pocketidpostgres-db",
"UPDATE": "true",
"ROLES": "postgres-db patroni",
"MEMORY": "256M",
"NETWORK": "pocketid-net",
"SELECTOR": "pocketidpostgres-db",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/pocketid/db",
"DEST": "/var/lib/postgresql/data",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "5432",
"TYPE": "tcp"
}
],
"ENV_FILES": [
"/etc/user/secret/pocketid/pocketid.json"
],
"ENVS": [
{
"POSTGRES_INITDB_ARGS": "--encoding=UTF8 --locale=C"
}
],
"EXTRA": "--label logging=promtail_user --label logging_jobname=containers --restart unless-stopped",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": [],
"POST_START": []
},
{
"IMAGE": "11notes/pocket-id:1",
"UPDATE": "true",
"NAME": "pocketidapp",
"DNS": [
"coredns"
],
"MEMORY": "256M",
"SELECTOR": "pocketid-app",
"NETWORK": "pocketid-net",
"VOLUMES": [],
"PORTS": [
{
"SOURCE": "null",
"DEST": "1411",
"TYPE": "tcp"
}
],
"EXTRA": "--label logging=promtail_user --label logging_jobname=containers --restart unless-stopped",
"ENV_FILES": [
"/etc/user/secret/pocketid/pocketid.json"
],
"DEPEND": [],
"START_ON_BOOT": "true",
"CMD": "null",
"PRE_START": "null",
"POST_START": [
"firewall-pocketid",
"firewall-pocketid-dns",
"firewall-pocketid-smtp",
"domain-pocketid"
]
}
]
}

43
pocketid/template.json Normal file
View File

@@ -0,0 +1,43 @@
{
"name": "Pocketid",
"title": "pocketid",
"subtitle": "Identity management",
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQzIDBIN0MzLjEzNDAxIDAgMCAzLjEzNDAxIDAgN1Y0M0MwIDQ2Ljg2NiAzLjEzNDAxIDUwIDcgNTBINDNDNDYuODY2IDUwIDUwIDQ2Ljg2NiA1MCA0M1Y3QzUwIDMuMTM0MDEgNDYuODY2IDAgNDMgMFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yNC40ODc4IDdDMzEuOTM4NCA3IDM4IDEzLjEzNjMgMzggMjAuNjc4N0MzOCAyMy42NDI2IDM3LjA3OSAyNi40NjMyIDM1LjMzNjIgMjguODM0MkMzMy42Mjc4IDMxLjE1OTUgMzEuMjkwMSAzMi44NDg2IDI4LjU3NTEgMzMuNzE5OEwyNy44MjQ3IDMzLjk2MUwyNi4wMzY0IDI1LjAzMTVMMjYuNTMxMSAyNC43ODkyQzI4LjE0NTkgMjMuOTk5IDI5LjE4OTYgMjIuMzE1NiAyOS4xODk2IDIwLjUwMTJDMjkuMTg5NiAxNy44NzY0IDI3LjA4MDUgMTUuNzQwOSAyNC40ODgxIDE1Ljc0MDlDMjEuODk1OCAxNS43NDA5IDE5Ljc4NiAxNy44NzY0IDE5Ljc4NiAyMC41MDEyQzE5Ljc4NiAyMi4zMTU2IDIwLjgzIDIzLjk5OSAyMi40NDQ4IDI0Ljc4OTJMMjIuOTMwMiAyNS4wMjcyTDIwLjA0OTUgNDNIMTJWN0gyNC40ODgxSDI0LjQ4NzhaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K",
"description": "PocketID is an open-source password manager and secure vault solution that allows users to store, manage, and share sensitive information such as passwords, credit card details, and personal notes. It is designed to provide a high level of security and privacy, with features like end-to-end encryption, two-factor authentication, and self-hosting options.",
"fields": [
{
"description": "Domain",
"key": "DOMAIN",
"value": "",
"required": "true"
},
{
"description": "Postgres database name",
"key": "POSTGRES_DB",
"value": "",
"required": "true",
"generated": ""
},
{
"description": "Postgres username",
"key": "POSTGRES_USER",
"value": "",
"required": "true",
"generated": "time|md5|8"
},
{
"description": "Postgres password for user",
"key": "POSTGRES_PASSWORD",
"value": "",
"required": "true",
"generated": "random|md5|12"
},
{
"description": "Postgres root user password",
"key": "POSTGRES_ROOT_PASSWORD",
"value": "",
"required": "true",
"generated": "random|sha256|20"
}
]
}

View File

@@ -1,41 +0,0 @@
{
"name": "roundcube",
"fields": [
{
"description": "Please add IMAP HOST:",
"key": "ROUNDCUBE_IMAP_HOST",
"value": "",
"required": "true"
},
{
"description": "Please add IMAP PORT:",
"key": "ROUNDCUBE_IMAP_PORT",
"value": "143",
"required": "true"
},
{
"description": "Please add SMTP HOST:",
"key": "ROUNDCUBE_SMTP_HOST",
"value": "",
"required": "true"
},
{
"description": "Please add SMTP PORT (587, 465, 25, etc.):",
"key": "ROUNDCUBE_SMTP_PORT",
"value": "25",
"required": "true"
},
{
"description": "Please add UPLOAD_MAX_FILESIZE (default: 50M):",
"key": "ROUNDCUBE_UPLOAD",
"value": "50M",
"required": "true"
},
{
"description": "Please add Roundcube DOMAIN:",
"key": "ROUNDCUBE_DOMAIN",
"value": "",
"required": "true"
}
]
}

View File

@@ -15,44 +15,34 @@
"SOURCE": "USER_DATA",
"DEST": "/etc/user/data",
"TYPE": "rw"
},
{
"SOURCE": "SYSTEM_LOG",
"DEST": "/etc/system/log",
"TYPE": "rw"
}
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /etc/user/data/vaultwarden/data && mkdir -p /etc/user/data/vaultwarden/db && mkdir -p /etc/system/log/vaultwarden/db",
"CMD": "mkdir -p /etc/user/data/vaultwarden/data && mkdir -p /etc/user/data/vaultwarden/db",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "mariadb:latest",
"IMAGE": "postgres:15-alpine",
"UPDATE": "true",
"NAME": "vaultwardenmysql-db",
"NAME": "vaultwardenpostgres-db",
"MEMORY": "256M",
"NETWORK": "vaultwarden-net",
"SELECTOR": "vaultwardenmysql-db",
"SELECTOR": "vaultwardenpostgres-db",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/vaultwarden/db",
"DEST": "/var/lib/mysql",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/log/vaultwarden/db",
"DEST": "/var/lib/mysql/mysql-bin",
"DEST": "/var/lib/postgres",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "3306",
"DEST": "5432",
"TYPE": "tcp"
}
],

View File

@@ -12,29 +12,29 @@
"required": "true"
},
{
"description": "MYSQL database name",
"key": "MARIADB_DATABASE",
"description": "Postgres database name",
"key": "POSTGRES_DB",
"value": "",
"required": "true",
"generated": ""
},
{
"description": "MYSQL username",
"key": "MARIADB_USER",
"description": "Postgres username",
"key": "POSTGRES_USER",
"value": "",
"required": "true",
"generated": "time|md5|8"
},
{
"description": "MYSQL password for user",
"key": "MARIADB_PASSWORD",
"description": "Postgres password for user",
"key": "POSTGRES_PASSWORD",
"value": "",
"required": "true",
"generated": "random|md5|12"
},
{
"description": "MYSQL root user password",
"key": "MARIADB_ROOT_PASSWORD",
"description": "Postgres root user password",
"key": "POSTGRES_ROOT_PASSWORD",
"value": "",
"required": "true",
"generated": "random|sha256|20"

View File

@@ -1,12 +1,12 @@
{
"vaultwardenmysql": {
"MARIADB_DATABASE": "#MARIADB_DATABASE",
"MARIADB_USER": "#MARIADB_USER",
"MARIADB_PASSWORD": "#MARIADB_PASSWORD",
"MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
"vaultwardenpostgres": {
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
},
"vaultwardenapp": {
"DATABASE_URL": "'mysql://#MARIADB_USER:#MARIADB_PASSWORD@vaultwardenmysql-db:3306/#MARIADB_DATABASE'",
"DATABASE_URL": "'postgresql://#POSTGRES_USER:#POSTGRES_PASSWORD@vaultwardenpostgres-db:5432/#POSTGRES_DB'",
"ADMIN_TOKEN": "#ADMIN_TOKEN",
"VAULTWARDEN_DOMAIN": "#VAULTWARDEN_DOMAIN",
"VAULTWARDEN_SMTP_PASSWORD": "#VAULTWARDEN_SMTP_PASSWORD"