diff --git a/blueprints/drawnix/docker-compose.yml b/blueprints/drawnix/docker-compose.yml new file mode 100644 index 00000000..ed2b72ac --- /dev/null +++ b/blueprints/drawnix/docker-compose.yml @@ -0,0 +1,5 @@ +version: "3.8" +services: + drawnix: + image: pubuzhixing/drawnix:latest + restart: unless-stopped diff --git a/blueprints/drawnix/image.png b/blueprints/drawnix/image.png new file mode 100644 index 00000000..4bfc1847 Binary files /dev/null and b/blueprints/drawnix/image.png differ diff --git a/blueprints/drawnix/template.toml b/blueprints/drawnix/template.toml new file mode 100644 index 00000000..badaec91 --- /dev/null +++ b/blueprints/drawnix/template.toml @@ -0,0 +1,17 @@ +[variables] +main_domain = "${domain}" + +[config] +[[config.domains]] +serviceName = "drawnix" +port = 3000 +host = "${main_domain}" + +[config.env] + +[[config.mounts]] +# No specific mounts required based on available documentation; added a placeholder for potential configuration file if needed in future +filePath = "/app/config.txt" +content = """ +# Placeholder content - customize if the application requires persistent configuration +""" diff --git a/blueprints/etherpad/docker-compose.yml b/blueprints/etherpad/docker-compose.yml new file mode 100644 index 00000000..c4159536 --- /dev/null +++ b/blueprints/etherpad/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.8" +services: + app: + user: "0:0" + image: etherpad/etherpad:latest + tty: true + stdin_open: true + volumes: + - ../files/plugins:/opt/etherpad-lite/src/plugin_packages + - ../files/etherpad_var:/opt/etherpad-lite/var + depends_on: + - postgres + environment: + NODE_ENV: ${NODE_ENV} + ADMIN_PASSWORD: ${ADMIN_PASSWORD} + DB_CHARSET: ${DB_CHARSET} + DB_HOST: ${DB_HOST} + DB_NAME: ${DB_NAME} + DB_PASS: ${DB_PASS} + DB_PORT: ${DB_PORT} + DB_TYPE: ${DB_TYPE} + DB_USER: ${DB_USER} + DEFAULT_PAD_TEXT: ${DEFAULT_PAD_TEXT} + DISABLE_IP_LOGGING: ${DISABLE_IP_LOGGING} + SOFFICE: ${SOFFICE} + TRUST_PROXY: ${TRUST_PROXY} + restart: always + expose: + - 9001 + postgres: + image: postgres:15-alpine + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER} + PGDATA: /var/lib/postgresql/data/pgdata + restart: always + volumes: + - ../files/postgres_data:/var/lib/postgresql/data/pgdata diff --git a/blueprints/etherpad/image.png b/blueprints/etherpad/image.png new file mode 100644 index 00000000..fb187548 Binary files /dev/null and b/blueprints/etherpad/image.png differ diff --git a/blueprints/etherpad/template.toml b/blueprints/etherpad/template.toml new file mode 100644 index 00000000..57620292 --- /dev/null +++ b/blueprints/etherpad/template.toml @@ -0,0 +1,28 @@ +[variables] +main_domain = "${domain}" +admin_password = "${password:32}" +postgres_password = "${password:32}" + +[config] +[[config.domains]] +serviceName = "app" +port = 9001 +host = "${main_domain}" + +[config.env] +NODE_ENV = "production" +ADMIN_PASSWORD = "${admin_password}" +DB_CHARSET = "utf8mb4" +DB_HOST = "postgres" +DB_NAME = "etherpad" +DB_PASS = "${postgres_password}" +DB_PORT = "5432" +DB_TYPE = "postgres" +DB_USER = "admin" +DEFAULT_PAD_TEXT = " " +DISABLE_IP_LOGGING = "false" +SOFFICE = "null" +TRUST_PROXY = "true" +POSTGRES_DB = "etherpad" +POSTGRES_PASSWORD = "${postgres_password}" +POSTGRES_USER = "admin" diff --git a/blueprints/gitingest/docker-compose.yml b/blueprints/gitingest/docker-compose.yml new file mode 100644 index 00000000..690e2554 --- /dev/null +++ b/blueprints/gitingest/docker-compose.yml @@ -0,0 +1,9 @@ +version: "3.8" +services: + gitingest: + image: elestio/gitingest:${SOFTWARE_VERSION_TAG} + restart: unless-stopped + expose: + - 8000 + environment: + - ALLOWED_HOSTS=${ALLOWED_HOSTS} diff --git a/blueprints/gitingest/image.png b/blueprints/gitingest/image.png new file mode 100644 index 00000000..31468b2a Binary files /dev/null and b/blueprints/gitingest/image.png differ diff --git a/blueprints/gitingest/template.toml b/blueprints/gitingest/template.toml new file mode 100644 index 00000000..e96eaa83 --- /dev/null +++ b/blueprints/gitingest/template.toml @@ -0,0 +1,13 @@ +[variables] +main_domain = "${domain}" + + +[config] +[[config.domains]] +serviceName = "gitingest" +port = 8000 +host = "${main_domain}" + +[config.env] +SOFTWARE_VERSION_TAG = "latest" +ALLOWED_HOSTS = "${main_domain}" diff --git a/blueprints/hortusfox/docker-compose.yml b/blueprints/hortusfox/docker-compose.yml new file mode 100644 index 00000000..c9079cfc --- /dev/null +++ b/blueprints/hortusfox/docker-compose.yml @@ -0,0 +1,43 @@ +version: "3.8" + +services: + app: + image: ghcr.io/danielbrendel/hortusfox-web:latest + restart: unless-stopped + volumes: + - app_images:/var/www/html/public/img + - app_logs:/var/www/html/app/logs + - app_backup:/var/www/html/public/backup + - app_themes:/var/www/html/public/themes + - app_migrate:/var/www/html/app/migrations + environment: + APP_ADMIN_EMAIL: ${APP_ADMIN_EMAIL} + APP_ADMIN_PASSWORD: ${APP_ADMIN_PASSWORD} + APP_TIMEZONE: ${APP_TIMEZONE} + DB_HOST: db + DB_PORT: 3306 + DB_DATABASE: ${DB_DATABASE} + DB_USERNAME: ${DB_USERNAME} + DB_PASSWORD: ${DB_PASSWORD} + DB_CHARSET: utf8mb4 + depends_on: + - db + + db: + image: mariadb:11 + restart: unless-stopped + environment: + MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD} + MARIADB_DATABASE: ${DB_DATABASE} + MARIADB_USER: ${DB_USERNAME} + MARIADB_PASSWORD: ${DB_PASSWORD} + volumes: + - db_data:/var/lib/mysql + +volumes: + db_data: + app_images: + app_logs: + app_backup: + app_themes: + app_migrate: diff --git a/blueprints/hortusfox/image.png b/blueprints/hortusfox/image.png new file mode 100644 index 00000000..50eb07e8 Binary files /dev/null and b/blueprints/hortusfox/image.png differ diff --git a/blueprints/hortusfox/template.toml b/blueprints/hortusfox/template.toml new file mode 100644 index 00000000..19706ecd --- /dev/null +++ b/blueprints/hortusfox/template.toml @@ -0,0 +1,50 @@ +[variables] +main_domain = "${domain}" +APP_ADMIN_EMAIL = "${email}" +APP_ADMIN_PASSWORD = "${password:16}" +APP_TIMEZONE = "UTC" + +DB_DATABASE = "hortusfox" +DB_USERNAME = "hortususer" +DB_PASSWORD = "${password:20}" +MARIADB_ROOT_PASSWORD = "${password:24}" + +[config] + +[[config.domains]] +serviceName = "app" +port = 80 +host = "${main_domain}" + +[config.env] +APP_ADMIN_EMAIL = "${APP_ADMIN_EMAIL}" +APP_ADMIN_PASSWORD = "${APP_ADMIN_PASSWORD}" +APP_TIMEZONE = "${APP_TIMEZONE}" +DB_DATABASE = "${DB_DATABASE}" +DB_USERNAME = "${DB_USERNAME}" +DB_PASSWORD = "${DB_PASSWORD}" +MARIADB_ROOT_PASSWORD = "${MARIADB_ROOT_PASSWORD}" + +[[config.mounts]] +name = "app_images" +mountPath = "/var/www/html/public/img" + +[[config.mounts]] +name = "app_logs" +mountPath = "/var/www/html/app/logs" + +[[config.mounts]] +name = "app_backup" +mountPath = "/var/www/html/public/backup" + +[[config.mounts]] +name = "app_themes" +mountPath = "/var/www/html/public/themes" + +[[config.mounts]] +name = "app_migrate" +mountPath = "/var/www/html/app/migrations" + +[[config.mounts]] +name = "db_data" +mountPath = "/var/lib/mysql" diff --git a/blueprints/kitchenowl/docker-compose.yml b/blueprints/kitchenowl/docker-compose.yml new file mode 100644 index 00000000..a9366efc --- /dev/null +++ b/blueprints/kitchenowl/docker-compose.yml @@ -0,0 +1,37 @@ +version: "3.8" + +services: + web: + image: tombursch/kitchenowl:v0.7.1 + restart: unless-stopped + environment: + - JWT_SECRET_KEY=${JWT_SECRET_KEY} + - DB_DRIVER=postgresql + - DB_HOST=db + - DB_NAME=${DB_NAME} + - DB_USER=${DB_USER} + - DB_PASSWORD=${DB_PASSWORD} + volumes: + - kitchenowl_files:/data + depends_on: + - db + + db: + image: postgres:17 + restart: unless-stopped + environment: + - POSTGRES_DB=${DB_NAME} + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + volumes: + - kitchenowl_db:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] + interval: 30s + timeout: 60s + retries: 5 + start_period: 80s + +volumes: + kitchenowl_files: {} + kitchenowl_db: {} diff --git a/blueprints/kitchenowl/image.png b/blueprints/kitchenowl/image.png new file mode 100644 index 00000000..17fb9b09 Binary files /dev/null and b/blueprints/kitchenowl/image.png differ diff --git a/blueprints/kitchenowl/template.toml b/blueprints/kitchenowl/template.toml new file mode 100644 index 00000000..883d9d41 --- /dev/null +++ b/blueprints/kitchenowl/template.toml @@ -0,0 +1,33 @@ +[variables] +main_domain = "${domain}" +app_password = "${password:32}" +db_password = "${password:24}" +db_user = "kitchenowl" +db_name = "kitchenowl" + +[config] + +[[config.domains]] +serviceName = "web" +port = 8080 +host = "${main_domain}" + +[config.env] +JWT_SECRET_KEY = "${app_password}" +DB_DRIVER = "postgresql" +DB_HOST = "db" +DB_NAME = "${db_name}" +DB_USER = "${db_user}" +DB_PASSWORD = "${db_password}" + +# Persist uploads/attachments +[[config.mounts]] +serviceName = "web" +volumeName = "kitchenowl_files" +mountPath = "/data" + +# Persist Postgres data +[[config.mounts]] +serviceName = "db" +volumeName = "kitchenowl_db" +mountPath = "/var/lib/postgresql/data" diff --git a/blueprints/kokoro-web/docker-compose.yml b/blueprints/kokoro-web/docker-compose.yml new file mode 100644 index 00000000..d223c303 --- /dev/null +++ b/blueprints/kokoro-web/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3.8" + +services: + kokoro-web: + image: ghcr.io/eduardolat/kokoro-web:latest + restart: unless-stopped + environment: + - KW_SECRET_API_KEY=${KW_SECRET_API_KEY} + - KW_PUBLIC_NO_TRACK=${KW_PUBLIC_NO_TRACK} + volumes: + - kokoro-cache:/kokoro/cache + +volumes: + kokoro-cache: {} diff --git a/blueprints/kokoro-web/image.png b/blueprints/kokoro-web/image.png new file mode 100644 index 00000000..4e85561d Binary files /dev/null and b/blueprints/kokoro-web/image.png differ diff --git a/blueprints/kokoro-web/template.toml b/blueprints/kokoro-web/template.toml new file mode 100644 index 00000000..aadff30a --- /dev/null +++ b/blueprints/kokoro-web/template.toml @@ -0,0 +1,14 @@ +[variables] +main_domain = "${domain}" +api_key = "${password:32}" # Secure random API key for Kokoro Web +no_track = "false" # Set to "true" to opt out of analytics + +[config] +[[config.domains]] +serviceName = "kokoro-web" +port = 3000 +host = "${main_domain}" + +[config.env] +KW_SECRET_API_KEY = "${api_key}" +KW_PUBLIC_NO_TRACK = "${no_track}" diff --git a/blueprints/morphos/docker-compose.yml b/blueprints/morphos/docker-compose.yml new file mode 100644 index 00000000..21fa6872 --- /dev/null +++ b/blueprints/morphos/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.8" +services: + morphos-server: + image: ghcr.io/danvergara/morphos-server:latest + restart: unless-stopped + expose: + - 8080 + volumes: + - ../files/morphos-upload:/upload:rw + healthcheck: + test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/8080' || exit 1 + interval: 10s + timeout: 5s + retries: 3 + start_period: 90s diff --git a/blueprints/morphos/image.png b/blueprints/morphos/image.png new file mode 100644 index 00000000..973e5aa1 Binary files /dev/null and b/blueprints/morphos/image.png differ diff --git a/blueprints/morphos/template.toml b/blueprints/morphos/template.toml new file mode 100644 index 00000000..3e35e2b3 --- /dev/null +++ b/blueprints/morphos/template.toml @@ -0,0 +1,19 @@ +[variables] +main_domain = "${domain}" + +[config] +[[config.domains]] +serviceName = "morphos-server" +port = 8080 +host = "${main_domain}" +tls = true +certResolver = "letsencrypt" + +[config.env] +# No environment variables required based on provided information + +[[config.mounts]] +source = "../files/morphos-upload" +target = "/upload" +type = "bind" +readOnly = false \ No newline at end of file diff --git a/blueprints/pastefy/docker-compose.yml b/blueprints/pastefy/docker-compose.yml new file mode 100644 index 00000000..5ccedb0a --- /dev/null +++ b/blueprints/pastefy/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.8" +services: + db: + image: mariadb:10.11 + restart: unless-stopped + volumes: + - "../files/db:/var/lib/mysql" + environment: + MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} + MYSQL_DATABASE: ${DB_NAME} + MYSQL_USER: ${DB_USER} + MYSQL_PASSWORD: ${DB_PASSWORD} + pastefy: + image: interaapps/pastefy:latest + restart: unless-stopped + depends_on: + - db + expose: + - "80" + environment: + HTTP_SERVER_PORT: 80 + HTTP_SERVER_CORS: ${HTTP_SERVER_CORS} + DATABASE_DRIVER: mysql + DATABASE_NAME: ${DB_NAME} + DATABASE_USER: ${DB_USER} + DATABASE_PASSWORD: ${DB_PASSWORD} + DATABASE_HOST: db + DATABASE_PORT: 3306 + SERVER_NAME: ${SERVER_NAME} + OAUTH2_INTERAAPPS_CLIENT_ID: ${OAUTH2_INTERAAPPS_CLIENT_ID} + OAUTH2_INTERAAPPS_CLIENT_SECRET: ${OAUTH2_INTERAAPPS_CLIENT_SECRET} + OAUTH2_GITHUB_CLIENT_ID: ${OAUTH2_GITHUB_CLIENT_ID} + OAUTH2_GITHUB_CLIENT_SECRET: ${OAUTH2_GITHUB_CLIENT_SECRET} + OAUTH2_GOOGLE_CLIENT_ID: ${OAUTH2_GOOGLE_CLIENT_ID} + OAUTH2_GOOGLE_CLIENT_SECRET: ${OAUTH2_GOOGLE_CLIENT_SECRET} + OAUTH2_DISCORD_CLIENT_ID: ${OAUTH2_DISCORD_CLIENT_ID} + OAUTH2_DISCORD_CLIENT_SECRET: ${OAUTH2_DISCORD_CLIENT_SECRET} + OAUTH2_TWITCH_CLIENT_ID: ${OAUTH2_TWITCH_CLIENT_ID} + OAUTH2_TWITCH_CLIENT_SECRET: ${OAUTH2_TWITCH_CLIENT_SECRET} diff --git a/blueprints/pastefy/image.png b/blueprints/pastefy/image.png new file mode 100644 index 00000000..65cdb450 Binary files /dev/null and b/blueprints/pastefy/image.png differ diff --git a/blueprints/pastefy/template.toml b/blueprints/pastefy/template.toml new file mode 100644 index 00000000..58a66cc7 --- /dev/null +++ b/blueprints/pastefy/template.toml @@ -0,0 +1,43 @@ +[variables] +main_domain = "${domain}" +db_root_password = "${password:32}" +db_password = "${password:32}" +db_user = "pastefy" +db_name = "pastefy" +http_server_cors = "*" +server_name = "https://${main_domain}" +oauth2_interaapps_client_id = "NONE" +oauth2_interaapps_client_secret = "" +oauth2_github_client_id = "NONE" +oauth2_github_client_secret = "" +oauth2_google_client_id = "NONE" +oauth2_google_client_secret = "" +oauth2_discord_client_id = "NONE" +oauth2_discord_client_secret = "" +oauth2_twitch_client_id = "NONE" +oauth2_twitch_client_secret = "" + +[[config.domains]] +serviceName = "pastefy" +port = 80 +host = "${main_domain}" + +[config] +env = [ + "DB_ROOT_PASSWORD=${db_root_password}", + "DB_NAME=${db_name}", + "DB_USER=${db_user}", + "DB_PASSWORD=${db_password}", + "HTTP_SERVER_CORS=${http_server_cors}", + "SERVER_NAME=${server_name}", + "OAUTH2_INTERAAPPS_CLIENT_ID=${oauth2_interaapps_client_id} # Interaapps API Key (optional)", + "OAUTH2_INTERAAPPS_CLIENT_SECRET=${oauth2_interaapps_client_secret} # Interaapps API Secret (optional)", + "OAUTH2_GITHUB_CLIENT_ID=${oauth2_github_client_id} # GitHub API Key (optional)", + "OAUTH2_GITHUB_CLIENT_SECRET=${oauth2_github_client_secret} # GitHub API Secret (optional)", + "OAUTH2_GOOGLE_CLIENT_ID=${oauth2_google_client_id} # Google API Key (optional)", + "OAUTH2_GOOGLE_CLIENT_SECRET=${oauth2_google_client_secret} # Google API Secret (optional)", + "OAUTH2_DISCORD_CLIENT_ID=${oauth2_discord_client_id} # Discord API Key (optional)", + "OAUTH2_DISCORD_CLIENT_SECRET=${oauth2_discord_client_secret} # Discord API Secret (optional)", + "OAUTH2_TWITCH_CLIENT_ID=${oauth2_twitch_client_id} # Twitch API Key (optional)", + "OAUTH2_TWITCH_CLIENT_SECRET=${oauth2_twitch_client_secret} # Twitch API Secret (optional)" +] \ No newline at end of file diff --git a/blueprints/picsur/docker-compose.yml b/blueprints/picsur/docker-compose.yml new file mode 100644 index 00000000..c19df6e6 --- /dev/null +++ b/blueprints/picsur/docker-compose.yml @@ -0,0 +1,29 @@ +version: "3.8" + +services: + picsur: + image: ghcr.io/caramelfur/picsur:latest + restart: unless-stopped + environment: + PICSUR_DB_HOST: picsur_postgres + PICSUR_DB_PORT: 5432 + PICSUR_DB_USERNAME: picsur + PICSUR_DB_PASSWORD: ${POSTGRES_PASSWORD} + PICSUR_DB_DATABASE: picsur + PICSUR_ADMIN_PASSWORD: ${ADMIN_PASSWORD} + PICSUR_JWT_SECRET: ${JWT_SECRET} + expose: + - 8080 + + picsur_postgres: + image: postgres:17-alpine + restart: unless-stopped + environment: + POSTGRES_DB: picsur + POSTGRES_USER: picsur + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + volumes: + - picsur-data:/var/lib/postgresql/data + +volumes: + picsur-data: {} diff --git a/blueprints/picsur/image.png b/blueprints/picsur/image.png new file mode 100644 index 00000000..ce2486b0 Binary files /dev/null and b/blueprints/picsur/image.png differ diff --git a/blueprints/picsur/template.toml b/blueprints/picsur/template.toml new file mode 100644 index 00000000..89fcc143 --- /dev/null +++ b/blueprints/picsur/template.toml @@ -0,0 +1,23 @@ +[variables] +main_domain = "${domain}" +postgres_password = "${password:32}" +admin_password = "${password:32}" +jwt_secret = "${jwt:jwt_secret}" + +[config] + +[[config.domains]] +serviceName = "picsur" +port = 8080 +host = "${main_domain}" + +[config.env] +"PICSUR_DB_PASSWORD" = "${postgres_password}" +"PICSUR_ADMIN_PASSWORD" = "${admin_password}" +"PICSUR_JWT_SECRET" = "${jwt_secret}" +"POSTGRES_PASSWORD" = "${postgres_password}" + +[[config.mounts]] +name = "picsur-data" +serviceName = "picsur_postgres" +mountPath = "/var/lib/postgresql/data" diff --git a/blueprints/tor-browser/docker-compose.yml b/blueprints/tor-browser/docker-compose.yml new file mode 100644 index 00000000..ea1eff4c --- /dev/null +++ b/blueprints/tor-browser/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3.9" + +services: + tor: + image: domistyle/tor-browser + restart: always + expose: + - 5800 + - 5900 + environment: + DISPLAY_WIDTH: ${DISPLAY_WIDTH} + DISPLAY_HEIGHT: ${DISPLAY_HEIGHT} + KEEP_APP_RUNNING: ${KEEP_APP_RUNNING} + TZ: ${TZ} diff --git a/blueprints/tor-browser/image.png b/blueprints/tor-browser/image.png new file mode 100644 index 00000000..af03d828 Binary files /dev/null and b/blueprints/tor-browser/image.png differ diff --git a/blueprints/tor-browser/template.toml b/blueprints/tor-browser/template.toml new file mode 100644 index 00000000..5b7263fc --- /dev/null +++ b/blueprints/tor-browser/template.toml @@ -0,0 +1,20 @@ +[variables] +main_domain = "${domain}" +display_width = "1920" +display_height = "1080" +keep_app_running = "1" +timezone = "Europe/Vienna" + +[config] +[[config.domains]] +serviceName = "tor" +port = 5800 +host = "${main_domain}" + +[config.env] +DISPLAY_WIDTH = "${display_width}" +DISPLAY_HEIGHT = "${display_height}" +KEEP_APP_RUNNING = "${keep_app_running}" +TZ = "${timezone}" + +[[config.mounts]] diff --git a/blueprints/vikunja/docker-compose.yml b/blueprints/vikunja/docker-compose.yml new file mode 100644 index 00000000..11b744b0 --- /dev/null +++ b/blueprints/vikunja/docker-compose.yml @@ -0,0 +1,39 @@ +version: "3.8" + +services: + vikunja: + image: vikunja/vikunja + environment: + VIKUNJA_SERVICE_PUBLICURL: http://vikunja.local + VIKUNJA_DATABASE_HOST: db + VIKUNJA_DATABASE_PASSWORD: ${VIKUNJA_DATABASE_PASSWORD} + VIKUNJA_DATABASE_TYPE: postgres + VIKUNJA_DATABASE_USER: vikunja + VIKUNJA_DATABASE_DATABASE: vikunja + VIKUNJA_SERVICE_JWTSECRET: ${VIKUNJA_SERVICE_JWTSECRET} + expose: + - 3456 + volumes: + - vikunja-files:/app/vikunja/files + depends_on: + db: + condition: service_healthy + restart: unless-stopped + + db: + image: postgres:17 + environment: + POSTGRES_PASSWORD: ${VIKUNJA_DATABASE_PASSWORD} + POSTGRES_USER: vikunja + POSTGRES_DB: vikunja + volumes: + - vikunja-db:/var/lib/postgresql/data + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"] + interval: 2s + start_period: 30s + +volumes: + vikunja-files: {} + vikunja-db: {} diff --git a/blueprints/vikunja/image.png b/blueprints/vikunja/image.png new file mode 100644 index 00000000..7a70b837 Binary files /dev/null and b/blueprints/vikunja/image.png differ diff --git a/blueprints/vikunja/template.toml b/blueprints/vikunja/template.toml new file mode 100644 index 00000000..0a4e88f9 --- /dev/null +++ b/blueprints/vikunja/template.toml @@ -0,0 +1,33 @@ +[variables] +main_domain = "${domain}" +db_password = "${password:32}" +jwt_secret = "${jwt:db_password}" + +[config] +[[config.domains]] +serviceName = "vikunja" +port = 3456 +host = "${main_domain}" + +[config.env] +VIKUNJA_SERVICE_PUBLICURL = "https://${main_domain}" +VIKUNJA_DATABASE_HOST = "db" +VIKUNJA_DATABASE_PASSWORD = "${db_password}" +VIKUNJA_DATABASE_TYPE = "postgres" +VIKUNJA_DATABASE_USER = "vikunja" +VIKUNJA_DATABASE_DATABASE = "vikunja" +VIKUNJA_SERVICE_JWTSECRET = "${jwt_secret}" + +POSTGRES_PASSWORD = "${db_password}" +POSTGRES_USER = "vikunja" +POSTGRES_DB = "vikunja" + +[[config.mounts]] +serviceName = "vikunja" +volumeName = "vikunja-files" +mountPath = "/app/vikunja/files" + +[[config.mounts]] +serviceName = "db" +volumeName = "vikunja-db" +mountPath = "/var/lib/postgresql/data" diff --git a/blueprints/wanderer/docker-compose.yml b/blueprints/wanderer/docker-compose.yml new file mode 100644 index 00000000..c0712e40 --- /dev/null +++ b/blueprints/wanderer/docker-compose.yml @@ -0,0 +1,72 @@ +version: "3.8" + +services: + search: + image: getmeili/meilisearch:v1.11.3 + environment: + MEILI_URL: http://search:7700 + MEILI_MASTER_KEY: ${MEILI_MASTER_KEY} + MEILI_NO_ANALYTICS: "true" + volumes: + - search-data:/meili_data/data.ms + restart: unless-stopped + healthcheck: + test: curl --fail http://localhost:7700/health || exit 1 + interval: 15s + retries: 10 + start_period: 20s + timeout: 10s + + db: + image: flomp/wanderer-db + depends_on: + search: + condition: service_healthy + environment: + MEILI_URL: http://search:7700 + MEILI_MASTER_KEY: ${MEILI_MASTER_KEY} + POCKETBASE_ENCRYPTION_KEY: ${POCKETBASE_ENCRYPTION_KEY} + ORIGIN: ${ORIGIN} + volumes: + - db-data:/pb_data + restart: unless-stopped + healthcheck: + test: wget --spider -q http://localhost:8090/health || exit 1 + interval: 15s + retries: 10 + start_period: 20s + timeout: 10s + + web: + image: flomp/wanderer-web + depends_on: + search: + condition: service_healthy + db: + condition: service_healthy + environment: + MEILI_URL: http://search:7700 + MEILI_MASTER_KEY: ${MEILI_MASTER_KEY} + ORIGIN: ${ORIGIN} + BODY_SIZE_LIMIT: Infinity + PUBLIC_POCKETBASE_URL: http://db:8090 + PUBLIC_DISABLE_SIGNUP: "false" + UPLOAD_FOLDER: /app/uploads + UPLOAD_USER: ${UPLOAD_USER} + UPLOAD_PASSWORD: ${UPLOAD_PASSWORD} + PUBLIC_VALHALLA_URL: https://valhalla1.openstreetmap.de + PUBLIC_NOMINATIM_URL: https://nominatim.openstreetmap.org + volumes: + - uploads:/app/uploads + restart: unless-stopped + healthcheck: + test: curl --fail http://localhost:3000/ || exit 1 + interval: 15s + retries: 10 + start_period: 20s + timeout: 10s + +volumes: + search-data: {} + db-data: {} + uploads: {} diff --git a/blueprints/wanderer/image.png b/blueprints/wanderer/image.png new file mode 100644 index 00000000..826da321 Binary files /dev/null and b/blueprints/wanderer/image.png differ diff --git a/blueprints/wanderer/template.toml b/blueprints/wanderer/template.toml new file mode 100644 index 00000000..a1138975 --- /dev/null +++ b/blueprints/wanderer/template.toml @@ -0,0 +1,46 @@ +[variables] +main_domain = "${domain}" +meili_master_key = "${password:32}" +pocketbase_key = "${password:32}" +upload_user = "${username}" +upload_password = "${password:16}" + +[config] + +[[config.domains]] +serviceName = "web" +port = 3000 +host = "${main_domain}" + +[[config.domains]] +serviceName = "db" +port = 8090 +host = "db.${main_domain}" + +[[config.domains]] +serviceName = "search" +port = 7700 +host = "search.${main_domain}" + +[config.env] +MEILI_MASTER_KEY = "${meili_master_key}" +POCKETBASE_ENCRYPTION_KEY = "${pocketbase_key}" +UPLOAD_USER = "${upload_user}" +UPLOAD_PASSWORD = "${upload_password}" +ORIGIN = "http://${main_domain}" + + +[[config.mounts]] +serviceName = "search" +volumeName = "search-data" +mountPath = "/meili_data/data.ms" + +[[config.mounts]] +serviceName = "db" +volumeName = "db-data" +mountPath = "/pb_data" + +[[config.mounts]] +serviceName = "web" +volumeName = "uploads" +mountPath = "/app/uploads" diff --git a/blueprints/yamtrack/docker-compose.yml b/blueprints/yamtrack/docker-compose.yml new file mode 100644 index 00000000..1d56bab6 --- /dev/null +++ b/blueprints/yamtrack/docker-compose.yml @@ -0,0 +1,26 @@ +version: "3.8" + +services: + yamtrack: + image: ghcr.io/fuzzygrim/yamtrack + restart: unless-stopped + depends_on: + - redis + environment: + - TZ=Europe/Berlin + - SECRET=${SECRET} + - REDIS_URL=redis://redis:6379 + volumes: + - yamtrack-db:/yamtrack/db + expose: + - 8000 + + redis: + image: redis:7-alpine + restart: unless-stopped + volumes: + - redis_data:/data + +volumes: + yamtrack-db: {} + redis_data: {} diff --git a/blueprints/yamtrack/image.png b/blueprints/yamtrack/image.png new file mode 100644 index 00000000..e9a917ff Binary files /dev/null and b/blueprints/yamtrack/image.png differ diff --git a/blueprints/yamtrack/template.toml b/blueprints/yamtrack/template.toml new file mode 100644 index 00000000..bc8d119b --- /dev/null +++ b/blueprints/yamtrack/template.toml @@ -0,0 +1,19 @@ +[variables] +main_domain = "${domain}" +SECRET = "${password:64}" + +[config] +[[config.domains]] +serviceName = "yamtrack" +port = 8000 +host = "${main_domain}" + +[config.env] +SECRET = "${SECRET}" +TZ = "Europe/Berlin" +REDIS_URL = "redis://redis:6379" + +[[config.mounts]] +serviceName = "yamtrack" +volumeName = "yamtrack-db" +mountPath = "/yamtrack/db" diff --git a/meta.json b/meta.json index 91353592..82d5c6ba 100644 --- a/meta.json +++ b/meta.json @@ -1509,6 +1509,22 @@ "diagrams" ] }, + { + "id": "drawnix", + "name": "Drawnix", + "version": "latest", + "description": "Drawnix is an application for generating and managing visual content, powered by pubuzhixing/drawnix Docker image.", + "logo": "image.png", + "links": { + "github": "https://github.com/pubuzhixing/drawnix", + "website": "https://hub.docker.com/r/pubuzhixing/drawnix", + "docs": "https://hub.docker.com/r/pubuzhixing/drawnix" + }, + "tags": [ + "visualization", + "content-generation" + ] + }, { "id": "drizzle-gateway", "name": "drizzle gateway", @@ -1647,6 +1663,23 @@ "hrms" ] }, + { + "id": "etherpad", + "name": "Etherpad", + "version": "latest", + "description": "Etherpad is a real-time collaborative text editor that allows multiple users to edit documents simultaneously.", + "logo": "image.png", + "links": { + "github": "https://github.com/ether/etherpad-lite", + "website": "https://etherpad.org/", + "docs": "https://github.com/ether/etherpad-lite/wiki" + }, + "tags": [ + "collaboration", + "text-editor", + "real-time" + ] + }, { "id": "evolutionapi", "name": "Evolution API", @@ -1981,6 +2014,25 @@ "self-hosted" ] }, + { + "id": "gitingest", + "name": "Gitingest", + "version": "latest", + "description": "Gitingest is an application that supports Prometheus metrics, Sentry integration, and S3-backed storage.", + "logo": "image.png", + "links": { + "github": "https://github.com//gitingest", + "website": "https://gitingest.com", + "docs": "https://github.com//gitingest#readme" + }, + "tags": [ + "analytics", + "s3", + "monitoring", + "sentry", + "metrics" + ] + }, { "id": "gitlab-ce", "name": "GitLab CE", @@ -2242,6 +2294,26 @@ "server" ] }, + { + "id": "hortusfox", + "name": "HortusFox", + "version": "5.0", + "description": "HortusFox is an open source task and photo management app, designed for photographers and creatives to manage projects, tasks, and images effectively.", + "logo": "image.png", + "links": { + "github": "https://github.com/danielbrendel/hortusfox-web", + "website": "https://www.hortusfox.com", + "docs": "https://github.com/danielbrendel/hortusfox-web#readme", + "discord": "https://discord.gg/kc6xGmjzVS" + }, + "tags": [ + "productivity", + "photo", + "task-management", + "php", + "mariadb" + ] + }, { "id": "huly", "name": "Huly", @@ -2488,6 +2560,42 @@ "finance" ] }, + { + "id": "kitchenowl", + "name": "KitchenOwl", + "version": "v0.7.1", + "description": "KitchenOwl is a self-hosted grocery list and recipe manager.", + "logo": "image.png", + "links": { + "github": "https://github.com/TomBursch/kitchenowl", + "website": "https://kitchenowl.org/", + "docs": "https://github.com/TomBursch/kitchenowl/wiki" + }, + "tags": [ + "self-hosted", + "recipes", + "grocery", + "personal" + ] + }, + { + "id": "kokoro-web", + "name": "Kokoro Web", + "version": "latest", + "description": "Kokoro Web provides an interface for text-to-speech using advanced AI voice synthesis. It allows model caching and API integration with authentication.", + "logo": "image.png", + "links": { + "github": "https://github.com/eduardolat/kokoro-web", + "website": "https://github.com/eduardolat/kokoro-web", + "docs": "https://github.com/eduardolat/kokoro-web#readme" + }, + "tags": [ + "text-to-speech", + "ai", + "voice", + "web" + ] + }, { "id": "kutt", "name": "Kutt", @@ -2854,6 +2962,23 @@ "storage" ] }, + { + "id": "morphos", + "name": "Morphos", + "version": "latest", + "description": "Morphos is a lightweight service for distributed operations and orchestration.", + "logo": "image.png", + "links": { + "github": "https://github.com/danvergara/morphos-server", + "website": "https://github.com/danvergara/morphos-server", + "docs": "https://github.com/danvergara/morphos-server#readme" + }, + "tags": [ + "server", + "orchestration", + "lightweight" + ] + }, { "id": "movary", "name": "Movary", @@ -3222,6 +3347,24 @@ "open-source" ] }, + { + "id": "pastefy", + "name": "Pastefy", + "version": "latest", + "description": "Pastefy is an open-source pastebin with support for syntax highlighting and OAuth2 authentication.", + "logo": "image.png", + "links": { + "github": "https://github.com/interaapps/pastefy", + "website": "https://pastefy.app", + "docs": "https://github.com/interaapps/pastefy/wiki" + }, + "tags": [ + "pastebin", + "text-sharing", + "collaboration", + "oauth2" + ] + }, { "id": "penpot", "name": "Penpot", @@ -3304,6 +3447,24 @@ "database" ] }, + { + "id": "picsur", + "name": "Picsur", + "version": "latest", + "description": "Picsur is a simple, self-hosted image hosting service with an admin interface and Postgres backend.", + "logo": "image.png", + "links": { + "github": "https://github.com/CaramelFur/picsur", + "website": "https://github.com/CaramelFur/picsur", + "docs": "https://github.com/CaramelFur/picsur#readme" + }, + "tags": [ + "image-hosting", + "media", + "self-hosted", + "postgres" + ] + }, { "id": "pinchflat", "name": "Pinchflat", @@ -3969,6 +4130,24 @@ "self-hosted" ] }, + { + "id": "tor-browser", + "name": "Tor Browser", + "version": "latest", + "description": "A Dockerized Tor Browser accessible via web VNC (noVNC) and VNC client.", + "logo": "image.png", + "links": { + "github": "https://github.com/DomiStyle/docker-tor-browser", + "website": "https://www.torproject.org/", + "docs": "https://hub.docker.com/r/domistyle/tor-browser" + }, + "tags": [ + "privacy", + "security", + "browser", + "tor" + ] + }, { "id": "triggerdotdev", "name": "Trigger.dev", @@ -4161,6 +4340,24 @@ "open-source" ] }, + { + "id": "vikunja", + "name": "Vikunja", + "version": "0.23.0", + "description": "Vikunja is a self-hosted, open-source to-do list application to organize tasks, projects, and notes.", + "logo": "image.png", + "links": { + "github": "https://kolaente.dev/vikunja/", + "website": "https://vikunja.io/", + "docs": "https://vikunja.io/docs/" + }, + "tags": [ + "productivity", + "tasks", + "self-hosted", + "project-management" + ] + }, { "id": "wallos", "name": "Wallos", @@ -4180,6 +4377,24 @@ "spending" ] }, + { + "id": "wanderer", + "name": "Wanderer", + "version": "1.0.0", + "description": "Wanderer is a self-hosted mapping and geolocation platform powered by Meilisearch, PocketBase, and a web frontend.", + "logo": "image.png", + "links": { + "github": "https://github.com/flomp/wanderer", + "website": "https://wanderer.app", + "docs": "https://github.com/flomp/wanderer#readme" + }, + "tags": [ + "mapping", + "geolocation", + "search", + "self-hosted" + ] + }, { "id": "web-check", "name": "Web-Check", @@ -4281,6 +4496,25 @@ "cms" ] }, + { + "id": "yamtrack", + "name": "Yamtrack", + "version": "latest", + "description": "Yamtrack is a self-hosted anime and manga tracker with Redis backend support.", + "logo": "image.png", + "links": { + "github": "https://github.com/fuzzygrim/yamtrack", + "website": "https://github.com/fuzzygrim/yamtrack", + "docs": "https://github.com/fuzzygrim/yamtrack" + }, + "tags": [ + "media", + "anime", + "manga", + "tracker", + "redis" + ] + }, { "id": "yourls", "name": "YOURLS",