Compare commits
269 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9107ce3af6 | |||
| 7101cc4b75 | |||
|
|
7978eb7e94 | ||
| fc645c9f5d | |||
|
|
191b0ddf90 | ||
| 0eaccc6edb | |||
|
|
d51031b453 | ||
| 5eee9625eb | |||
|
|
5879ea246e | ||
| 6770728911 | |||
|
|
958e39ddb0 | ||
| dce1bd1b45 | |||
|
|
4ecde2fb68 | ||
| ea77759ddf | |||
|
|
78db1d6109 | ||
| 31ec44dfa1 | |||
|
|
429a66b505 | ||
| d6c0a39820 | |||
|
|
dad21b5eab | ||
| b5ea0820cf | |||
|
|
d69d756a51 | ||
| d52d8885e8 | |||
|
|
c8616869e0 | ||
| e636488db9 | |||
|
|
a2aaec06c4 | ||
|
|
b564422754 | ||
|
|
3a7c888f53 | ||
| ea876e41d3 | |||
| 1884ce6561 | |||
| 35532536c9 | |||
|
|
5c2f8c87e3 | ||
| bab3104519 | |||
| 2e5d817169 | |||
| 40efb47737 | |||
| 1af65aa421 | |||
| 82a2bab55e | |||
|
|
a7d40ec41a | ||
| 680f6d5822 | |||
|
|
1af3c8ab1e | ||
| 37e7b83077 | |||
|
|
becd96416a | ||
|
|
09371f8b4b | ||
| d723b4daf5 | |||
|
|
56e6e4e789 | ||
| 366fa1d6b8 | |||
|
|
f5130b0c57 | ||
| 082ae8fcf8 | |||
|
|
1ef0fd1f5c | ||
| 984a61d036 | |||
|
|
ca41276ecf | ||
| 08c4e49d82 | |||
|
|
7a2a4e90ed | ||
| b232e22427 | |||
|
|
4bb61da615 | ||
| 2649856b30 | |||
|
|
e3862bbeb7 | ||
| bf944dee1b | |||
|
|
fc0197dcf1 | ||
| bc26466fab | |||
|
|
c30a5ceadb | ||
| 24b9f416b5 | |||
|
|
fcc452af8a | ||
| 5598cd2e4e | |||
|
|
daaa19d32a | ||
| a860503297 | |||
|
|
2129a7e8f9 | ||
| aecfab545d | |||
|
|
22e37d90af | ||
| cf27b29d98 | |||
|
|
efd077e41a | ||
| 234f2b8379 | |||
|
|
3fbdace533 | ||
| 858ddb310a | |||
|
|
f065b4f6ce | ||
| c48ee36943 | |||
|
|
05f0a6d10f | ||
| b6bf808328 | |||
|
|
01ca5a196c | ||
| 73419aeff8 | |||
|
|
b5c693bc8b | ||
| 6bf99e7a1a | |||
|
|
37e93e661d | ||
| d46cc3e801 | |||
|
|
9c0932bdd4 | ||
| 885d896777 | |||
|
|
a8f4533991 | ||
| 49491e3116 | |||
|
|
feace468dc | ||
| 00d3f23702 | |||
|
|
4e19534cae | ||
|
|
5fd409e79c | ||
|
|
0e487b02c5 | ||
| 7019222a22 | |||
|
|
3f73d1e42d | ||
| 927d7e669e | |||
|
|
6d65026806 | ||
| 892e05fb60 | |||
|
|
5aca166c34 | ||
| ea7ee3aec9 | |||
|
|
70e144b7f8 | ||
| 23501f7760 | |||
|
|
fd179866b2 | ||
| ecc21d1639 | |||
|
|
46ff9e08cc | ||
|
|
5de24e19fe | ||
| d64872f85e | |||
|
|
d6fe96f2c7 | ||
|
|
e62029bca4 | ||
| e928cca06a | |||
|
|
31c72181b4 | ||
| a0cced089b | |||
|
|
459ca0e019 | ||
| e43b20a94c | |||
|
|
324ad45ef3 | ||
| ac7c52def1 | |||
|
|
4b91fa6f3f | ||
| f26a4d60d9 | |||
|
|
f4f66398de | ||
| 2f343b4b67 | |||
|
|
b07b6c7800 | ||
| fe5b98391b | |||
| d9c3d3f6c1 | |||
| 9827a6bd85 | |||
| a49f5baa13 | |||
| 9fe2be7b26 | |||
|
|
2a6f54d65e | ||
| 48a20f2681 | |||
|
|
b8ac9eb0ef | ||
|
|
8e61ae53e3 | ||
|
|
fbb8934b2d | ||
| db6a375c5e | |||
|
|
88ae6dd365 | ||
| 7eda10b29d | |||
| cc76e60006 | |||
| 5d1297571b | |||
| f2f97551d2 | |||
| 3f2960628c | |||
|
|
9bf8622848 | ||
|
|
92fbb27e80 | ||
|
|
ea7bec4dfc | ||
|
|
90e071dc3a | ||
|
|
0fd3ca5619 | ||
|
|
62da50fde4 | ||
| db451f42bd | |||
|
|
f138652ea0 | ||
|
|
998be9eb47 | ||
| 064ad0286c | |||
| 2355be9a77 | |||
|
|
fa477d5dd3 | ||
|
|
dde0657742 | ||
|
|
cc9ac4842d | ||
|
|
f62c9164ca | ||
|
|
5bd17e388f | ||
| 36d0cee2d6 | |||
|
|
141fc5e27d | ||
|
|
82ff8f5d09 | ||
|
|
42177acc46 | ||
|
|
d645602e3e | ||
|
|
267d4877eb | ||
|
|
2ebfd5c271 | ||
| d5dd3452ec | |||
| d34446f4c3 | |||
| 7b8db6df36 | |||
|
|
0be8505daa | ||
| 0d90f06924 | |||
| ae307d0e69 | |||
|
|
ae91eb2295 | ||
|
|
48756ecb6f | ||
| 8792847214 | |||
| 57ef0b4c31 | |||
| 13d2abb6ca | |||
|
|
d85ae5a86d | ||
| 2f06e68a49 | |||
| 8854fec3e1 | |||
| c43a84b5b3 | |||
| 0eb8444a56 | |||
| 74f0c57dda | |||
| 6275cada60 | |||
| 8b082fa0dc | |||
| cbfb59b600 | |||
| b002355bc2 | |||
| 19e4624fff | |||
|
|
dcc5d6b969 | ||
|
|
cf828687a2 | ||
|
|
d6ffd65d40 | ||
| 95547d3bea | |||
| a089017add | |||
| f9bee3dbc3 | |||
| ed4d0a4009 | |||
| 7361704458 | |||
| 5995774c92 | |||
| 71899a308d | |||
| 62c620b3ee | |||
| 420489c7a0 | |||
| d94cf9db2c | |||
| 8d6b4ac21d | |||
| ca6a87d10b | |||
| 4cff7cc9ef | |||
| 292b43d721 | |||
| b0e315eb48 | |||
| d00a4c2cbf | |||
| 1b9a6c4f03 | |||
| 36f2a5b592 | |||
| 81d788dd6c | |||
|
|
9103bf7e95 | ||
|
|
757e69f292 | ||
|
|
c435ff3920 | ||
| d242495c5b | |||
| adee5641c8 | |||
| 221cbe38c8 | |||
| feb5fcc501 | |||
| ad4ea88315 | |||
|
|
011ebc61f9 | ||
|
|
7d659b13ef | ||
| 280e2c70a8 | |||
| 2a2f42cd8d | |||
| 711150d71d | |||
| ff5b7cb0b2 | |||
| c2a06edec0 | |||
| bbbe19d738 | |||
| c5fea172f8 | |||
| cf70bf0f8d | |||
| e5bd35fe95 | |||
| 36bf216e73 | |||
| 709b07cfc3 | |||
| 12c818c73d | |||
| fb0846a26d | |||
| 262f06ae39 | |||
| 3a8c79d875 | |||
|
|
d1a70918d6 | ||
|
|
e0a0727934 | ||
|
|
658d6b08dd | ||
|
|
bac395cdce | ||
|
|
721997c5cd | ||
|
|
8743bf0f79 | ||
|
|
bff7f9d8ae | ||
|
|
90b4056201 | ||
|
|
71c800db43 | ||
| b9770f4ec9 | |||
| 04650b0133 | |||
|
|
01a8c050f8 | ||
|
|
f15276452b | ||
|
|
8799566c98 | ||
|
|
447b3c7ba2 | ||
| 6863ee42d8 | |||
| a524c0e65c | |||
|
|
48cbbd824e | ||
|
|
05f3633dd7 | ||
|
|
7705cb90f5 | ||
|
|
48aacadbc7 | ||
|
|
dc810dd79e | ||
|
|
86fcc17a23 | ||
|
|
64d4bd1dd7 | ||
|
|
9cf7e715cc | ||
|
|
64aa618977 | ||
|
|
b182606574 | ||
|
|
88ae840128 | ||
|
|
25e37aed69 | ||
|
|
45d8005272 | ||
|
|
6ca198fb2b | ||
|
|
be97aaa272 | ||
|
|
e3df2a911b | ||
|
|
70825a2299 | ||
|
|
060a3c8ffd | ||
|
|
74fc04beb6 | ||
|
|
dd84f317d4 | ||
|
|
02cebcf6b8 | ||
|
|
57f4e26b0e | ||
|
|
6ecd07594e |
@@ -0,0 +1 @@
|
||||
*tmp*
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"leantimemysql": {
|
||||
"MARIADB_DATABASE": "#DB_MYSQL",
|
||||
"MARIADB_USER": "#DB_USER",
|
||||
"MARIADB_PASSWORD": "#DB_PASSWORD",
|
||||
"MARIADB_ROOT_PASSWORD": "#DB_ROOT_PASSWORD"
|
||||
},
|
||||
"leantimeapp": {
|
||||
"LEAN_DB_USER": "#DB_USER",
|
||||
"LEAN_DB_PASSWORD": "#DB_PASSWORD",
|
||||
"LEAN_DB_HOST": "leantimemysql-db",
|
||||
"LEAN_DB_DATABASE": "#DB_MYSQL",
|
||||
"LEAN_OIDC_CLIENT_SECRET": "#OIDC_CLIENT_SECRET",
|
||||
"LEAN_S3_SECRET": "#S3_SECRET",
|
||||
"LEAN_SESSION_PASSWORD": "#SESSION_PASSWORD"
|
||||
}
|
||||
}
|
||||
@@ -1,302 +0,0 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "leantime",
|
||||
"DOMAIN": "#LEANTIME_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": "80",
|
||||
"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://#LEANTIME_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": "",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [
|
||||
"firewall-leantime-dns"
|
||||
],
|
||||
"POST_START": [
|
||||
"firewall-leantime-smtp",
|
||||
"firewall-leantime",
|
||||
"domain-leantime"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
{
|
||||
"name": "leantime",
|
||||
"fields": [
|
||||
{
|
||||
"description": "Please add LeanTime domain:",
|
||||
"key": "LEANTIME_DOMAIN",
|
||||
"value": "",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Do you use any additional location path? (optional)\n(do not miss '/' character!)",
|
||||
"key": "LEANTIME_LOCATION_PATH",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"description": "Please add your deploy name (default is LeanTime)",
|
||||
"key": "LEANTIME_SITENAME",
|
||||
"value": "LeanTime"
|
||||
},
|
||||
{
|
||||
"description": "Please add your deploy default language (default is en-US)",
|
||||
"key": "LEANTIME_LANG",
|
||||
"value": "en-US"
|
||||
},
|
||||
{
|
||||
"description": "Please add your deploy default timezone (default is Europe/Budapest)",
|
||||
"key": "LEANTIME_TZ",
|
||||
"value": "Europe/Budapest"
|
||||
},
|
||||
{
|
||||
"description": "Do you want to disable login form for public?",
|
||||
"key": "DISABLE_LOGIN",
|
||||
"value": "true"
|
||||
},
|
||||
{
|
||||
"description": "MYSQL database name",
|
||||
"key": "DB_MYSQL",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "time|md5|10"
|
||||
},
|
||||
{
|
||||
"description": "MYSQL username",
|
||||
"key": "DB_USER",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "time|md5|8"
|
||||
},
|
||||
{
|
||||
"description": "MYSQL password for user",
|
||||
"key": "DB_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|md5|12"
|
||||
},
|
||||
{
|
||||
"description": "MYSQL root user password",
|
||||
"key": "DB_ROOT_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|sha256|20"
|
||||
},
|
||||
{
|
||||
"description": "Do you want to set up OIDC provider? (default is false)",
|
||||
"key": "OIDC_ENABLE",
|
||||
"value": "false"
|
||||
},
|
||||
{
|
||||
"description": "Please add OIDC user key:",
|
||||
"key": "OIDC_CLIENT_KEY",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"description": "Please add OIDC client secret:",
|
||||
"key": "OIDC_CLIENT_SECRET",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"description": "Do you want to set up S3 bucket server? (default is false)",
|
||||
"key": "LEANTIME_USE_S3",
|
||||
"value": "false"
|
||||
},
|
||||
{
|
||||
"description": "Session password",
|
||||
"key": "SESSION_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|sha256|20"
|
||||
},
|
||||
{
|
||||
"description": "Please add session expiration time in seconds (defaults is 28800)",
|
||||
"key": "SESSION_EXPIRATION",
|
||||
"value": "28800"
|
||||
},
|
||||
{
|
||||
"description": "Please add a strong password for sessions",
|
||||
"key": "SESSION_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|sha256|20"
|
||||
},
|
||||
{
|
||||
"description": "Please set LeanTime access mode (defaults is https)",
|
||||
"key": "SESSION_SECURITY",
|
||||
"value": "true"
|
||||
},
|
||||
{
|
||||
"description": "Please set SMTP host for sending emails",
|
||||
"key": "LEANTIME_SMTP",
|
||||
"value": "smtp-mail"
|
||||
},
|
||||
{
|
||||
"description": "Do you want to connect an S3 bucket provider?",
|
||||
"key": "LEANTIME_USE_S3",
|
||||
"value": "false"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,51 +1,201 @@
|
||||
# default-applications-tree
|
||||
|
||||
You can add more application sections into applications-tree.json.
|
||||
You have to specify the application name and version. For example:
|
||||
This repository defines the available applications and their configuration templates. Each application lives in its own subdirectory and is registered in `applications-tree.json`.
|
||||
|
||||
---
|
||||
|
||||
## 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",
|
||||
"version": "latest"
|
||||
"name": "Nextcloud",
|
||||
"subtitle": "File Synchronization",
|
||||
"version": "31.0.8-fpm-alpine",
|
||||
"icon": "data:image/svg+xml;base64,..."
|
||||
}
|
||||
|
||||
The name must be the same as the directory name of the application.
|
||||
|
||||
The directory of an application have to contain a template.json file and can contain more json files (service, domain, secret, etc. files).
|
||||
|
||||
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
|
||||
|
||||
{
|
||||
"name": "vaultwarden",
|
||||
"fields": [
|
||||
...
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
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:
|
||||
### App entry fields
|
||||
|
||||
"value": "yes,no"
|
||||
"value": "1:gmail,2:microsoft outlook/hotmail,3:other",
|
||||
| Field | Required | Description |
|
||||
|------------|----------|-------------|
|
||||
| `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,...`). |
|
||||
|
||||
- generated - the value of the variable is auto generated, so the field will not appear in the form. Generated examples:
|
||||
---
|
||||
|
||||
"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
|
||||
## Application directory structure
|
||||
|
||||
Field element example:
|
||||
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.
|
||||
|
||||
{
|
||||
"description": "Please add Nextcloud password:",
|
||||
"key": "NEXTCLOUD_PASSWORD",
|
||||
```
|
||||
nextcloud/
|
||||
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
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## template.json
|
||||
|
||||
The `template.json` file defines the application's metadata and the list of configuration fields that are presented in the deployment form.
|
||||
|
||||
### Top-level structure
|
||||
|
||||
```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"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
```
|
||||
|
||||
+85
-27
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "filebrowser",
|
||||
"DOMAIN": "#FILEBROWSER_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -29,7 +29,7 @@
|
||||
"PORT": "80"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#FILEBROWSER_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "filebrowser",
|
||||
"DOMAIN": "#FILEBROWSER_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -21,7 +21,7 @@
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "sh -c",
|
||||
"CMD": "mkdir -p /etc/user/data/jellyfin/media && mkdir -p /etc/user/data/transmission/downloads/complete",
|
||||
"CMD": "mkdir -p /etc/user/data/jellyfin/media && chown -R 1000:1000 /etc/user/data/jellyfin/media && mkdir -p /etc/user/data/transmission/downloads/complete",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
@@ -57,11 +57,11 @@
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/filebrowser/filebrowser.json"
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "sh",
|
||||
"CMD": "/filebrowser config init && /filebrowser users add \"$FILEBROWSER_USER\" \"$FILEBROWSER_PASS\" --perm.admin && /filebrowser",
|
||||
"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",
|
||||
"PRE_START": "null",
|
||||
"POST_START": [
|
||||
"firewall-filebrowser",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "gitea",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/domain-check",
|
||||
"UPDATE": "true",
|
||||
"MEMORY": "64M",
|
||||
"NAME": "domain_checker",
|
||||
"ROLES": "domain_checker",
|
||||
"NETWORK": "host",
|
||||
"SELECTOR": "",
|
||||
"SCALE": "0",
|
||||
"EXTRA": "--rm --privileged",
|
||||
"PRE_START": [],
|
||||
"DEPEND": [],
|
||||
"POST_START": [],
|
||||
"CMD": "",
|
||||
"ENVS": [
|
||||
{
|
||||
"PROXY": "smarthostloadbalancer"
|
||||
},
|
||||
{
|
||||
"TARGET": "gitea-app"
|
||||
},
|
||||
{
|
||||
"PORT": "3000"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
},
|
||||
{
|
||||
"OPERATION": "CREATE"
|
||||
}
|
||||
],
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/config/smarthost-domains",
|
||||
"DEST": "/smarthost-domains",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"UPDATE": "true",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "gitea-app"
|
||||
},
|
||||
{
|
||||
"TARGET": "coredns"
|
||||
},
|
||||
{
|
||||
"TYPE": "udp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "53"
|
||||
},
|
||||
{
|
||||
"COMMENT": "gitea application access for local dns"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "",
|
||||
"PRE_START": [],
|
||||
"POST_START": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -49,7 +49,7 @@
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "leantime-app"
|
||||
"SOURCE": "gitea-app"
|
||||
},
|
||||
{
|
||||
"TARGET": "smtp"
|
||||
@@ -61,7 +61,7 @@
|
||||
"TARGET_PORT": "25"
|
||||
},
|
||||
{
|
||||
"COMMENT": "leantime to smtp"
|
||||
"COMMENT": "gitea to smtp"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "smarthostbackend"
|
||||
},
|
||||
{
|
||||
"TARGET": "gitea-app"
|
||||
},
|
||||
{
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "3000"
|
||||
},
|
||||
{
|
||||
"COMMENT": "gitea"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"giteapostgres": {
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
|
||||
},
|
||||
"giteaapp": {
|
||||
"GITEA__database__DB_TYPE": "postgres",
|
||||
"GITEA__database__HOST": "giteapostgres-db",
|
||||
"GITEA__database__NAME": "#POSTGRES_DB",
|
||||
"GITEA__database__USER": "#POSTGRES_USER",
|
||||
"GITEA__database__PASSWD": "#POSTGRES_PASSWORD",
|
||||
"GITEA__mailer__ENABLED": "#MAIL_ENABLE",
|
||||
"GITEA__mailer__FROM": "#MAIL_FROM",
|
||||
"GITEA__mailer__PROTOCOL": "#MAIL_PROTOCOL",
|
||||
"GITEA__mailer__SMTP_ADDR": "#MAIL_SMTP_ADDR",
|
||||
"GITEA__mailer__SMTP_PORT": "#MAIL_SMTP_PORT",
|
||||
"GITEA__mailer__USER": "#MAIL_USER",
|
||||
"GITEA__mailer__PASSWD": "#MAIL_PASSWORD"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "gitea",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "alpine:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "gitea-init",
|
||||
"NETWORK": "host",
|
||||
"MEMORY": "64M",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "USER_DATA",
|
||||
"DEST": "/etc/user/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "sh -c",
|
||||
"CMD": "mkdir -p /etc/user/data/gitea/db && mkdir -p /etc/user/data/gitea/data && chown -R 1000:1000 /etc/user/data/gitea",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "postgres:15-alpine",
|
||||
"NAME": "giteapostgres-db",
|
||||
"UPDATE": "true",
|
||||
"ROLES": "postgres-db",
|
||||
"MEMORY": "256M",
|
||||
"NETWORK": "gitea-net",
|
||||
"SELECTOR": "giteapostgres-db",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/gitea/db",
|
||||
"DEST": "/var/lib/postgresql/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "5432",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/gitea/gitea.json"
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"POSTGRES_INITDB_ARGS": "--encoding=UTF8 --locale=C"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--label logging=promtail_user --label logging_jobname=containers --restart unless-stopped",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [],
|
||||
"POST_START": []
|
||||
},
|
||||
{
|
||||
"IMAGE": "gitea/gitea:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "giteaapp",
|
||||
"DNS": [
|
||||
"coredns"
|
||||
],
|
||||
"MEMORY": "512M",
|
||||
"SELECTOR": "gitea-app",
|
||||
"NETWORK": "gitea-net",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/gitea/data",
|
||||
"DEST": "/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "3000",
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "22",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"EXTRA": "null",
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/gitea/gitea.json"
|
||||
],
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "true",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": [
|
||||
"firewall-gitea-dns",
|
||||
"firewall-gitea-smtp",
|
||||
"firewall-gitea",
|
||||
"domain-gitea"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "guacamole",
|
||||
"DOMAIN": "#GUACAMOLE_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -26,10 +26,10 @@
|
||||
"TARGET": "guacamoletomcat"
|
||||
},
|
||||
{
|
||||
"PORT": "8080"
|
||||
"PORT": "8080/guacamole/"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#GUACAMOLE_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "guacamole",
|
||||
"DOMAIN": "#GUACAMOLE_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -39,7 +39,7 @@
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "mariadb:latest",
|
||||
"IMAGE": "mariadb:11.4",
|
||||
"UPDATE": "true",
|
||||
"NAME": "guacamolemysql-db",
|
||||
"MEMORY": "256M",
|
||||
@@ -86,7 +86,7 @@
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "safebox/guacamole-guacd",
|
||||
"IMAGE": "safebox/guacamole-server:1.6",
|
||||
"UPDATE": "true",
|
||||
"NAME": "guacd-app",
|
||||
"MEMORY": "256M",
|
||||
@@ -110,7 +110,7 @@
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"EXTRA": "",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "true",
|
||||
"CMD": "null",
|
||||
@@ -118,7 +118,7 @@
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "safebox/guacamole-tomcat",
|
||||
"IMAGE": "safebox/guacamole-tomcat:1.6",
|
||||
"UPDATE": "true",
|
||||
"NAME": "guacamoletomcat",
|
||||
"ROLES": "backend-www",
|
||||
@@ -143,7 +143,7 @@
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"EXTRA": "null",
|
||||
"EXTRA": "--restart always",
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/guacamole/guacamole.json"
|
||||
],
|
||||
|
||||
+16
-10
File diff suppressed because one or more lines are too long
@@ -61,7 +61,7 @@
|
||||
"TZ": "#TZ"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
{
|
||||
"name": "homeassistant",
|
||||
"name": "Homeassistant",
|
||||
"subtitle": "Smart Home",
|
||||
"title": "Home Assistant",
|
||||
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUwIDQ2Ljc5MTZDNTAgNDguNTU2MiA0OC41OTM3IDUwIDQ2Ljg3NSA1MEgzLjEyNUMxLjQwNjI1IDUwIDAgNDguNTU2MiAwIDQ2Ljc5MTZWMjcuNTQxM0MwIDI1Ljc3NjYgMC45OTM3NSAyMy4zMTI4IDIuMjEwNDIgMjIuMDYzN0wyMi43ODk2IDAuOTM1MjQ2QzI0LjAwNDIgLTAuMzExNzQ5IDI1Ljk5MzggLTAuMzExNzQ5IDI3LjIwODMgMC45MzUyNDZMNDcuNzg5NiAyMi4wNjU2QzQ5LjAwNDIgMjMuMzEyNiA1MCAyNS43Nzg4IDUwIDI3LjU0MzRWNDYuNzkzOFY0Ni43OTE2WiIgZmlsbD0iI0YyRjRGOSIvPgo8cGF0aCBkPSJNNDcuNzg5NiAyMi4wNjI3TDI3LjIxMDQgMC45MzUyMDZDMjUuOTk1OCAtMC4zMTE3MzUgMjQuMDA2MiAtMC4zMTE3MzUgMjIuNzkxNyAwLjkzNTIwNkwyLjIxMDQyIDIyLjA2MjdDMC45OTU4MzMgMjMuMzA5NyAwIDI1Ljc3NTUgMCAyNy41NDAxVjQ2Ljc4OTZDMCA0OC41NTQxIDEuNDA2MjUgNDkuOTk3OSAzLjEyNSA0OS45OTc5SDIyLjM0NzlMMTMuODgzMyA0MS4zMDc4QzEzLjQ0NzkgNDEuNDYxOCAxMi45ODMzIDQxLjU0OTUgMTIuNSA0MS41NDk1QzEwLjE0NTggNDEuNTQ5NSA4LjIyOTE3IDM5LjU4MTcgOC4yMjkxNyAzNy4xNjQ4QzguMjI5MTcgMzQuNzQ4IDEwLjE0NTggMzIuNzgwMiAxMi41IDMyLjc4MDJDMTQuODU0MiAzMi43ODAyIDE2Ljc3MDggMzQuNzQ4IDE2Ljc3MDggMzcuMTY0OEMxNi43NzA4IDM3LjY2MzIgMTYuNjg1NCAzOC4xNDAyIDE2LjUzNTQgMzguNTg3MkwyMy4xMjUgNDUuMzUyM1YyMC41Njc1QzIxLjcwODMgMTkuODUzMSAyMC43MjkyIDE4LjM2MDIgMjAuNzI5MiAxNi42MzQyQzIwLjcyOTIgMTQuMjE3MyAyMi42NDU4IDEyLjI0OTUgMjUgMTIuMjQ5NUMyNy4zNTQyIDEyLjI0OTUgMjkuMjcwOCAxNC4yMTczIDI5LjI3MDggMTYuNjM0MkMyOS4yNzA4IDE4LjM2MDIgMjguMjkxNyAxOS44NTMxIDI2Ljg3NSAyMC41Njc1VjM3Ljk0OThMMzMuNDI5MiAzMS4yMjFDMzMuMyAzMC44MDE4IDMzLjIyOTIgMzAuMzU2OSAzMy4yMjkyIDI5Ljg5NDlDMzMuMjI5MiAyNy40NzgxIDM1LjE0NTggMjUuNTEwMyAzNy41IDI1LjUxMDNDMzkuODU0MiAyNS41MTAzIDQxLjc3MDggMjcuNDc4MSA0MS43NzA4IDI5Ljg5NDlDNDEuNzcwOCAzMi4zMTE4IDM5Ljg1NDIgMzQuMjc5NiAzNy41IDM0LjI3OTZDMzYuOTc5MiAzNC4yNzk2IDM2LjQ4MzMgMzQuMTc5IDM2LjAyMjkgMzQuMDAzNkwyNi44NzUgNDMuMzk1M1Y1MEg0Ni44NzVDNDguNTkzNyA1MCA1MCA0OC41NTYzIDUwIDQ2Ljc5MTdWMjcuNTQyMkM1MCAyNS43Nzc3IDQ5LjAwNjMgMjMuMzEzNyA0Ny43ODk2IDIyLjA2NDdWMjIuMDYyN1oiIGZpbGw9IiMxOEJDRjIiLz4KPC9zdmc+Cg==",
|
||||
"description": "Home Assistant is free and open-source home automation software that acts as a central hub for managing and controlling smart home devices. It allows users to connect, automate, and customize their smart home setup, offering local control and privacy features. ",
|
||||
"fields": [
|
||||
{
|
||||
"description": "Please add your homeassistant domain: (required)",
|
||||
"description": "Domain",
|
||||
"key": "DOMAIN",
|
||||
"value": "",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Please add your homeassistant timezone: (required)",
|
||||
"description": "Timezone",
|
||||
"key": "TZ",
|
||||
"value": "Europe/Budapest",
|
||||
"required": "true"
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "immich",
|
||||
"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": "immichapp"
|
||||
},
|
||||
{
|
||||
"PORT": "2283"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "smarthostbackend"
|
||||
},
|
||||
{
|
||||
"TARGET": "immichapp"
|
||||
},
|
||||
{
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "2283"
|
||||
},
|
||||
{
|
||||
"COMMENT": "proxy for immich"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"immichpostgres": {
|
||||
"POSTGRES_DB": "#POSTGRES_DATABASE_NAME",
|
||||
"POSTGRES_USER": "#POSTGRES_USERNAME",
|
||||
"POSTGRES_PASSWORD": "#POSTGRESDB_PASSWORD"
|
||||
},
|
||||
"immichapp": {
|
||||
"DB_DATABASE_NAME": "#POSTGRES_DATABASE_NAME",
|
||||
"DB_USERNAME": "#POSTGRES_USERNAME",
|
||||
"DB_PASSWORD": "#POSTGRESDB_PASSWORD"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "immich",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "alpine:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "immich-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/immich/db && mkdir -p /etc/user/data/immich/upload",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "tensorchord/pgvecto-rs:pg14-v0.2.0",
|
||||
"UPDATE": "true",
|
||||
"NAME": "immichpostgres-db",
|
||||
"MEMORY": "768M",
|
||||
"NETWORK": "immich-net",
|
||||
"SELECTOR": "immichpostgres",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/immich/db",
|
||||
"DEST": "/var/lib/postgresql/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "5432",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/immich/immich.json"
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"POSTGRES_INITDB_ARGS": "--data-checksums"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "valkey/valkey:8-bookworm",
|
||||
"UPDATE": "true",
|
||||
"NAME": "immichredis-app",
|
||||
"MEMORY": "256M",
|
||||
"NETWORK": "immich-net",
|
||||
"SELECTOR": "immichredis",
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "6379",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "ghcr.io/immich-app/immich-server:#IMMICH_VERSION",
|
||||
"UPDATE": "true",
|
||||
"NAME": "immichapp-app",
|
||||
"MEMORY": "1536M",
|
||||
"NETWORK": "immich-net",
|
||||
"SELECTOR": "immichapp",
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "2283",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/immich/upload",
|
||||
"DEST": "/usr/src/app/upload",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"DB_HOSTNAME": "immichpostgres-db"
|
||||
},
|
||||
{
|
||||
"REDIS_HOSTNAME": "immichredis-app"
|
||||
},
|
||||
{
|
||||
"UPLOAD_LOCATION": "/etc/user/data/immich/uploads"
|
||||
},
|
||||
{
|
||||
"IMMICH_MACHINE_LEARNING_URL": "immichmachine-learning"
|
||||
},
|
||||
{
|
||||
"TZ": "#IMMICH_TZ"
|
||||
},
|
||||
{
|
||||
"IMMICH_VERSION": "#IMMICH_VERSION"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/immich/immich.json"
|
||||
],
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "true",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": [
|
||||
"firewall-immich",
|
||||
"domain-immich"
|
||||
]
|
||||
},
|
||||
{
|
||||
"IMAGE": "ghcr.io/immich-app/immich-machine-learning:#IMMICH_VERSION",
|
||||
"UPDATE": "true",
|
||||
"NAME": "immichmachine-learning",
|
||||
"ROLES": "backend-www",
|
||||
"MEMORY": "1536M",
|
||||
"NETWORK": "immich-net",
|
||||
"SELECTOR": "immichmachine-learning",
|
||||
"ENVS": [
|
||||
{
|
||||
"REDIS_HOSTNAME": "immichredis-app"
|
||||
},
|
||||
{
|
||||
"TZ": "#IMMICH_TZ"
|
||||
},
|
||||
{
|
||||
"IMMICH_VERSION": "#IMMICH_VERSION"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "true",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "Immich",
|
||||
"title": "Immich",
|
||||
"subtitle": "Photos and Videos",
|
||||
"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.",
|
||||
"fields": [
|
||||
{
|
||||
"description": "Domain",
|
||||
"key": "DOMAIN",
|
||||
"value": "",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Timezone",
|
||||
"key": "IMMICH_TZ",
|
||||
"value": "Europe/Budapest",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Version",
|
||||
"key": "IMMICH_VERSION",
|
||||
"value": "release",
|
||||
"required": "true",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "POSTGRES database name",
|
||||
"key": "POSTGRES_DATABASE_NAME",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|md5|8"
|
||||
},
|
||||
{
|
||||
"description": "POSTGRES username",
|
||||
"key": "POSTGRES_USERNAME",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|md5|8"
|
||||
},
|
||||
{
|
||||
"description": "POSTGRES password for user",
|
||||
"key": "POSTGRESDB_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|md5|12"
|
||||
},
|
||||
{
|
||||
"description": "POSTGRES root user password",
|
||||
"key": "POSTGRESDB_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|sha256|20"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "filebrowser",
|
||||
"DOMAIN": "#JELLYFIN_DOMAIN"
|
||||
"SERVICE_NAME": "jellyfin",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -29,7 +29,7 @@
|
||||
"PORT": "8096"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#JELLYFIN_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"jellyfin": {
|
||||
"USER": "#JELLYFIN_USER",
|
||||
"PASS": "#JELLYFIN_PASS"
|
||||
"USER": "#USER",
|
||||
"PASS": "#PASS"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "filebrowser",
|
||||
"DOMAIN": "#JELLYFIN_DOMAIN"
|
||||
"SERVICE_NAME": "jellyfin",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -29,14 +29,14 @@
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "jellyfin/jellyfin:latest",
|
||||
"IMAGE": "jellyfin/jellyfin:#VERSION",
|
||||
"UPDATE": "true",
|
||||
"NAME": "jellyfin",
|
||||
"NETWORK": "host",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/jellyfin/media",
|
||||
"DEST": "/media",
|
||||
"SOURCE": "/etc/user/data/transmission/downloads/complete",
|
||||
"DEST": "/media/torrent",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
@@ -57,7 +57,7 @@
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "false",
|
||||
"PRE_START": "null",
|
||||
|
||||
+14
-3
@@ -1,10 +1,21 @@
|
||||
{
|
||||
"name": "jellyfin",
|
||||
"name": "Jellyfin",
|
||||
"title": "Jellyfin",
|
||||
"subtitle": "Media System",
|
||||
"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.",
|
||||
"fields": [
|
||||
{
|
||||
"description": "Please add your Jellyfin domain:",
|
||||
"key": "JELLYFIN_DOMAIN",
|
||||
"description": "Domain",
|
||||
"key": "DOMAIN",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"description": "Version",
|
||||
"key": "VERSION",
|
||||
"value": "2025081105",
|
||||
"info": "Latest stable official version at the time of template creation.",
|
||||
"advanced": "true"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "leantime",
|
||||
"DOMAIN": "#LEANTIME_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -26,13 +26,10 @@
|
||||
"TARGET": "leantime-app"
|
||||
},
|
||||
{
|
||||
"PORT": "80"
|
||||
"PORT": "8080"
|
||||
},
|
||||
{
|
||||
"LOCATION": "#LEANTIME_LOCATION_PATH"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#LEANTIME_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "80"
|
||||
"TARGET_PORT": "8080"
|
||||
},
|
||||
{
|
||||
"COMMENT": "leantime"
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"leantimemysql": {
|
||||
"MARIADB_DATABASE": "#DB_MYSQL",
|
||||
"MARIADB_USER": "#DB_USER",
|
||||
"MARIADB_PASSWORD": "#DB_PASSWORD",
|
||||
"MARIADB_ROOT_PASSWORD": "#DB_ROOT_PASSWORD"
|
||||
"MARIADB_DATABASE": "#MARIADB_DATABASE",
|
||||
"MARIADB_USER": "#MARIADB_USER",
|
||||
"MARIADB_PASSWORD": "#MARIADB_PASSWORD",
|
||||
"MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
|
||||
},
|
||||
"leantimeapp": {
|
||||
"LEAN_DB_USER": "#DB_USER",
|
||||
"LEAN_DB_PASSWORD": "#DB_PASSWORD",
|
||||
"LEAN_DB_USER": "#MARIADB_USER",
|
||||
"LEAN_DB_PASSWORD": "#MARIADB_PASSWORD",
|
||||
"LEAN_DB_HOST": "leantimemysql-db",
|
||||
"LEAN_DB_DATABASE": "#DB_MYSQL",
|
||||
"LEAN_DB_DATABASE": "#MARIADB_DATABASE",
|
||||
"LEAN_OIDC_CLIENT_SECRET": "#OIDC_CLIENT_SECRET",
|
||||
"LEAN_S3_SECRET": "#S3_SECRET",
|
||||
"LEAN_SESSION_PASSWORD": "#SESSION_PASSWORD"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "leantime",
|
||||
"DOMAIN": "#LEANTIME_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -115,7 +115,7 @@
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "80",
|
||||
"DEST": "8080",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
@@ -150,7 +150,7 @@
|
||||
"LEAN_PORT": "80"
|
||||
},
|
||||
{
|
||||
"LEAN_APP_URL": "https://#LEANTIME_DOMAIN"
|
||||
"LEAN_APP_URL": "https://#DOMAIN"
|
||||
},
|
||||
{
|
||||
"LEAN_APP_DIR": "leantime/"
|
||||
@@ -285,7 +285,7 @@
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/leantime/leantime.json"
|
||||
],
|
||||
"EXTRA": "",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
|
||||
+47
-45
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "leantime",
|
||||
"DOMAIN": "#LEANTIME_DOMAIN"
|
||||
"SERVICE_NAME": "matrix",
|
||||
"DOMAIN": "#ADMINDOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -23,20 +23,20 @@
|
||||
"PROXY": "smarthostloadbalancer"
|
||||
},
|
||||
{
|
||||
"TARGET": "leantime-app"
|
||||
"TARGET": "matrixadmin"
|
||||
},
|
||||
{
|
||||
"PORT": "80"
|
||||
},
|
||||
{
|
||||
"LOCATION": "#LEANTIME_LOCATION_PATH"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#LEANTIME_DOMAIN"
|
||||
"DOMAIN": "#ADMINDOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
},
|
||||
{
|
||||
"LOCATION": "#SUBPATH"
|
||||
},
|
||||
{
|
||||
"OPERATION": "CREATE"
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "matrix",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/domain-check",
|
||||
"UPDATE": "true",
|
||||
"MEMORY": "64M",
|
||||
"NAME": "domain_checker",
|
||||
"ROLES": "domain_checker",
|
||||
"NETWORK": "host",
|
||||
"SELECTOR": "",
|
||||
"SCALE": "0",
|
||||
"EXTRA": "--rm --privileged",
|
||||
"PRE_START": [],
|
||||
"DEPEND": [],
|
||||
"POST_START": [],
|
||||
"CMD": "",
|
||||
"ENVS": [
|
||||
{
|
||||
"PROXY": "smarthostloadbalancer"
|
||||
},
|
||||
{
|
||||
"TARGET": "matrixserver"
|
||||
},
|
||||
{
|
||||
"PORT": "8008"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
},
|
||||
{
|
||||
"OPERATION": "CREATE"
|
||||
}
|
||||
],
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/config/smarthost-domains",
|
||||
"DEST": "/smarthost-domains",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -52,7 +52,7 @@
|
||||
"SOURCE": "smarthostbackend"
|
||||
},
|
||||
{
|
||||
"TARGET": "leantime-app"
|
||||
"TARGET": "matrixadmin"
|
||||
},
|
||||
{
|
||||
"TYPE": "tcp"
|
||||
@@ -61,7 +61,7 @@
|
||||
"TARGET_PORT": "80"
|
||||
},
|
||||
{
|
||||
"COMMENT": "leantime"
|
||||
"COMMENT": "matrixadmin for proxy"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
@@ -50,7 +50,7 @@
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "leantimeapp"
|
||||
"SOURCE": "matrixserver"
|
||||
},
|
||||
{
|
||||
"TARGET": "coredns"
|
||||
@@ -62,7 +62,7 @@
|
||||
"TARGET_PORT": "53"
|
||||
},
|
||||
{
|
||||
"COMMENT": "leantime nginx access for local dns"
|
||||
"COMMENT": "matrix nginx access for local dns"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "matrixserver"
|
||||
},
|
||||
{
|
||||
"TARGET": "smtp"
|
||||
},
|
||||
{
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "25"
|
||||
},
|
||||
{
|
||||
"COMMENT": "matrix to smtp"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "smarthostbackend"
|
||||
},
|
||||
{
|
||||
"TARGET": "matrixserver"
|
||||
},
|
||||
{
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "8008"
|
||||
},
|
||||
{
|
||||
"COMMENT": "matrix"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"matrixpostgres": {
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
|
||||
},
|
||||
"matrixserver": {
|
||||
"DB_TYPE": "psycopg2",
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_HOST": "matrixpostgres-db",
|
||||
"DB_PORT": "5432",
|
||||
"SYNAPSE_SERVER_NAME": "#DOMAIN",
|
||||
"SYNAPSE_REPORT_STATS": "no",
|
||||
"ADMIN_USERNAME": "#ADMIN_USERNAME",
|
||||
"ADMIN_PASSWORD": "#ADMIN_PASSWORD",
|
||||
"SYNAPSE_CONFIG_DIR": "/data",
|
||||
"SYNAPSE_CONFIG_PATH": "/data/homeserver.yaml",
|
||||
"SYNAPSE_DATA_DIR": "/data"
|
||||
},
|
||||
"matrixadmin": {
|
||||
"REACT_APP_SERVER": "https://#DOMAIN",
|
||||
"BASE_PATH": "#ADMINDOMAIN",
|
||||
"ADMINDOMAIN": "#ADMINDOMAIN",
|
||||
"SUBPATH": "#SUBPATH"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "matrix",
|
||||
"DOMAIN": "DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "alpine:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "matrix-init",
|
||||
"NETWORK": "host",
|
||||
"MEMORY": "64M",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "USER_DATA",
|
||||
"DEST": "/etc/user/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/matrix/matrix.json"
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "sh -c",
|
||||
"CMD": "mkdir -p /etc/user/data/matrix/db && mkdir -p /etc/user/data/matrix/synapse",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "postgres:alpine",
|
||||
"UPDATE": "true",
|
||||
"NAME": "matrixpostgres-db",
|
||||
"ROLES": "postgres-db",
|
||||
"MEMORY": "256M",
|
||||
"NETWORK": "matrix-net",
|
||||
"SELECTOR": "matrixpostgres-db",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/matrix/db",
|
||||
"DEST": "/var/lib/postgresql/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "5432",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/matrix/matrix.json"
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"POSTGRES_INITDB_ARGS": "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [],
|
||||
"POST_START": []
|
||||
},
|
||||
{
|
||||
"IMAGE": "matrixdotorg/synapse",
|
||||
"UPDATE": "true",
|
||||
"NAME": "matrixserver-init",
|
||||
"ROLES": "backend-www",
|
||||
"MEMORY": "512M",
|
||||
"NETWORK": "matrix-net",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/matrix/synapse",
|
||||
"DEST": "/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/matrix/matrix.json"
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "bash -c",
|
||||
"CMD": "if [ ! -f /data/homeserver.yaml ]; then /start.py generate ; else exit 1; fi",
|
||||
"PRE_START": [],
|
||||
"POST_START": []
|
||||
},
|
||||
{
|
||||
"IMAGE": "safebox/matrix-setup:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "matrixserver-dbinit",
|
||||
"NETWORK": "host",
|
||||
"MEMORY": "64M",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/matrix/synapse",
|
||||
"DEST": "/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/matrix/matrix.json"
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "matrixdotorg/synapse",
|
||||
"UPDATE": "true",
|
||||
"NAME": "matrixserver-app",
|
||||
"ROLES": "backend-www",
|
||||
"MEMORY": "512M",
|
||||
"NETWORK": "matrix-net",
|
||||
"SELECTOR": "matrixserver",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/matrix/synapse",
|
||||
"DEST": "/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/matrix/matrix.json"
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [],
|
||||
"POST_START": [
|
||||
"firewall-matrix",
|
||||
"domain-matrix"
|
||||
]
|
||||
},
|
||||
{
|
||||
"IMAGE": "safebox/matrix-setup:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "matrixserver-finalize",
|
||||
"NETWORK": "host",
|
||||
"MEMORY": "64M",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/matrix/synapse",
|
||||
"DEST": "/data",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "SHARED",
|
||||
"DEST": "/var/tmp/shared",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/matrix/matrix.json"
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "awesometechnologies/synapse-admin",
|
||||
"UPDATE": "true",
|
||||
"NAME": "matrixadmin",
|
||||
"ROLES": "backend-www",
|
||||
"MEMORY": "128M",
|
||||
"NETWORK": "matrix-net",
|
||||
"SELECTOR": "matrixadmin",
|
||||
"VOLUMES": [],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "80",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [],
|
||||
"POST_START": [
|
||||
"firewall-matrix-admin",
|
||||
"domain-matrix-admin"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "nextcloud",
|
||||
"DOMAIN": "#NEXTCLOUD_TRUSTED_DOMAINS"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -19,13 +19,24 @@
|
||||
"POST_START": [],
|
||||
"CMD": "",
|
||||
"ENVS": [
|
||||
{ "PROXY": "smarthostloadbalancer" },
|
||||
{ "TARGET": "nextcloudnginx" },
|
||||
{ "PORT": "80" },
|
||||
{ "LOCATION": "#NEXTCLOUD_LOCATION_PATH" },
|
||||
{ "DOMAIN": "#NEXTCLOUD_TRUSTED_DOMAINS" },
|
||||
{ "SMARTHOST_PROXY_PATH": "/smarthost-domains" },
|
||||
{ "OPERATION": "CREATE" }
|
||||
{
|
||||
"PROXY": "smarthostloadbalancer"
|
||||
},
|
||||
{
|
||||
"TARGET": "nextcloudnginx"
|
||||
},
|
||||
{
|
||||
"PORT": "80"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
},
|
||||
{
|
||||
"OPERATION": "CREATE"
|
||||
}
|
||||
],
|
||||
"VOLUMES": [
|
||||
{
|
||||
|
||||
@@ -1,21 +1,20 @@
|
||||
{
|
||||
"nextcloudmysql": {
|
||||
"MARIADB_DATABASE": "#MARIADB_DATABASE",
|
||||
"MARIADB_USER": "#MARIADB_USER",
|
||||
"MARIADB_PASSWORD": "#MARIADB_PASSWORD",
|
||||
"MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
|
||||
"nextcloudpostgres": {
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
|
||||
},
|
||||
"nextcloudphp": {
|
||||
"NEXTCLOUD_ADMIN_USER": "#NEXTCLOUD_ADMIN_USER",
|
||||
"NEXTCLOUD_ADMIN_PASSWORD": "#NEXTCLOUD_ADMIN_PASSWORD",
|
||||
"NEXTCLOUD_TRUSTED_DOMAINS": "#NEXTCLOUD_TRUSTED_DOMAINS",
|
||||
"NEXTCLOUD_LOCATION_PATH": "#NEXTCLOUD_LOCATION_PATH",
|
||||
"OVERWRITEHOST": "#NEXTCLOUD_TRUSTED_DOMAINS#NEXTCLOUD_LOCATION_PATH",
|
||||
"DOMAIN": "#DOMAIN",
|
||||
"OVERWRITEHOST": "#DOMAIN",
|
||||
"NEXTCLOUD_DATA_DIR": "/var/data",
|
||||
"MYSQL_DATABASE": "#MARIADB_DATABASE",
|
||||
"MYSQL_USER": "#MARIADB_USER",
|
||||
"MYSQL_PASSWORD": "#MARIADB_PASSWORD",
|
||||
"MYSQL_HOST": "nextcloudmysql-db",
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_HOST": "nextcloudpostgres-db",
|
||||
"REDIS_HOST": "nextcloud-redis"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "nextcloud",
|
||||
"DOMAIN": "DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -27,47 +27,41 @@
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [ "/etc/user/secret/nextcloud/nextcloud.json" ],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/nextcloud/nextcloud.json"
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "sh -c",
|
||||
"CMD": "mkdir -p /etc/user/data/nextcloud/db && mkdir -p /etc/system/log/nextcloud/db && mkdir -p /etc/user/data/nextcloud/apps && mkdir -p /etc/user/data/nextcloud/config && mkdir -p /etc/user/data/nextcloud/data && chmod 777 -R /etc/user/data/nextcloud && chmod 0770 -R /etc/user/data/nextcloud/data && chown -R 82:82 /etc/user/data/nextcloud/data",
|
||||
"CMD": "mkdir -p /etc/user/data/nextcloud/db && mkdir -p /etc/user/data/nextcloud/apps && mkdir -p /etc/user/data/nextcloud/config && mkdir -p /etc/user/data/nextcloud/data && chmod 777 -R /etc/user/data/nextcloud && chmod 0770 -R /etc/user/data/nextcloud/data && chown -R 82:82 /etc/user/data/nextcloud/data && chown -R 82:82 /etc/user/data/nextcloud/apps && chown -R 82:82 /etc/user/data/nextcloud/config",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "mariadb:latest",
|
||||
"IMAGE": "postgres:15-alpine",
|
||||
"UPDATE": "true",
|
||||
"NAME": "nextcloudmysql-db",
|
||||
"NAME": "nextcloudpostgres-db",
|
||||
"MEMORY": "256M",
|
||||
"NETWORK": "nextcloud-net",
|
||||
"SELECTOR": "nextcloudmysql",
|
||||
"SELECTOR": "nextcloudpostgres",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/nextcloud/db",
|
||||
"DEST": "/var/lib/mysql",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/log/nextcloud/db",
|
||||
"DEST": "/var/lib/mysql/mysql-bin",
|
||||
"DEST": "/var/lib/postgresql/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "3306",
|
||||
"DEST": "5432",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"READYNESS": [
|
||||
{"tcp": "3306"},
|
||||
{"HTTP": ""},
|
||||
{"EXEC": "/ready.sh"}
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/nextcloud/nextcloud.json"
|
||||
],
|
||||
"ENV_FILES": [ "/etc/user/secret/nextcloud/nextcloud.json" ],
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
@@ -90,9 +84,15 @@
|
||||
}
|
||||
],
|
||||
"READYNESS": [
|
||||
{"tcp": ""},
|
||||
{"HTTP": ""},
|
||||
{"EXEC": "/ready.sh"}
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
@@ -102,13 +102,15 @@
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "registry.format.hu/nextcloud-php-fpm:26",
|
||||
"IMAGE": "nextcloud:#VERSION",
|
||||
"UPDATE": "true",
|
||||
"NAME": "nextcloudphp-fpm",
|
||||
"MEMORY": "1024M",
|
||||
"NETWORK": "nextcloud-net",
|
||||
"SELECTOR": "nextcloudphp-fpm",
|
||||
"DNS": [ "coredns" ],
|
||||
"DNS": [
|
||||
"coredns"
|
||||
],
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "nextcloud",
|
||||
@@ -139,27 +141,41 @@
|
||||
}
|
||||
],
|
||||
"READYNESS": [
|
||||
{"tcp": ""},
|
||||
{"HTTP": ""},
|
||||
{"EXEC": "/ready.sh"}
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/nextcloud/nextcloud.json"
|
||||
],
|
||||
"ENV_FILES": [ "/etc/user/secret/nextcloud/nextcloud.json" ],
|
||||
"EXTRA": "--user www-data --restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [ "firewall-nextcloud-server-dns" ],
|
||||
"POST_START": ["firewall-nextcloud-server-smtp"]
|
||||
"PRE_START": [
|
||||
"firewall-nextcloud-server-dns"
|
||||
],
|
||||
"POST_START": [
|
||||
"firewall-nextcloud-server-smtp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"IMAGE": "registry.format.hu/nextcloud-nginx:1.23.1",
|
||||
"IMAGE": "safebox/nextcloud-nginx:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "nextcloudnginx",
|
||||
"ROLES": "backend-www",
|
||||
"MEMORY": "128M",
|
||||
"NETWORK": "nextcloud-net",
|
||||
"SELECTOR": "nextcloudnginx",
|
||||
"DNS": [ "coredns" ],
|
||||
"DNS": [
|
||||
"coredns"
|
||||
],
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "nextcloud",
|
||||
@@ -185,15 +201,23 @@
|
||||
}
|
||||
],
|
||||
"READYNESS": [
|
||||
{"tcp": ""},
|
||||
{"HTTP": ""},
|
||||
{"EXEC": "/ready.sh"}
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [ "firewall-nextcloud-dns" ],
|
||||
"PRE_START": [
|
||||
"firewall-nextcloud-dns"
|
||||
],
|
||||
"POST_START": [
|
||||
"firewall-nextcloud",
|
||||
"domain-nextcloud"
|
||||
|
||||
+30
-27
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "coredns"
|
||||
},
|
||||
{
|
||||
"TARGET": "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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "smarthostbackend"
|
||||
},
|
||||
{
|
||||
"TARGET": "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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,208 @@
|
||||
{
|
||||
"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,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "outline",
|
||||
"DOMAIN": "#OUTLINE_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -29,7 +29,7 @@
|
||||
"PORT": "3000"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#OUTLINE_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
|
||||
-170
@@ -1,170 +0,0 @@
|
||||
NODE_ENV=production
|
||||
|
||||
# Generate a hex-encoded 32-byte random key. You should use `openssl rand -hex 32`
|
||||
# in your terminal to generate a random value.
|
||||
SECRET_KEY=generate_a_new_key
|
||||
|
||||
# Generate a unique random key. The format is not important but you could still use
|
||||
# `openssl rand -hex 32` in your terminal to produce this.
|
||||
UTILS_SECRET=generate_a_new_key
|
||||
|
||||
# For production point these at your databases, in development the default
|
||||
# should work out of the box.
|
||||
DATABASE_URL=postgres://user:pass@localhost:5432/outline
|
||||
DATABASE_CONNECTION_POOL_MIN=
|
||||
DATABASE_CONNECTION_POOL_MAX=
|
||||
# Uncomment this to disable SSL for connecting to Postgres
|
||||
# PGSSLMODE=disable
|
||||
|
||||
# For redis you can either specify an ioredis compatible url like this
|
||||
REDIS_URL=redis://localhost:6379
|
||||
# or alternatively, if you would like to provide additional connection options,
|
||||
# use a base64 encoded JSON connection option object. Refer to the ioredis documentation
|
||||
# for a list of available options.
|
||||
# Example: Use Redis Sentinel for high availability
|
||||
# {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"}
|
||||
# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ==
|
||||
|
||||
# URL should point to the fully qualified, publicly accessible URL. If using a
|
||||
# proxy the port in URL and PORT may be different.
|
||||
URL=
|
||||
PORT=3000
|
||||
|
||||
# See [documentation](docs/SERVICES.md) on running a separate collaboration
|
||||
# server, for normal operation this does not need to be set.
|
||||
COLLABORATION_URL=
|
||||
|
||||
# Specify what storage system to use. Possible value is one of "s3" or "local".
|
||||
# For "local", the avatar images and document attachments will be saved on local disk.
|
||||
FILE_STORAGE=local
|
||||
|
||||
# If "local" is configured for FILE_STORAGE above, then this sets the parent directory under
|
||||
# which all attachments/images go. Make sure that the process has permissions to create
|
||||
# this path and also to write files to it.
|
||||
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data
|
||||
|
||||
# Maximum allowed size for the uploaded attachment.
|
||||
FILE_STORAGE_UPLOAD_MAX_SIZE=262144000
|
||||
|
||||
# Override the maximum size of document imports, generally this should be lower
|
||||
# than the document attachment maximum size.
|
||||
FILE_STORAGE_IMPORT_MAX_SIZE=
|
||||
|
||||
# Override the maximum size of workspace imports, these can be especially large
|
||||
# and the files are temporary being automatically deleted after a period of time.
|
||||
FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE=
|
||||
|
||||
# To support uploading of images for avatars and document attachments in a distributed
|
||||
# architecture an s3-compatible storage can be configured if FILE_STORAGE=s3 above.
|
||||
AWS_ACCESS_KEY_ID=get_a_key_from_aws
|
||||
AWS_SECRET_ACCESS_KEY=get_the_secret_of_above_key
|
||||
AWS_REGION=xx-xxxx-x
|
||||
AWS_S3_ACCELERATE_URL=
|
||||
AWS_S3_UPLOAD_BUCKET_URL=http://s3:4569
|
||||
AWS_S3_UPLOAD_BUCKET_NAME=bucket_name_here
|
||||
AWS_S3_FORCE_PATH_STYLE=true
|
||||
AWS_S3_ACL=private
|
||||
|
||||
# –––––––––––––– AUTHENTICATION ––––––––––––––
|
||||
|
||||
# Third party signin credentials, at least ONE OF EITHER Google, Slack,
|
||||
# or Microsoft is required for a working installation or you'll have no sign-in
|
||||
# options.
|
||||
|
||||
# To configure Slack auth, you'll need to create an Application at
|
||||
# => https://api.slack.com/apps
|
||||
#
|
||||
# When configuring the Client ID, add a redirect URL under "OAuth & Permissions":
|
||||
# https://<URL>/auth/slack.callback
|
||||
SLACK_CLIENT_ID=get_a_key_from_slack
|
||||
SLACK_CLIENT_SECRET=get_the_secret_of_above_key
|
||||
|
||||
# To configure Google auth, you'll need to create an OAuth Client ID at
|
||||
# => https://console.cloud.google.com/apis/credentials
|
||||
#
|
||||
# When configuring the Client ID, add an Authorized redirect URI:
|
||||
# https://<URL>/auth/google.callback
|
||||
GOOGLE_CLIENT_ID=
|
||||
GOOGLE_CLIENT_SECRET=
|
||||
|
||||
# To configure Microsoft/Azure auth, you'll need to create an OAuth Client. See
|
||||
# the guide for details on setting up your Azure App:
|
||||
# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4
|
||||
AZURE_CLIENT_ID=
|
||||
AZURE_CLIENT_SECRET=
|
||||
AZURE_RESOURCE_APP_ID=
|
||||
|
||||
# To configure generic OIDC auth, you'll need some kind of identity provider.
|
||||
# See documentation for whichever IdP you use to acquire the following info:
|
||||
# Redirect URI is https://<URL>/auth/oidc.callback
|
||||
OIDC_CLIENT_ID=
|
||||
OIDC_CLIENT_SECRET=
|
||||
OIDC_AUTH_URI=
|
||||
OIDC_TOKEN_URI=
|
||||
OIDC_USERINFO_URI=
|
||||
OIDC_LOGOUT_URI=
|
||||
|
||||
# Specify which claims to derive user information from
|
||||
# Supports any valid JSON path with the JWT payload
|
||||
OIDC_USERNAME_CLAIM=preferred_username
|
||||
|
||||
# Display name for OIDC authentication
|
||||
OIDC_DISPLAY_NAME=OpenID Connect
|
||||
|
||||
# Space separated auth scopes.
|
||||
OIDC_SCOPES=openid profile email
|
||||
|
||||
# To configure the GitHub integration, you'll need to create a GitHub App at
|
||||
# => https://github.com/settings/apps
|
||||
#
|
||||
# When configuring the Client ID, add a redirect URL under "Permissions & events":
|
||||
# https://<URL>/api/github.callback
|
||||
GITHUB_CLIENT_ID=
|
||||
GITHUB_CLIENT_SECRET=
|
||||
GITHUB_APP_NAME=
|
||||
GITHUB_APP_ID=
|
||||
GITHUB_APP_PRIVATE_KEY=
|
||||
|
||||
# To configure Discord auth, you'll need to create a Discord Application at
|
||||
# => https://discord.com/developers/applications/
|
||||
#
|
||||
# When configuring the Client ID, add a redirect URL under "OAuth2":
|
||||
# https://<URL>/auth/discord.callback
|
||||
DISCORD_CLIENT_ID=
|
||||
DISCORD_CLIENT_SECRET=
|
||||
|
||||
{"SECRET_KEY": "generate_a_new_key"},
|
||||
{"UTILS_SECRET": "generate_a_new_key"},
|
||||
{"DATABASE_URL": "postgres://user:pass@localhost:5432/outline"},
|
||||
{"AWS_ACCESS_KEY_ID": "get_a_key_from_aws"},
|
||||
{"AWS_SECRET_ACCESS_KEY": "get_the_secret_of_above_key"},
|
||||
{"AWS_REGION": "xx-xxxx-x"},
|
||||
{"AWS_S3_ACCELERATE_URL": ""},
|
||||
{"AWS_S3_UPLOAD_BUCKET_URL": "http://s3:4569"},
|
||||
{"AWS_S3_UPLOAD_BUCKET_NAME": "bucket_name_here"},
|
||||
{"AWS_S3_FORCE_PATH_STYLE": true},
|
||||
{"AWS_S3_ACL": "private"},
|
||||
{"SLACK_CLIENT_ID": "get_a_key_from_slack"},
|
||||
{"SLACK_CLIENT_SECRET": "get_the_secret_of_above_key"},
|
||||
{"GOOGLE_CLIENT_ID": ""},
|
||||
{"GOOGLE_CLIENT_SECRET": ""},
|
||||
{"AZURE_CLIENT_ID": ""},
|
||||
{"AZURE_CLIENT_SECRET": ""},
|
||||
{"AZURE_RESOURCE_APP_ID": ""},
|
||||
{"OIDC_CLIENT_ID": ""},
|
||||
{"OIDC_CLIENT_SECRET": ""},
|
||||
{"OIDC_AUTH_URI": ""},
|
||||
{"OIDC_TOKEN_URI": ""},
|
||||
{"OIDC_USERINFO_URI": ""},
|
||||
{"OIDC_LOGOUT_URI": ""},
|
||||
{"OIDC_USERNAME_CLAIM": "preferred_username"},
|
||||
{"OIDC_DISPLAY_NAME": "OpenID Connect"},
|
||||
{"OIDC_SCOPES": "openid profile email"},
|
||||
{"GITHUB_CLIENT_ID": ""},
|
||||
{"GITHUB_CLIENT_SECRET": ""},
|
||||
{"GITHUB_APP_NAME": ""},
|
||||
{"GITHUB_APP_ID": ""},
|
||||
{"GITHUB_APP_PRIVATE_KEY": ""},
|
||||
{"DISCORD_CLIENT_ID": ""},
|
||||
{"DISCORD_CLIENT_SECRET": ""}
|
||||
|
||||
@@ -1,12 +1,38 @@
|
||||
{
|
||||
"outlinepostgres": {
|
||||
"POSTGRES_DB": "#DB_NAME",
|
||||
"POSTGRES_USER": "#DB_USER",
|
||||
"POSTGRES_PASSWORD": "#DB_PASSWORD"
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
|
||||
},
|
||||
"outlineapp": {
|
||||
"SECRET_KEY": "#SECRET_KEY",
|
||||
"UTILS_SECRET": "#UTILS_SECRET",
|
||||
"DATABASE_URL": "postgres://#DB_USER:#DB_PASSWORD@outlinepostgres-db:5432/#DB_NAME"
|
||||
"DATABASE_URL": "postgres://#POSTGRES_USER:#POSTGRES_PASSWORD@outlinepostgres-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",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "outline",
|
||||
"DOMAIN": "#OUTLINE_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -49,7 +49,7 @@
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/outline/outline.json"
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
@@ -108,10 +108,10 @@
|
||||
"DATABASE_CONNECTION_POOL_MAX": ""
|
||||
},
|
||||
{
|
||||
"REDIS_URL": "redis://outlineredis-app:6379"
|
||||
"REDIS_URL": "redis://outlineredis-server:6379"
|
||||
},
|
||||
{
|
||||
"URL": "https://#OUTLINE_DOMAIN"
|
||||
"URL": "https://#DOMAIN"
|
||||
},
|
||||
{
|
||||
"PORT": 3000
|
||||
@@ -141,7 +141,7 @@
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/outline/outline.json"
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
|
||||
+178
-6
@@ -1,5 +1,9 @@
|
||||
{
|
||||
"name": "outline",
|
||||
"title": "Outline",
|
||||
"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.",
|
||||
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiByeD0iNyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTMwLjMzMzMgNDIuMjUyNlY0My4zMDQ0QzMwLjMzMzMgNDQuNzkzMSAyOS4xMzk0IDQ2IDI3LjY2NjcgNDZDMjcuMjA4NyA0NiAyNi43NTg1IDQ1Ljg4MDggMjYuMzU5MyA0NS42NTM4TDEwLjM1OTMgMzYuNTU1OUM5LjUxOTY4IDM2LjA3ODQgOSAzNS4xODAzIDkgMzQuMjA2NFYxNS43OTRDOSAxNC44MjAyIDkuNTE5NjggMTMuOTIyIDEwLjM1OTMgMTMuNDQ0NkwyNi4zNTkzIDQuMzQ2NjdDMjcuNjQyOSAzLjYxNjc3IDI5LjI2ODggNC4wNzY5OSAyOS45OTA4IDUuMzc0NTdDMzAuMjE1NCA1Ljc3ODA2IDMwLjMzMzMgNi4yMzMyMSAzMC4zMzMzIDYuNjk2MTZWNy43NDc4OEwzMi4yMzM3IDcuMTcxNTZDMzMuNjQ0NCA2Ljc0Mzc2IDM1LjEzMSA3LjU1Mjk2IDM1LjU1NDIgOC45Nzg5NEMzNS42Mjg4IDkuMjMwMjkgMzUuNjY2NyA5LjQ5MTIzIDM1LjY2NjcgOS43NTM1N1YxMC44NDc5TDM4LjAwMjYgMTAuNTUyOEMzOS40NjQgMTAuMzY4MSA0MC43OTY3IDExLjQxNiA0MC45Nzk0IDEyLjg5MzJDNDAuOTkzMiAxMy4wMDQyIDQxIDEzLjExNTggNDEgMTMuMjI3NlYzNi43NzI4QzQxIDM4LjI2MTcgMzkuODA2MSAzOS40Njg2IDM4LjMzMzMgMzkuNDY4NkMzOC4yMjI3IDM5LjQ2ODYgMzguMTEyMyAzOS40NjE2IDM4LjAwMjYgMzkuNDQ3N0wzNS42NjY3IDM5LjE1MjZWNDAuMjQ3QzM1LjY2NjcgNDEuNzM1NyAzNC40NzI3IDQyLjk0MjYgMzMgNDIuOTQyNkMzMi43NDA1IDQyLjk0MjYgMzIuNDgyMyA0Mi45MDQzIDMyLjIzMzcgNDIuODI4OUwzMC4zMzMzIDQyLjI1MjZaTTMwLjMzMzMgMzkuNDM4MkwzMyA0MC4yNDdWMjUuMDAwM1Y5Ljc1MzU3TDMwLjMzMzMgMTAuNTYyMlYzOS40MzgyWk0zNS42NjY3IDEzLjU2NDZWMzYuNDM2TDM4LjMzMzMgMzYuNzcyOFYxMy4yMjc2TDM1LjY2NjcgMTMuNTY0NlpNMTEuNjY2NyAxNS43OTRWMzQuMjA2NEwyNy42NjY3IDQzLjMwNDRWNi42OTYxNkwxMS42NjY3IDE1Ljc5NFpNMTQuMzMzMyAxNy41ODcxTDE3IDE2LjIzOTJWMzMuNzYxMkwxNC4zMzMzIDMyLjQxMzNWMTcuNTg3MVoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo=",
|
||||
"fields": [
|
||||
{
|
||||
"description": "Secret key",
|
||||
@@ -17,37 +21,205 @@
|
||||
},
|
||||
{
|
||||
"description": "Postgres database name",
|
||||
"key": "DB_NAME",
|
||||
"key": "POSTGRES_DB",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "time|md5|8"
|
||||
},
|
||||
{
|
||||
"description": "Postgres username",
|
||||
"key": "DB_USER",
|
||||
"key": "POSTGRES_USER",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "time|md5|8"
|
||||
},
|
||||
{
|
||||
"description": "Postgres password for user",
|
||||
"key": "DB_PASSWORD",
|
||||
"key": "POSTGRES_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|md5|12"
|
||||
},
|
||||
{
|
||||
"description": "Postgres root user password",
|
||||
"key": "DB_ROOT_PASSWORD",
|
||||
"key": "POSTGRES_ROOT_PASSWORD",
|
||||
"value": "",
|
||||
"required": "true",
|
||||
"generated": "random|sha256|20"
|
||||
},
|
||||
{
|
||||
"description": "Please add Outline domain:",
|
||||
"key": "OUTLINE_DOMAIN",
|
||||
"description": "Domain:",
|
||||
"key": "DOMAIN",
|
||||
"value": "",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Slack client ID",
|
||||
"key": "SLACK_CLIENT_ID",
|
||||
"value": "",
|
||||
"info": "Create a new app in your Slack workspace at https://api.slack.com/apps?new_app=1 and add 'Sign in with Slack' under 'Add features and functionality'. Set the Redirect URL to 'https://<your-domain>/auth/slack.callback'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Slack client secret",
|
||||
"key": "SLACK_CLIENT_SECRET",
|
||||
"value": "",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Google client ID",
|
||||
"key": "GOOGLE_CLIENT_ID",
|
||||
"value": "",
|
||||
"info": "Create OAuth 2.0 credentials in Google Cloud Console at https://console.cloud.google.com/apis/credentials and set the Redirect URL to 'https://<your-domain>/auth/google.callback'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Google client secret",
|
||||
"key": "GOOGLE_CLIENT_SECRET",
|
||||
"value": "",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Azure client ID",
|
||||
"key": "AZURE_CLIENT_ID",
|
||||
"value": "",
|
||||
"info": "Register an application in Azure AD at https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade and set the Redirect URL to 'https://<your-domain>/auth/azuread.callback'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Azure client secret",
|
||||
"key": "AZURE_CLIENT_SECRET",
|
||||
"value": "",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Azure resource app ID",
|
||||
"key": "AZURE_RESOURCE_APP_ID",
|
||||
"value": "",
|
||||
"info": "This is usually the same as the client ID, but can vary based on your Azure AD setup.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Discord client ID",
|
||||
"key": "DISCORD_CLIENT_ID",
|
||||
"value": "",
|
||||
"info": "Create an application in Discord Developer Portal at https://discord.com/developers/applications and set the Redirect URL to 'https://<your-domain>/auth/discord.callback'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Discord client secret",
|
||||
"key": "DISCORD_CLIENT_SECRET",
|
||||
"value": "",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "Discord server ID (optional)",
|
||||
"key": "DISCORD_SERVER_ID",
|
||||
"value": "",
|
||||
"info": "(Optional) If you want to restrict login to members of a specific Discord server, provide the server ID here.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect client ID",
|
||||
"key": "OIDC_CLIENT_ID",
|
||||
"value": "",
|
||||
"info": "Set up an OpenID Connect application with your provider and set the Redirect URL to 'https://<your-domain>/auth/oidc.callback'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect client secret",
|
||||
"key": "OIDC_CLIENT_SECRET",
|
||||
"value": "",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect provider auth URI",
|
||||
"key": "OIDC_AUTH_URI",
|
||||
"value": "",
|
||||
"info": "The authorization endpoint URL of your OpenID Connect provider.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect provider token URI",
|
||||
"key": "OIDC_TOKEN_URI",
|
||||
"value": "",
|
||||
"info": "The token endpoint URL of your OpenID Connect provider.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect provider userinfo URI",
|
||||
"key": "OIDC_USERINFO_URI",
|
||||
"value": "",
|
||||
"info": "The userinfo endpoint URL of your OpenID Connect provider.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect provider logout URI (optional)",
|
||||
"key": "OIDC_LOGOUT_URI",
|
||||
"value": "",
|
||||
"info": "(Optional) The logout endpoint URL of your OpenID Connect provider, if supported.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect username claim",
|
||||
"key": "OIDC_USERNAME_CLAIM",
|
||||
"value": "preferred_username",
|
||||
"info": "The claim in the ID token or userinfo response to use as the username. Defaults to 'preferred_username'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect display name",
|
||||
"key": "OIDC_DISPLAY_NAME",
|
||||
"value": "OpenID Connect",
|
||||
"info": "The display name for the OpenID Connect authentication option. Defaults to 'OpenID Connect'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "OpenID Connect scopes",
|
||||
"key": "OIDC_SCOPES",
|
||||
"value": "openid profile email",
|
||||
"info": "Space-separated list of scopes to request during authentication. Defaults to 'openid profile email'.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "SMTP host",
|
||||
"key": "SMTP_HOST",
|
||||
"value": "",
|
||||
"info": "Used for sending invitation and password reset emails. Leave blank to disable email functionality.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "SMTP port",
|
||||
"key": "SMTP_PORT",
|
||||
"value": "587",
|
||||
"info": "(Optional) The port to connect to on the SMTP server. Defaults to 587.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "SMTP service (e.g., gmail)",
|
||||
"key": "SMTP_SERVICE",
|
||||
"value": "",
|
||||
"info": "Used for sending invitation and password reset emails. Leave blank to disable email functionality.",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "SMTP username (email address)",
|
||||
"key": "SMTP_USERNAME",
|
||||
"value": "",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "SMTP password",
|
||||
"key": "SMTP_PASSWORD",
|
||||
"value": "",
|
||||
"advanced": "true"
|
||||
},
|
||||
{
|
||||
"description": "From email address",
|
||||
"key": "SMTP_FROM_EMAIL",
|
||||
"value": "",
|
||||
"info": "(Optional) The email address that emails will be sent from. Defaults to the SMTP username if not set.",
|
||||
"advanced": "true"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "pocketid",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/domain-check",
|
||||
"UPDATE": "true",
|
||||
"MEMORY": "64M",
|
||||
"NAME": "domain_checker",
|
||||
"ROLES": "domain_checker",
|
||||
"NETWORK": "host",
|
||||
"SELECTOR": "",
|
||||
"SCALE": "0",
|
||||
"EXTRA": "--rm --privileged",
|
||||
"PRE_START": [],
|
||||
"DEPEND": [],
|
||||
"POST_START": [],
|
||||
"CMD": "",
|
||||
"ENVS": [
|
||||
{
|
||||
"PROXY": "smarthostloadbalancer"
|
||||
},
|
||||
{
|
||||
"TARGET": "pocketid-app"
|
||||
},
|
||||
{
|
||||
"PORT": "1411"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
},
|
||||
{
|
||||
"OPERATION": "CREATE"
|
||||
}
|
||||
],
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/config/smarthost-domains",
|
||||
"DEST": "/smarthost-domains",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "coredns"
|
||||
},
|
||||
{
|
||||
"TARGET": "pocketid-app"
|
||||
},
|
||||
{
|
||||
"TYPE": "udp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "53"
|
||||
},
|
||||
{
|
||||
"COMMENT": "dns for pocketid-app"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "pocketid-app"
|
||||
},
|
||||
{
|
||||
"TARGET": "smtp"
|
||||
},
|
||||
{
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "25"
|
||||
},
|
||||
{
|
||||
"COMMENT": "smtp for pocketid-app"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "smarthostbackend"
|
||||
},
|
||||
{
|
||||
"TARGET": "pocketid-app"
|
||||
},
|
||||
{
|
||||
"TYPE": "tcp"
|
||||
},
|
||||
{
|
||||
"TARGET_PORT": "1411"
|
||||
},
|
||||
{
|
||||
"COMMENT": "proxy for pocketid-app"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--privileged --rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"pocketidpostgres": {
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
|
||||
},
|
||||
"pocketidapp": {
|
||||
"PUBLIC_APP_URL": "https://#DOMAIN",
|
||||
"TRUST_PROXY": "true",
|
||||
"PUID": "1000",
|
||||
"PGID": "1000",
|
||||
"DB_PROVIDER": "postgres",
|
||||
"DB_CONNECTION_STRING": "postgresql://#POSTGRES_USER:#POSTGRES_PASSWORD@pocketidpostgres-db:5432/#POSTGRES_DB"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "pocketid",
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "alpine:latest",
|
||||
"UPDATE": "true",
|
||||
"NAME": "pocketid-init",
|
||||
"NETWORK": "host",
|
||||
"MEMORY": "64M",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "USER_DATA",
|
||||
"DEST": "/etc/user/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "sh -c",
|
||||
"CMD": "mkdir -p /mkdir -p /etc/user/data/pocketid/db",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "postgres:16-alpine",
|
||||
"NAME": "pocketidpostgres-db",
|
||||
"UPDATE": "true",
|
||||
"ROLES": "postgres-db patroni",
|
||||
"MEMORY": "256M",
|
||||
"NETWORK": "pocketid-net",
|
||||
"SELECTOR": "pocketidpostgres-db",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/pocketid/db",
|
||||
"DEST": "/var/lib/postgresql/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "5432",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/pocketid/pocketid.json"
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"POSTGRES_INITDB_ARGS": "--encoding=UTF8 --locale=C"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--label logging=promtail_user --label logging_jobname=containers --restart unless-stopped",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
"PRE_START": [],
|
||||
"POST_START": []
|
||||
},
|
||||
{
|
||||
"IMAGE": "11notes/pocket-id:1",
|
||||
"UPDATE": "true",
|
||||
"NAME": "pocketidapp",
|
||||
"DNS": [
|
||||
"coredns"
|
||||
],
|
||||
"MEMORY": "256M",
|
||||
"SELECTOR": "pocketid-app",
|
||||
"NETWORK": "pocketid-net",
|
||||
"VOLUMES": [],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "1411",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--label logging=promtail_user --label logging_jobname=containers --restart unless-stopped",
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/pocketid/pocketid.json"
|
||||
],
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "true",
|
||||
"CMD": "null",
|
||||
"PRE_START": "null",
|
||||
"POST_START": [
|
||||
"firewall-pocketid",
|
||||
"firewall-pocketid-dns",
|
||||
"firewall-pocketid-smtp",
|
||||
"domain-pocketid"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "Pocketid",
|
||||
"title": "PocketID",
|
||||
"subtitle": "Identity management",
|
||||
"icon": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQzIDBIN0MzLjEzNDAxIDAgMCAzLjEzNDAxIDAgN1Y0M0MwIDQ2Ljg2NiAzLjEzNDAxIDUwIDcgNTBINDNDNDYuODY2IDUwIDUwIDQ2Ljg2NiA1MCA0M1Y3QzUwIDMuMTM0MDEgNDYuODY2IDAgNDMgMFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yNC40ODc4IDdDMzEuOTM4NCA3IDM4IDEzLjEzNjMgMzggMjAuNjc4N0MzOCAyMy42NDI2IDM3LjA3OSAyNi40NjMyIDM1LjMzNjIgMjguODM0MkMzMy42Mjc4IDMxLjE1OTUgMzEuMjkwMSAzMi44NDg2IDI4LjU3NTEgMzMuNzE5OEwyNy44MjQ3IDMzLjk2MUwyNi4wMzY0IDI1LjAzMTVMMjYuNTMxMSAyNC43ODkyQzI4LjE0NTkgMjMuOTk5IDI5LjE4OTYgMjIuMzE1NiAyOS4xODk2IDIwLjUwMTJDMjkuMTg5NiAxNy44NzY0IDI3LjA4MDUgMTUuNzQwOSAyNC40ODgxIDE1Ljc0MDlDMjEuODk1OCAxNS43NDA5IDE5Ljc4NiAxNy44NzY0IDE5Ljc4NiAyMC41MDEyQzE5Ljc4NiAyMi4zMTU2IDIwLjgzIDIzLjk5OSAyMi40NDQ4IDI0Ljc4OTJMMjIuOTMwMiAyNS4wMjcyTDIwLjA0OTUgNDNIMTJWN0gyNC40ODgxSDI0LjQ4NzhaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K",
|
||||
"description": "PocketID is an open-source 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "coredns"
|
||||
},
|
||||
{
|
||||
"TARGET": "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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "firewalls",
|
||||
"DOMAIN": "null"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
"IMAGE": "safebox/firewall",
|
||||
"NAME": "firewall",
|
||||
"MEMORY": "64M",
|
||||
"NETWORK": "host",
|
||||
"SCALE": "0",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/run/",
|
||||
"DEST": "/run/",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/user/config/services",
|
||||
"DEST": "/services",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/data/dns/hosts.local",
|
||||
"DEST": "/etc/dns/hosts.local",
|
||||
"TYPE": "ro"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/var/run/docker.sock",
|
||||
"DEST": "/var/run/docker.sock",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [],
|
||||
"READYNESS": [
|
||||
{
|
||||
"tcp": ""
|
||||
},
|
||||
{
|
||||
"HTTP": ""
|
||||
},
|
||||
{
|
||||
"EXEC": "/ready.sh"
|
||||
}
|
||||
],
|
||||
"ENVS": [
|
||||
{
|
||||
"CHAIN": "DOCKER-USER"
|
||||
},
|
||||
{
|
||||
"SOURCE": "smarthostbackend"
|
||||
},
|
||||
{
|
||||
"TARGET": "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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
{
|
||||
"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
@@ -1,41 +0,0 @@
|
||||
{
|
||||
"name": "roundcube",
|
||||
"fields": [
|
||||
{
|
||||
"description": "Please add IMAP HOST:",
|
||||
"key": "ROUNDCUBE_IMAP_HOST",
|
||||
"value": "",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Please add IMAP PORT:",
|
||||
"key": "ROUNDCUBE_IMAP_PORT",
|
||||
"value": "143",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Please add SMTP HOST:",
|
||||
"key": "ROUNDCUBE_SMTP_HOST",
|
||||
"value": "",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Please add SMTP PORT (587, 465, 25, etc.):",
|
||||
"key": "ROUNDCUBE_SMTP_PORT",
|
||||
"value": "25",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Please add UPLOAD_MAX_FILESIZE (default: 50M):",
|
||||
"key": "ROUNDCUBE_UPLOAD",
|
||||
"value": "50M",
|
||||
"required": "true"
|
||||
},
|
||||
{
|
||||
"description": "Please add Roundcube DOMAIN:",
|
||||
"key": "ROUNDCUBE_DOMAIN",
|
||||
"value": "",
|
||||
"required": "true"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -61,7 +61,7 @@
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/smtp/smtp.json"
|
||||
],
|
||||
"EXTRA": "null",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "true",
|
||||
"CMD": "null",
|
||||
|
||||
+43
-36
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "transmission",
|
||||
"DOMAIN": "#TRANSMISSION_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -29,7 +29,7 @@
|
||||
"PORT": "9091"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#TRANSMISSION_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "transmission",
|
||||
"DOMAIN": "#TRANSMISSION_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -78,7 +78,7 @@
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/transmission/transmission.json"
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
|
||||
+18
-12
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"transmission": {
|
||||
"USER": "#TRANSMISSION_USER",
|
||||
"PASS": "#TRANSMISSION_PASS",
|
||||
"TRANSMISSION_USER": "#TRANSMISSION_USER",
|
||||
"TRANSMISSION_PASS": "#TRANSMISSION_PASS",
|
||||
"WHITELIST": "#TRANSMISSION_WHITELIST",
|
||||
"PEERPORT": "#TRANSMISSION_PEERPORT",
|
||||
"HOST_WHITELIST": "#TRANSMISSION_HOST_WHITELIST"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "vaultwarden",
|
||||
"DOMAIN": "#VAULTWARDEN_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -29,7 +29,7 @@
|
||||
"PORT": "80"
|
||||
},
|
||||
{
|
||||
"DOMAIN": "#VAULTWARDEN_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
{
|
||||
"SMARTHOST_PROXY_PATH": "/smarthost-domains"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"main": {
|
||||
"SERVICE_NAME": "vaultwarden",
|
||||
"DOMAIN": "#VAULTWARDEN_DOMAIN"
|
||||
"DOMAIN": "#DOMAIN"
|
||||
},
|
||||
"containers": [
|
||||
{
|
||||
@@ -15,51 +15,41 @@
|
||||
"SOURCE": "USER_DATA",
|
||||
"DEST": "/etc/user/data",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "SYSTEM_LOG",
|
||||
"DEST": "/etc/system/log",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"EXTRA": "--rm",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"ENTRYPOINT": "sh -c",
|
||||
"CMD": "mkdir -p /etc/user/data/vaultwarden/data && mkdir -p /etc/user/data/vaultwarden/db && mkdir -p /etc/system/log/vaultwarden/db",
|
||||
"CMD": "mkdir -p /etc/user/data/vaultwarden/data && mkdir -p /etc/user/data/vaultwarden/db",
|
||||
"PRE_START": "null",
|
||||
"POST_START": "null"
|
||||
},
|
||||
{
|
||||
"IMAGE": "mariadb:latest",
|
||||
"IMAGE": "postgres:15-alpine",
|
||||
"UPDATE": "true",
|
||||
"NAME": "vaultwardenmysql-db",
|
||||
"NAME": "vaultwardenpostgres-db",
|
||||
"MEMORY": "256M",
|
||||
"NETWORK": "vaultwarden-net",
|
||||
"SELECTOR": "vaultwardenmysql-db",
|
||||
"SELECTOR": "vaultwardenpostgres-db",
|
||||
"VOLUMES": [
|
||||
{
|
||||
"SOURCE": "/etc/user/data/vaultwarden/db",
|
||||
"DEST": "/var/lib/mysql",
|
||||
"TYPE": "rw"
|
||||
},
|
||||
{
|
||||
"SOURCE": "/etc/system/log/vaultwarden/db",
|
||||
"DEST": "/var/lib/mysql/mysql-bin",
|
||||
"DEST": "/var/lib/postgresql/data",
|
||||
"TYPE": "rw"
|
||||
}
|
||||
],
|
||||
"PORTS": [
|
||||
{
|
||||
"SOURCE": "null",
|
||||
"DEST": "3306",
|
||||
"DEST": "5432",
|
||||
"TYPE": "tcp"
|
||||
}
|
||||
],
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/vaultwarden/vaultwarden.json"
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": "null",
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
@@ -124,7 +114,7 @@
|
||||
"ENV_FILES": [
|
||||
"/etc/user/secret/vaultwarden/vaultwarden.json"
|
||||
],
|
||||
"EXTRA": "--restart unless-stopped",
|
||||
"EXTRA": "--restart always",
|
||||
"DEPEND": [],
|
||||
"START_ON_BOOT": "false",
|
||||
"CMD": "null",
|
||||
|
||||
+38
-28
File diff suppressed because one or more lines are too long
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"vaultwardenmysql": {
|
||||
"MARIADB_DATABASE": "#MARIADB_DATABASE",
|
||||
"MARIADB_USER": "#MARIADB_USER",
|
||||
"MARIADB_PASSWORD": "#MARIADB_PASSWORD",
|
||||
"MARIADB_ROOT_PASSWORD": "#MARIADB_ROOT_PASSWORD"
|
||||
"vaultwardenpostgres": {
|
||||
"POSTGRES_DB": "#POSTGRES_DB",
|
||||
"POSTGRES_USER": "#POSTGRES_USER",
|
||||
"POSTGRES_PASSWORD": "#POSTGRES_PASSWORD",
|
||||
"POSTGRES_ROOT_PASSWORD": "#POSTGRES_ROOT_PASSWORD"
|
||||
},
|
||||
"vaultwardenapp": {
|
||||
"DATABASE_URL": "'mysql://#MARIADB_USER:#MARIADB_PASSWORD@vaultwardenmysql-db:3306/#MARIADB_DATABASE'",
|
||||
"DATABASE_URL": "'postgresql://#POSTGRES_USER:#POSTGRES_PASSWORD@vaultwardenpostgres-db:5432/#POSTGRES_DB'",
|
||||
"ADMIN_TOKEN": "#ADMIN_TOKEN",
|
||||
"VAULTWARDEN_DOMAIN": "#VAULTWARDEN_DOMAIN",
|
||||
"VAULTWARDEN_SMTP_PASSWORD": "#VAULTWARDEN_SMTP_PASSWORD"
|
||||
|
||||
Reference in New Issue
Block a user