mirror of
https://github.com/Dokploy/templates
synced 2025-06-26 18:16:07 +00:00
chore: add yaml and toml dependencies, and create script for converting YAML to TOML
- Added 'yaml' and '@iarna/toml' dependencies in package.json. - Created a new script.js file to process YAML files and convert them to TOML format. - Added template.toml files for various blueprints in the blueprints directory.
This commit is contained in:
@@ -10,6 +10,8 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"yaml":"2.7.1",
|
||||||
|
"@iarna/toml": "^2.2.5",
|
||||||
"@codemirror/autocomplete": "^6.18.6",
|
"@codemirror/autocomplete": "^6.18.6",
|
||||||
"@codemirror/lang-json": "^6.0.1",
|
"@codemirror/lang-json": "^6.0.1",
|
||||||
"@codemirror/lang-yaml": "^6.1.1",
|
"@codemirror/lang-yaml": "^6.1.1",
|
||||||
|
|||||||
41
app/pnpm-lock.yaml
generated
41
app/pnpm-lock.yaml
generated
@@ -26,6 +26,9 @@ importers:
|
|||||||
'@codemirror/view':
|
'@codemirror/view':
|
||||||
specifier: 6.29.0
|
specifier: 6.29.0
|
||||||
version: 6.29.0
|
version: 6.29.0
|
||||||
|
'@iarna/toml':
|
||||||
|
specifier: ^2.2.5
|
||||||
|
version: 2.2.5
|
||||||
'@radix-ui/react-dialog':
|
'@radix-ui/react-dialog':
|
||||||
specifier: ^1.1.6
|
specifier: ^1.1.6
|
||||||
version: 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
version: 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||||
@@ -46,7 +49,7 @@ importers:
|
|||||||
version: 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
version: 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||||
'@tailwindcss/vite':
|
'@tailwindcss/vite':
|
||||||
specifier: ^4.0.12
|
specifier: ^4.0.12
|
||||||
version: 4.0.12(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2))
|
version: 4.0.12(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1))
|
||||||
'@uiw/codemirror-theme-github':
|
'@uiw/codemirror-theme-github':
|
||||||
specifier: ^4.22.1
|
specifier: ^4.22.1
|
||||||
version: 4.23.10(@codemirror/language@6.10.8)(@codemirror/state@6.5.2)(@codemirror/view@6.29.0)
|
version: 4.23.10(@codemirror/language@6.10.8)(@codemirror/state@6.5.2)(@codemirror/view@6.29.0)
|
||||||
@@ -91,7 +94,10 @@ importers:
|
|||||||
version: 1.0.7(tailwindcss@4.0.12)
|
version: 1.0.7(tailwindcss@4.0.12)
|
||||||
vite-plugin-static-copy:
|
vite-plugin-static-copy:
|
||||||
specifier: 2.3.0
|
specifier: 2.3.0
|
||||||
version: 2.3.0(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2))
|
version: 2.3.0(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1))
|
||||||
|
yaml:
|
||||||
|
specifier: 2.7.1
|
||||||
|
version: 2.7.1
|
||||||
zustand:
|
zustand:
|
||||||
specifier: ^5.0.3
|
specifier: ^5.0.3
|
||||||
version: 5.0.3(@types/react@19.0.10)(react@19.0.0)
|
version: 5.0.3(@types/react@19.0.10)(react@19.0.0)
|
||||||
@@ -107,7 +113,7 @@ importers:
|
|||||||
version: 19.0.4(@types/react@19.0.10)
|
version: 19.0.4(@types/react@19.0.10)
|
||||||
'@vitejs/plugin-react':
|
'@vitejs/plugin-react':
|
||||||
specifier: ^4.3.4
|
specifier: ^4.3.4
|
||||||
version: 4.3.4(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2))
|
version: 4.3.4(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1))
|
||||||
globals:
|
globals:
|
||||||
specifier: ^15.15.0
|
specifier: ^15.15.0
|
||||||
version: 15.15.0
|
version: 15.15.0
|
||||||
@@ -116,7 +122,7 @@ importers:
|
|||||||
version: 5.7.3
|
version: 5.7.3
|
||||||
vite:
|
vite:
|
||||||
specifier: ^6.2.0
|
specifier: ^6.2.0
|
||||||
version: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)
|
version: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1)
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@@ -408,6 +414,9 @@ packages:
|
|||||||
'@floating-ui/utils@0.2.9':
|
'@floating-ui/utils@0.2.9':
|
||||||
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
|
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
|
||||||
|
|
||||||
|
'@iarna/toml@2.2.5':
|
||||||
|
resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
|
||||||
|
|
||||||
'@jridgewell/gen-mapping@0.3.8':
|
'@jridgewell/gen-mapping@0.3.8':
|
||||||
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
|
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
|
||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
@@ -1657,6 +1666,11 @@ packages:
|
|||||||
yallist@3.1.1:
|
yallist@3.1.1:
|
||||||
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
||||||
|
|
||||||
|
yaml@2.7.1:
|
||||||
|
resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==}
|
||||||
|
engines: {node: '>= 14'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
zustand@5.0.3:
|
zustand@5.0.3:
|
||||||
resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==}
|
resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==}
|
||||||
engines: {node: '>=12.20.0'}
|
engines: {node: '>=12.20.0'}
|
||||||
@@ -1965,6 +1979,8 @@ snapshots:
|
|||||||
|
|
||||||
'@floating-ui/utils@0.2.9': {}
|
'@floating-ui/utils@0.2.9': {}
|
||||||
|
|
||||||
|
'@iarna/toml@2.2.5': {}
|
||||||
|
|
||||||
'@jridgewell/gen-mapping@0.3.8':
|
'@jridgewell/gen-mapping@0.3.8':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/set-array': 1.2.1
|
'@jridgewell/set-array': 1.2.1
|
||||||
@@ -2581,13 +2597,13 @@ snapshots:
|
|||||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.0.12
|
'@tailwindcss/oxide-win32-arm64-msvc': 4.0.12
|
||||||
'@tailwindcss/oxide-win32-x64-msvc': 4.0.12
|
'@tailwindcss/oxide-win32-x64-msvc': 4.0.12
|
||||||
|
|
||||||
'@tailwindcss/vite@4.0.12(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2))':
|
'@tailwindcss/vite@4.0.12(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tailwindcss/node': 4.0.12
|
'@tailwindcss/node': 4.0.12
|
||||||
'@tailwindcss/oxide': 4.0.12
|
'@tailwindcss/oxide': 4.0.12
|
||||||
lightningcss: 1.29.2
|
lightningcss: 1.29.2
|
||||||
tailwindcss: 4.0.12
|
tailwindcss: 4.0.12
|
||||||
vite: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)
|
vite: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1)
|
||||||
|
|
||||||
'@types/babel__core@7.20.5':
|
'@types/babel__core@7.20.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -2665,14 +2681,14 @@ snapshots:
|
|||||||
- '@codemirror/lint'
|
- '@codemirror/lint'
|
||||||
- '@codemirror/search'
|
- '@codemirror/search'
|
||||||
|
|
||||||
'@vitejs/plugin-react@4.3.4(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2))':
|
'@vitejs/plugin-react@4.3.4(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.26.9
|
'@babel/core': 7.26.9
|
||||||
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9)
|
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9)
|
||||||
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9)
|
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9)
|
||||||
'@types/babel__core': 7.20.5
|
'@types/babel__core': 7.20.5
|
||||||
react-refresh: 0.14.2
|
react-refresh: 0.14.2
|
||||||
vite: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)
|
vite: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@@ -3087,16 +3103,16 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/react': 19.0.10
|
'@types/react': 19.0.10
|
||||||
|
|
||||||
vite-plugin-static-copy@2.3.0(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)):
|
vite-plugin-static-copy@2.3.0(vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1)):
|
||||||
dependencies:
|
dependencies:
|
||||||
chokidar: 3.6.0
|
chokidar: 3.6.0
|
||||||
fast-glob: 3.3.3
|
fast-glob: 3.3.3
|
||||||
fs-extra: 11.3.0
|
fs-extra: 11.3.0
|
||||||
p-map: 7.0.3
|
p-map: 7.0.3
|
||||||
picocolors: 1.1.1
|
picocolors: 1.1.1
|
||||||
vite: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)
|
vite: 6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1)
|
||||||
|
|
||||||
vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2):
|
vite@6.2.1(@types/node@20.17.24)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.25.1
|
esbuild: 0.25.1
|
||||||
postcss: 8.5.3
|
postcss: 8.5.3
|
||||||
@@ -3106,11 +3122,14 @@ snapshots:
|
|||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
jiti: 2.4.2
|
jiti: 2.4.2
|
||||||
lightningcss: 1.29.2
|
lightningcss: 1.29.2
|
||||||
|
yaml: 2.7.1
|
||||||
|
|
||||||
w3c-keyname@2.2.8: {}
|
w3c-keyname@2.2.8: {}
|
||||||
|
|
||||||
yallist@3.1.1: {}
|
yallist@3.1.1: {}
|
||||||
|
|
||||||
|
yaml@2.7.1: {}
|
||||||
|
|
||||||
zustand@5.0.3(@types/react@19.0.10)(react@19.0.0):
|
zustand@5.0.3(@types/react@19.0.10)(react@19.0.0):
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/react': 19.0.10
|
'@types/react': 19.0.10
|
||||||
|
|||||||
36
app/script.js
Normal file
36
app/script.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import yaml from "yaml";
|
||||||
|
import toml from "@iarna/toml";
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
import { fileURLToPath } from "url";
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
|
function convertYamlToToml(yamlContent) {
|
||||||
|
const parsedYaml = yaml.parse(yamlContent);
|
||||||
|
return toml.stringify(parsedYaml);
|
||||||
|
}
|
||||||
|
|
||||||
|
function processDirectory(dirPath) {
|
||||||
|
const files = fs.readdirSync(dirPath);
|
||||||
|
|
||||||
|
files.forEach((file) => {
|
||||||
|
const filePath = path.join(dirPath, file);
|
||||||
|
const stat = fs.statSync(filePath);
|
||||||
|
|
||||||
|
if (stat.isDirectory()) {
|
||||||
|
processDirectory(filePath);
|
||||||
|
} else if (file === "template.yml") {
|
||||||
|
console.log(`Converting ${filePath}`);
|
||||||
|
const yamlContent = fs.readFileSync(filePath, "utf8");
|
||||||
|
const tomlContent = convertYamlToToml(yamlContent);
|
||||||
|
const tomlPath = path.join(dirPath, "template.toml");
|
||||||
|
fs.writeFileSync(tomlPath, tomlContent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ruta al directorio blueprints relativa al script
|
||||||
|
const blueprintsPath = path.join(__dirname, "..", "blueprints");
|
||||||
|
processDirectory(blueprintsPath);
|
||||||
21
blueprints/activepieces/template.toml
Normal file
21
blueprints/activepieces/template.toml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
api_key = "${password:32}"
|
||||||
|
encryption_key = "${password:32}"
|
||||||
|
jwt_secret = "${password:32}"
|
||||||
|
postgres_password = "${password:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"AP_HOST=${main_domain}",
|
||||||
|
"AP_API_KEY=${api_key}",
|
||||||
|
"AP_ENCRYPTION_KEY=${encryption_key}",
|
||||||
|
"AP_JWT_SECRET=${jwt_secret}",
|
||||||
|
"AP_POSTGRES_PASSWORD=${postgres_password}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "activepieces"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/actualbudget/template.toml
Normal file
11
blueprints/actualbudget/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "actualbudget"
|
||||||
|
port = 5_006
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/alist/template.toml
Normal file
11
blueprints/alist/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "alist"
|
||||||
|
port = 5_244
|
||||||
|
host = "${main_domain}"
|
||||||
15
blueprints/answer/template.toml
Normal file
15
blueprints/answer/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
service_hash = "${hash:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"ANSWER_HOST=http://${main_domain}",
|
||||||
|
"SERVICE_HASH=${service_hash}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "answer"
|
||||||
|
port = 9_080
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/appsmith/template.toml
Normal file
11
blueprints/appsmith/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "appsmith"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
143
blueprints/appwrite/template.toml
Normal file
143
blueprints/appwrite/template.toml
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"_APP_ENV=production",
|
||||||
|
"_APP_LOCALE=en",
|
||||||
|
"_APP_OPTIONS_ABUSE=enabled",
|
||||||
|
"_APP_OPTIONS_FORCE_HTTPS=disabled",
|
||||||
|
"_APP_OPTIONS_FUNCTIONS_FORCE_HTTPS=disabled",
|
||||||
|
"_APP_OPTIONS_ROUTER_PROTECTION=disabled",
|
||||||
|
"_APP_OPENSSL_KEY_V1=your-secret-key",
|
||||||
|
"_APP_DOMAIN=${main_domain}",
|
||||||
|
"_APP_DOMAIN_FUNCTIONS=${main_domain}",
|
||||||
|
"_APP_DOMAIN_TARGET=${main_domain}",
|
||||||
|
"_APP_CONSOLE_WHITELIST_ROOT=enabled",
|
||||||
|
"_APP_CONSOLE_WHITELIST_EMAILS=",
|
||||||
|
"_APP_CONSOLE_WHITELIST_IPS=",
|
||||||
|
"_APP_CONSOLE_HOSTNAMES=",
|
||||||
|
"_APP_SYSTEM_EMAIL_NAME=Appwrite",
|
||||||
|
"_APP_SYSTEM_EMAIL_ADDRESS=noreply@appwrite.io",
|
||||||
|
"_APP_SYSTEM_TEAM_EMAIL=team@appwrite.io",
|
||||||
|
"_APP_SYSTEM_RESPONSE_FORMAT=",
|
||||||
|
"_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=certs@appwrite.io",
|
||||||
|
"_APP_EMAIL_SECURITY=",
|
||||||
|
"_APP_EMAIL_CERTIFICATES=",
|
||||||
|
"_APP_USAGE_STATS=enabled",
|
||||||
|
"_APP_LOGGING_PROVIDER=",
|
||||||
|
"_APP_LOGGING_CONFIG=",
|
||||||
|
"_APP_USAGE_AGGREGATION_INTERVAL=30",
|
||||||
|
"_APP_USAGE_TIMESERIES_INTERVAL=30",
|
||||||
|
"_APP_USAGE_DATABASE_INTERVAL=900",
|
||||||
|
"_APP_WORKER_PER_CORE=6",
|
||||||
|
"_APP_CONSOLE_SESSION_ALERTS=disabled",
|
||||||
|
"_APP_REDIS_HOST=redis",
|
||||||
|
"_APP_REDIS_PORT=6379",
|
||||||
|
"_APP_REDIS_USER=",
|
||||||
|
"_APP_REDIS_PASS=",
|
||||||
|
"_APP_DB_HOST=mariadb",
|
||||||
|
"_APP_DB_PORT=3306",
|
||||||
|
"_APP_DB_SCHEMA=appwrite",
|
||||||
|
"_APP_DB_USER=user",
|
||||||
|
"_APP_DB_PASS=password",
|
||||||
|
"_APP_DB_ROOT_PASS=rootsecretpassword",
|
||||||
|
"_APP_INFLUXDB_HOST=influxdb",
|
||||||
|
"_APP_INFLUXDB_PORT=8086",
|
||||||
|
"_APP_STATSD_HOST=telegraf",
|
||||||
|
"_APP_STATSD_PORT=8125",
|
||||||
|
"_APP_SMTP_HOST=",
|
||||||
|
"_APP_SMTP_PORT=",
|
||||||
|
"_APP_SMTP_SECURE=",
|
||||||
|
"_APP_SMTP_USERNAME=",
|
||||||
|
"_APP_SMTP_PASSWORD=",
|
||||||
|
"_APP_SMS_PROVIDER=",
|
||||||
|
"_APP_SMS_FROM=",
|
||||||
|
"_APP_STORAGE_LIMIT=30000000",
|
||||||
|
"_APP_STORAGE_PREVIEW_LIMIT=20000000",
|
||||||
|
"_APP_STORAGE_ANTIVIRUS=disabled",
|
||||||
|
"_APP_STORAGE_ANTIVIRUS_HOST=clamav",
|
||||||
|
"_APP_STORAGE_ANTIVIRUS_PORT=3310",
|
||||||
|
"_APP_STORAGE_DEVICE=local",
|
||||||
|
"_APP_STORAGE_S3_ACCESS_KEY=",
|
||||||
|
"_APP_STORAGE_S3_SECRET=",
|
||||||
|
"_APP_STORAGE_S3_REGION=us-east-1",
|
||||||
|
"_APP_STORAGE_S3_BUCKET=",
|
||||||
|
"_APP_STORAGE_DO_SPACES_ACCESS_KEY=",
|
||||||
|
"_APP_STORAGE_DO_SPACES_SECRET=",
|
||||||
|
"_APP_STORAGE_DO_SPACES_REGION=us-east-1",
|
||||||
|
"_APP_STORAGE_DO_SPACES_BUCKET=",
|
||||||
|
"_APP_STORAGE_BACKBLAZE_ACCESS_KEY=",
|
||||||
|
"_APP_STORAGE_BACKBLAZE_SECRET=",
|
||||||
|
"_APP_STORAGE_BACKBLAZE_REGION=us-west-004",
|
||||||
|
"_APP_STORAGE_BACKBLAZE_BUCKET=",
|
||||||
|
"_APP_STORAGE_LINODE_ACCESS_KEY=",
|
||||||
|
"_APP_STORAGE_LINODE_SECRET=",
|
||||||
|
"_APP_STORAGE_LINODE_REGION=eu-central-1",
|
||||||
|
"_APP_STORAGE_LINODE_BUCKET=",
|
||||||
|
"_APP_STORAGE_WASABI_ACCESS_KEY=",
|
||||||
|
"_APP_STORAGE_WASABI_SECRET=",
|
||||||
|
"_APP_STORAGE_WASABI_REGION=eu-central-1",
|
||||||
|
"_APP_STORAGE_WASABI_BUCKET=",
|
||||||
|
"_APP_FUNCTIONS_SIZE_LIMIT=30000000",
|
||||||
|
"_APP_FUNCTIONS_BUILD_SIZE_LIMIT=2000000000",
|
||||||
|
"_APP_FUNCTIONS_TIMEOUT=900",
|
||||||
|
"_APP_FUNCTIONS_BUILD_TIMEOUT=900",
|
||||||
|
"_APP_FUNCTIONS_CONTAINERS=10",
|
||||||
|
"_APP_FUNCTIONS_CPUS=0",
|
||||||
|
"_APP_FUNCTIONS_MEMORY=0",
|
||||||
|
"_APP_FUNCTIONS_MEMORY_SWAP=0",
|
||||||
|
"_APP_FUNCTIONS_RUNTIMES=node-16.0,php-8.0,python-3.9,ruby-3.0",
|
||||||
|
"_APP_EXECUTOR_SECRET=your-secret-key",
|
||||||
|
"_APP_EXECUTOR_HOST=http://exc1/v1",
|
||||||
|
"_APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes",
|
||||||
|
"_APP_FUNCTIONS_ENVS=node-16.0,php-7.4,python-3.9,ruby-3.0",
|
||||||
|
"_APP_FUNCTIONS_INACTIVE_THRESHOLD=60",
|
||||||
|
"DOCKERHUB_PULL_USERNAME=",
|
||||||
|
"DOCKERHUB_PULL_PASSWORD=",
|
||||||
|
"DOCKERHUB_PULL_EMAIL=",
|
||||||
|
"OPEN_RUNTIMES_NETWORK=appwrite_runtimes",
|
||||||
|
"_APP_FUNCTIONS_RUNTIMES_NETWORK=runtimes",
|
||||||
|
"_APP_DOCKER_HUB_USERNAME=",
|
||||||
|
"_APP_DOCKER_HUB_PASSWORD=",
|
||||||
|
"_APP_FUNCTIONS_MAINTENANCE_INTERVAL=3600",
|
||||||
|
"_APP_VCS_GITHUB_APP_NAME=",
|
||||||
|
"_APP_VCS_GITHUB_PRIVATE_KEY=",
|
||||||
|
"_APP_VCS_GITHUB_APP_ID=",
|
||||||
|
"_APP_VCS_GITHUB_CLIENT_ID=",
|
||||||
|
"_APP_VCS_GITHUB_CLIENT_SECRET=",
|
||||||
|
"_APP_VCS_GITHUB_WEBHOOK_SECRET=",
|
||||||
|
"_APP_MAINTENANCE_INTERVAL=86400",
|
||||||
|
"_APP_MAINTENANCE_DELAY=0",
|
||||||
|
"_APP_MAINTENANCE_RETENTION_CACHE=2592000",
|
||||||
|
"_APP_MAINTENANCE_RETENTION_EXECUTION=1209600",
|
||||||
|
"_APP_MAINTENANCE_RETENTION_AUDIT=1209600",
|
||||||
|
"_APP_MAINTENANCE_RETENTION_ABUSE=86400",
|
||||||
|
"_APP_MAINTENANCE_RETENTION_USAGE_HOURLY=8640000",
|
||||||
|
"_APP_MAINTENANCE_RETENTION_SCHEDULES=86400",
|
||||||
|
"_APP_GRAPHQL_MAX_BATCH_SIZE=10",
|
||||||
|
"_APP_GRAPHQL_MAX_COMPLEXITY=250",
|
||||||
|
"_APP_GRAPHQL_MAX_DEPTH=3",
|
||||||
|
"_APP_MIGRATIONS_FIREBASE_CLIENT_ID=",
|
||||||
|
"_APP_MIGRATIONS_FIREBASE_CLIENT_SECRET=",
|
||||||
|
"_APP_ASSISTANT_OPENAI_API_KEY="
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "appwrite"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
path = "/"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "appwrite-console"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
path = "/console"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "appwrite-realtime"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
path = "/v1/realtime"
|
||||||
12
blueprints/aptabase/template.toml
Normal file
12
blueprints/aptabase/template.toml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
auth_secret = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "APTABASE_HOST=${main_domain}", "AUTH_SECRET=${auth_secret}" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "aptabase"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/baserow/template.toml
Normal file
11
blueprints/baserow/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "BASEROW_HOST=${main_domain}" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "baserow"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
18
blueprints/blender/template.toml
Normal file
18
blueprints/blender/template.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"PUID=1000",
|
||||||
|
"PGID=1000",
|
||||||
|
"TZ=Etc/UTC",
|
||||||
|
"SUBFOLDER=/",
|
||||||
|
"NVIDIA_VISIBLE_DEVICES=all",
|
||||||
|
"NVIDIA_DRIVER_CAPABILITIES=all"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "blender"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
15
blueprints/browserless/template.toml
Normal file
15
blueprints/browserless/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
browserless_token = "${password:16}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"BROWERLESS_HOST=${main_domain}",
|
||||||
|
"BROWSERLESS_TOKEN=${browserless_token}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "browserless"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
29
blueprints/budibase/template.toml
Normal file
29
blueprints/budibase/template.toml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
api_key = "${password:32}"
|
||||||
|
encryption_key = "${password:32}"
|
||||||
|
jwt_secret = "${password:32}"
|
||||||
|
couchdb_password = "${password:32}"
|
||||||
|
redis_password = "${password:32}"
|
||||||
|
minio_access_key = "${password:32}"
|
||||||
|
minio_secret_key = "${password:32}"
|
||||||
|
watchtower_password = "${password:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"BB_HOST=${main_domain}",
|
||||||
|
"BB_INTERNAL_API_KEY=${api_key}",
|
||||||
|
"BB_API_ENCRYPTION_KEY=${encryption_key}",
|
||||||
|
"BB_JWT_SECRET=${jwt_secret}",
|
||||||
|
"BB_COUCHDB_PASSWORD=${couchdb_password}",
|
||||||
|
"BB_REDIS_PASSWORD=${redis_password}",
|
||||||
|
"BB_WATCHTOWER_PASSWORD=${watchtower_password}",
|
||||||
|
"BB_MINIO_ACCESS_KEY=${minio_access_key}",
|
||||||
|
"BB_MINIO_SECRET_KEY=${minio_secret_key}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "proxy"
|
||||||
|
port = 10_000
|
||||||
|
host = "${main_domain}"
|
||||||
17
blueprints/calcom/template.toml
Normal file
17
blueprints/calcom/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
calcom_encryption_key = "${base64:32}"
|
||||||
|
nextauth_secret = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"CALCOM_HOST=${main_domain}",
|
||||||
|
"NEXTAUTH_SECRET=${nextauth_secret}",
|
||||||
|
"CALENDSO_ENCRYPTION_KEY=${calcom_encryption_key}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "calcom"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
30
blueprints/chatwoot/template.toml
Normal file
30
blueprints/chatwoot/template.toml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_key_base = "${base64:64}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"FRONTEND_URL=http://${main_domain}",
|
||||||
|
"SECRET_KEY_BASE=${secret_key_base}",
|
||||||
|
"RAILS_ENV=production",
|
||||||
|
"NODE_ENV=production",
|
||||||
|
"INSTALLATION_ENV=docker",
|
||||||
|
"RAILS_LOG_TO_STDOUT=true",
|
||||||
|
"LOG_LEVEL=info",
|
||||||
|
"DEFAULT_LOCALE=en",
|
||||||
|
"POSTGRES_HOST=chatwoot-postgres",
|
||||||
|
"POSTGRES_PORT=5432",
|
||||||
|
"POSTGRES_DATABASE=chatwoot",
|
||||||
|
"POSTGRES_USERNAME=postgres",
|
||||||
|
"POSTGRES_PASSWORD=${postgres_password}",
|
||||||
|
"REDIS_URL=redis://chatwoot-redis:6379",
|
||||||
|
"ENABLE_ACCOUNT_SIGNUP=false",
|
||||||
|
"ACTIVE_STORAGE_SERVICE=local"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "chatwoot-rails"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/checkmate/template.toml
Normal file
11
blueprints/checkmate/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "DOMAIN=${main_domain}" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "client"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
6
blueprints/cloudflared/template.toml
Normal file
6
blueprints/cloudflared/template.toml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
variables = { }
|
||||||
|
|
||||||
|
[config]
|
||||||
|
domains = [ ]
|
||||||
|
env = [ "CLOUDFLARE_TUNNEL_TOKEN=\"<INSERT TOKEN>\"" ]
|
||||||
|
mounts = [ ]
|
||||||
18
blueprints/coder/template.toml
Normal file
18
blueprints/coder/template.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"CODER_ACCESS_URL=",
|
||||||
|
"CODER_HTTP_ADDRESS=0.0.0.0:7080",
|
||||||
|
"POSTGRES_DB=coder",
|
||||||
|
"POSTGRES_USER=coder",
|
||||||
|
"POSTGRES_PASSWORD=${postgres_password}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "coder"
|
||||||
|
port = 7_080
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/conduit/template.toml
Normal file
11
blueprints/conduit/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "MATRIX_SUBDOMAIN=${main_domain}" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "homeserver"
|
||||||
|
port = 6_167
|
||||||
|
host = "${main_domain}"
|
||||||
15
blueprints/conduwuit/template.toml
Normal file
15
blueprints/conduwuit/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
registration_token = "${password:20}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"CONDUWUIT_SERVER_NAME=${main_domain}",
|
||||||
|
"CONDUWUIT_REGISTRATION_TOKEN=${registration_token}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "homeserver"
|
||||||
|
port = 6_167
|
||||||
|
host = "${main_domain}"
|
||||||
27
blueprints/convex/template.toml
Normal file
27
blueprints/convex/template.toml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[variables]
|
||||||
|
dashboard_domain = "${domain}"
|
||||||
|
backend_domain = "${domain}"
|
||||||
|
actions_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"NEXT_PUBLIC_DEPLOYMENT_URL=http://${backend_domain}",
|
||||||
|
"CONVEX_CLOUD_ORIGIN=http://${backend_domain}",
|
||||||
|
"CONVEX_SITE_ORIGIN=http://${actions_domain}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "dashboard"
|
||||||
|
port = 6_791
|
||||||
|
host = "${dashboard_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "backend"
|
||||||
|
port = 3_210
|
||||||
|
host = "${backend_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "backend"
|
||||||
|
port = 3_211
|
||||||
|
host = "${actions_domain}"
|
||||||
13
blueprints/couchdb/template.toml
Normal file
13
blueprints/couchdb/template.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
username = "${password:16}"
|
||||||
|
password = "${password:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "COUCHDB_USER=${username}", "COUCHDB_PASSWORD=${password}" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "couchdb"
|
||||||
|
port = 5_984
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/datalens/template.toml
Normal file
11
blueprints/datalens/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "HC=1" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "datalens"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
16
blueprints/directus/template.toml
Normal file
16
blueprints/directus/template.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
directus_secret = "${base64:64}"
|
||||||
|
database_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"DATABASE_PASSWORD=${database_password}",
|
||||||
|
"DIRECTUS_SECRET=${directus_secret}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "directus"
|
||||||
|
port = 8_055
|
||||||
|
host = "${main_domain}"
|
||||||
27
blueprints/discord-tickets/template.toml
Normal file
27
blueprints/discord-tickets/template.toml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
mysql_password = "${password}"
|
||||||
|
mysql_root_password = "${password}"
|
||||||
|
mysql_user = "tickets"
|
||||||
|
mysql_database = "tickets"
|
||||||
|
encryption_key = "${password:48}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"TICKETS_HOST=${main_domain}",
|
||||||
|
"MYSQL_DATABASE=${mysql_database}",
|
||||||
|
"MYSQL_PASSWORD=${mysql_password}",
|
||||||
|
"MYSQL_ROOT_PASSWORD=${mysql_root_password}",
|
||||||
|
"MYSQL_USER=${mysql_user}",
|
||||||
|
"ENCRYPTION_KEY=${encryption_key}",
|
||||||
|
"# Follow the guide at: https://discordtickets.app/self-hosting/installation/docker/#creating-the-discord-application",
|
||||||
|
"DISCORD_SECRET=",
|
||||||
|
"DISCORD_TOKEN=",
|
||||||
|
"SUPER_USERS=YOUR_DISCORD_USER_ID"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "tickets-app"
|
||||||
|
port = 8_169
|
||||||
|
host = "${main_domain}"
|
||||||
17
blueprints/discourse/template.toml
Normal file
17
blueprints/discourse/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
redis_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"DISCOURSE_HOST=${main_domain}",
|
||||||
|
"POSTGRES_PASSWORD=${postgres_password}",
|
||||||
|
"REDIS_PASSWORD=${redis_password}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "discourse-app"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
19
blueprints/docmost/template.toml
Normal file
19
blueprints/docmost/template.toml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
app_secret = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"POSTGRES_DB=docmost",
|
||||||
|
"POSTGRES_USER=docmost",
|
||||||
|
"POSTGRES_PASSWORD=${postgres_password}",
|
||||||
|
"APP_URL=http://${main_domain}:3000",
|
||||||
|
"APP_SECRET=${app_secret}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "docmost"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
20
blueprints/documenso/template.toml
Normal file
20
blueprints/documenso/template.toml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
nextauth_secret = "${base64:32}"
|
||||||
|
encryption_key = "${password:32}"
|
||||||
|
secondary_encryption_key = "${password:64}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"DOCUMENSO_HOST=${main_domain}",
|
||||||
|
"DOCUMENSO_PORT=3000",
|
||||||
|
"NEXTAUTH_SECRET=${nextauth_secret}",
|
||||||
|
"NEXT_PRIVATE_ENCRYPTION_KEY=${encryption_key}",
|
||||||
|
"NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=${secondary_encryption_key}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "documenso"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
21
blueprints/doublezero/template.toml
Normal file
21
blueprints/doublezero/template.toml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_key_base = "${base64:64}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"DOUBLEZERO_HOST=${main_domain}",
|
||||||
|
"DOUBLEZERO_PORT=4000",
|
||||||
|
"SECRET_KEY_BASE=${secret_key_base}",
|
||||||
|
"AWS_ACCESS_KEY_ID=your-aws-access-key",
|
||||||
|
"AWS_SECRET_ACCESS_KEY=your-aws-secret-key",
|
||||||
|
"AWS_REGION=your-aws-region",
|
||||||
|
"SQS_URL=your-aws-sqs-url",
|
||||||
|
"SYSTEM_EMAIL="
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "doublezero"
|
||||||
|
port = 4_000
|
||||||
|
host = "${main_domain}"
|
||||||
15
blueprints/drawio/template.toml
Normal file
15
blueprints/drawio/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"DRAWIO_HOST=${main_domain}",
|
||||||
|
"DRAWIO_BASE_URL=https://${main_domain}",
|
||||||
|
"DRAWIO_SERVER_URL=https://${main_domain}/"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "drawio"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
17
blueprints/elastic-search/template.toml
Normal file
17
blueprints/elastic-search/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
api_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "kibana"
|
||||||
|
port = 5_601
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "elasticsearch"
|
||||||
|
port = 9_200
|
||||||
|
host = "${api_domain}"
|
||||||
27
blueprints/erpnext/template.toml
Normal file
27
blueprints/erpnext/template.toml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_root_password = "${password:32}"
|
||||||
|
admin_password = "${password:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"SITE_NAME=${main_domain}",
|
||||||
|
"ADMIN_PASSWORD=${admin_password}",
|
||||||
|
"DB_ROOT_PASSWORD=${db_root_password}",
|
||||||
|
"MIGRATE=1",
|
||||||
|
"ENABLE_DB=1",
|
||||||
|
"DB_HOST=db",
|
||||||
|
"CREATE_SITE=1",
|
||||||
|
"CONFIGURE=1",
|
||||||
|
"REGENERATE_APPS_TXT=1",
|
||||||
|
"INSTALL_APP_ARGS=--install-app erpnext",
|
||||||
|
"IMAGE_NAME=docker.io/frappe/erpnext",
|
||||||
|
"VERSION=version-15",
|
||||||
|
"FRAPPE_SITE_NAME_HEADER="
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "frontend"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
40
blueprints/evolutionapi/template.toml
Normal file
40
blueprints/evolutionapi/template.toml
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
api_key = "${base64:64}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"SERVER_URL=https://${main_domain}",
|
||||||
|
"AUTHENTICATION_TYPE=apikey",
|
||||||
|
"AUTHENTICATION_API_KEY=${api_key}",
|
||||||
|
"AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true",
|
||||||
|
"LANGUAGE=en",
|
||||||
|
"CONFIG_SESSION_PHONE_CLIENT=Evolution API",
|
||||||
|
"CONFIG_SESSION_PHONE_NAME=Chrome",
|
||||||
|
"TELEMETRY=false",
|
||||||
|
"TELEMETRY_URL=",
|
||||||
|
"POSTGRES_DATABASE=evolution",
|
||||||
|
"POSTGRES_USERNAME=postgresql",
|
||||||
|
"POSTGRES_PASSWORD=${postgres_password}",
|
||||||
|
"DATABASE_ENABLED=true",
|
||||||
|
"DATABASE_PROVIDER=postgresql",
|
||||||
|
"DATABASE_CONNECTION_URI=postgres://postgresql:${postgres_password}@evolution-postgres:5432/evolution",
|
||||||
|
"DATABASE_SAVE_DATA_INSTANCE=true",
|
||||||
|
"DATABASE_SAVE_DATA_NEW_MESSAGE=true",
|
||||||
|
"DATABASE_SAVE_MESSAGE_UPDATE=true",
|
||||||
|
"DATABASE_SAVE_DATA_CONTACTS=true",
|
||||||
|
"DATABASE_SAVE_DATA_CHATS=true",
|
||||||
|
"DATABASE_SAVE_DATA_LABELS=true",
|
||||||
|
"DATABASE_SAVE_DATA_HISTORIC=true",
|
||||||
|
"CACHE_REDIS_ENABLED=true",
|
||||||
|
"CACHE_REDIS_URI=redis://evolution-redis:6379",
|
||||||
|
"CACHE_REDIS_PREFIX_KEY=evolution",
|
||||||
|
"CACHE_REDIS_SAVE_INSTANCES=true"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "evolution-api"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/excalidraw/template.toml
Normal file
11
blueprints/excalidraw/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "excalidraw"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/filebrowser/template.toml
Normal file
11
blueprints/filebrowser/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "FB_BASEURL=/filebrowser" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "filebrowser"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
20
blueprints/formbricks/template.toml
Normal file
20
blueprints/formbricks/template.toml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_base = "${base64:64}"
|
||||||
|
encryption_key = "${base64:48}"
|
||||||
|
cron_secret = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"WEBAPP_URL=http://${main_domain}",
|
||||||
|
"NEXTAUTH_URL=http://${main_domain}",
|
||||||
|
"NEXTAUTH_SECRET=${secret_base}",
|
||||||
|
"ENCRYPTION_KEY=${encryption_key}",
|
||||||
|
"CRON_SECRET=${cron_secret}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "formbricks"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
27
blueprints/frappe-hr/template.toml
Normal file
27
blueprints/frappe-hr/template.toml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_root_password = "${password:32}"
|
||||||
|
admin_password = "${password:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"SITE_NAME=${main_domain}",
|
||||||
|
"ADMIN_PASSWORD=${admin_password}",
|
||||||
|
"DB_ROOT_PASSWORD=${db_root_password}",
|
||||||
|
"MIGRATE=1",
|
||||||
|
"ENABLE_DB=1",
|
||||||
|
"DB_HOST=db",
|
||||||
|
"CREATE_SITE=1",
|
||||||
|
"CONFIGURE=1",
|
||||||
|
"REGENERATE_APPS_TXT=1",
|
||||||
|
"INSTALL_APP_ARGS=--install-app hrms",
|
||||||
|
"IMAGE_NAME=ghcr.io/frappe/hrms",
|
||||||
|
"VERSION=version-15",
|
||||||
|
"FRAPPE_SITE_NAME_HEADER="
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "frontend"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/ghost/template.toml
Normal file
11
blueprints/ghost/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "GHOST_HOST=${main_domain}" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "ghost"
|
||||||
|
port = 2_368
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/gitea/template.toml
Normal file
11
blueprints/gitea/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "USER_UID=1000", "USER_GID=1000" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "gitea"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
94
blueprints/glance/template.toml
Normal file
94
blueprints/glance/template.toml
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "glance"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/app/config/glance.yml"
|
||||||
|
content = """
|
||||||
|
branding:
|
||||||
|
hide-footer: true
|
||||||
|
logo-text: P
|
||||||
|
|
||||||
|
pages:
|
||||||
|
- name: Home
|
||||||
|
columns:
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: calendar
|
||||||
|
|
||||||
|
- type: releases
|
||||||
|
show-source-icon: true
|
||||||
|
repositories:
|
||||||
|
- Dokploy/dokploy
|
||||||
|
- n8n-io/n8n
|
||||||
|
- Budibase/budibase
|
||||||
|
- home-assistant/core
|
||||||
|
- tidbyt/pixlet
|
||||||
|
|
||||||
|
- type: twitch-channels
|
||||||
|
channels:
|
||||||
|
- nmplol
|
||||||
|
- extraemily
|
||||||
|
- qtcinderella
|
||||||
|
- ludwig
|
||||||
|
- timthetatman
|
||||||
|
- mizkif
|
||||||
|
|
||||||
|
- size: full
|
||||||
|
widgets:
|
||||||
|
- type: hacker-news
|
||||||
|
|
||||||
|
- type: videos
|
||||||
|
style: grid-cards
|
||||||
|
channels:
|
||||||
|
- UC3GzdWYwUYI1ACxuP9Nm-eg
|
||||||
|
- UCGbg3DjQdcqWwqOLHpYHXIg
|
||||||
|
- UC24RSoLcjiNZbQcT54j5l7Q
|
||||||
|
limit: 3
|
||||||
|
|
||||||
|
- type: rss
|
||||||
|
limit: 10
|
||||||
|
collapse-after: 3
|
||||||
|
cache: 3h
|
||||||
|
feeds:
|
||||||
|
- url: https://daringfireball.net/feeds/main
|
||||||
|
title: Daring Fireball
|
||||||
|
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: weather
|
||||||
|
location: Gansevoort, New York, United States
|
||||||
|
show-area-name: false
|
||||||
|
units: imperial
|
||||||
|
hour-format: 12h
|
||||||
|
|
||||||
|
- type: markets
|
||||||
|
markets:
|
||||||
|
- symbol: SPY
|
||||||
|
name: S&P 500
|
||||||
|
- symbol: VOO
|
||||||
|
name: Vanguard
|
||||||
|
- symbol: BTC-USD
|
||||||
|
name: Bitcoin
|
||||||
|
- symbol: ETH-USD
|
||||||
|
name: Etherium
|
||||||
|
- symbol: NVDA
|
||||||
|
name: NVIDIA
|
||||||
|
- symbol: AAPL
|
||||||
|
name: Apple
|
||||||
|
- symbol: MSFT
|
||||||
|
name: Microsoft
|
||||||
|
- symbol: GOOGL
|
||||||
|
name: Google
|
||||||
|
- symbol: AMD
|
||||||
|
name: AMD
|
||||||
|
- symbol: TSLA
|
||||||
|
name: Tesla
|
||||||
|
"""
|
||||||
16
blueprints/glitchtip/template.toml
Normal file
16
blueprints/glitchtip/template.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_key = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"GLITCHTIP_HOST=${main_domain}",
|
||||||
|
"GLITCHTIP_PORT=8000",
|
||||||
|
"SECRET_KEY=${secret_key}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "web"
|
||||||
|
port = 8_000
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/glpi/template.toml
Normal file
11
blueprints/glpi/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "glpi-web"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
16
blueprints/gotenberg/template.toml
Normal file
16
blueprints/gotenberg/template.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
username = "gotenberg"
|
||||||
|
password = "changethis"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"GOTENBERG_API_BASIC_AUTH_USERNAME=${username}",
|
||||||
|
"GOTENBERG_API_BASIC_AUTH_PASSWORD=${password}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "gotenberg"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/grafana/template.toml
Normal file
11
blueprints/grafana/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "grafana"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
17
blueprints/heyform/template.toml
Normal file
17
blueprints/heyform/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
session_key = "${base64:64}"
|
||||||
|
form_encryption_key = "${base64:64}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"APP_HOMEPAGE_URL=http://${main_domain}",
|
||||||
|
"SESSION_KEY=${session_key}",
|
||||||
|
"FORM_ENCRYPTION_KEY=${form_encryption_key}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "heyform"
|
||||||
|
port = 8_000
|
||||||
|
host = "${main_domain}"
|
||||||
27
blueprints/hi-events/template.toml
Normal file
27
blueprints/hi-events/template.toml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
jwt_secret = "${password}"
|
||||||
|
app_key = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"DOMAIN=${main_domain}",
|
||||||
|
"POSTGRES_DB=hievents",
|
||||||
|
"POSTGRES_USER=hievents",
|
||||||
|
"POSTGRES_PASSWORD=${postgres_password}",
|
||||||
|
"VITE_STRIPE_PUBLISHABLE_KEY=",
|
||||||
|
"APP_KEY=${app_key}",
|
||||||
|
"JWT_SECRET=${jwt_secret}",
|
||||||
|
"MAIL_MAILER=",
|
||||||
|
"MAIL_HOST=",
|
||||||
|
"MAIL_PORT=",
|
||||||
|
"MAIL_FROM_ADDRESS=",
|
||||||
|
"MAIL_FROM_NAME="
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "all-in-one"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
18
blueprints/hoarder/template.toml
Normal file
18
blueprints/hoarder/template.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
next_secret = "${base64:32}"
|
||||||
|
meili_master_key = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"NEXTAUTH_SECRET=${next_secret}",
|
||||||
|
"MEILI_MASTER_KEY=${meili_master_key}",
|
||||||
|
"NEXTAUTH_URL=http://${main_domain}"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "web"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
12
blueprints/homarr/template.toml
Normal file
12
blueprints/homarr/template.toml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_key = "${password:64}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ "SECRET_ENCRYPTION_KEY=${secret_key}" ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "homarr"
|
||||||
|
port = 7_575
|
||||||
|
host = "${main_domain}"
|
||||||
106
blueprints/huly/template.toml
Normal file
106
blueprints/huly/template.toml
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
huly_secret = "${base64:64}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"HULY_VERSION=v0.6.468",
|
||||||
|
"DOCKER_NAME=huly",
|
||||||
|
"HOST_ADDRESS=${main_domain}",
|
||||||
|
"SECURE=",
|
||||||
|
"HTTP_PORT=80",
|
||||||
|
"HTTP_BIND=",
|
||||||
|
"TITLE=Huly",
|
||||||
|
"DEFAULT_LANGUAGE=en",
|
||||||
|
"LAST_NAME_FIRST=true",
|
||||||
|
"SECRET=${huly_secret}"
|
||||||
|
]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "nginx"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/nginx/.huly.nginx"
|
||||||
|
content = """
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _;
|
||||||
|
location / {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_pass http://front:8080;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /_accounts {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
rewrite ^/_accounts(/.*)$ $1 break;
|
||||||
|
proxy_pass http://account:3000/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /_collaborator {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
rewrite ^/_collaborator(/.*)$ $1 break;
|
||||||
|
proxy_pass http://collaborator:3078/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /_transactor {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
rewrite ^/_transactor(/.*)$ $1 break;
|
||||||
|
proxy_pass http://transactor:3333/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^/eyJ {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_pass http://transactor:3333;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /_rekoni {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
rewrite ^/_rekoni(/.*)$ $1 break;
|
||||||
|
proxy_pass http://rekoni:4004/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /_stats {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
|
||||||
|
rewrite ^/_stats(/.*)$ $1 break;
|
||||||
|
proxy_pass http://stats:4900/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
26
blueprints/immich/template.toml
Normal file
26
blueprints/immich/template.toml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_password = "${password}"
|
||||||
|
db_user = "immich"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"IMMICH_HOST=${main_domain}",
|
||||||
|
"SERVER_URL=https://${main_domain}",
|
||||||
|
"FRONT_BASE_URL=https://${main_domain}",
|
||||||
|
"DB_HOSTNAME=immich-database",
|
||||||
|
"DB_PORT=5432",
|
||||||
|
"DB_USERNAME=${db_user}",
|
||||||
|
"DB_PASSWORD=${db_password}",
|
||||||
|
"DB_DATABASE_NAME=immich",
|
||||||
|
"REDIS_HOSTNAME=immich-redis",
|
||||||
|
"REDIS_PORT=6379",
|
||||||
|
"REDIS_DBINDEX=0",
|
||||||
|
"TZ=UTC"
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "immich-server"
|
||||||
|
port = 2_283
|
||||||
|
host = "${main_domain}"
|
||||||
58
blueprints/infisical/template.toml
Normal file
58
blueprints/infisical/template.toml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
postgres_user = "infisical"
|
||||||
|
postgres_db = "infisical"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [
|
||||||
|
"ENCRYPTION_KEY=6c1fe4e407b8911c104518103505b218",
|
||||||
|
"AUTH_SECRET=5lrMXKKWCVocS/uerPsl7V+TX/aaUaI7iDkgl3tSmLE=",
|
||||||
|
"POSTGRES_PASSWORD=${postgres_password}",
|
||||||
|
"POSTGRES_USER=${postgres_user}",
|
||||||
|
"POSTGRES_DB=${postgres_db}",
|
||||||
|
"SITE_URL=http://${main_domain}:8080",
|
||||||
|
"SMTP_HOST=",
|
||||||
|
"SMTP_PORT=",
|
||||||
|
"SMTP_NAME=",
|
||||||
|
"SMTP_USERNAME=",
|
||||||
|
"SMTP_PASSWORD=",
|
||||||
|
"CLIENT_ID_HEROKU=",
|
||||||
|
"CLIENT_ID_VERCEL=",
|
||||||
|
"CLIENT_ID_NETLIFY=",
|
||||||
|
"CLIENT_ID_GITHUB=",
|
||||||
|
"CLIENT_ID_GITHUB_APP=",
|
||||||
|
"CLIENT_SLUG_GITHUB_APP=",
|
||||||
|
"CLIENT_ID_GITLAB=",
|
||||||
|
"CLIENT_ID_BITBUCKET=",
|
||||||
|
"CLIENT_SECRET_HEROKU=",
|
||||||
|
"CLIENT_SECRET_VERCEL=",
|
||||||
|
"CLIENT_SECRET_NETLIFY=",
|
||||||
|
"CLIENT_SECRET_GITHUB=",
|
||||||
|
"CLIENT_SECRET_GITHUB_APP=",
|
||||||
|
"CLIENT_SECRET_GITLAB=",
|
||||||
|
"CLIENT_SECRET_BITBUCKET=",
|
||||||
|
"CLIENT_SLUG_VERCEL=",
|
||||||
|
"CLIENT_PRIVATE_KEY_GITHUB_APP=",
|
||||||
|
"CLIENT_APP_ID_GITHUB_APP=",
|
||||||
|
"SENTRY_DSN=",
|
||||||
|
"POSTHOG_HOST=",
|
||||||
|
"POSTHOG_PROJECT_API_KEY=",
|
||||||
|
"CLIENT_ID_GOOGLE_LOGIN=",
|
||||||
|
"CLIENT_SECRET_GOOGLE_LOGIN=",
|
||||||
|
"CLIENT_ID_GITHUB_LOGIN=",
|
||||||
|
"CLIENT_SECRET_GITHUB_LOGIN=",
|
||||||
|
"CLIENT_ID_GITLAB_LOGIN=",
|
||||||
|
"CLIENT_SECRET_GITLAB_LOGIN=",
|
||||||
|
"CAPTCHA_SECRET=",
|
||||||
|
"NEXT_PUBLIC_CAPTCHA_SITE_KEY=",
|
||||||
|
"PLAIN_API_KEY=",
|
||||||
|
"PLAIN_WISH_LABEL_IDS=",
|
||||||
|
"SSL_CLIENT_CERTIFICATE_HEADER_KEY="
|
||||||
|
]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "backend"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/influxdb/template.toml
Normal file
11
blueprints/influxdb/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "influxdb"
|
||||||
|
port = 8_086
|
||||||
|
host = "${main_domain}"
|
||||||
19
blueprints/invoiceshelf/template.toml
Normal file
19
blueprints/invoiceshelf/template.toml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_password = "${password}"
|
||||||
|
db_username = "invoiceshelf"
|
||||||
|
db_database = "invoiceshelf"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "invoiceshelf-app"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
INVOICESHELF_HOST = "${main_domain}"
|
||||||
|
DB_PASSWORD = "${db_password}"
|
||||||
|
DB_USERNAME = "${db_username}"
|
||||||
|
DB_DATABASE = "${db_database}"
|
||||||
11
blueprints/it-tools/template.toml
Normal file
11
blueprints/it-tools/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "it-tools"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
13
blueprints/jellyfin/template.toml
Normal file
13
blueprints/jellyfin/template.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "jellyfin"
|
||||||
|
port = 8_096
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
JELLYFIN_HOST = "${main_domain}"
|
||||||
22
blueprints/kimai/template.toml
Normal file
22
blueprints/kimai/template.toml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
admin_password = "${password:32}"
|
||||||
|
mysql_password = "${password:32}"
|
||||||
|
mysql_root_password = "${password:32}"
|
||||||
|
app_secret = "${password:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "app"
|
||||||
|
port = 8_001
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
KI_HOST = "${main_domain}"
|
||||||
|
KI_ADMINMAIL = "admin@kimai.local"
|
||||||
|
KI_ADMINPASS = "${admin_password}"
|
||||||
|
KI_MYSQL_ROOT_PASSWORD = "${mysql_root_password}"
|
||||||
|
KI_MYSQL_PASSWORD = "${mysql_password}"
|
||||||
|
KI_APP_SECRET = "${app_secret}"
|
||||||
16
blueprints/langflow/template.toml
Normal file
16
blueprints/langflow/template.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_password = "${password}"
|
||||||
|
db_username = "langflow"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "langflow"
|
||||||
|
port = 7_860
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
DB_PASSWORD = "${db_password}"
|
||||||
|
DB_USERNAME = "${db_username}"
|
||||||
17
blueprints/linkwarden/template.toml
Normal file
17
blueprints/linkwarden/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
next_secret = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "linkwarden"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
POSTGRES_PASSWORD = "${postgres_password}"
|
||||||
|
NEXTAUTH_SECRET = "${next_secret}"
|
||||||
|
NEXTAUTH_URL = "http://${main_domain}/api/v1/auth"
|
||||||
29
blueprints/listmonk/template.toml
Normal file
29
blueprints/listmonk/template.toml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "app"
|
||||||
|
port = 9_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "config.toml"
|
||||||
|
content = """
|
||||||
|
[app]
|
||||||
|
address = "0.0.0.0:9000"
|
||||||
|
|
||||||
|
[db]
|
||||||
|
host = "db"
|
||||||
|
port = 5432
|
||||||
|
user = "listmonk"
|
||||||
|
password = "listmonk"
|
||||||
|
database = "listmonk"
|
||||||
|
|
||||||
|
ssl_mode = "disable"
|
||||||
|
max_open = 25
|
||||||
|
max_idle = 25
|
||||||
|
max_lifetime = "300s"
|
||||||
|
|
||||||
|
params = ""
|
||||||
|
"""
|
||||||
11
blueprints/lobe-chat/template.toml
Normal file
11
blueprints/lobe-chat/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "lobe-chat"
|
||||||
|
port = 3_210
|
||||||
|
host = "${main_domain}"
|
||||||
22
blueprints/logto/template.toml
Normal file
22
blueprints/logto/template.toml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
admin_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "app"
|
||||||
|
port = 3_001
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "app"
|
||||||
|
port = 3_002
|
||||||
|
host = "${admin_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
LOGTO_ENDPOINT = "http://${admin_domain}"
|
||||||
|
LOGTO_ADMIN_ENDPOINT = "http://${admin_domain}"
|
||||||
|
LOGTO_POSTGRES_PASSWORD = "${postgres_password}"
|
||||||
16
blueprints/macos/template.toml
Normal file
16
blueprints/macos/template.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "macos"
|
||||||
|
port = 8_006
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
VERSION = "15"
|
||||||
|
DISK_SIZE = "64G"
|
||||||
|
RAM_SIZE = "4G"
|
||||||
|
CPU_CORES = "2"
|
||||||
11
blueprints/mailpit/template.toml
Normal file
11
blueprints/mailpit/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
default_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "mailpit"
|
||||||
|
port = 8_025
|
||||||
|
host = "${main_domain}"
|
||||||
21
blueprints/maybe/template.toml
Normal file
21
blueprints/maybe/template.toml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_key_base = "${base64:64}"
|
||||||
|
synth_api_key = "${base64:32}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "app"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
SECRET_KEY_BASE = "${secret_key_base}"
|
||||||
|
SELF_HOSTED = "true"
|
||||||
|
SYNTH_API_KEY = "${synth_api_key}"
|
||||||
|
RAILS_FORCE_SSL = "false"
|
||||||
|
RAILS_ASSUME_SSL = "false"
|
||||||
|
GOOD_JOB_EXECUTION_MODE = "async"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "./uploads"
|
||||||
|
content = "This is where user uploads will be stored"
|
||||||
15
blueprints/meilisearch/template.toml
Normal file
15
blueprints/meilisearch/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
master_key = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "meilisearch"
|
||||||
|
port = 7_700
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
MEILI_ENV = "development"
|
||||||
|
MEILI_MASTER_KEY = "${master_key}"
|
||||||
11
blueprints/metabase/template.toml
Normal file
11
blueprints/metabase/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "metabase"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
17
blueprints/minio/template.toml
Normal file
17
blueprints/minio/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
api_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "minio"
|
||||||
|
port = 9_001
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "minio"
|
||||||
|
port = 9_000
|
||||||
|
host = "${api_domain}"
|
||||||
15
blueprints/n8n/template.toml
Normal file
15
blueprints/n8n/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "n8n"
|
||||||
|
port = 5_678
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
N8N_HOST = "${main_domain}"
|
||||||
|
N8N_PORT = "5678"
|
||||||
|
GENERIC_TIMEZONE = "Europe/Berlin"
|
||||||
17
blueprints/nextcloud-aio/template.toml
Normal file
17
blueprints/nextcloud-aio/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_password = "${password}"
|
||||||
|
db_root_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "nextcloud"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
NEXTCLOUD_DOMAIN = "${main_domain}"
|
||||||
|
MYSQL_SECRET_PASSWORD = "${db_password}"
|
||||||
|
MYSQL_SECRET_PASSWORD_ROOT = "${db_root_password}"
|
||||||
15
blueprints/nocodb/template.toml
Normal file
15
blueprints/nocodb/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
jwt_secret = "${base64:64}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "nocodb"
|
||||||
|
port = 8_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
NOCODB_PORT = "8000"
|
||||||
|
NC_AUTH_JWT_SECRET = "${jwt_secret}"
|
||||||
11
blueprints/odoo/template.toml
Normal file
11
blueprints/odoo/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "web"
|
||||||
|
port = 8_069
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/onedev/template.toml
Normal file
11
blueprints/onedev/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "onedev"
|
||||||
|
port = 6_610
|
||||||
|
host = "${main_domain}"
|
||||||
13
blueprints/ontime/template.toml
Normal file
13
blueprints/ontime/template.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "ontime"
|
||||||
|
port = 4_001
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
TZ = "UTC"
|
||||||
14
blueprints/open-webui/template.toml
Normal file
14
blueprints/open-webui/template.toml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "open-webui"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
OLLAMA_DOCKER_TAG = "0.1.47"
|
||||||
|
WEBUI_DOCKER_TAG = "0.3.7"
|
||||||
11
blueprints/otterwiki/template.toml
Normal file
11
blueprints/otterwiki/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = [ ]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "otterwiki"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
66
blueprints/outline/template.toml
Normal file
66
blueprints/outline/template.toml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
dex_domain = "${domain}"
|
||||||
|
secret_key = "${base64:32}"
|
||||||
|
utils_secret = "${base64:32}"
|
||||||
|
client_secret = "${base64:32}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "outline"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "dex"
|
||||||
|
port = 5_556
|
||||||
|
host = "${dex_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
URL = "http://${main_domain}"
|
||||||
|
DEX_URL = "http://${dex_domain}"
|
||||||
|
DOMAIN_NAME = "${main_domain}"
|
||||||
|
POSTGRES_PASSWORD = "${postgres_password}"
|
||||||
|
SECRET_KEY = "${secret_key}"
|
||||||
|
UTILS_SECRET = "${utils_secret}"
|
||||||
|
CLIENT_SECRET = "${client_secret}"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/etc/dex/config.yaml"
|
||||||
|
content = """
|
||||||
|
issuer: http://${dex_domain}
|
||||||
|
|
||||||
|
web:
|
||||||
|
http: 0.0.0.0:5556
|
||||||
|
|
||||||
|
storage:
|
||||||
|
type: memory
|
||||||
|
|
||||||
|
enablePasswordDB: true
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
issuer: Outline
|
||||||
|
|
||||||
|
logger:
|
||||||
|
level: debug
|
||||||
|
|
||||||
|
staticPasswords:
|
||||||
|
- email: "admin@example.com"
|
||||||
|
# bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2)
|
||||||
|
hash: "$2y$10$jsRWHw54uxTUIfhjgUrB9u8HSzPk7TUuQri9sXZrKzRXcScvwYor."
|
||||||
|
username: "admin"
|
||||||
|
userID: "1"
|
||||||
|
|
||||||
|
|
||||||
|
oauth2:
|
||||||
|
skipApprovalScreen: true
|
||||||
|
alwaysShowLoginScreen: false
|
||||||
|
passwordConnector: local
|
||||||
|
|
||||||
|
staticClients:
|
||||||
|
- id: "outline"
|
||||||
|
redirectURIs:
|
||||||
|
- http://${main_domain}/auth/oidc.callback
|
||||||
|
name: "Outline"
|
||||||
|
secret: "${client_secret}"
|
||||||
|
"""
|
||||||
13
blueprints/penpot/template.toml
Normal file
13
blueprints/penpot/template.toml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "penpot-frontend"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
DOMAIN_NAME = "${main_domain}"
|
||||||
24
blueprints/peppermint/template.toml
Normal file
24
blueprints/peppermint/template.toml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
api_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
secret = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "peppermint-app"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "peppermint-app"
|
||||||
|
port = 5_003
|
||||||
|
host = "${api_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
MAIN_DOMAIN = "${main_domain}"
|
||||||
|
API_DOMAIN = "${api_domain}"
|
||||||
|
POSTGRES_PASSWORD = "${postgres_password}"
|
||||||
|
SECRET = "${secret}"
|
||||||
15
blueprints/photoprism/template.toml
Normal file
15
blueprints/photoprism/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
admin_password = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "photoprism"
|
||||||
|
port = 2_342
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
BASE_URL = "http://${main_domain}"
|
||||||
|
ADMIN_PASSWORD = "${admin_password}"
|
||||||
18
blueprints/phpmyadmin/template.toml
Normal file
18
blueprints/phpmyadmin/template.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
root_password = "${password:32}"
|
||||||
|
user_password = "${password:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "phpmyadmin"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
MYSQL_ROOT_PASSWORD = "${root_password}"
|
||||||
|
MYSQL_DATABASE = "mysql"
|
||||||
|
MYSQL_USER = "phpmyadmin"
|
||||||
|
MYSQL_PASSWORD = "${user_password}"
|
||||||
48
blueprints/plausible/template.toml
Normal file
48
blueprints/plausible/template.toml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_base = "${base64:64}"
|
||||||
|
totp_key = "${base64:32}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "plausible"
|
||||||
|
port = 8_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
BASE_URL = "http://${main_domain}"
|
||||||
|
SECRET_KEY_BASE = "${secret_base}"
|
||||||
|
TOTP_VAULT_KEY = "${totp_key}"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/clickhouse/clickhouse-config.xml"
|
||||||
|
content = """
|
||||||
|
<clickhouse>
|
||||||
|
<logger>
|
||||||
|
<level>warning</level>
|
||||||
|
<console>true</console>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- Stop all the unnecessary logging -->
|
||||||
|
<query_thread_log remove="remove"/>
|
||||||
|
<query_log remove="remove"/>
|
||||||
|
<text_log remove="remove"/>
|
||||||
|
<trace_log remove="remove"/>
|
||||||
|
<metric_log remove="remove"/>
|
||||||
|
<asynchronous_metric_log remove="remove"/>
|
||||||
|
<session_log remove="remove"/>
|
||||||
|
<part_log remove="remove"/>
|
||||||
|
</clickhouse>
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/clickhouse/clickhouse-user-config.xml"
|
||||||
|
content = """
|
||||||
|
<clickhouse>
|
||||||
|
<profiles>
|
||||||
|
<default>
|
||||||
|
<log_queries>0</log_queries>
|
||||||
|
<log_query_threads>0</log_query_threads>
|
||||||
|
</default>
|
||||||
|
</profiles>
|
||||||
|
</clickhouse>
|
||||||
|
"""
|
||||||
15
blueprints/pocket-id/template.toml
Normal file
15
blueprints/pocket-id/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "pocket-id"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
PUBLIC_UI_CONFIG_DISABLED = "false"
|
||||||
|
PUBLIC_APP_URL = "http://${main_domain}"
|
||||||
|
TRUST_PROXY = "true"
|
||||||
11
blueprints/pocketbase/template.toml
Normal file
11
blueprints/pocketbase/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "pocketbase"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
11
blueprints/portainer/template.toml
Normal file
11
blueprints/portainer/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "portainer"
|
||||||
|
port = 9_000
|
||||||
|
host = "${main_domain}"
|
||||||
21
blueprints/postiz/template.toml
Normal file
21
blueprints/postiz/template.toml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_password = "${password}"
|
||||||
|
db_user = "postiz"
|
||||||
|
db_name = "postiz"
|
||||||
|
jwt_secret = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "postiz-app"
|
||||||
|
port = 5_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
POSTIZ_HOST = "${main_domain}"
|
||||||
|
DB_PASSWORD = "${db_password}"
|
||||||
|
DB_USER = "${db_user}"
|
||||||
|
DB_NAME = "${db_name}"
|
||||||
|
JWT_SECRET = "${jwt_secret}"
|
||||||
18
blueprints/registry/template.toml
Normal file
18
blueprints/registry/template.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
registry_http_secret = "${password:30}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "registry"
|
||||||
|
port = 5_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
REGISTRY_HTTP_SECRET = "${registry_http_secret}"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/auth/registry.password"
|
||||||
|
content = """
|
||||||
|
# from: docker run --rm --entrypoint htpasswd httpd:2 -Bbn docker password
|
||||||
|
docker:$2y$10$qWZoWev/u5PV7WneFoRAMuoGpRcAQOgUuIIdLnU7pJXogrBSY23/2
|
||||||
|
"""
|
||||||
14
blueprints/rocketchat/template.toml
Normal file
14
blueprints/rocketchat/template.toml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "rocketchat"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
ROCKETCHAT_HOST = "${main_domain}"
|
||||||
|
ROCKETCHAT_PORT = "3000"
|
||||||
14
blueprints/roundcube/template.toml
Normal file
14
blueprints/roundcube/template.toml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "roundcubemail"
|
||||||
|
port = 80
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
DEFAULT_HOST = "tls://mail.example.com"
|
||||||
|
SMTP_SERVER = "tls://mail.example.com"
|
||||||
16
blueprints/ryot/template.toml
Normal file
16
blueprints/ryot/template.toml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password}"
|
||||||
|
admin_access_token = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "ryot-app"
|
||||||
|
port = 8_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
POSTGRES_PASSWORD = "${postgres_password}"
|
||||||
|
ADMIN_ACCESS_TOKEN = "${admin_access_token}"
|
||||||
20
blueprints/shlink/template.toml
Normal file
20
blueprints/shlink/template.toml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
initial_api_key = "${password:30}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "shlink-web"
|
||||||
|
port = 8_080
|
||||||
|
host = "web-${main_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "shlink"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
INITIAL_API_KEY = "${initial_api_key}"
|
||||||
|
DEFAULT_DOMAIN = "${main_domain}"
|
||||||
18
blueprints/slash/template.toml
Normal file
18
blueprints/slash/template.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_password = "${password}"
|
||||||
|
db_user = "slash"
|
||||||
|
db_name = "slash"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "slash-app"
|
||||||
|
port = 5_231
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
DB_USER = "${db_user}"
|
||||||
|
DB_PASSWORD = "${db_password}"
|
||||||
|
DB_NAME = "${db_name}"
|
||||||
17
blueprints/soketi/template.toml
Normal file
17
blueprints/soketi/template.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
metrics_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "soketi"
|
||||||
|
port = 6_001
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "soketi"
|
||||||
|
port = 9_601
|
||||||
|
host = "${metrics_domain}"
|
||||||
15
blueprints/spacedrive/template.toml
Normal file
15
blueprints/spacedrive/template.toml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_key = "${password}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "server"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
SD_USERNAME = "admin"
|
||||||
|
SD_PASSWORD = "${secret_key}"
|
||||||
11
blueprints/stirling/template.toml
Normal file
11
blueprints/stirling/template.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
env = { }
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "stirling-pdf"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
921
blueprints/supabase/template.toml
Normal file
921
blueprints/supabase/template.toml
Normal file
@@ -0,0 +1,921 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
postgres_password = "${password:32}"
|
||||||
|
jwt_secret = "${base64:32}"
|
||||||
|
dashboard_password = "${password:32}"
|
||||||
|
logflare_api_key = "${password:32}"
|
||||||
|
anon_key = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzQxNTAwMDAwLAogICJleHAiOiAxODk5MjY2NDAwCn0.muKe0Nrvkf5bMyLoFqAuFypRu3jHAcTYU08SYKrgRQo"
|
||||||
|
service_role_key = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogInNlcnZpY2Vfcm9sZSIsCiAgImlzcyI6ICJzdXBhYmFzZSIsCiAgImlhdCI6IDE3NDE1MDAwMDAsCiAgImV4cCI6IDE4OTkyNjY0MDAKfQ.1KoSiJVueKJNkF59uc84BLqk7h8VdAoVp6Gozqr_vGc"
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "kong"
|
||||||
|
port = 8_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
SUPABASE_HOST = "${main_domain}"
|
||||||
|
POSTGRES_PASSWORD = "${postgres_password}"
|
||||||
|
JWT_SECRET = "${jwt_secret}"
|
||||||
|
ANON_KEY = "${anon_key}"
|
||||||
|
SERVICE_ROLE_KEY = "${service_role_key}"
|
||||||
|
DASHBOARD_USERNAME = "supabase"
|
||||||
|
DASHBOARD_PASSWORD = "${dashboard_password}"
|
||||||
|
POSTGRES_HOSTNAME = "db"
|
||||||
|
POSTGRES_DB = "postgres"
|
||||||
|
POSTGRES_PORT = "5432"
|
||||||
|
KONG_HTTP_PORT = "8000"
|
||||||
|
KONG_HTTPS_PORT = "8443"
|
||||||
|
PGRST_DB_SCHEMAS = "public,storage,graphql_public"
|
||||||
|
ADDITIONAL_REDIRECT_URLS = ""
|
||||||
|
JWT_EXPIRY = "3600"
|
||||||
|
DISABLE_SIGNUP = "false"
|
||||||
|
MAILER_URLPATHS_CONFIRMATION = '"/auth/v1/verify"'
|
||||||
|
MAILER_URLPATHS_INVITE = '"/auth/v1/verify"'
|
||||||
|
MAILER_URLPATHS_RECOVERY = '"/auth/v1/verify"'
|
||||||
|
MAILER_URLPATHS_EMAIL_CHANGE = '"/auth/v1/verify"'
|
||||||
|
ENABLE_EMAIL_SIGNUP = "true"
|
||||||
|
ENABLE_EMAIL_AUTOCONFIRM = "false"
|
||||||
|
SMTP_ADMIN_EMAIL = "admin@example.com"
|
||||||
|
SMTP_HOSTNAME = "supabase-mail"
|
||||||
|
SMTP_PORT = "2500"
|
||||||
|
SMTP_USER = "fake_mail_user"
|
||||||
|
SMTP_PASS = "fake_mail_password"
|
||||||
|
SMTP_SENDER_NAME = "fake_sender"
|
||||||
|
ENABLE_ANONYMOUS_USERS = "false"
|
||||||
|
ENABLE_PHONE_SIGNUP = "true"
|
||||||
|
ENABLE_PHONE_AUTOCONFIRM = "true"
|
||||||
|
STUDIO_DEFAULT_ORGANIZATION = "Default Organization"
|
||||||
|
STUDIO_DEFAULT_PROJECT = "Default Project"
|
||||||
|
STUDIO_PORT = "3000"
|
||||||
|
IMGPROXY_ENABLE_WEBP_DETECTION = "true"
|
||||||
|
FUNCTIONS_VERIFY_JWT = "false"
|
||||||
|
LOGFLARE_LOGGER_BACKEND_API_KEY = "${logflare_api_key}"
|
||||||
|
LOGFLARE_API_KEY = "${logflare_api_key}"
|
||||||
|
DOCKER_SOCKET_LOCATION = "/var/run/docker.sock"
|
||||||
|
GOOGLE_PROJECT_ID = "GOOGLE_PROJECT_ID"
|
||||||
|
GOOGLE_PROJECT_NUMBER = "GOOGLE_PROJECT_NUMBER"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/api/kong.yml"
|
||||||
|
content = """
|
||||||
|
_format_version: '2.1'
|
||||||
|
_transform: true
|
||||||
|
|
||||||
|
###
|
||||||
|
### Consumers / Users
|
||||||
|
###
|
||||||
|
consumers:
|
||||||
|
- username: DASHBOARD
|
||||||
|
- username: anon
|
||||||
|
keyauth_credentials:
|
||||||
|
- key: $SUPABASE_ANON_KEY
|
||||||
|
- username: service_role
|
||||||
|
keyauth_credentials:
|
||||||
|
- key: $SUPABASE_SERVICE_KEY
|
||||||
|
|
||||||
|
###
|
||||||
|
### Access Control List
|
||||||
|
###
|
||||||
|
acls:
|
||||||
|
- consumer: anon
|
||||||
|
group: anon
|
||||||
|
- consumer: service_role
|
||||||
|
group: admin
|
||||||
|
|
||||||
|
###
|
||||||
|
### Dashboard credentials
|
||||||
|
###
|
||||||
|
basicauth_credentials:
|
||||||
|
- consumer: DASHBOARD
|
||||||
|
username: $DASHBOARD_USERNAME
|
||||||
|
password: $DASHBOARD_PASSWORD
|
||||||
|
|
||||||
|
###
|
||||||
|
### API Routes
|
||||||
|
###
|
||||||
|
services:
|
||||||
|
## Open Auth routes
|
||||||
|
- name: auth-v1-open
|
||||||
|
url: http://auth:9999/verify
|
||||||
|
routes:
|
||||||
|
- name: auth-v1-open
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /auth/v1/verify
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: auth-v1-open-callback
|
||||||
|
url: http://auth:9999/callback
|
||||||
|
routes:
|
||||||
|
- name: auth-v1-open-callback
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /auth/v1/callback
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: auth-v1-open-authorize
|
||||||
|
url: http://auth:9999/authorize
|
||||||
|
routes:
|
||||||
|
- name: auth-v1-open-authorize
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /auth/v1/authorize
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
|
||||||
|
## Secure Auth routes
|
||||||
|
- name: auth-v1
|
||||||
|
_comment: 'GoTrue: /auth/v1/* -> http://auth:9999/*'
|
||||||
|
url: http://auth:9999/
|
||||||
|
routes:
|
||||||
|
- name: auth-v1-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /auth/v1/
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: key-auth
|
||||||
|
config:
|
||||||
|
hide_credentials: false
|
||||||
|
- name: acl
|
||||||
|
config:
|
||||||
|
hide_groups_header: true
|
||||||
|
allow:
|
||||||
|
- admin
|
||||||
|
- anon
|
||||||
|
|
||||||
|
## Secure REST routes
|
||||||
|
- name: rest-v1
|
||||||
|
_comment: 'PostgREST: /rest/v1/* -> http://rest:3000/*'
|
||||||
|
url: http://rest:3000/
|
||||||
|
routes:
|
||||||
|
- name: rest-v1-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /rest/v1/
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: key-auth
|
||||||
|
config:
|
||||||
|
hide_credentials: true
|
||||||
|
- name: acl
|
||||||
|
config:
|
||||||
|
hide_groups_header: true
|
||||||
|
allow:
|
||||||
|
- admin
|
||||||
|
- anon
|
||||||
|
|
||||||
|
## Secure GraphQL routes
|
||||||
|
- name: graphql-v1
|
||||||
|
_comment: 'PostgREST: /graphql/v1/* -> http://rest:3000/rpc/graphql'
|
||||||
|
url: http://rest:3000/rpc/graphql
|
||||||
|
routes:
|
||||||
|
- name: graphql-v1-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /graphql/v1
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: key-auth
|
||||||
|
config:
|
||||||
|
hide_credentials: true
|
||||||
|
- name: request-transformer
|
||||||
|
config:
|
||||||
|
add:
|
||||||
|
headers:
|
||||||
|
- Content-Profile:graphql_public
|
||||||
|
- name: acl
|
||||||
|
config:
|
||||||
|
hide_groups_header: true
|
||||||
|
allow:
|
||||||
|
- admin
|
||||||
|
- anon
|
||||||
|
|
||||||
|
## Secure Realtime routes
|
||||||
|
- name: realtime-v1-ws
|
||||||
|
_comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*'
|
||||||
|
url: http://realtime-dev.supabase-realtime:4000/socket
|
||||||
|
protocol: ws
|
||||||
|
routes:
|
||||||
|
- name: realtime-v1-ws
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /realtime/v1/
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: key-auth
|
||||||
|
config:
|
||||||
|
hide_credentials: false
|
||||||
|
- name: acl
|
||||||
|
config:
|
||||||
|
hide_groups_header: true
|
||||||
|
allow:
|
||||||
|
- admin
|
||||||
|
- anon
|
||||||
|
- name: realtime-v1-rest
|
||||||
|
_comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*'
|
||||||
|
url: http://realtime-dev.supabase-realtime:4000/api
|
||||||
|
protocol: http
|
||||||
|
routes:
|
||||||
|
- name: realtime-v1-rest
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /realtime/v1/api
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: key-auth
|
||||||
|
config:
|
||||||
|
hide_credentials: false
|
||||||
|
- name: acl
|
||||||
|
config:
|
||||||
|
hide_groups_header: true
|
||||||
|
allow:
|
||||||
|
- admin
|
||||||
|
- anon
|
||||||
|
## Storage routes: the storage server manages its own auth
|
||||||
|
- name: storage-v1
|
||||||
|
_comment: 'Storage: /storage/v1/* -> http://storage:5000/*'
|
||||||
|
url: http://storage:5000/
|
||||||
|
routes:
|
||||||
|
- name: storage-v1-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /storage/v1/
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
|
||||||
|
## Edge Functions routes
|
||||||
|
- name: functions-v1
|
||||||
|
_comment: 'Edge Functions: /functions/v1/* -> http://functions:9000/*'
|
||||||
|
url: http://functions:9000/
|
||||||
|
routes:
|
||||||
|
- name: functions-v1-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /functions/v1/
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
|
||||||
|
## Analytics routes
|
||||||
|
- name: analytics-v1
|
||||||
|
_comment: 'Analytics: /analytics/v1/* -> http://logflare:4000/*'
|
||||||
|
url: http://analytics:4000/
|
||||||
|
routes:
|
||||||
|
- name: analytics-v1-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /analytics/v1/
|
||||||
|
|
||||||
|
## Secure Database routes
|
||||||
|
- name: meta
|
||||||
|
_comment: 'pg-meta: /pg/* -> http://pg-meta:8080/*'
|
||||||
|
url: http://meta:8080/
|
||||||
|
routes:
|
||||||
|
- name: meta-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /pg/
|
||||||
|
plugins:
|
||||||
|
- name: key-auth
|
||||||
|
config:
|
||||||
|
hide_credentials: false
|
||||||
|
- name: acl
|
||||||
|
config:
|
||||||
|
hide_groups_header: true
|
||||||
|
allow:
|
||||||
|
- admin
|
||||||
|
|
||||||
|
## Protected Dashboard - catch all remaining routes
|
||||||
|
- name: dashboard
|
||||||
|
_comment: 'Studio: /* -> http://studio:3000/*'
|
||||||
|
url: http://studio:3000/
|
||||||
|
routes:
|
||||||
|
- name: dashboard-all
|
||||||
|
strip_path: true
|
||||||
|
paths:
|
||||||
|
- /
|
||||||
|
plugins:
|
||||||
|
- name: cors
|
||||||
|
- name: basic-auth
|
||||||
|
config:
|
||||||
|
hide_credentials: true
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/db/init/data.sql"
|
||||||
|
content = ""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/db/jwt.sql"
|
||||||
|
content = """
|
||||||
|
\\set jwt_secret `echo "$JWT_SECRET"`
|
||||||
|
\\set jwt_exp `echo "$JWT_EXP"`
|
||||||
|
|
||||||
|
ALTER DATABASE postgres SET "app.settings.jwt_secret" TO :'jwt_secret';
|
||||||
|
ALTER DATABASE postgres SET "app.settings.jwt_exp" TO :'jwt_exp';
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/db/logs.sql"
|
||||||
|
content = """
|
||||||
|
\\set pguser `echo "$POSTGRES_USER"`
|
||||||
|
|
||||||
|
create schema if not exists _analytics;
|
||||||
|
alter schema _analytics owner to :pguser;
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/db/realtime.sql"
|
||||||
|
content = """
|
||||||
|
\\set pguser `echo "$POSTGRES_USER"`
|
||||||
|
|
||||||
|
create schema if not exists _realtime;
|
||||||
|
alter schema _realtime owner to :pguser;
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/db/roles.sql"
|
||||||
|
content = """
|
||||||
|
-- NOTE: change to your own passwords for production environments
|
||||||
|
\\set pgpass `echo "$POSTGRES_PASSWORD"`
|
||||||
|
|
||||||
|
ALTER USER authenticator WITH PASSWORD :'pgpass';
|
||||||
|
ALTER USER pgbouncer WITH PASSWORD :'pgpass';
|
||||||
|
ALTER USER supabase_auth_admin WITH PASSWORD :'pgpass';
|
||||||
|
ALTER USER supabase_functions_admin WITH PASSWORD :'pgpass';
|
||||||
|
ALTER USER supabase_storage_admin WITH PASSWORD :'pgpass';
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/db/webhooks.sql"
|
||||||
|
content = """
|
||||||
|
BEGIN;
|
||||||
|
-- Create pg_net extension
|
||||||
|
CREATE EXTENSION IF NOT EXISTS pg_net SCHEMA extensions;
|
||||||
|
-- Create supabase_functions schema
|
||||||
|
CREATE SCHEMA supabase_functions AUTHORIZATION supabase_admin;
|
||||||
|
GRANT USAGE ON SCHEMA supabase_functions TO postgres, anon, authenticated, service_role;
|
||||||
|
ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON TABLES TO postgres, anon, authenticated, service_role;
|
||||||
|
ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO postgres, anon, authenticated, service_role;
|
||||||
|
ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO postgres, anon, authenticated, service_role;
|
||||||
|
-- supabase_functions.migrations definition
|
||||||
|
CREATE TABLE supabase_functions.migrations (
|
||||||
|
version text PRIMARY KEY,
|
||||||
|
inserted_at timestamptz NOT NULL DEFAULT NOW()
|
||||||
|
);
|
||||||
|
-- Initial supabase_functions migration
|
||||||
|
INSERT INTO supabase_functions.migrations (version) VALUES ('initial');
|
||||||
|
-- supabase_functions.hooks definition
|
||||||
|
CREATE TABLE supabase_functions.hooks (
|
||||||
|
id bigserial PRIMARY KEY,
|
||||||
|
hook_table_id integer NOT NULL,
|
||||||
|
hook_name text NOT NULL,
|
||||||
|
created_at timestamptz NOT NULL DEFAULT NOW(),
|
||||||
|
request_id bigint
|
||||||
|
);
|
||||||
|
CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id);
|
||||||
|
CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name);
|
||||||
|
COMMENT ON TABLE supabase_functions.hooks IS 'Supabase Functions Hooks: Audit trail for triggered hooks.';
|
||||||
|
CREATE FUNCTION supabase_functions.http_request()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $function$
|
||||||
|
DECLARE
|
||||||
|
request_id bigint;
|
||||||
|
payload jsonb;
|
||||||
|
url text := TG_ARGV[0]::text;
|
||||||
|
method text := TG_ARGV[1]::text;
|
||||||
|
headers jsonb DEFAULT '{}'::jsonb;
|
||||||
|
params jsonb DEFAULT '{}'::jsonb;
|
||||||
|
timeout_ms integer DEFAULT 1000;
|
||||||
|
BEGIN
|
||||||
|
IF url IS NULL OR url = 'null' THEN
|
||||||
|
RAISE EXCEPTION 'url argument is missing';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF method IS NULL OR method = 'null' THEN
|
||||||
|
RAISE EXCEPTION 'method argument is missing';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF TG_ARGV[2] IS NULL OR TG_ARGV[2] = 'null' THEN
|
||||||
|
headers = '{"Content-Type": "application/json"}'::jsonb;
|
||||||
|
ELSE
|
||||||
|
headers = TG_ARGV[2]::jsonb;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF TG_ARGV[3] IS NULL OR TG_ARGV[3] = 'null' THEN
|
||||||
|
params = '{}'::jsonb;
|
||||||
|
ELSE
|
||||||
|
params = TG_ARGV[3]::jsonb;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF TG_ARGV[4] IS NULL OR TG_ARGV[4] = 'null' THEN
|
||||||
|
timeout_ms = 1000;
|
||||||
|
ELSE
|
||||||
|
timeout_ms = TG_ARGV[4]::integer;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN method = 'GET' THEN
|
||||||
|
SELECT http_get INTO request_id FROM net.http_get(
|
||||||
|
url,
|
||||||
|
params,
|
||||||
|
headers,
|
||||||
|
timeout_ms
|
||||||
|
);
|
||||||
|
WHEN method = 'POST' THEN
|
||||||
|
payload = jsonb_build_object(
|
||||||
|
'old_record', OLD,
|
||||||
|
'record', NEW,
|
||||||
|
'type', TG_OP,
|
||||||
|
'table', TG_TABLE_NAME,
|
||||||
|
'schema', TG_TABLE_SCHEMA
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT http_post INTO request_id FROM net.http_post(
|
||||||
|
url,
|
||||||
|
payload,
|
||||||
|
params,
|
||||||
|
headers,
|
||||||
|
timeout_ms
|
||||||
|
);
|
||||||
|
ELSE
|
||||||
|
RAISE EXCEPTION 'method argument % is invalid', method;
|
||||||
|
END CASE;
|
||||||
|
|
||||||
|
INSERT INTO supabase_functions.hooks
|
||||||
|
(hook_table_id, hook_name, request_id)
|
||||||
|
VALUES
|
||||||
|
(TG_RELID, TG_NAME, request_id);
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END
|
||||||
|
$function$;
|
||||||
|
-- Supabase super admin
|
||||||
|
DO
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM pg_roles
|
||||||
|
WHERE rolname = 'supabase_functions_admin'
|
||||||
|
)
|
||||||
|
THEN
|
||||||
|
CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION;
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
GRANT ALL PRIVILEGES ON SCHEMA supabase_functions TO supabase_functions_admin;
|
||||||
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA supabase_functions TO supabase_functions_admin;
|
||||||
|
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA supabase_functions TO supabase_functions_admin;
|
||||||
|
ALTER USER supabase_functions_admin SET search_path = "supabase_functions";
|
||||||
|
ALTER table "supabase_functions".migrations OWNER TO supabase_functions_admin;
|
||||||
|
ALTER table "supabase_functions".hooks OWNER TO supabase_functions_admin;
|
||||||
|
ALTER function "supabase_functions".http_request() OWNER TO supabase_functions_admin;
|
||||||
|
GRANT supabase_functions_admin TO postgres;
|
||||||
|
-- Remove unused supabase_pg_net_admin role
|
||||||
|
DO
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM pg_roles
|
||||||
|
WHERE rolname = 'supabase_pg_net_admin'
|
||||||
|
)
|
||||||
|
THEN
|
||||||
|
REASSIGN OWNED BY supabase_pg_net_admin TO supabase_admin;
|
||||||
|
DROP OWNED BY supabase_pg_net_admin;
|
||||||
|
DROP ROLE supabase_pg_net_admin;
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
-- pg_net grants when extension is already enabled
|
||||||
|
DO
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM pg_extension
|
||||||
|
WHERE extname = 'pg_net'
|
||||||
|
)
|
||||||
|
THEN
|
||||||
|
GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;
|
||||||
|
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
|
||||||
|
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
|
||||||
|
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
|
||||||
|
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
|
||||||
|
REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
|
||||||
|
REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
|
||||||
|
GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
|
||||||
|
GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
-- Event trigger for pg_net
|
||||||
|
CREATE OR REPLACE FUNCTION extensions.grant_pg_net_access()
|
||||||
|
RETURNS event_trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM pg_event_trigger_ddl_commands() AS ev
|
||||||
|
JOIN pg_extension AS ext
|
||||||
|
ON ev.objid = ext.oid
|
||||||
|
WHERE ext.extname = 'pg_net'
|
||||||
|
)
|
||||||
|
THEN
|
||||||
|
GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role;
|
||||||
|
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
|
||||||
|
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER;
|
||||||
|
ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
|
||||||
|
ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net;
|
||||||
|
REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
|
||||||
|
REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC;
|
||||||
|
GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
|
||||||
|
GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
COMMENT ON FUNCTION extensions.grant_pg_net_access IS 'Grants access to pg_net';
|
||||||
|
DO
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM pg_event_trigger
|
||||||
|
WHERE evtname = 'issue_pg_net_access'
|
||||||
|
) THEN
|
||||||
|
CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end WHEN TAG IN ('CREATE EXTENSION')
|
||||||
|
EXECUTE PROCEDURE extensions.grant_pg_net_access();
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
INSERT INTO supabase_functions.migrations (version) VALUES ('20210809183423_update_grants');
|
||||||
|
ALTER function supabase_functions.http_request() SECURITY DEFINER;
|
||||||
|
ALTER function supabase_functions.http_request() SET search_path = supabase_functions;
|
||||||
|
REVOKE ALL ON FUNCTION supabase_functions.http_request() FROM PUBLIC;
|
||||||
|
GRANT EXECUTE ON FUNCTION supabase_functions.http_request() TO postgres, anon, authenticated, service_role;
|
||||||
|
COMMIT;
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/functions/hello/index.ts"
|
||||||
|
content = """
|
||||||
|
// Follow this setup guide to integrate the Deno language server with your editor:
|
||||||
|
// https://deno.land/manual/getting_started/setup_your_environment
|
||||||
|
// This enables autocomplete, go to definition, etc.
|
||||||
|
|
||||||
|
import { serve } from "https://deno.land/std@0.177.1/http/server.ts"
|
||||||
|
|
||||||
|
serve(async () => {
|
||||||
|
return new Response(
|
||||||
|
`"Hello from Edge Functions!"`,
|
||||||
|
{ headers: { "Content-Type": "application/json" } }
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
// To invoke:
|
||||||
|
// curl 'http://localhost:<KONG_HTTP_PORT>/functions/v1/hello' \\
|
||||||
|
// --header 'Authorization: Bearer <anon/service_role API key>'
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/functions/main/index.ts"
|
||||||
|
content = """
|
||||||
|
import { serve } from 'https://deno.land/std@0.131.0/http/server.ts'
|
||||||
|
import * as jose from 'https://deno.land/x/jose@v4.14.4/index.ts'
|
||||||
|
|
||||||
|
console.log('main function started')
|
||||||
|
|
||||||
|
const JWT_SECRET = Deno.env.get('JWT_SECRET')
|
||||||
|
const VERIFY_JWT = Deno.env.get('VERIFY_JWT') === 'true'
|
||||||
|
|
||||||
|
function getAuthToken(req: Request) {
|
||||||
|
const authHeader = req.headers.get('authorization')
|
||||||
|
if (!authHeader) {
|
||||||
|
throw new Error('Missing authorization header')
|
||||||
|
}
|
||||||
|
const [bearer, token] = authHeader.split(' ')
|
||||||
|
if (bearer !== 'Bearer') {
|
||||||
|
throw new Error(`Auth header is not 'Bearer {token}'`)
|
||||||
|
}
|
||||||
|
return token
|
||||||
|
}
|
||||||
|
|
||||||
|
async function verifyJWT(jwt: string): Promise<boolean> {
|
||||||
|
const encoder = new TextEncoder()
|
||||||
|
const secretKey = encoder.encode(JWT_SECRET)
|
||||||
|
try {
|
||||||
|
await jose.jwtVerify(jwt, secretKey)
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
serve(async (req: Request) => {
|
||||||
|
if (req.method !== 'OPTIONS' && VERIFY_JWT) {
|
||||||
|
try {
|
||||||
|
const token = getAuthToken(req)
|
||||||
|
const isValidJWT = await verifyJWT(token)
|
||||||
|
|
||||||
|
if (!isValidJWT) {
|
||||||
|
return new Response(JSON.stringify({ msg: 'Invalid JWT' }), {
|
||||||
|
status: 401,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
return new Response(JSON.stringify({ msg: e.toString() }), {
|
||||||
|
status: 401,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = new URL(req.url)
|
||||||
|
const { pathname } = url
|
||||||
|
const path_parts = pathname.split('/')
|
||||||
|
const service_name = path_parts[1]
|
||||||
|
|
||||||
|
if (!service_name || service_name === '') {
|
||||||
|
const error = { msg: 'missing function name in request' }
|
||||||
|
return new Response(JSON.stringify(error), {
|
||||||
|
status: 400,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const servicePath = `/home/deno/functions/${service_name}`
|
||||||
|
console.error(`serving the request with ${servicePath}`)
|
||||||
|
|
||||||
|
const memoryLimitMb = 150
|
||||||
|
const workerTimeoutMs = 1 * 60 * 1000
|
||||||
|
const noModuleCache = false
|
||||||
|
const importMapPath = null
|
||||||
|
const envVarsObj = Deno.env.toObject()
|
||||||
|
const envVars = Object.keys(envVarsObj).map((k) => [k, envVarsObj[k]])
|
||||||
|
|
||||||
|
try {
|
||||||
|
const worker = await EdgeRuntime.userWorkers.create({
|
||||||
|
servicePath,
|
||||||
|
memoryLimitMb,
|
||||||
|
workerTimeoutMs,
|
||||||
|
noModuleCache,
|
||||||
|
importMapPath,
|
||||||
|
envVars,
|
||||||
|
})
|
||||||
|
return await worker.fetch(req)
|
||||||
|
} catch (e) {
|
||||||
|
const error = { msg: e.toString() }
|
||||||
|
return new Response(JSON.stringify(error), {
|
||||||
|
status: 500,
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "/volumes/logs/vector.yml"
|
||||||
|
content = """
|
||||||
|
|
||||||
|
api:
|
||||||
|
enabled: true
|
||||||
|
address: 0.0.0.0:9001
|
||||||
|
|
||||||
|
sources:
|
||||||
|
docker_host:
|
||||||
|
type: docker_logs
|
||||||
|
exclude_containers:
|
||||||
|
- supabase-vector
|
||||||
|
|
||||||
|
transforms:
|
||||||
|
project_logs:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- docker_host
|
||||||
|
source: |-
|
||||||
|
.project = "default"
|
||||||
|
.event_message = del(.message)
|
||||||
|
.appname = del(.container_name)
|
||||||
|
del(.container_created_at)
|
||||||
|
del(.container_id)
|
||||||
|
del(.source_type)
|
||||||
|
del(.stream)
|
||||||
|
del(.label)
|
||||||
|
del(.image)
|
||||||
|
del(.host)
|
||||||
|
del(.stream)
|
||||||
|
router:
|
||||||
|
type: route
|
||||||
|
inputs:
|
||||||
|
- project_logs
|
||||||
|
route:
|
||||||
|
kong: '.appname == "supabase-kong"'
|
||||||
|
auth: '.appname == "supabase-auth"'
|
||||||
|
rest: '.appname == "supabase-rest"'
|
||||||
|
realtime: '.appname == "supabase-realtime"'
|
||||||
|
storage: '.appname == "supabase-storage"'
|
||||||
|
functions: '.appname == "supabase-functions"'
|
||||||
|
db: '.appname == "supabase-db"'
|
||||||
|
# Ignores non nginx errors since they are related with kong booting up
|
||||||
|
kong_logs:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- router.kong
|
||||||
|
source: |-
|
||||||
|
req, err = parse_nginx_log(.event_message, "combined")
|
||||||
|
if err == null {
|
||||||
|
.timestamp = req.timestamp
|
||||||
|
.metadata.request.headers.referer = req.referer
|
||||||
|
.metadata.request.headers.user_agent = req.agent
|
||||||
|
.metadata.request.headers.cf_connecting_ip = req.client
|
||||||
|
.metadata.request.method = req.method
|
||||||
|
.metadata.request.path = req.path
|
||||||
|
.metadata.request.protocol = req.protocol
|
||||||
|
.metadata.response.status_code = req.status
|
||||||
|
}
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
# Ignores non nginx errors since they are related with kong booting up
|
||||||
|
kong_err:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- router.kong
|
||||||
|
source: |-
|
||||||
|
.metadata.request.method = "GET"
|
||||||
|
.metadata.response.status_code = 200
|
||||||
|
parsed, err = parse_nginx_log(.event_message, "error")
|
||||||
|
if err == null {
|
||||||
|
.timestamp = parsed.timestamp
|
||||||
|
.severity = parsed.severity
|
||||||
|
.metadata.request.host = parsed.host
|
||||||
|
.metadata.request.headers.cf_connecting_ip = parsed.client
|
||||||
|
url, err = split(parsed.request, " ")
|
||||||
|
if err == null {
|
||||||
|
.metadata.request.method = url[0]
|
||||||
|
.metadata.request.path = url[1]
|
||||||
|
.metadata.request.protocol = url[2]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
# Gotrue logs are structured json strings which frontend parses directly. But we keep metadata for consistency.
|
||||||
|
auth_logs:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- router.auth
|
||||||
|
source: |-
|
||||||
|
parsed, err = parse_json(.event_message)
|
||||||
|
if err == null {
|
||||||
|
.metadata.timestamp = parsed.time
|
||||||
|
.metadata = merge!(.metadata, parsed)
|
||||||
|
}
|
||||||
|
# PostgREST logs are structured so we separate timestamp from message using regex
|
||||||
|
rest_logs:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- router.rest
|
||||||
|
source: |-
|
||||||
|
parsed, err = parse_regex(.event_message, r'^(?P<time>.*): (?P<msg>.*)$')
|
||||||
|
if err == null {
|
||||||
|
.event_message = parsed.msg
|
||||||
|
.timestamp = to_timestamp!(parsed.time)
|
||||||
|
.metadata.host = .project
|
||||||
|
}
|
||||||
|
# Realtime logs are structured so we parse the severity level using regex (ignore time because it has no date)
|
||||||
|
realtime_logs:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- router.realtime
|
||||||
|
source: |-
|
||||||
|
.metadata.project = del(.project)
|
||||||
|
.metadata.external_id = .metadata.project
|
||||||
|
parsed, err = parse_regex(.event_message, r'^(?P<time>\\d+:\\d+:\\d+\\.\\d+) \\[(?P<level>\\w+)\\] (?P<msg>.*)$')
|
||||||
|
if err == null {
|
||||||
|
.event_message = parsed.msg
|
||||||
|
.metadata.level = parsed.level
|
||||||
|
}
|
||||||
|
# Storage logs may contain json objects so we parse them for completeness
|
||||||
|
storage_logs:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- router.storage
|
||||||
|
source: |-
|
||||||
|
.metadata.project = del(.project)
|
||||||
|
.metadata.tenantId = .metadata.project
|
||||||
|
parsed, err = parse_json(.event_message)
|
||||||
|
if err == null {
|
||||||
|
.event_message = parsed.msg
|
||||||
|
.metadata.level = parsed.level
|
||||||
|
.metadata.timestamp = parsed.time
|
||||||
|
.metadata.context[0].host = parsed.hostname
|
||||||
|
.metadata.context[0].pid = parsed.pid
|
||||||
|
}
|
||||||
|
# Postgres logs some messages to stderr which we map to warning severity level
|
||||||
|
db_logs:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- router.db
|
||||||
|
source: |-
|
||||||
|
.metadata.host = "db-default"
|
||||||
|
.metadata.parsed.timestamp = .timestamp
|
||||||
|
|
||||||
|
parsed, err = parse_regex(.event_message, r'.*(?P<level>INFO|NOTICE|WARNING|ERROR|LOG|FATAL|PANIC?):.*', numeric_groups: true)
|
||||||
|
|
||||||
|
if err != null || parsed == null {
|
||||||
|
.metadata.parsed.error_severity = "info"
|
||||||
|
}
|
||||||
|
if parsed != null {
|
||||||
|
.metadata.parsed.error_severity = parsed.level
|
||||||
|
}
|
||||||
|
if .metadata.parsed.error_severity == "info" {
|
||||||
|
.metadata.parsed.error_severity = "log"
|
||||||
|
}
|
||||||
|
.metadata.parsed.error_severity = upcase!(.metadata.parsed.error_severity)
|
||||||
|
|
||||||
|
sinks:
|
||||||
|
logflare_auth:
|
||||||
|
type: 'http'
|
||||||
|
inputs:
|
||||||
|
- auth_logs
|
||||||
|
encoding:
|
||||||
|
codec: 'json'
|
||||||
|
method: 'post'
|
||||||
|
request:
|
||||||
|
retry_max_duration_secs: 10
|
||||||
|
uri: 'http://analytics:4000/api/logs?source_name=gotrue.logs.prod&api_key=${LOGFLARE_API_KEY?LOGFLARE_API_KEY is required}'
|
||||||
|
logflare_realtime:
|
||||||
|
type: 'http'
|
||||||
|
inputs:
|
||||||
|
- realtime_logs
|
||||||
|
encoding:
|
||||||
|
codec: 'json'
|
||||||
|
method: 'post'
|
||||||
|
request:
|
||||||
|
retry_max_duration_secs: 10
|
||||||
|
uri: 'http://analytics:4000/api/logs?source_name=realtime.logs.prod&api_key=${LOGFLARE_API_KEY?LOGFLARE_API_KEY is required}'
|
||||||
|
logflare_rest:
|
||||||
|
type: 'http'
|
||||||
|
inputs:
|
||||||
|
- rest_logs
|
||||||
|
encoding:
|
||||||
|
codec: 'json'
|
||||||
|
method: 'post'
|
||||||
|
request:
|
||||||
|
retry_max_duration_secs: 10
|
||||||
|
uri: 'http://analytics:4000/api/logs?source_name=postgREST.logs.prod&api_key=${LOGFLARE_API_KEY?LOGFLARE_API_KEY is required}'
|
||||||
|
logflare_db:
|
||||||
|
type: 'http'
|
||||||
|
inputs:
|
||||||
|
- db_logs
|
||||||
|
encoding:
|
||||||
|
codec: 'json'
|
||||||
|
method: 'post'
|
||||||
|
request:
|
||||||
|
retry_max_duration_secs: 10
|
||||||
|
# We must route the sink through kong because ingesting logs before logflare is fully initialised will
|
||||||
|
# lead to broken queries from studio. This works by the assumption that containers are started in the
|
||||||
|
# following order: vector > db > logflare > kong
|
||||||
|
uri: 'http://kong:8000/analytics/v1/api/logs?source_name=postgres.logs&api_key=${LOGFLARE_API_KEY?LOGFLARE_API_KEY is required}'
|
||||||
|
logflare_functions:
|
||||||
|
type: 'http'
|
||||||
|
inputs:
|
||||||
|
- router.functions
|
||||||
|
encoding:
|
||||||
|
codec: 'json'
|
||||||
|
method: 'post'
|
||||||
|
request:
|
||||||
|
retry_max_duration_secs: 10
|
||||||
|
uri: 'http://analytics:4000/api/logs?source_name=deno-relay-logs&api_key=${LOGFLARE_API_KEY?LOGFLARE_API_KEY is required}'
|
||||||
|
logflare_storage:
|
||||||
|
type: 'http'
|
||||||
|
inputs:
|
||||||
|
- storage_logs
|
||||||
|
encoding:
|
||||||
|
codec: 'json'
|
||||||
|
method: 'post'
|
||||||
|
request:
|
||||||
|
retry_max_duration_secs: 10
|
||||||
|
uri: 'http://analytics:4000/api/logs?source_name=storage.logs.prod.2&api_key=${LOGFLARE_API_KEY?LOGFLARE_API_KEY is required}'
|
||||||
|
logflare_kong:
|
||||||
|
type: 'http'
|
||||||
|
inputs:
|
||||||
|
- kong_logs
|
||||||
|
- kong_err
|
||||||
|
encoding:
|
||||||
|
codec: 'json'
|
||||||
|
method: 'post'
|
||||||
|
request:
|
||||||
|
retry_max_duration_secs: 10
|
||||||
|
uri: 'http://analytics:4000/api/logs?source_name=cloudflare.logs.prod&api_key=${LOGFLARE_API_KEY?LOGFLARE_API_KEY is required}'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
54
blueprints/superset/template.toml
Normal file
54
blueprints/superset/template.toml
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
secret_key = "${password:30}"
|
||||||
|
postgres_password = "${password:30}"
|
||||||
|
redis_password = "${password:30}"
|
||||||
|
mapbox_api_key = ""
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "superset"
|
||||||
|
port = 8_088
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
SECRET_KEY = "${secret_key}"
|
||||||
|
MAPBOX_API_KEY = "${mapbox_api_key}"
|
||||||
|
POSTGRES_DB = "superset"
|
||||||
|
POSTGRES_USER = "superset"
|
||||||
|
POSTGRES_PASSWORD = "${postgres_password}"
|
||||||
|
REDIS_PASSWORD = "${redis_password}"
|
||||||
|
|
||||||
|
[[config.mounts]]
|
||||||
|
filePath = "./superset/superset_config.py"
|
||||||
|
content = """
|
||||||
|
\"""
|
||||||
|
For more configuration options, see:
|
||||||
|
- https://superset.apache.org/docs/configuration/configuring-superset
|
||||||
|
\"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
SECRET_KEY = os.getenv("SECRET_KEY")
|
||||||
|
MAPBOX_API_KEY = os.getenv("MAPBOX_API_KEY", "")
|
||||||
|
|
||||||
|
CACHE_CONFIG = {
|
||||||
|
"CACHE_TYPE": "RedisCache",
|
||||||
|
"CACHE_DEFAULT_TIMEOUT": 300,
|
||||||
|
"CACHE_KEY_PREFIX": "superset_",
|
||||||
|
"CACHE_REDIS_HOST": "redis",
|
||||||
|
"CACHE_REDIS_PORT": 6379,
|
||||||
|
"CACHE_REDIS_DB": 1,
|
||||||
|
"CACHE_REDIS_URL": f"redis://:{os.getenv('REDIS_PASSWORD')}@{os.getenv('REDIS_HOST')}:6379/1",
|
||||||
|
}
|
||||||
|
|
||||||
|
FILTER_STATE_CACHE_CONFIG = {**CACHE_CONFIG, "CACHE_KEY_PREFIX": "superset_filter_"}
|
||||||
|
EXPLORE_FORM_DATA_CACHE_CONFIG = {**CACHE_CONFIG, "CACHE_KEY_PREFIX": "superset_explore_form_"}
|
||||||
|
|
||||||
|
SQLALCHEMY_TRACK_MODIFICATIONS = True
|
||||||
|
SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{os.getenv('POSTGRES_USER')}:{os.getenv('POSTGRES_PASSWORD')}@{os.getenv('POSTGRES_HOST')}:5432/{os.getenv('POSTGRES_DB')}"
|
||||||
|
|
||||||
|
# Uncomment if you want to load example data (using "superset load_examples") at the
|
||||||
|
# same location as your metadata postgresql instance. Otherwise, the default sqlite
|
||||||
|
# will be used, which will not persist in volume when restarting superset by default.
|
||||||
|
#SQLALCHEMY_EXAMPLES_URI = SQLALCHEMY_DATABASE_URI
|
||||||
|
"""
|
||||||
25
blueprints/teable/template.toml
Normal file
25
blueprints/teable/template.toml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
db_password = "${password}"
|
||||||
|
public_db_port = "${randomPort}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "teable"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
TEABLE_HOST = "${main_domain}"
|
||||||
|
TEABLE_DB_PORT = "${public_db_port}"
|
||||||
|
TIMEZONE = "UTC"
|
||||||
|
POSTGRES_HOST = "teable-db"
|
||||||
|
POSTGRES_PORT = "5432"
|
||||||
|
POSTGRES_DB = "teable"
|
||||||
|
POSTGRES_USER = "teable"
|
||||||
|
POSTGRES_PASSWORD = "${db_password}"
|
||||||
|
PUBLIC_ORIGIN = "https://${main_domain}"
|
||||||
|
PRISMA_DATABASE_URL = "postgresql://teable:${db_password}@teable-db:5432/teable"
|
||||||
|
PUBLIC_DATABASE_PROXY = "${TEABLE_HOST}:${TEABLE_DB_PORT}"
|
||||||
26
blueprints/tolgee/template.toml
Normal file
26
blueprints/tolgee/template.toml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
jwt_secret = "${base64:32}"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "app"
|
||||||
|
port = 8_080
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
TOLGEE_HOST = "${main_domain}"
|
||||||
|
TOLGEE_AUTHENTICATION_ENABLED = "true"
|
||||||
|
TOLGEE_AUTHENTICATION_INITIAL_PASSWORD = "admin"
|
||||||
|
TOLGEE_AUTHENTICATION_INITIAL_USERNAME = "admin"
|
||||||
|
TOLGEE_AUTHENTICATION_JWT_SECRET = "${jwt_secret}"
|
||||||
|
TOLGEE_MACHINE_TRANSLATION_GOOGLE_API_KEY = "my_google_api_key"
|
||||||
|
TOLGEE_SMTP_AUTH = "true"
|
||||||
|
TOLGEE_SMTP_FROM = "Tolgee <no-reply@mydomain.com>"
|
||||||
|
TOLGEE_SMTPHOST = "email-smtp.regional-region.amazonaws.com"
|
||||||
|
TOLGEE_SMTP_PASSWORD = "omg/my/password"
|
||||||
|
TOLGEE_SMTP_PORT = "465"
|
||||||
|
TOLGEE_SMTP_SSL_ENABLED = "true"
|
||||||
|
TOLGEE_SMTP_USERNAME = "user@company.com"
|
||||||
45
blueprints/triggerdotdev/template.toml
Normal file
45
blueprints/triggerdotdev/template.toml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[variables]
|
||||||
|
main_domain = "${domain}"
|
||||||
|
magic_link_secret = "${base64:16}"
|
||||||
|
session_secret = "${base64:16}"
|
||||||
|
encryption_key = "${base64:32}"
|
||||||
|
provider_secret = "${base64:32}"
|
||||||
|
coordinator_secret = "${base64:32}"
|
||||||
|
db_password = "${base64:24}"
|
||||||
|
db_user = "triggeruser"
|
||||||
|
db_name = "triggerdb"
|
||||||
|
|
||||||
|
[config]
|
||||||
|
mounts = [ ]
|
||||||
|
|
||||||
|
[[config.domains]]
|
||||||
|
serviceName = "webapp"
|
||||||
|
port = 3_000
|
||||||
|
host = "${main_domain}"
|
||||||
|
|
||||||
|
[config.env]
|
||||||
|
NODE_ENV = "production"
|
||||||
|
RUNTIME_PLATFORM = "docker-compose"
|
||||||
|
V3_ENABLED = "true"
|
||||||
|
TRIGGER_DOMAIN = "${main_domain}"
|
||||||
|
TRIGGER_PROTOCOL = "http"
|
||||||
|
POSTGRES_USER = "${db_user}"
|
||||||
|
POSTGRES_PASSWORD = "${db_password}"
|
||||||
|
POSTGRES_DB = "${db_name}"
|
||||||
|
DATABASE_URL = "postgresql://${db_user}:${db_password}@postgres:5432/${db_name}"
|
||||||
|
MAGIC_LINK_SECRET = "${magic_link_secret}"
|
||||||
|
SESSION_SECRET = "${session_secret}"
|
||||||
|
ENCRYPTION_KEY = "${encryption_key}"
|
||||||
|
PROVIDER_SECRET = "${provider_secret}"
|
||||||
|
COORDINATOR_SECRET = "${coordinator_secret}"
|
||||||
|
INTERNAL_OTEL_TRACE_DISABLED = "1"
|
||||||
|
INTERNAL_OTEL_TRACE_LOGGING_ENABLED = "0"
|
||||||
|
DEFAULT_ORG_EXECUTION_CONCURRENCY_LIMIT = "300"
|
||||||
|
DEFAULT_ENV_EXECUTION_CONCURRENCY_LIMIT = "100"
|
||||||
|
DIRECT_URL = "${DATABASE_URL}"
|
||||||
|
REDIS_HOST = "redis"
|
||||||
|
REDIS_PORT = "6379"
|
||||||
|
REDIS_TLS_DISABLED = "true"
|
||||||
|
HTTP_SERVER_PORT = "9020"
|
||||||
|
COORDINATOR_HOST = "127.0.0.1"
|
||||||
|
COORDINATOR_PORT = "${HTTP_SERVER_PORT}"
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user