Merge branch 'canary' into template-erpnext

This commit is contained in:
Mauricio Siu
2025-01-26 15:20:30 -06:00
22 changed files with 520 additions and 104 deletions
@@ -0,0 +1,14 @@
version: '3.3'
services:
alist:
image: xhofe/alist:v3.41.0
volumes:
- alist-data:/opt/alist/data
environment:
- PUID=0
- PGID=0
- UMASK=022
restart: unless-stopped
volumes:
alist-data:
+22
View File
@@ -0,0 +1,22 @@
import {
type DomainSchema,
type Schema,
type Template,
generateRandomDomain,
} from "../utils";
export function generate(schema: Schema): Template {
const mainDomain = generateRandomDomain(schema);
const domains: DomainSchema[] = [
{
host: mainDomain,
port: 5244,
serviceName: "alist",
},
];
return {
domains,
};
}
@@ -0,0 +1,37 @@
services:
app:
image: ghcr.io/maybe-finance/maybe:sha-68c570eed8810fd59b5b33cca51bbad5eabb4cb4
restart: unless-stopped
volumes:
- ../files/uploads:/app/uploads
environment:
DATABASE_URL: postgresql://maybe:maybe@db:5432/maybe
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
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
networks:
- dokploy-network
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: maybe
POSTGRES_USER: maybe
POSTGRES_PASSWORD: maybe
volumes:
db-data:
+43
View File
@@ -0,0 +1,43 @@
import {
type DomainSchema,
type Schema,
type Template,
generateBase64,
generateRandomDomain,
} from "../utils";
export function generate(schema: Schema): Template {
const mainDomain = generateRandomDomain(schema);
const secretKeyBase = generateBase64(64);
const synthApiKey = generateBase64(32);
const domains: DomainSchema[] = [
{
host: mainDomain,
port: 3000,
serviceName: "app",
},
];
const envs = [
`SECRET_KEY_BASE=${secretKeyBase}`,
"SELF_HOSTED=true",
`SYNTH_API_KEY=${synthApiKey}`,
"RAILS_FORCE_SSL=false",
"RAILS_ASSUME_SSL=false",
"GOOD_JOB_EXECUTION_MODE=async",
];
const mounts: Template["mounts"] = [
{
filePath: "./uploads",
content: "This is where user uploads will be stored",
},
];
return {
envs,
mounts,
domains,
};
}
@@ -0,0 +1,9 @@
services:
server:
image: ghcr.io/spacedriveapp/spacedrive/server:latest
ports:
- 8080
environment:
- SD_AUTH=${SD_USERNAME}:${SD_PASSWORD}
volumes:
- /var/spacedrive:/var/spacedrive
@@ -0,0 +1,28 @@
import {
type DomainSchema,
type Schema,
type Template,
generatePassword,
generateRandomDomain,
} from "../utils";
export function generate(schema: Schema): Template {
const randomDomain = generateRandomDomain(schema);
const secretKey = generatePassword();
const randomUsername = "admin"; // Default username
const domains: DomainSchema[] = [
{
host: randomDomain,
port: 8080,
serviceName: "server",
},
];
const envs = [`SD_USERNAME=${randomUsername}`, `SD_PASSWORD=${secretKey}`];
return {
envs,
domains,
};
}
@@ -13,8 +13,11 @@ services:
image: amancevice/superset
restart: always
depends_on:
- db
- redis
- superset_postgres
- superset_redis
volumes:
# This superset_config.py can be edited in Dokploy's UI Advanced -> Volume Mount
- ../files/superset/superset_config.py:/etc/superset/superset_config.py
environment:
SECRET_KEY: ${SECRET_KEY}
MAPBOX_API_KEY: ${MAPBOX_API_KEY}
@@ -22,11 +25,11 @@ services:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
# Note: superset_config.py can be edited in Dokploy's UI Volume Mount
- ../files/superset/superset_config.py:/etc/superset/superset_config.py
# Ensure the hosts matches your service names below.
POSTGRES_HOST: superset_postgres
REDIS_HOST: superset_redis
db:
superset_postgres:
image: postgres
restart: always
environment:
@@ -34,7 +37,7 @@ services:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgres:/var/lib/postgresql/data
- superset_postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 30s
@@ -43,11 +46,11 @@ services:
networks:
- dokploy-network
redis:
superset_redis:
image: redis
restart: always
volumes:
- redis:/data
- superset_redis_data:/data
command: redis-server --requirepass ${REDIS_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
@@ -58,5 +61,5 @@ services:
- dokploy-network
volumes:
postgres:
redis:
superset_postgres_data:
superset_redis_data:
+2 -2
View File
@@ -47,13 +47,13 @@ CACHE_CONFIG = {
"CACHE_REDIS_HOST": "redis",
"CACHE_REDIS_PORT": 6379,
"CACHE_REDIS_DB": 1,
"CACHE_REDIS_URL": f"redis://:{os.getenv('REDIS_PASSWORD')}@redis:6379/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_DATABASE_URI = f"postgresql+psycopg2://{os.getenv('POSTGRES_USER')}:{os.getenv('POSTGRES_PASSWORD')}@db:5432/{os.getenv('POSTGRES_DB')}"
SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{os.getenv('POSTGRES_USER')}:{os.getenv('POSTGRES_PASSWORD')}@{os.getenv('POSTGRES_HOST')}:5432/{os.getenv('POSTGRES_DB')}"
SQLALCHEMY_TRACK_MODIFICATIONS = True
`.trim(),
},
+47 -2
View File
@@ -538,7 +538,7 @@ export const templates: TemplateData[] = [
website: "https://filebrowser.org/",
docs: "https://filebrowser.org/",
},
tags: ["file", "manager"],
tags: ["file-manager", "storage"],
load: () => import("./filebrowser/index").then((m) => m.generate),
},
{
@@ -834,7 +834,7 @@ export const templates: TemplateData[] = [
website: "https://nextcloud.com/",
docs: "https://docs.nextcloud.com/",
},
tags: ["file", "sync"],
tags: ["file-manager", "sync"],
load: () => import("./nextcloud-aio/index").then((m) => m.generate),
},
{
@@ -1363,4 +1363,49 @@ export const templates: TemplateData[] = [
],
load: () => import("./erpnext/index").then((m) => m.generate),
},
{
id: "maybe",
name: "Maybe",
version: "latest",
description:
"Maybe is a self-hosted finance tracking application designed to simplify budgeting and expenses.",
logo: "maybe.svg",
links: {
github: "https://github.com/maybe-finance/maybe",
website: "https://maybe.finance/",
docs: "https://docs.maybe.finance/",
},
tags: ["finance", "self-hosted"],
load: () => import("./maybe/index").then((m) => m.generate),
},
{
id: "spacedrive",
name: "Spacedrive",
version: "latest",
description:
"Spacedrive is a cross-platform file manager. It connects your devices together to help you organize files from anywhere. powered by a virtual distributed filesystem (VDFS) written in Rust. Organize files across many devices in one place.",
links: {
github: "https://github.com/spacedriveapp/spacedrive",
website: "https://spacedrive.com/",
docs: "https://www.spacedrive.com/docs/product/getting-started/introduction",
},
logo: "spacedrive.png",
tags: ["file-manager", "vdfs", "storage"],
load: () => import("./spacedrive/index").then((m) => m.generate),
},
{
id: "alist",
name: "AList",
version: "v3.41.0",
description:
"🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs.",
logo: "alist.svg",
links: {
github: "https://github.com/AlistGo/alist",
website: "https://alist.nn.ci",
docs: "https://alist.nn.ci/guide/install/docker.html",
},
tags: ["file", "webdav", "storage"],
load: () => import("./alist/index").then((m) => m.generate),
},
];