14 Commits

Author SHA1 Message Date
9eaa99b6aa Merge pull request 'test2' (#16) from dev into main
Reviewed-on: #16
2025-08-06 12:29:24 +00:00
3fe656b4c7 Merge pull request 'revert 9bf8622848c24fabefc8eb224aed81c368018ecf' (#11) from gyurix-patch-2 into main
Reviewed-on: #11
2025-08-06 10:25:34 +00:00
a403d9c530 revert 9bf8622848
revert Update CMD in service-filebrowser.json to improve initialization logic and correct database path
2025-08-06 10:25:21 +00:00
9a4e378629 Merge pull request 'revert 3f2960628cbf0f6cd319de2678879c68cd177fd9' (#10) from gyurix-patch-1 into main
Reviewed-on: #10
2025-08-06 10:24:32 +00:00
cbe95eba91 revert 3f2960628c
revert template update
2025-08-06 10:23:55 +00:00
064df1d9f9 Merge pull request 'template update' (#9) from dev into main
Reviewed-on: #9
2025-08-05 13:06:44 +00:00
3fdb63e1ea Merge pull request 'dev' (#8) from dev into main
Reviewed-on: #8
2025-08-04 16:17:45 +00:00
edbae9774f Merge pull request 'dev' (#7) from dev into main
Reviewed-on: #7
2025-08-04 13:32:32 +00:00
ff8c9c1145 Merge pull request 'Update subtitle for Outline application in applications-tree.json' (#6) from dev into main
Reviewed-on: #6
2025-08-04 12:39:43 +00:00
91a1596c5b Merge pull request 'application tree and template update' (#5) from dev into main
Reviewed-on: #5
2025-08-04 12:35:38 +00:00
f292687c33 Merge pull request 'Update CMD in service-filebrowser.json to use absolute path for filebrowser binary' (#4) from dev into main
Reviewed-on: #4
2025-08-04 12:24:29 +00:00
aa93703433 Merge pull request 'templates and application tree update' (#3) from dev into main
Reviewed-on: #3
Reviewed-by: Gyorgy Berenyi <gyurix@safebox.network>
2025-07-28 13:29:12 +00:00
fba0fb0f28 Merge pull request 'dev branch test' (#2) from dev into main
Reviewed-on: #2
2025-07-28 06:16:56 +00:00
ad4622bdad Merge pull request 'Refactor nextcloud/template.json to streamline configuration and improve clarity' (#1) from dev into main
Reviewed-on: #1
2025-07-25 15:52:22 +00:00
69 changed files with 265 additions and 4112 deletions
-1
View File
@@ -1 +0,0 @@
*tmp*
+35 -185
View File
@@ -1,201 +1,51 @@
# default-applications-tree # default-applications-tree
This repository defines the available applications and their configuration templates. Each application lives in its own subdirectory and is registered in `applications-tree.json`. You can add more application sections into applications-tree.json.
You have to specify the application name and version. For example:
---
## applications-tree.json
The root `applications-tree.json` file lists all available applications. Each entry in the `apps` array registers one application:
```json
{
"apps": [
{ {
"name": "Nextcloud", "name": "nextcloud",
"subtitle": "File Synchronization", "version": "latest"
"version": "31.0.8-fpm-alpine",
"icon": "data:image/svg+xml;base64,..."
} }
]
}
```
### App entry fields The name must be the same as the directory name of the application.
| Field | Required | Description | The directory of an application have to contain a template.json file and can contain more json files (service, domain, secret, etc. files).
|------------|----------|-------------|
| `name` | yes | Display name of the application. Must match the directory name (case-insensitive). |
| `version` | yes | Default version tag used when deploying. Use `"latest"` for the most recent image. |
| `subtitle` | no | Short tagline shown in the app listing UI. |
| `icon` | no | Base64-encoded SVG or PNG image used as the app icon in the UI (`data:image/svg+xml;base64,...` or `data:image/png;base64,...`). |
--- The mandatory template.json file's structure is the following.
- "name" - the name of the application, must be the same as the directory name
- "fields" - array of used variables by service
## Application directory structure {
"name": "vaultwarden",
"fields": [
...
]
}
Each application has its own directory (e.g. `nextcloud/`). The directory name must match the `name` in `applications-tree.json`. It must contain a `template.json` file and can contain additional JSON files for services, domains, secrets, firewall rules, etc. An element of fields can contain the following keys.
- description - label of the field, this text will appear before element
- key - name of variable
- value - default value of variable in the form
- required - if set "true" then fill in of the field is required in the form
- type - if not set then default is text, available field types: text, password, textarea, select
- if type is "select" then options are separated by ",". Option's value and text is separated by ":", but text is not mandatory. For example:
``` "value": "yes,no"
nextcloud/ "value": "1:gmail,2:microsoft outlook/hotmail,3:other",
template.json ← mandatory configuration template
service-nextcloud.json ← service definition
domain-nextcloud.json ← domain/ingress configuration
nextcloud-secret.json ← secrets / environment variables
firewall-nextcloud.json ← firewall rules
...
```
--- - generated - the value of the variable is auto generated, so the field will not appear in the form. Generated examples:
## template.json "time|md5|8" - generated from time, encoded by md5 and character length is 8
"random|md5|20" - random generated number, encoded by sha256, length is 20
The `template.json` file defines the application's metadata and the list of configuration fields that are presented in the deployment form. Field element example:
### Top-level structure {
"description": "Please add Nextcloud password:",
"key": "NEXTCLOUD_PASSWORD",
"value": "",
"required": "true",
"type": "password"
},
```json
{
"name": "Nextcloud",
"title": "Nextcloud",
"subtitle": "File Synchronization",
"description": "Nextcloud is a suite of client-server software...",
"icon": "data:image/svg+xml;base64,...",
"fields": [ ... ]
}
```
### Top-level fields
| Field | Required | Description |
|---------------|----------|-------------|
| `name` | yes | Must match the directory name. Used as the application identifier. |
| `title` | no | Human-readable display title shown in the form header (falls back to `name` if omitted). |
| `subtitle` | no | Short tagline displayed below the title. |
| `description` | no | Longer description of the application shown in the form or app listing. |
| `icon` | no | Base64-encoded SVG or PNG icon (`data:image/svg+xml;base64,...`). |
| `fields` | yes | Array of configuration field definitions (see below). |
---
## Field definitions
Each element of the `fields` array defines one configuration variable. Fields are rendered as form inputs during deployment. Fields with `generated` set are auto-populated and not shown in the form.
### Field properties
| Property | Required | Description |
|---------------|----------|-------------|
| `description` | yes | Label text displayed before the input. |
| `key` | yes | The environment variable name that will hold the value. |
| `value` | no | Default value pre-filled in the form. For `select` fields this defines the available options (see below). |
| `required` | no | Set to `"true"` to make the field mandatory. The form will not submit until it is filled. |
| `type` | no | Input type. Defaults to `"text"`. See [Field types](#field-types). |
| `info` | no | Additional hint or explanatory text shown alongside or below the field. |
| `generated` | no | Auto-generation pattern. When set the field is not shown in the form; its value is generated automatically. See [Generated values](#generated-values). |
| `advanced` | no | Set to `"true"` to hide the field from the UI by default. It can be revealed by pressing the `>` button. |
### Field types
The `type` property controls how the field is rendered:
| Type | Description |
|-------------|-------------|
| `text` | *(default)* Single-line plain text input. |
| `password` | The value is hidden from human-readable display wherever it is shown in the UI. |
| `textarea` | Multi-line text input. |
| `select` | Dropdown. Options are defined in `value` as a comma-separated list. Each option can be `optionValue` or `displayText:optionValue`. |
#### Select field examples
Simple yes/no toggle:
```json
{
"description": "Enable feature",
"key": "FEATURE_ENABLED",
"value": "false,true",
"type": "select"
}
```
Options with display labels:
```json
{
"description": "Email provider",
"key": "MAIL_PROVIDER",
"value": "1:Gmail,2:Microsoft Outlook/Hotmail,3:Other",
"type": "select"
}
```
TOTP authentication toggle (advanced):
```json
{
"description": "TOTP authentication (true/false)",
"key": "GUACAMOLE_TOTP",
"value": "false,true",
"required": "true",
"type": "select",
"advanced": "true"
}
```
### Generated values
When `generated` is set the field value is computed automatically. The format is:
```
"<source>|<encoding>|<length>"
```
| Part | Options | Description |
|------------|------------------|-------------|
| `source` | `time`, `random` | `time` seeds the hash from the current timestamp; `random` uses a random number. |
| `encoding` | `md5`, `sha256` | Hash algorithm applied to the source value. |
| `length` | integer | Number of characters to take from the hash output. |
#### Examples
| Pattern | Result |
|---------------------|--------|
| `"time\|md5\|8"` | 8-character MD5 hash seeded from the current time. |
| `"random\|md5\|12"` | 12-character MD5 hash seeded from a random number. |
| `"random\|sha256\|20"` | 20-character SHA-256 hash seeded from a random number. |
| `""` | Auto-generated with default settings (pattern not specified). |
---
## Complete field example
```json
{
"description": "Nextcloud admin password",
"key": "NEXTCLOUD_ADMIN_PASSWORD",
"value": "",
"required": "true",
"type": "password",
"info": "Must be at least 8 characters long."
}
```
Auto-generated database password (not shown in the form):
```json
{
"description": "Postgres password for user",
"key": "POSTGRES_PASSWORD",
"value": "",
"required": "true",
"generated": "random|md5|12"
}
```
Advanced optional SMTP field:
```json
{
"description": "Email sending protocol",
"key": "MAIL_PROTOCOL",
"value": "",
"info": "Options are: empty (for no encryption), ssl, tls",
"advanced": "true"
}
```
+1 -33
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -21,7 +21,7 @@
"DEPEND": "null", "DEPEND": "null",
"START_ON_BOOT": "false", "START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c", "ENTRYPOINT": "sh -c",
"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", "CMD": "mkdir -p /etc/user/data/jellyfin/media && mkdir -p /etc/user/data/transmission/downloads/complete",
"PRE_START": "null", "PRE_START": "null",
"POST_START": "null" "POST_START": "null"
}, },
@@ -57,11 +57,11 @@
"ENV_FILES": [ "ENV_FILES": [
"/etc/user/secret/filebrowser/filebrowser.json" "/etc/user/secret/filebrowser/filebrowser.json"
], ],
"EXTRA": "--restart always", "EXTRA": "--restart always --workdir=/home/user",
"DEPEND": [], "DEPEND": [],
"START_ON_BOOT": "false", "START_ON_BOOT": "false",
"ENTRYPOINT": "sh", "ENTRYPOINT": "sh",
"CMD": "if [ ! -f /database/filebrowser.db ]; then cd /database ; /bin/filebrowser config init && /bin/filebrowser users add \"$FILEBROWSER_USER\" \"$FILEBROWSER_PASS\" --perm.admin && /init.sh; else /init.sh ; fi", "CMD": "if [ ! -f database.db ]; then /bin/filebrowser config init && /bin/filebrowser users add \"$FILEBROWSER_USER\" \"$FILEBROWSER_PASS\" --perm.admin && /bin/filebrowser ; else /bin/filebrowser ; fi",
"PRE_START": "null", "PRE_START": "null",
"POST_START": [ "POST_START": [
"firewall-filebrowser", "firewall-filebrowser",
File diff suppressed because one or more lines are too long
-60
View File
@@ -1,60 +0,0 @@
{
"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"
}
]
}
]
}
-76
View File
@@ -1,76 +0,0 @@
{
"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": []
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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
View File
@@ -1,75 +0,0 @@
{
"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
View File
@@ -1,22 +0,0 @@
{
"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
View File
@@ -1,110 +0,0 @@
{
"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"
]
}
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -9
View File
@@ -29,13 +29,13 @@
"IMAGE": "tensorchord/pgvecto-rs:pg14-v0.2.0", "IMAGE": "tensorchord/pgvecto-rs:pg14-v0.2.0",
"UPDATE": "true", "UPDATE": "true",
"NAME": "immichpostgres-db", "NAME": "immichpostgres-db",
"MEMORY": "768M", "MEMORY": "256M",
"NETWORK": "immich-net", "NETWORK": "immich-net",
"SELECTOR": "immichpostgres", "SELECTOR": "immichpostgres",
"VOLUMES": [ "VOLUMES": [
{ {
"SOURCE": "/etc/user/data/immich/db", "SOURCE": "/etc/user/data/immich/db",
"DEST": "/var/lib/postgresql/data", "DEST": "/var/lib/postgres",
"TYPE": "rw" "TYPE": "rw"
} }
], ],
@@ -49,11 +49,6 @@
"ENV_FILES": [ "ENV_FILES": [
"/etc/user/secret/immich/immich.json" "/etc/user/secret/immich/immich.json"
], ],
"ENVS": [
{
"POSTGRES_INITDB_ARGS": "--data-checksums"
}
],
"EXTRA": "--restart always", "EXTRA": "--restart always",
"DEPEND": "null", "DEPEND": "null",
"START_ON_BOOT": "false", "START_ON_BOOT": "false",
@@ -86,7 +81,7 @@
"IMAGE": "ghcr.io/immich-app/immich-server:#IMMICH_VERSION", "IMAGE": "ghcr.io/immich-app/immich-server:#IMMICH_VERSION",
"UPDATE": "true", "UPDATE": "true",
"NAME": "immichapp-app", "NAME": "immichapp-app",
"MEMORY": "1536M", "MEMORY": "1024M",
"NETWORK": "immich-net", "NETWORK": "immich-net",
"SELECTOR": "immichapp", "SELECTOR": "immichapp",
"PORTS": [ "PORTS": [
@@ -141,7 +136,7 @@
"UPDATE": "true", "UPDATE": "true",
"NAME": "immichmachine-learning", "NAME": "immichmachine-learning",
"ROLES": "backend-www", "ROLES": "backend-www",
"MEMORY": "1536M", "MEMORY": "1024M",
"NETWORK": "immich-net", "NETWORK": "immich-net",
"SELECTOR": "immichmachine-learning", "SELECTOR": "immichmachine-learning",
"ENVS": [ "ENVS": [
-1
View File
@@ -1,6 +1,5 @@
{ {
"name": "Immich", "name": "Immich",
"title": "Immich",
"subtitle": "Photos and Videos", "subtitle": "Photos and Videos",
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTYiIGhlaWdodD0iOTYiIHZpZXdCb3g9IjAgMCA5NiA5NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQ1LjMwNjkgMzIuNTE3N0M1MC41NDQ1IDM3LjE4IDU0Ljc2NTUgNDIuMTc2MyA1Ny40ODIgNDYuODg0OUM2Mi4xNDc2IDM4LjQ5NTIgNjUuMjY1MiAyOC41MjU4IDY1LjMwNDUgMjIuMTc2MkM2NS4zMDQ1IDIyLjEzMTMgNjUuMzA0NSAyMi4wOTAzIDY1LjMwNDUgMjIuMDUyMkM2NS4zMDQ1IDEyLjY1NjYgNTUuOTgyOCA5IDQ3Ljk1MjggOUMzOS45MjI5IDkgMzAuNjAxMSAxMi42NTY2IDMwLjYwMTEgMjIuMDUyMkMzMC42MDExIDIyLjE4MDMgMzAuNjAxMSAyMi4zNTIxIDMwLjYwMTEgMjIuNTU5MkMzNS4wNzcgMjQuNTU5OSA0MC4zODIzIDI4LjEzNDYgNDUuMzA2OSAzMi41MTc3WiIgZmlsbD0iI0ZBMjkyMSIvPgo8cGF0aCBkPSJNMTYuNzM0NSA1OC4xMzk2QzIwLjAwOCA1NC40Nzc1IDI1LjAzMDIgNTAuNTA4OCAzMC42OTc1IDQ3LjE1MzVDMzYuNzI2OCA0My41ODU1IDQyLjc1NzQgNDEuMDkyOCA0OC4wNTA1IDM5Ljk1MjFDNDEuNTU2NCAzMi44OTc5IDMzLjA5IDI2LjgzNTkgMjcuMDk0NiAyNC44MzY2QzI3LjA1MjYgMjQuODIzIDI3LjAxMzMgMjQuODEwNyAyNi45NzggMjQuNzk4NUMxOC4wOSAyMS44OTU2IDExLjc1MDMgMjkuNjc4OCA5LjI2OTgxIDM3LjM1NzJDNi43ODkzIDQ1LjAzNTYgNy4zNjY3MSA1NS4wNzk5IDE2LjI1NDcgNTcuOTgyOEMxNi4zNzUzIDU4LjAyMjMgMTYuNTM4IDU4LjA3NTUgMTYuNzM0NSA1OC4xMzk2WiIgZmlsbD0iI0VENzlCNSIvPgo8cGF0aCBkPSJNODYuNzMgMzcuMjI3M0M4NC4yNDk1IDI5LjU0ODkgNzcuOTA5OCAyMS43NjU3IDY5LjAyMTggMjQuNjY4NkM2OC44OTk4IDI0LjcwODEgNjguNzM3MiAyNC43NjEyIDY4LjU0MiAyNC44MjUzQzY4LjAzMzcgMjkuNzIyIDY2LjI5MTkgMzUuOTAxMyA2My42Njc1IDQxLjk2NDZDNjAuODc2NiA0OC40MTM3IDU3LjQ1NCA1My45OTQ3IDUzLjgzODkgNTguMDQ2NEM2My4yMTYyIDU5LjkxNjIgNzMuNjEwMiA1OS44MTU0IDc5LjYyODYgNTcuODkxQzc5LjY3MDYgNTcuODc3NSA3OS43MDk5IDU3Ljg2MzggNzkuNzQ1MSA1Ny44NTI5Qzg4LjYzMzEgNTQuOTQ4NiA4OS4yMTA2IDQ0LjkwNDQgODYuNzMgMzcuMjI3M1oiIGZpbGw9IiNGRkI0MDAiLz4KPHBhdGggZD0iTTQwLjAyODEgNjUuNjQ1N0MzOC41MTY3IDU4Ljc3ODIgMzguMDIxOSA1Mi4yNDA1IDM4LjU3NzcgNDYuODI3MUMyOS44OTg0IDUwLjg1NzIgMjEuNTQ4NiA1Ny4wOCAxNy44MDM0IDYyLjE5NDhDMTcuNzc3NSA2Mi4yMzAyIDE3Ljc1MzIgNjIuMjY0NCAxNy43MzE1IDYyLjI5NDNDMTIuMjM5IDY5Ljg5NjQgMTcuNjQyMSA3OC4zNjM5IDI0LjEzODkgODMuMTA4QzMwLjYzNDQgODcuODUzNCA0MC4zMTQxIDkwLjQwNDcgNDUuODA3OSA4Mi44MDI3QzQ1Ljg4MzggODIuNjk5MSA0NS45ODQxIDgyLjU2MDEgNDYuMTA0NyA4Mi4zOTI1QzQzLjY1MjYgNzguMTMwOCA0MS40NDg3IDcyLjEwMTUgNDAuMDI4MSA2NS42NDU3WiIgZmlsbD0iIzFFODNGNyIvPgo8cGF0aCBkPSJNNzguMTIyOSA2MS44MDQ5QzczLjMzMzkgNjIuODMyNSA2Ni45NTA4IDYzLjA3NjUgNjAuNDAzOCA2Mi40NEM1My40NDA2IDYxLjc2NDEgNDcuMTA1IDYwLjIxNTggNDIuMTU0OCA1OC4wMTA3QzQzLjI4MzkgNjcuNTU0OCA0Ni41OTEzIDc3LjQ2MjkgNTAuMjcxNSA4Mi42MjRDNTAuMjk3MiA4Mi42NTk1IDUwLjMyMTcgODIuNjkzNiA1MC4zNDM0IDgyLjcyMzVDNTUuODM1NyA5MC4zMjU2IDY1LjUxNTQgODcuNzc0MyA3Mi4wMTIyIDgzLjAyODhDNzguNTA3OSA3OC4yODM0IDgzLjkxMjIgNjkuODE1OSA3OC40MTk3IDYyLjIxNTJDNzguMzQzOCA2Mi4xMTE1IDc4LjI0MzUgNjEuOTcyNSA3OC4xMjI5IDYxLjgwNDlaIiBmaWxsPSIjMThDMjQ5Ii8+Cjwvc3ZnPgo=", "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTYiIGhlaWdodD0iOTYiIHZpZXdCb3g9IjAgMCA5NiA5NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQ1LjMwNjkgMzIuNTE3N0M1MC41NDQ1IDM3LjE4IDU0Ljc2NTUgNDIuMTc2MyA1Ny40ODIgNDYuODg0OUM2Mi4xNDc2IDM4LjQ5NTIgNjUuMjY1MiAyOC41MjU4IDY1LjMwNDUgMjIuMTc2MkM2NS4zMDQ1IDIyLjEzMTMgNjUuMzA0NSAyMi4wOTAzIDY1LjMwNDUgMjIuMDUyMkM2NS4zMDQ1IDEyLjY1NjYgNTUuOTgyOCA5IDQ3Ljk1MjggOUMzOS45MjI5IDkgMzAuNjAxMSAxMi42NTY2IDMwLjYwMTEgMjIuMDUyMkMzMC42MDExIDIyLjE4MDMgMzAuNjAxMSAyMi4zNTIxIDMwLjYwMTEgMjIuNTU5MkMzNS4wNzcgMjQuNTU5OSA0MC4zODIzIDI4LjEzNDYgNDUuMzA2OSAzMi41MTc3WiIgZmlsbD0iI0ZBMjkyMSIvPgo8cGF0aCBkPSJNMTYuNzM0NSA1OC4xMzk2QzIwLjAwOCA1NC40Nzc1IDI1LjAzMDIgNTAuNTA4OCAzMC42OTc1IDQ3LjE1MzVDMzYuNzI2OCA0My41ODU1IDQyLjc1NzQgNDEuMDkyOCA0OC4wNTA1IDM5Ljk1MjFDNDEuNTU2NCAzMi44OTc5IDMzLjA5IDI2LjgzNTkgMjcuMDk0NiAyNC44MzY2QzI3LjA1MjYgMjQuODIzIDI3LjAxMzMgMjQuODEwNyAyNi45NzggMjQuNzk4NUMxOC4wOSAyMS44OTU2IDExLjc1MDMgMjkuNjc4OCA5LjI2OTgxIDM3LjM1NzJDNi43ODkzIDQ1LjAzNTYgNy4zNjY3MSA1NS4wNzk5IDE2LjI1NDcgNTcuOTgyOEMxNi4zNzUzIDU4LjAyMjMgMTYuNTM4IDU4LjA3NTUgMTYuNzM0NSA1OC4xMzk2WiIgZmlsbD0iI0VENzlCNSIvPgo8cGF0aCBkPSJNODYuNzMgMzcuMjI3M0M4NC4yNDk1IDI5LjU0ODkgNzcuOTA5OCAyMS43NjU3IDY5LjAyMTggMjQuNjY4NkM2OC44OTk4IDI0LjcwODEgNjguNzM3MiAyNC43NjEyIDY4LjU0MiAyNC44MjUzQzY4LjAzMzcgMjkuNzIyIDY2LjI5MTkgMzUuOTAxMyA2My42Njc1IDQxLjk2NDZDNjAuODc2NiA0OC40MTM3IDU3LjQ1NCA1My45OTQ3IDUzLjgzODkgNTguMDQ2NEM2My4yMTYyIDU5LjkxNjIgNzMuNjEwMiA1OS44MTU0IDc5LjYyODYgNTcuODkxQzc5LjY3MDYgNTcuODc3NSA3OS43MDk5IDU3Ljg2MzggNzkuNzQ1MSA1Ny44NTI5Qzg4LjYzMzEgNTQuOTQ4NiA4OS4yMTA2IDQ0LjkwNDQgODYuNzMgMzcuMjI3M1oiIGZpbGw9IiNGRkI0MDAiLz4KPHBhdGggZD0iTTQwLjAyODEgNjUuNjQ1N0MzOC41MTY3IDU4Ljc3ODIgMzguMDIxOSA1Mi4yNDA1IDM4LjU3NzcgNDYuODI3MUMyOS44OTg0IDUwLjg1NzIgMjEuNTQ4NiA1Ny4wOCAxNy44MDM0IDYyLjE5NDhDMTcuNzc3NSA2Mi4yMzAyIDE3Ljc1MzIgNjIuMjY0NCAxNy43MzE1IDYyLjI5NDNDMTIuMjM5IDY5Ljg5NjQgMTcuNjQyMSA3OC4zNjM5IDI0LjEzODkgODMuMTA4QzMwLjYzNDQgODcuODUzNCA0MC4zMTQxIDkwLjQwNDcgNDUuODA3OSA4Mi44MDI3QzQ1Ljg4MzggODIuNjk5MSA0NS45ODQxIDgyLjU2MDEgNDYuMTA0NyA4Mi4zOTI1QzQzLjY1MjYgNzguMTMwOCA0MS40NDg3IDcyLjEwMTUgNDAuMDI4MSA2NS42NDU3WiIgZmlsbD0iIzFFODNGNyIvPgo8cGF0aCBkPSJNNzguMTIyOSA2MS44MDQ5QzczLjMzMzkgNjIuODMyNSA2Ni45NTA4IDYzLjA3NjUgNjAuNDAzOCA2Mi40NEM1My40NDA2IDYxLjc2NDEgNDcuMTA1IDYwLjIxNTggNDIuMTU0OCA1OC4wMTA3QzQzLjI4MzkgNjcuNTU0OCA0Ni41OTEzIDc3LjQ2MjkgNTAuMjcxNSA4Mi42MjRDNTAuMjk3MiA4Mi42NTk1IDUwLjMyMTcgODIuNjkzNiA1MC4zNDM0IDgyLjcyMzVDNTUuODM1NyA5MC4zMjU2IDY1LjUxNTQgODcuNzc0MyA3Mi4wMTIyIDgzLjAyODhDNzguNTA3OSA3OC4yODM0IDgzLjkxMjIgNjkuODE1OSA3OC40MTk3IDYyLjIxNTJDNzguMzQzOCA2Mi4xMTE1IDc4LjI0MzUgNjEuOTcyNSA3OC4xMjI5IDYxLjgwNDlaIiBmaWxsPSIjMThDMjQ5Ii8+Cjwvc3ZnPgo=",
"description":"Immich is a free, open-source, self-hosted photo and video management platform designed as an alternative to Google Photos. It allows users to back up, organize, and manage their photos and videos on their own server, prioritizing privacy and control over their data.", "description":"Immich is a free, open-source, self-hosted photo and video management platform designed as an alternative to Google Photos. It allows users to back up, organize, and manage their photos and videos on their own server, prioritizing privacy and control over their data.",
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"jellyfin": { "jellyfin": {
"USER": "#USER", "USER": "#JELLYFIN_USER",
"PASS": "#PASS" "PASS": "#JELLYFIN_PASS"
} }
} }
+6 -1
View File
@@ -29,11 +29,16 @@
"POST_START": "null" "POST_START": "null"
}, },
{ {
"IMAGE": "jellyfin/jellyfin:#VERSION", "IMAGE": "jellyfin/jellyfin:latest",
"UPDATE": "true", "UPDATE": "true",
"NAME": "jellyfin", "NAME": "jellyfin",
"NETWORK": "host", "NETWORK": "host",
"VOLUMES": [ "VOLUMES": [
{
"SOURCE": "/etc/user/data/jellyfin/media",
"DEST": "/media",
"TYPE": "rw"
},
{ {
"SOURCE": "/etc/user/data/transmission/downloads/complete", "SOURCE": "/etc/user/data/transmission/downloads/complete",
"DEST": "/media/torrent", "DEST": "/media/torrent",
-8
View File
@@ -1,6 +1,5 @@
{ {
"name": "Jellyfin", "name": "Jellyfin",
"title": "Jellyfin",
"subtitle": "Media System", "subtitle": "Media System",
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjYiIGhlaWdodD0iNjYiIHZpZXdCb3g9IjAgMCA2NiA2NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMzIDI1LjI4NzZDMzAuMTAxNCAyNS4yODc2IDIwLjc3MTcgNDIuMjA0MiAyMi4xOTQgNDUuMDYwMkMyMy42MTY0IDQ3LjkxNjMgNDIuMzk5MiA0Ny44ODUxIDQzLjgwNTkgNDUuMDYwMkM0NS4yMTI3IDQyLjIzNTQgMzUuOTAyOCAyNS4yODkgMzMgMjUuMjg3NloiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yMl85OCkiLz4KPHBhdGggZD0iTTMzIDBDMjQuMjcwMSAwIC0zLjg0NTIzIDUwLjk3MSAwLjQ0MTcwNiA1OS41Nzg5QzQuNzI4NjQgNjguMTg2OCA2MS4zMjY2IDY4LjA4NzUgNjUuNTY2OCA1OS41Nzg5QzY5LjgwNjkgNTEuMDcwMiA0MS43MzgzIDAgMzMgMFpNNTQuMzQzOSA1Mi4xMDk3QzUxLjU2NTggNTcuNjg3MSAxNC40ODM4IDU3Ljc0OTUgMTEuNjc0NSA1Mi4xMDk3QzguODY1MjUgNDYuNDY5OSAyNy4yODY0IDEzLjA3MjEgMzMuMDA4NSAxMy4wNzIxQzM4LjczMDUgMTMuMDcyMSA1Ny4xMjIgNDYuNTMwOSA1NC4zNDM5IDUyLjEwOTdaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMjJfOTgpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjJfOTgiIHgxPSIxMi4zMzExIiB5MT0iMjYuOTQzOSIgeDI9IjY3LjA1NDQiIHkyPSI1OC41Mzc5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNBQTVDQzMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDBBNERDIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8yMl85OCIgeDE9IjEyLjMzMTEiIHkxPSIyNi45NDQiIHgyPSI2Ny4wNTQ0IiB5Mj0iNTguNTM4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNBQTVDQzMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDBBNERDIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==", "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjYiIGhlaWdodD0iNjYiIHZpZXdCb3g9IjAgMCA2NiA2NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMzIDI1LjI4NzZDMzAuMTAxNCAyNS4yODc2IDIwLjc3MTcgNDIuMjA0MiAyMi4xOTQgNDUuMDYwMkMyMy42MTY0IDQ3LjkxNjMgNDIuMzk5MiA0Ny44ODUxIDQzLjgwNTkgNDUuMDYwMkM0NS4yMTI3IDQyLjIzNTQgMzUuOTAyOCAyNS4yODkgMzMgMjUuMjg3NloiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yMl85OCkiLz4KPHBhdGggZD0iTTMzIDBDMjQuMjcwMSAwIC0zLjg0NTIzIDUwLjk3MSAwLjQ0MTcwNiA1OS41Nzg5QzQuNzI4NjQgNjguMTg2OCA2MS4zMjY2IDY4LjA4NzUgNjUuNTY2OCA1OS41Nzg5QzY5LjgwNjkgNTEuMDcwMiA0MS43MzgzIDAgMzMgMFpNNTQuMzQzOSA1Mi4xMDk3QzUxLjU2NTggNTcuNjg3MSAxNC40ODM4IDU3Ljc0OTUgMTEuNjc0NSA1Mi4xMDk3QzguODY1MjUgNDYuNDY5OSAyNy4yODY0IDEzLjA3MjEgMzMuMDA4NSAxMy4wNzIxQzM4LjczMDUgMTMuMDcyMSA1Ny4xMjIgNDYuNTMwOSA1NC4zNDM5IDUyLjEwOTdaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMjJfOTgpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjJfOTgiIHgxPSIxMi4zMzExIiB5MT0iMjYuOTQzOSIgeDI9IjY3LjA1NDQiIHkyPSI1OC41Mzc5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNBQTVDQzMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDBBNERDIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8yMl85OCIgeDE9IjEyLjMzMTEiIHkxPSIyNi45NDQiIHgyPSI2Ny4wNTQ0IiB5Mj0iNTguNTM4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNBQTVDQzMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDBBNERDIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==",
"description": "Jellyfin is a free and open-source media server and suite of applications that allows users to manage, organize, and stream their personal media collections. It is built by volunteers and emphasizes user control, privacy, and a lack of tracking or hidden agendas.", "description": "Jellyfin is a free and open-source media server and suite of applications that allows users to manage, organize, and stream their personal media collections. It is built by volunteers and emphasizes user control, privacy, and a lack of tracking or hidden agendas.",
@@ -9,13 +8,6 @@
"description": "Domain", "description": "Domain",
"key": "DOMAIN", "key": "DOMAIN",
"value": "" "value": ""
},
{
"description": "Version",
"key": "VERSION",
"value": "2025081105",
"info": "Latest stable official version at the time of template creation.",
"advanced": "true"
} }
] ]
} }
+1 -1
View File
@@ -26,7 +26,7 @@
"TARGET": "leantime-app" "TARGET": "leantime-app"
}, },
{ {
"PORT": "8080" "PORT": "80"
}, },
{ {
"DOMAIN": "#DOMAIN" "DOMAIN": "#DOMAIN"
-76
View File
@@ -1,76 +0,0 @@
{
"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": "leantimeapp"
},
{
"TARGET": "coredns"
},
{
"TYPE": "udp"
},
{
"TARGET_PORT": "53"
},
{
"COMMENT": "leantime nginx access for local dns"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "",
"PRE_START": [],
"POST_START": []
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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": "leantime-app"
},
{
"TARGET": "smtp"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "25"
},
{
"COMMENT": "leantime to smtp"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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": "leantime-app"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "8080"
},
{
"COMMENT": "leantime"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}
-17
View File
@@ -1,17 +0,0 @@
{
"leantimemysql": {
"MARIADB_DATABASE": "#MARIADB_DATABASE",
"MARIADB_USER": "#MARIADB_USER",
"MARIADB_PASSWORD": "#MARIADB_PASSWORD",
"MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
},
"leantimeapp": {
"LEAN_DB_USER": "#MARIADB_USER",
"LEAN_DB_PASSWORD": "#MARIADB_PASSWORD",
"LEAN_DB_HOST": "leantimemysql-db",
"LEAN_DB_DATABASE": "#MARIADB_DATABASE",
"LEAN_OIDC_CLIENT_SECRET": "#OIDC_CLIENT_SECRET",
"LEAN_S3_SECRET": "#S3_SECRET",
"LEAN_SESSION_PASSWORD": "#SESSION_PASSWORD"
}
}
-302
View File
@@ -1,302 +0,0 @@
{
"main": {
"SERVICE_NAME": "leantime",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "alpine:latest",
"UPDATE": "true",
"NAME": "leantime",
"NETWORK": "host",
"MEMORY": "64M",
"VOLUMES": [
{
"SOURCE": "USER_DATA",
"DEST": "/etc/user/data",
"TYPE": "rw"
},
{
"SOURCE": "SYSTEM_DATA",
"DEST": "/etc/system/data",
"TYPE": "rw"
},
{
"SOURCE": "SYSTEM_LOG",
"DEST": "/etc/system/log",
"TYPE": "rw"
}
],
"ENV_FILES": [
"/etc/user/secret/leantime/leantime.json"
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /etc/user/data/leantime/db && mkdir -p /etc/system/log/leantime/db && mkdir -p /etc/user/data/leantime/data/plugins && mkdir -p /etc/user/data/leantime/data/public && mkdir -p /etc/user/data/leantime/data/user && chmod 770 -R /etc/user/data/leantime/data && chown -R 82:82 /etc/user/data/leantime/data",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "mariadb:latest",
"UPDATE": "true",
"NAME": "leantimemysql-db",
"MEMORY": "256M",
"NETWORK": "leantime-net",
"SELECTOR": "leantimemysql",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/leantime/db",
"DEST": "/var/lib/mysql",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/log/leantime/db",
"DEST": "/var/lib/mysql/mysql-bin",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "3306",
"TYPE": "tcp"
}
],
"READYNESS": [
{
"tcp": "3306"
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENV_FILES": [
"/etc/user/secret/leantime/leantime.json"
],
"EXTRA": "--restart always",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "leantime/leantime:latest",
"UPDATE": "true",
"NAME": "leantimeapp",
"MEMORY": "1024M",
"NETWORK": "leantime-net",
"SELECTOR": "leantime-app",
"DNS": [
"coredns"
],
"VOLUMES": [
{
"SOURCE": "/etc/user/data/leantime/data/public",
"DEST": "/var/www/html/public/userfiles",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/data/leantime/data/user",
"DEST": "/var/www/html/userfiles",
"TYPE": "rw"
},
{
"SOURCE": "/etc/user/data/leantime/data/plugins",
"DEST": "/var/www/html/app/Plugins",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "8080",
"TYPE": "tcp"
}
],
"READYNESS": [
{
"tcp": ""
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENVS": [
{
"LEAN_RATELIMIT_GENERAL": "1000"
},
{
"LEAN_RATELIMIT_API": "10"
},
{
"LEAN_RATELIMIT_AUTH": "20"
},
{
"LEAN_LDAP_USE_LDAP": "false"
},
{
"LEAN_USER_FILE_PATH": "userfiles/"
},
{
"LEAN_PORT": "80"
},
{
"LEAN_APP_URL": "https://#DOMAIN"
},
{
"LEAN_APP_DIR": "leantime/"
},
{
"LEAN_DEBUG": "DEBUG"
},
{
"LEAN_SITENAME": "#LEANTIME_SITENAME"
},
{
"LEAN_LANGUAGE": "#LEANTIME_LANG"
},
{
"LEAN_DEFAULT_TIMEZONE": "#LEANTIME_TZ"
},
{
"LEAN_LOG_PATH": "log/"
},
{
"LEAN_DISABLE_LOGIN_FORM": "false"
},
{
"LEAN_SESSION_EXPIRATION": "#SESSION_EXPIRATION"
},
{
"LEAN_SESSION_SECURE": "#SESSION_SECURITY"
},
{
"LEAN_EMAIL_RETURN": ""
},
{
"LEAN_EMAIL_USE_SMTP": "true"
},
{
"LEAN_EMAIL_SMTP_HOSTS": "#LEANTIME_SMTP"
},
{
"LEAN_EMAIL_SMTP_AUTH": "false"
},
{
"LEAN_EMAIL_SMTP_USERNAME": ""
},
{
"LEAN_EMAIL_SMTP_PASSWORD": ""
},
{
"LEAN_EMAIL_SMTP_AUTO_TLS": "false"
},
{
"LEAN_EMAIL_SMTP_SECURE": "false"
},
{
"LEAN_EMAIL_SMTP_SSLNOVERIFY": "false"
},
{
"LEAN_EMAIL_SMTP_PORT": "25"
},
{
"LEAN_LDAP_USE_LDAP": "false"
},
{
"LEAN_OIDC_ENABLE": "#OIDC_ENABLE"
},
{
"LEAN_OIDC_CLIENT_ID": "#OIDC_CLIENT_ID"
},
{
"LEAN_OIDC_CREATE_USER": "#OIDC_CREATE_USER"
},
{
"LEAN_OIDC_DEFAULT_ROLE": "20"
},
{
"LEAN_OIDC_PROVIDER_URL": "#OIDC_PROVIDER_URL"
},
{
"LEAN_OIDC_AUTH_URL_OVERRIDE": "#OIDC_AUTH_URL_OVERRIDE"
},
{
"LEAN_OIDC_TOKEN_URL_OVERRIDE": "#OIDC_TOKEN_URL_OVERRIDE"
},
{
"LEAN_OIDC_USERINFO_URL_OVERRIDE": "#OIDC_USERINFO_URL_OVERRIDE"
},
{
"LEAN_OIDC_SCOPES": "user:email,read:user"
},
{
"LEAN_OIDC_FIELD_EMAIL": "0.email"
},
{
"LEAN_OIDC_FIELD_FIRSTNAME": "name"
},
{
"LEAN_LOGO_PATH": "/dist/images/logo.svg"
},
{
"LEAN_PRINT_LOGO_URL": "/dist/images/logo.png"
},
{
"LEAN_DEFAULT_THEME": "default"
},
{
"LEAN_PRIMARY_COLOR": "#006d9f"
},
{
"LEAN_SECONDARY_COLOR": "#00a886"
},
{
"LEAN_USE_S3": "#LEANTIME_USE_S3"
},
{
"LEAN_S3_KEY": "#S3_KEY"
},
{
"LEAN_S3_BUCKET": "#S3_BUCKET"
},
{
"LEAN_S3_USE_PATH_STYLE_ENDPOINT": "#S3_USE_PATH_STYLE_ENDPOINT"
},
{
"LEAN_S3_REGION": "#S3_REGION"
},
{
"LEAN_S3_FOLDER_NAME": "#S3_FOLDER_NAME"
},
{
"LEAN_S3_END_POINT": "#S3_END_POINT"
}
],
"ENV_FILES": [
"/etc/user/secret/leantime/leantime.json"
],
"EXTRA": "--restart always",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": [
"firewall-leantime-dns"
],
"POST_START": [
"firewall-leantime-smtp",
"firewall-leantime",
"domain-leantime"
]
}
]
}
+10 -11
View File
File diff suppressed because one or more lines are too long
-63
View File
@@ -1,63 +0,0 @@
{
"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
View File
@@ -1,60 +0,0 @@
{
"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"
}
]
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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"
}
]
}
-76
View File
@@ -1,76 +0,0 @@
{
"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": []
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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"
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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
View File
@@ -1,29 +0,0 @@
{
"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
View File
@@ -1,199 +0,0 @@
{
"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"
]
}
]
}
File diff suppressed because one or more lines are too long
+44 -56
View File
@@ -1,60 +1,48 @@
{ {
"main": { "main": {
"SERVICE_NAME": "nextcloud", "SERVICE_NAME": "nextcloud",
"DOMAIN": "#DOMAIN" "DOMAIN": "#NEXTCLOUD_TRUSTED_DOMAINS"
}, },
"containers": [ "containers": [
{ {
"IMAGE": "safebox/domain-check", "IMAGE": "safebox/domain-check",
"UPDATE": "true", "UPDATE": "true",
"MEMORY": "64M", "MEMORY": "64M",
"NAME": "domain_checker", "NAME": "domain_checker",
"ROLES": "domain_checker", "ROLES": "domain_checker",
"NETWORK": "host", "NETWORK": "host",
"SELECTOR": "", "SELECTOR": "",
"SCALE": "0", "SCALE": "0",
"EXTRA": "--rm --privileged", "EXTRA": "--rm --privileged",
"PRE_START": [], "PRE_START": [],
"DEPEND": [], "DEPEND": [],
"POST_START": [], "POST_START": [],
"CMD": "", "CMD": "",
"ENVS": [ "ENVS": [
{ { "PROXY": "smarthostloadbalancer" },
"PROXY": "smarthostloadbalancer" { "TARGET": "nextcloudnginx" },
}, { "PORT": "80" },
{ { "DOMAIN": "#NEXTCLOUD_TRUSTED_DOMAINS" },
"TARGET": "nextcloudnginx" { "SMARTHOST_PROXY_PATH": "/smarthost-domains" },
}, { "OPERATION": "CREATE" }
{ ],
"PORT": "80" "VOLUMES": [
}, {
{ "SOURCE": "/etc/user/config/smarthost-domains",
"DOMAIN": "#DOMAIN" "DEST": "/smarthost-domains",
}, "TYPE": "rw"
{ },
"SMARTHOST_PROXY_PATH": "/smarthost-domains" {
}, "SOURCE": "/etc/system/data/dns/hosts.local",
{ "DEST": "/etc/dns/hosts.local",
"OPERATION": "CREATE" "TYPE": "ro"
} },
], {
"VOLUMES": [ "SOURCE": "/var/run/docker.sock",
{ "DEST": "/var/run/docker.sock",
"SOURCE": "/etc/user/config/smarthost-domains", "TYPE": "rw"
"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"
}
]
}
]
} }
+11 -11
View File
@@ -1,20 +1,20 @@
{ {
"nextcloudpostgres": { "nextcloudmysql": {
"POSTGRES_DB": "#POSTGRES_DB", "MARIADB_DATABASE": "#MARIADB_DATABASE",
"POSTGRES_USER": "#POSTGRES_USER", "MARIADB_USER": "#MARIADB_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD", "MARIADB_PASSWORD": "#MARIADB_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD" "MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
}, },
"nextcloudphp": { "nextcloudphp": {
"NEXTCLOUD_ADMIN_USER": "#NEXTCLOUD_ADMIN_USER", "NEXTCLOUD_ADMIN_USER": "#NEXTCLOUD_ADMIN_USER",
"NEXTCLOUD_ADMIN_PASSWORD": "#NEXTCLOUD_ADMIN_PASSWORD", "NEXTCLOUD_ADMIN_PASSWORD": "#NEXTCLOUD_ADMIN_PASSWORD",
"DOMAIN": "#DOMAIN", "NEXTCLOUD_TRUSTED_DOMAINS": "#NEXTCLOUD_TRUSTED_DOMAINS",
"OVERWRITEHOST": "#DOMAIN", "OVERWRITEHOST": "#NEXTCLOUD_TRUSTED_DOMAINS",
"NEXTCLOUD_DATA_DIR": "/var/data", "NEXTCLOUD_DATA_DIR": "/var/data",
"POSTGRES_DB": "#POSTGRES_DB", "MYSQL_DATABASE": "#MARIADB_DATABASE",
"POSTGRES_USER": "#POSTGRES_USER", "MYSQL_USER": "#MARIADB_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD", "MYSQL_PASSWORD": "#MARIADB_PASSWORD",
"POSTGRES_HOST": "nextcloudpostgres-db", "MYSQL_HOST": "nextcloudmysql-db",
"REDIS_HOST": "nextcloud-redis" "REDIS_HOST": "nextcloud-redis"
} }
} }
+23 -7
View File
@@ -34,31 +34,47 @@
"DEPEND": "null", "DEPEND": "null",
"START_ON_BOOT": "false", "START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c", "ENTRYPOINT": "sh -c",
"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", "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",
"PRE_START": "null", "PRE_START": "null",
"POST_START": "null" "POST_START": "null"
}, },
{ {
"IMAGE": "postgres:15-alpine", "IMAGE": "mariadb:10.5",
"UPDATE": "true", "UPDATE": "true",
"NAME": "nextcloudpostgres-db", "NAME": "nextcloudmysql-db",
"MEMORY": "256M", "MEMORY": "256M",
"NETWORK": "nextcloud-net", "NETWORK": "nextcloud-net",
"SELECTOR": "nextcloudpostgres", "SELECTOR": "nextcloudmysql",
"VOLUMES": [ "VOLUMES": [
{ {
"SOURCE": "/etc/user/data/nextcloud/db", "SOURCE": "/etc/user/data/nextcloud/db",
"DEST": "/var/lib/postgresql/data", "DEST": "/var/lib/mysql",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/log/nextcloud/db",
"DEST": "/var/lib/mysql/mysql-bin",
"TYPE": "rw" "TYPE": "rw"
} }
], ],
"PORTS": [ "PORTS": [
{ {
"SOURCE": "null", "SOURCE": "null",
"DEST": "5432", "DEST": "3306",
"TYPE": "tcp" "TYPE": "tcp"
} }
], ],
"READYNESS": [
{
"tcp": "3306"
},
{
"HTTP": ""
},
{
"EXEC": "/ready.sh"
}
],
"ENV_FILES": [ "ENV_FILES": [
"/etc/user/secret/nextcloud/nextcloud.json" "/etc/user/secret/nextcloud/nextcloud.json"
], ],
@@ -166,7 +182,7 @@
] ]
}, },
{ {
"IMAGE": "safebox/nextcloud-nginx:latest", "IMAGE": "registry.format.hu/nextcloud-nginx:1.23.1",
"UPDATE": "true", "UPDATE": "true",
"NAME": "nextcloudnginx", "NAME": "nextcloudnginx",
"ROLES": "backend-www", "ROLES": "backend-www",
+12 -11
View File
File diff suppressed because one or more lines are too long
-60
View File
@@ -1,60 +0,0 @@
{
"main": {
"SERVICE_NAME": "openwebui",
"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": "openwebui-app"
},
{
"PORT": "8080"
},
{
"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"
}
]
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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": "openwebui-app"
},
{
"TYPE": "udp"
},
{
"TARGET_PORT": "53"
},
{
"COMMENT": "dns for openwebui"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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": "openwebui-app"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "8080"
},
{
"COMMENT": "proxy for openwebui"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}
-16
View File
@@ -1,16 +0,0 @@
{
"openwebuipostgres": {
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
},
"openwebuiapp": {
"WEBUI_ADMIN_NAME": "#WEBUI_ADMIN_NAME",
"WEBUI_ADMIN_PASSWORD": "#WEBUI_ADMIN_PASSWORD",
"WEBUI_ADMIN_EMAIL": "#WEBUI_ADMIN_EMAIL",
"WEBUI_SECRET_KEY": "#WEBUI_SECRET_KEY",
"OPENAI_API_KEY": "#OPENAI_API_KEY",
"DATABASE_URL": "postgres://#POSTGRES_USER:#POSTGRES_PASSWORD@openwebuipostgres-db:5432/#POSTGRES_DB"
}
}
-208
View File
@@ -1,208 +0,0 @@
{
"main": {
"SERVICE_NAME": "openwebui",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "alpine:latest",
"UPDATE": "true",
"NAME": "openwebui-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/openwebui/data && mkdir -p /etc/user/data/openwebui/db && mkdir -p /etc/user/data/openwebui/pipelines && mkdir -p /etc/user/data/openwebui/qdrant",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "postgres:16-alpine",
"UPDATE": "true",
"NAME": "openwebuipostgres-db",
"MEMORY": "256M",
"NETWORK": "openwebui-net",
"SELECTOR": "openwebuipostgres-db",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/openwebui/db",
"DEST": "/var/lib/postgresql/data",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "5432",
"TYPE": "tcp"
}
],
"ENV_FILES": [
"/etc/user/secret/openwebui/openwebui.json"
],
"EXTRA": "--restart always",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "qdrant/qdrant:latest",
"UPDATE": "true",
"NAME": "openwebui-qdrant",
"MEMORY": "256M",
"NETWORK": "openwebui-net",
"SELECTOR": "openwebui-qdrant",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/openwebui/qdrant",
"DEST": "/qdrant/storage",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "6333",
"TYPE": "tcp"
},
{
"SOURCE": "null",
"DEST": "6334",
"TYPE": "tcp"
}
],
"EXTRA": "--restart always",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "ghcr.io/open-webui/pipelines:main",
"UPDATE": "true",
"NAME": "openwebui-pipelines",
"MEMORY": "256M",
"NETWORK": "openwebui-net",
"SELECTOR": "openwebui-pipelines",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/openwebui/pipelines",
"DEST": "/app/pipelines",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "9099",
"TYPE": "tcp"
}
],
"ENVS": [
{
"OPENAI_API_BASE_URL": "#OPENAI_API_BASE_URL"
},
{
"VECTOR_DB": "qdrant"
},
{
"QDRANT_HOST": "openwebui-qdrant"
},
{
"QDRANT_PORT": "6333"
},
{
"QDRANT_URI": "http://openwebui-qdrant:6333"
}
],
"EXTRA": "--restart always",
"DEPEND": [],
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "ghcr.io/open-webui/open-webui:main",
"UPDATE": "true",
"NAME": "openwebui",
"MEMORY": "512M",
"NETWORK": "openwebui-net",
"SELECTOR": "openwebui-app",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/openwebui/data",
"DEST": "/app/data",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "8080",
"TYPE": "tcp"
}
],
"ENVS": [
{
"WEBUI_ADMIN_NAME": "#WEBUI_ADMIN_NAME"
},
{
"WEBUI_ADMIN_PASSWORD": "#WEBUI_ADMIN_PASSWORD"
},
{
"WEBUI_ADMIN_EMAIL": "#WEBUI_ADMIN_EMAIL"
},
{
"OPENAI_API_BASE_URL": "http://192.168.2.2:8080/v1"
},
{
"OPENAI_API_KEY": "#OPENAI_API_KEY"
},
{
"VECTOR_DB": "qdrant"
},
{
"QDRANT_HOST": "openwebui-qdrant"
},
{
"QDRANT_PORT": "6333"
},
{
"QDRANT_URI": "http://openwebui-qdrant:6333"
},
{
"ENABLE_RAG_PIPELINE": "True"
},
{
"RAG_PIPELINE_URL": "http://openwebui-pipelines:9099/v1"
}
],
"ENV_FILES": [
"/etc/user/secret/openwebui/openwebui.json"
],
"EXTRA": "--restart always",
"DEPEND": [],
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": [
"firewall-openwebui",
"domain-openwebui",
"firewall-openwebui-dns"
]
}
]
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -29,7 +29,7 @@
"PORT": "3000" "PORT": "3000"
}, },
{ {
"DOMAIN": "#DOMAIN" "DOMAIN": "#OUTLINE_DOMAIN"
}, },
{ {
"SMARTHOST_PROXY_PATH": "/smarthost-domains" "SMARTHOST_PROXY_PATH": "/smarthost-domains"
+4 -30
View File
@@ -1,38 +1,12 @@
{ {
"outlinepostgres": { "outlinepostgres": {
"POSTGRES_DB": "#POSTGRES_DB", "POSTGRES_DB": "#DB_NAME",
"POSTGRES_USER": "#POSTGRES_USER", "POSTGRES_USER": "#DB_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD", "POSTGRES_PASSWORD": "#DB_PASSWORD"
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
}, },
"outlineapp": { "outlineapp": {
"SECRET_KEY": "#SECRET_KEY", "SECRET_KEY": "#SECRET_KEY",
"UTILS_SECRET": "#UTILS_SECRET", "UTILS_SECRET": "#UTILS_SECRET",
"DATABASE_URL": "postgres://#POSTGRES_USER:#POSTGRES_PASSWORD@outlinepostgres-db:5432/#POSTGRES_DB", "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"
} }
} }
+2 -2
View File
@@ -108,10 +108,10 @@
"DATABASE_CONNECTION_POOL_MAX": "" "DATABASE_CONNECTION_POOL_MAX": ""
}, },
{ {
"REDIS_URL": "redis://outlineredis-server:6379" "REDIS_URL": "redis://outlineredis-app:6379"
}, },
{ {
"URL": "https://#DOMAIN" "URL": "https://#OUTLINE_DOMAIN"
}, },
{ {
"PORT": 3000 "PORT": 3000
+6 -175
View File
@@ -1,7 +1,6 @@
{ {
"name": "outline", "name": "Outline",
"title": "Outline", "subtitle": "Collaborative Knowledge Base",
"subtitle": "Knowledge Base",
"description": "Outline is an open-source, self-hosted knowledge management and wiki application designed for teams to organize documentation, internal knowledge bases, onboarding guides, and notes.", "description": "Outline is an open-source, self-hosted knowledge management and wiki application designed for teams to organize documentation, internal knowledge bases, onboarding guides, and notes.",
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iNyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTMwLjMzMzMgNDIuMjUyNlY0My4zMDQ0QzMwLjMzMzMgNDQuNzkzMSAyOS4xMzk0IDQ2IDI3LjY2NjcgNDZDMjcuMjA4NyA0NiAyNi43NTg1IDQ1Ljg4MDggMjYuMzU5MyA0NS42NTM4TDEwLjM1OTMgMzYuNTU1OUM5LjUxOTY4IDM2LjA3ODQgOSAzNS4xODAzIDkgMzQuMjA2NFYxNS43OTRDOSAxNC44MjAyIDkuNTE5NjggMTMuOTIyIDEwLjM1OTMgMTMuNDQ0NkwyNi4zNTkzIDQuMzQ2NjdDMjcuNjQyOSAzLjYxNjc3IDI5LjI2ODggNC4wNzY5OSAyOS45OTA4IDUuMzc0NTdDMzAuMjE1NCA1Ljc3ODA2IDMwLjMzMzMgNi4yMzMyMSAzMC4zMzMzIDYuNjk2MTZWNy43NDc4OEwzMi4yMzM3IDcuMTcxNTZDMzMuNjQ0NCA2Ljc0Mzc2IDM1LjEzMSA3LjU1Mjk2IDM1LjU1NDIgOC45Nzg5NEMzNS42Mjg4IDkuMjMwMjkgMzUuNjY2NyA5LjQ5MTIzIDM1LjY2NjcgOS43NTM1N1YxMC44NDc5TDM4LjAwMjYgMTAuNTUyOEMzOS40NjQgMTAuMzY4MSA0MC43OTY3IDExLjQxNiA0MC45Nzk0IDEyLjg5MzJDNDAuOTkzMiAxMy4wMDQyIDQxIDEzLjExNTggNDEgMTMuMjI3NlYzNi43NzI4QzQxIDM4LjI2MTcgMzkuODA2MSAzOS40Njg2IDM4LjMzMzMgMzkuNDY4NkMzOC4yMjI3IDM5LjQ2ODYgMzguMTEyMyAzOS40NjE2IDM4LjAwMjYgMzkuNDQ3N0wzNS42NjY3IDM5LjE1MjZWNDAuMjQ3QzM1LjY2NjcgNDEuNzM1NyAzNC40NzI3IDQyLjk0MjYgMzMgNDIuOTQyNkMzMi43NDA1IDQyLjk0MjYgMzIuNDgyMyA0Mi45MDQzIDMyLjIzMzcgNDIuODI4OUwzMC4zMzMzIDQyLjI1MjZaTTMwLjMzMzMgMzkuNDM4MkwzMyA0MC4yNDdWMjUuMDAwM1Y5Ljc1MzU3TDMwLjMzMzMgMTAuNTYyMlYzOS40MzgyWk0zNS42NjY3IDEzLjU2NDZWMzYuNDM2TDM4LjMzMzMgMzYuNzcyOFYxMy4yMjc2TDM1LjY2NjcgMTMuNTY0NlpNMTEuNjY2NyAxNS43OTRWMzQuMjA2NEwyNy42NjY3IDQzLjMwNDRWNi42OTYxNkwxMS42NjY3IDE1Ljc5NFpNMTQuMzMzMyAxNy41ODcxTDE3IDE2LjIzOTJWMzMuNzYxMkwxNC4zMzMzIDMyLjQxMzNWMTcuNTg3MVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo=", "icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iNyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTMwLjMzMzMgNDIuMjUyNlY0My4zMDQ0QzMwLjMzMzMgNDQuNzkzMSAyOS4xMzk0IDQ2IDI3LjY2NjcgNDZDMjcuMjA4NyA0NiAyNi43NTg1IDQ1Ljg4MDggMjYuMzU5MyA0NS42NTM4TDEwLjM1OTMgMzYuNTU1OUM5LjUxOTY4IDM2LjA3ODQgOSAzNS4xODAzIDkgMzQuMjA2NFYxNS43OTRDOSAxNC44MjAyIDkuNTE5NjggMTMuOTIyIDEwLjM1OTMgMTMuNDQ0NkwyNi4zNTkzIDQuMzQ2NjdDMjcuNjQyOSAzLjYxNjc3IDI5LjI2ODggNC4wNzY5OSAyOS45OTA4IDUuMzc0NTdDMzAuMjE1NCA1Ljc3ODA2IDMwLjMzMzMgNi4yMzMyMSAzMC4zMzMzIDYuNjk2MTZWNy43NDc4OEwzMi4yMzM3IDcuMTcxNTZDMzMuNjQ0NCA2Ljc0Mzc2IDM1LjEzMSA3LjU1Mjk2IDM1LjU1NDIgOC45Nzg5NEMzNS42Mjg4IDkuMjMwMjkgMzUuNjY2NyA5LjQ5MTIzIDM1LjY2NjcgOS43NTM1N1YxMC44NDc5TDM4LjAwMjYgMTAuNTUyOEMzOS40NjQgMTAuMzY4MSA0MC43OTY3IDExLjQxNiA0MC45Nzk0IDEyLjg5MzJDNDAuOTkzMiAxMy4wMDQyIDQxIDEzLjExNTggNDEgMTMuMjI3NlYzNi43NzI4QzQxIDM4LjI2MTcgMzkuODA2MSAzOS40Njg2IDM4LjMzMzMgMzkuNDY4NkMzOC4yMjI3IDM5LjQ2ODYgMzguMTEyMyAzOS40NjE2IDM4LjAwMjYgMzkuNDQ3N0wzNS42NjY3IDM5LjE1MjZWNDAuMjQ3QzM1LjY2NjcgNDEuNzM1NyAzNC40NzI3IDQyLjk0MjYgMzMgNDIuOTQyNkMzMi43NDA1IDQyLjk0MjYgMzIuNDgyMyA0Mi45MDQzIDMyLjIzMzcgNDIuODI4OUwzMC4zMzMzIDQyLjI1MjZaTTMwLjMzMzMgMzkuNDM4MkwzMyA0MC4yNDdWMjUuMDAwM1Y5Ljc1MzU3TDMwLjMzMzMgMTAuNTYyMlYzOS40MzgyWk0zNS42NjY3IDEzLjU2NDZWMzYuNDM2TDM4LjMzMzMgMzYuNzcyOFYxMy4yMjc2TDM1LjY2NjcgMTMuNTY0NlpNMTEuNjY2NyAxNS43OTRWMzQuMjA2NEwyNy42NjY3IDQzLjMwNDRWNi42OTYxNkwxMS42NjY3IDE1Ljc5NFpNMTQuMzMzMyAxNy41ODcxTDE3IDE2LjIzOTJWMzMuNzYxMkwxNC4zMzMzIDMyLjQxMzNWMTcuNTg3MVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo=",
"fields": [ "fields": [
@@ -21,28 +20,28 @@
}, },
{ {
"description": "Postgres database name", "description": "Postgres database name",
"key": "POSTGRES_DB", "key": "DB_NAME",
"value": "", "value": "",
"required": "true", "required": "true",
"generated": "time|md5|8" "generated": "time|md5|8"
}, },
{ {
"description": "Postgres username", "description": "Postgres username",
"key": "POSTGRES_USER", "key": "DB_USER",
"value": "", "value": "",
"required": "true", "required": "true",
"generated": "time|md5|8" "generated": "time|md5|8"
}, },
{ {
"description": "Postgres password for user", "description": "Postgres password for user",
"key": "POSTGRES_PASSWORD", "key": "DB_PASSWORD",
"value": "", "value": "",
"required": "true", "required": "true",
"generated": "random|md5|12" "generated": "random|md5|12"
}, },
{ {
"description": "Postgres root user password", "description": "Postgres root user password",
"key": "POSTGRES_ROOT_PASSWORD", "key": "DB_ROOT_PASSWORD",
"value": "", "value": "",
"required": "true", "required": "true",
"generated": "random|sha256|20" "generated": "random|sha256|20"
@@ -52,174 +51,6 @@
"key": "DOMAIN", "key": "DOMAIN",
"value": "", "value": "",
"required": "true" "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"
} }
] ]
} }
-60
View File
@@ -1,60 +0,0 @@
{
"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"
}
]
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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"
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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"
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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"
}
]
}
-16
View File
@@ -1,16 +0,0 @@
{
"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"
}
}
-99
View File
@@ -1,99 +0,0 @@
{
"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
View File
@@ -1,43 +0,0 @@
{
"name": "Pocketid",
"title": "PocketID",
"subtitle": "Identity management",
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQzIDBIN0MzLjEzNDAxIDAgMCAzLjEzNDAxIDAgN1Y0M0MwIDQ2Ljg2NiAzLjEzNDAxIDUwIDcgNTBINDNDNDYuODY2IDUwIDUwIDQ2Ljg2NiA1MCA0M1Y3QzUwIDMuMTM0MDEgNDYuODY2IDAgNDMgMFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yNC40ODc4IDdDMzEuOTM4NCA3IDM4IDEzLjEzNjMgMzggMjAuNjc4N0MzOCAyMy42NDI2IDM3LjA3OSAyNi40NjMyIDM1LjMzNjIgMjguODM0MkMzMy42Mjc4IDMxLjE1OTUgMzEuMjkwMSAzMi44NDg2IDI4LjU3NTEgMzMuNzE5OEwyNy44MjQ3IDMzLjk2MUwyNi4wMzY0IDI1LjAzMTVMMjYuNTMxMSAyNC43ODkyQzI4LjE0NTkgMjMuOTk5IDI5LjE4OTYgMjIuMzE1NiAyOS4xODk2IDIwLjUwMTJDMjkuMTg5NiAxNy44NzY0IDI3LjA4MDUgMTUuNzQwOSAyNC40ODgxIDE1Ljc0MDlDMjEuODk1OCAxNS43NDA5IDE5Ljc4NiAxNy44NzY0IDE5Ljc4NiAyMC41MDEyQzE5Ljc4NiAyMi4zMTU2IDIwLjgzIDIzLjk5OSAyMi40NDQ4IDI0Ljc4OTJMMjIuOTMwMiAyNS4wMjcyTDIwLjA0OTUgNDNIMTJWN0gyNC40ODgxSDI0LjQ4NzhaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K",
"description": "PocketID is an open-source identity and access management solution that provides secure and efficient user authentication and authorization for web applications and services.",
"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"
}
]
}
-60
View File
@@ -1,60 +0,0 @@
{
"main": {
"SERVICE_NAME": "quackback",
"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": "quackback-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"
}
]
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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": "quackback-app"
},
{
"TYPE": "udp"
},
{
"TARGET_PORT": "53"
},
{
"COMMENT": "dns for quackback"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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": "quackback-app"
},
{
"TARGET": "smtp"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "25"
},
{
"COMMENT": "smtp for openproject"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}
-75
View File
@@ -1,75 +0,0 @@
{
"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": "quackback-app"
},
{
"TYPE": "tcp"
},
{
"TARGET_PORT": "3000"
},
{
"COMMENT": "proxy for quackback"
}
],
"EXTRA": "--privileged --rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "null",
"PRE_START": "null",
"POST_START": "null"
}
]
}
-25
View File
@@ -1,25 +0,0 @@
{
"quackbackpostgres": {
"POSTGRES_DB": "#POSTGRES_DB",
"POSTGRES_USER": "#POSTGRES_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
},
"quackbackminio": {
"MINIO_ROOT_USER": "#MINIO_ROOT_USER",
"MINIO_ROOT_PASSWORD": "#MINIO_ROOT_PASSWORD"
},
"quackbackapp": {
"SECRET_KEY": "#SECRET_KEY",
"UTILS_SECRET": "#UTILS_SECRET",
"DATABASE_URL": "postgres://#POSTGRES_USER:#POSTGRES_PASSWORD@quackbackpostgres-db:5432/#POSTGRES_DB",
"SLACK_CLIENT_ID": "#SLACK_CLIENT_ID",
"SLACK_CLIENT_SECRET": "#SLACK_CLIENT_SECRET",
"GOOGLE_CLIENT_ID": "#GOOGLE_CLIENT_ID",
"GOOGLE_CLIENT_SECRET": "#GOOGLE_CLIENT_SECRET",
"GITHUB_CLIENT_ID": "#GITHUB_CLIENT_ID",
"GITHUB_CLIENT_SECRET": "#GITHUB_CLIENT_SECRET",
"EMAIL_SMTP_USER": "#SMTP_USERNAME",
"EMAIL_SMTP_PASS": "#SMTP_PASSWORD"
}
}
-205
View File
@@ -1,205 +0,0 @@
{
"main": {
"SERVICE_NAME": "quackback",
"DOMAIN": "#DOMAIN"
},
"containers": [
{
"IMAGE": "alpine:latest",
"UPDATE": "true",
"NAME": "quackback-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/quackback/data && mkdir -p /etc/user/data/quackback/db && mkdir -p /etc/user/data/quackback/minio && mkdir -p /etc/user/data/quackback/dragonfly",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "safebox/postgres-quackback:18",
"UPDATE": "true",
"NAME": "quackbackpostgres-db",
"MEMORY": "256M",
"NETWORK": "quackback-net",
"SELECTOR": "quackbackpostgres-db",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/quackback/db",
"DEST": "/var/lib/postgresql",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "5432",
"TYPE": "tcp"
}
],
"ENV_FILES": [
"/etc/user/secret/quackback/quackback.json"
],
"EXTRA": "--restart always",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "postgres -c shared_preload_libraries=pg_cron -c cron.database_name=quackback -c max_connections=200",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "minio/minio:latest",
"UPDATE": "true",
"NAME": "quackbackminio-app",
"MEMORY": "2048M",
"NETWORK": "quackback-net",
"SELECTOR": "quackbackminio-app",
"VOLUMES": [
{
"SOURCE": "/etc/user/data/quackback/minio",
"DEST": "/data",
"TYPE": "rw"
}
],
"PORTS": [
{
"SOURCE": "null",
"DEST": "9000",
"TYPE": "tcp"
},
{
"SOURCE": "null",
"DEST": "9001",
"TYPE": "tcp"
}
],
"ENV_FILES": [
"/etc/user/secret/quackback/quackback.json"
],
"EXTRA": "--restart always",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "server /data --console-address \":9001\"",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "docker.dragonflydb.io/dragonflydb/dragonfly:v1.27.1",
"UPDATE": "true",
"NAME": "quackbackredis-server",
"MEMORY": "4096M",
"NETWORK": "quackback-net",
"SELECTOR": "quackbackredis",
"PORTS": [
{
"SOURCE": "null",
"DEST": "6379",
"TYPE": "tcp"
}
],
"VOLUMES": [
{
"SOURCE": "/etc/user/data/quackback/dragonfly",
"DEST": "/data",
"TYPE": "rw"
}
],
"EXTRA": "--restart always --ulimit memlock=-1:-1",
"DEPEND": "null",
"START_ON_BOOT": "false",
"CMD": "dragonfly --cluster_mode=emulated --lock_on_hashtags",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "minio/mc:latest",
"UPDATE": "true",
"NAME": "quackbackminio-init",
"NETWORK": "quackback-net",
"MEMORY": "256M",
"ENV_FILES": [
"/etc/user/secret/quackback/quackback.json"
],
"EXTRA": "--rm",
"DEPEND": "null",
"START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c",
"CMD": "mc alias set local http://quackbackminio-app:9000 \"$MINIO_ROOT_USER\" \"$MINIO_ROOT_PASSWORD\"; mc mb local/quackback --ignore-existing; mc anonymous set download local/quackback; exit 0;",
"PRE_START": "null",
"POST_START": "null"
},
{
"IMAGE": "safebox/quackback:#VERSION",
"UPDATE": "true",
"MEMORY": "4096M",
"NAME": "quackbackapp",
"NETWORK": "quackback-net",
"SELECTOR": "quackback-app",
"PORTS": [
{
"SOURCE": "null",
"DEST": "3000",
"TYPE": "tcp"
}
],
"ENVS": [
{
"REDIS_URL": "redis://quackbackredis-server:6379"
},
{
"BASE_URL": "https://#DOMAIN"
},
{
"DISABLE_TELEMETRY": "true"
},
{
"EMAIL_SMTP_HOST": "#SMTP_HOST"
},
{
"EMAIL_SMTP_PORT": "#SMTP_PORT"
},
{
"EMAIL_FROM": "#SMTP_FROM_EMAIL"
},
{
"OPENAI_OPENAI_BASE_URL": "#OPENAI_BASE_URL"
},
{
"S3_ENDPOINT": "http://quackbackminio-app:9000"
},
{
"S3_BUCKET": "#S3_BUCKET"
},
{
"S3_REGION": "#S3_REGION"
},
{
"S3_FORCE_PATH_STYLE": "true"
}
],
"ENV_FILES": [
"/etc/user/secret/quackback/quackback.json"
],
"EXTRA": "--restart always",
"DEPEND": [],
"START_ON_BOOT": "true",
"CMD": "null",
"PRE_START": "null",
"POST_START": [
"firewall-quackback",
"domain-quackback",
"firewall-quackback-dns",
"firewall-quackback-smtp"
]
}
]
}
File diff suppressed because one or more lines are too long
+41
View File
@@ -0,0 +1,41 @@
{
"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"
}
]
}
+22 -26
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"transmission": { "transmission": {
"TRANSMISSION_USER": "#TRANSMISSION_USER", "USER": "#TRANSMISSION_USER",
"TRANSMISSION_PASS": "#TRANSMISSION_PASS", "PASS": "#TRANSMISSION_PASS",
"WHITELIST": "#TRANSMISSION_WHITELIST", "WHITELIST": "#TRANSMISSION_WHITELIST",
"PEERPORT": "#TRANSMISSION_PEERPORT", "PEERPORT": "#TRANSMISSION_PEERPORT",
"HOST_WHITELIST": "#TRANSMISSION_HOST_WHITELIST" "HOST_WHITELIST": "#TRANSMISSION_HOST_WHITELIST"
+16 -6
View File
@@ -15,34 +15,44 @@
"SOURCE": "USER_DATA", "SOURCE": "USER_DATA",
"DEST": "/etc/user/data", "DEST": "/etc/user/data",
"TYPE": "rw" "TYPE": "rw"
},
{
"SOURCE": "SYSTEM_LOG",
"DEST": "/etc/system/log",
"TYPE": "rw"
} }
], ],
"EXTRA": "--rm", "EXTRA": "--rm",
"DEPEND": "null", "DEPEND": "null",
"START_ON_BOOT": "false", "START_ON_BOOT": "false",
"ENTRYPOINT": "sh -c", "ENTRYPOINT": "sh -c",
"CMD": "mkdir -p /etc/user/data/vaultwarden/data && mkdir -p /etc/user/data/vaultwarden/db", "CMD": "mkdir -p /etc/user/data/vaultwarden/data && mkdir -p /etc/user/data/vaultwarden/db && mkdir -p /etc/system/log/vaultwarden/db",
"PRE_START": "null", "PRE_START": "null",
"POST_START": "null" "POST_START": "null"
}, },
{ {
"IMAGE": "postgres:15-alpine", "IMAGE": "mariadb:latest",
"UPDATE": "true", "UPDATE": "true",
"NAME": "vaultwardenpostgres-db", "NAME": "vaultwardenmysql-db",
"MEMORY": "256M", "MEMORY": "256M",
"NETWORK": "vaultwarden-net", "NETWORK": "vaultwarden-net",
"SELECTOR": "vaultwardenpostgres-db", "SELECTOR": "vaultwardenmysql-db",
"VOLUMES": [ "VOLUMES": [
{ {
"SOURCE": "/etc/user/data/vaultwarden/db", "SOURCE": "/etc/user/data/vaultwarden/db",
"DEST": "/var/lib/postgresql/data", "DEST": "/var/lib/mysql",
"TYPE": "rw"
},
{
"SOURCE": "/etc/system/log/vaultwarden/db",
"DEST": "/var/lib/mysql/mysql-bin",
"TYPE": "rw" "TYPE": "rw"
} }
], ],
"PORTS": [ "PORTS": [
{ {
"SOURCE": "null", "SOURCE": "null",
"DEST": "5432", "DEST": "3306",
"TYPE": "tcp" "TYPE": "tcp"
} }
], ],
File diff suppressed because one or more lines are too long
+6 -6
View File
@@ -1,12 +1,12 @@
{ {
"vaultwardenpostgres": { "vaultwardenmysql": {
"POSTGRES_DB": "#POSTGRES_DB", "MARIADB_DATABASE": "#MARIADB_DATABASE",
"POSTGRES_USER": "#POSTGRES_USER", "MARIADB_USER": "#MARIADB_USER",
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD", "MARIADB_PASSWORD": "#MARIADB_PASSWORD",
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD" "MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
}, },
"vaultwardenapp": { "vaultwardenapp": {
"DATABASE_URL": "'postgresql://#POSTGRES_USER:#POSTGRES_PASSWORD@vaultwardenpostgres-db:5432/#POSTGRES_DB'", "DATABASE_URL": "'mysql://#MARIADB_USER:#MARIADB_PASSWORD@vaultwardenmysql-db:3306/#MARIADB_DATABASE'",
"ADMIN_TOKEN": "#ADMIN_TOKEN", "ADMIN_TOKEN": "#ADMIN_TOKEN",
"VAULTWARDEN_DOMAIN": "#VAULTWARDEN_DOMAIN", "VAULTWARDEN_DOMAIN": "#VAULTWARDEN_DOMAIN",
"VAULTWARDEN_SMTP_PASSWORD": "#VAULTWARDEN_SMTP_PASSWORD" "VAULTWARDEN_SMTP_PASSWORD": "#VAULTWARDEN_SMTP_PASSWORD"