Compare commits
40 Commits
dev
..
984a61d036
| Author | SHA1 | Date | |
|---|---|---|---|
| 984a61d036 | |||
| 08c4e49d82 | |||
| b232e22427 | |||
| 2649856b30 | |||
| bf944dee1b | |||
| bc26466fab | |||
| 24b9f416b5 | |||
| 5598cd2e4e | |||
| a860503297 | |||
| aecfab545d | |||
| cf27b29d98 | |||
| 234f2b8379 | |||
| 858ddb310a | |||
| c48ee36943 | |||
| b6bf808328 | |||
| 73419aeff8 | |||
| 6bf99e7a1a | |||
| d46cc3e801 | |||
| 885d896777 | |||
| 49491e3116 | |||
| 00d3f23702 | |||
| 7019222a22 | |||
| 927d7e669e | |||
| 892e05fb60 | |||
| ea7ee3aec9 | |||
| 23501f7760 | |||
| ecc21d1639 | |||
| d64872f85e | |||
| e928cca06a | |||
| a0cced089b | |||
| e43b20a94c | |||
| ac7c52def1 | |||
| f26a4d60d9 | |||
| 2f343b4b67 | |||
| fe5b98391b | |||
| 9827a6bd85 | |||
| 9fe2be7b26 | |||
| 48a20f2681 | |||
| db6a375c5e | |||
| 7eda10b29d |
@@ -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"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -29,7 +29,7 @@
|
|||||||
"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": "512M",
|
||||||
"NETWORK": "immich-net",
|
"NETWORK": "immich-net",
|
||||||
"SELECTOR": "immichpostgres",
|
"SELECTOR": "immichpostgres",
|
||||||
"VOLUMES": [
|
"VOLUMES": [
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
"VOLUMES": [
|
"VOLUMES": [
|
||||||
{
|
{
|
||||||
"SOURCE": "/etc/user/data/matrix/db",
|
"SOURCE": "/etc/user/data/matrix/db",
|
||||||
"DEST": "/var/lib/postgresql/data",
|
"DEST": "/var/lib/postgresql",
|
||||||
"TYPE": "rw"
|
"TYPE": "rw"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -162,7 +162,7 @@
|
|||||||
"ENV_FILES": [
|
"ENV_FILES": [
|
||||||
"/etc/user/secret/matrix/matrix.json"
|
"/etc/user/secret/matrix/matrix.json"
|
||||||
],
|
],
|
||||||
"EXTRA": "--rm",
|
"EXTRA": "",
|
||||||
"DEPEND": "null",
|
"DEPEND": "null",
|
||||||
"START_ON_BOOT": "false",
|
"START_ON_BOOT": "false",
|
||||||
"CMD": "null",
|
"CMD": "null",
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
"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",
|
"POSTGRES_DB": "#POSTGRES_DB",
|
||||||
"POSTGRES_USER": "#POSTGRES_USER",
|
"POSTGRES_USER": "#POSTGRES_USER",
|
||||||
|
|||||||
@@ -8,13 +8,15 @@
|
|||||||
{
|
{
|
||||||
"title": "",
|
"title": "",
|
||||||
"details": "",
|
"details": "",
|
||||||
|
"info": "Nextcloud domain info",
|
||||||
"description": "Domain",
|
"description": "Domain",
|
||||||
"key": "DOMAIN",
|
"key": "NEXTCLOUD_TRUSTED_DOMAINS",
|
||||||
"value": "",
|
"value": "",
|
||||||
"required": "true"
|
"required": "true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"details": "",
|
"details": "",
|
||||||
|
"info": "Nextcloud user name info",
|
||||||
"description": "Username",
|
"description": "Username",
|
||||||
"key": "NEXTCLOUD_ADMIN_USER",
|
"key": "NEXTCLOUD_ADMIN_USER",
|
||||||
"value": "",
|
"value": "",
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
"VOLUMES": [
|
"VOLUMES": [
|
||||||
{
|
{
|
||||||
"SOURCE": "/etc/user/data/pocketid/db",
|
"SOURCE": "/etc/user/data/pocketid/db",
|
||||||
"DEST": "/var/lib/postgresql/data",
|
"DEST": "/var/lib/postgresql",
|
||||||
"TYPE": "rw"
|
"TYPE": "rw"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "Pocketid",
|
"name": "Pocketid",
|
||||||
"title": "PocketID",
|
"title": "pocketid",
|
||||||
"subtitle": "Identity management",
|
"subtitle": "Identity management",
|
||||||
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQzIDBIN0MzLjEzNDAxIDAgMCAzLjEzNDAxIDAgN1Y0M0MwIDQ2Ljg2NiAzLjEzNDAxIDUwIDcgNTBINDNDNDYuODY2IDUwIDUwIDQ2Ljg2NiA1MCA0M1Y3QzUwIDMuMTM0MDEgNDYuODY2IDAgNDMgMFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yNC40ODc4IDdDMzEuOTM4NCA3IDM4IDEzLjEzNjMgMzggMjAuNjc4N0MzOCAyMy42NDI2IDM3LjA3OSAyNi40NjMyIDM1LjMzNjIgMjguODM0MkMzMy42Mjc4IDMxLjE1OTUgMzEuMjkwMSAzMi44NDg2IDI4LjU3NTEgMzMuNzE5OEwyNy44MjQ3IDMzLjk2MUwyNi4wMzY0IDI1LjAzMTVMMjYuNTMxMSAyNC43ODkyQzI4LjE0NTkgMjMuOTk5IDI5LjE4OTYgMjIuMzE1NiAyOS4xODk2IDIwLjUwMTJDMjkuMTg5NiAxNy44NzY0IDI3LjA4MDUgMTUuNzQwOSAyNC40ODgxIDE1Ljc0MDlDMjEuODk1OCAxNS43NDA5IDE5Ljc4NiAxNy44NzY0IDE5Ljc4NiAyMC41MDEyQzE5Ljc4NiAyMi4zMTU2IDIwLjgzIDIzLjk5OSAyMi40NDQ4IDI0Ljc4OTJMMjIuOTMwMiAyNS4wMjcyTDIwLjA0OTUgNDNIMTJWN0gyNC40ODgxSDI0LjQ4NzhaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K",
|
"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.",
|
"description": "PocketID is an open-source password manager and secure vault solution that allows users to store, manage, and share sensitive information such as passwords, credit card details, and personal notes. It is designed to provide a high level of security and privacy, with features like end-to-end encryption, two-factor authentication, and self-hosting options.",
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"description": "Domain",
|
"description": "Domain",
|
||||||
|
|||||||
@@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"quackbackpostgres": {
|
|
||||||
"POSTGRES_DB": "#DB_NAME",
|
|
||||||
"POSTGRES_USER": "#DB_USER",
|
|
||||||
"POSTGRES_PASSWORD": "#DB_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://#DB_USER:#DB_PASSWORD@quackbackpostgres-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",
|
|
||||||
"GITHUB_CLIENT_ID": "#GITHUB_CLIENT_ID",
|
|
||||||
"GITHUB_CLIENT_SECRET": "#GITHUB_CLIENT_SECRET",
|
|
||||||
"EMAIL_SMTP_USER": "#SMTP_USERNAME",
|
|
||||||
"EMAIL_SMTP_PASS": "#SMTP_PASSWORD"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,204 +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": "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/data",
|
|
||||||
"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": "128M",
|
|
||||||
"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:latest",
|
|
||||||
"UPDATE": "true",
|
|
||||||
"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": "quackback"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"S3_REGION": "europe-east-1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"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
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user