Compare commits

..
Author SHA1 Message Date
copilot-swe-agent[bot]andSiumauricio 984cf0b4d4 Add issue template configuration file
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-19 18:34:42 +00:00
copilot-swe-agent[bot] 5b54bdf266 Initial plan 2025-12-19 18:29:57 +00:00
143 changed files with 722 additions and 4940 deletions
+11
View File
@@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: 📚 Documentation
url: https://docs.dokploy.com
about: Check out the official Dokploy documentation for guides and references
- name: 🌐 Website
url: https://dokploy.com
about: Visit the official Dokploy website
- name: 💬 GitHub Discussions
url: https://github.com/Dokploy/dokploy/discussions
about: Join the community discussions for questions and support
+2 -6
View File
@@ -30,8 +30,6 @@ Exemplary blueprint: `blueprints/ghost/`—`docker-compose.yml` exposes port 236
1. **Add/Update Template**:
- **REQUIREMENT**: Service **MUST** be open source. Only add templates for applications with an open-source license (e.g., MIT, Apache, GPL, AGPL). Proprietary or closed-source services are not allowed.
- **Verify Docker Images**: Before using any Docker image in `docker-compose.yml`, verify it exists using `docker manifest inspect <image:tag>` (e.g., `docker manifest inspect docker.io/bitnami/discourse:3.5.0`). This ensures the image is available and prevents deployment failures.
- Create `blueprints/<id>/` (e.g., `ghost`).
- Implement `docker-compose.yml` (single service typical; use volumes for persistence).
- Configure `template.toml`—reference vars in `[config.domains]`, `[config.env]`, `[config.mounts]`.
@@ -47,19 +45,17 @@ No tests in repo—focus on manual validation via scripts and Dokploy deploys. D
## Conventions and Patterns
- **Open Source Requirement**: **ALL services MUST be open source**. Only applications with open-source licenses (MIT, Apache, GPL, AGPL, etc.) are allowed. Proprietary or closed-source services are strictly prohibited.
- **Template IDs**: Lowercase, kebab-case (e.g., `active-pieces`); unique across repo—enforced by dedupe script.
- **Docker Compose**: Minimal—omit `ports` (Dokploy proxies), persistent volumes (e.g., `- db-data:/var/lib/postgresql/data`). Services named after folder (e.g., `ghost` service).
- **Docker Compose**: Minimal—omit `ports` (Dokploy proxies), `restart: unless-stopped`, persistent volumes (e.g., `- db-data:/var/lib/postgresql/data`). Services named after folder (e.g., `ghost` service).
- **template.toml**:
- Variables: `[variables] main_domain = "${domain}"`; use helpers for secrets (`${password:64}`, `${base64:32}`).
- Domains: `[[config.domains]] serviceName = "<service>" port = 80 host = "${main_domain}"` (path="/" optional).
- Env: `[[config.env]]` array of "KEY=VALUE" strings, interpolating vars (e.g., "DB_PASSWORD=${db_pass}").
- **URL Variables**: When environment variables require URLs (e.g., `WEB_URL`, `NEXTAUTH_URL`, `PUBLIC_URL`), **always use HTTP by default** (e.g., `"http://${main_domain}"`). HTTPS should only be used if explicitly required by the application or when using a reverse proxy with SSL termination.
- Mounts: `[[config.mounts]] filePath = "/etc/config" content = """multi-line\ncontent"""`.
- JWT helper: `${jwt:secret_var:payload_var}` for auth tokens; payload as JSON string with `exp: ${timestamps:YYYY-MM-DDTHH:mm:ssZ}`.
- **Meta.json**: Entries as JSON objects; tags array of lowercase strings (e.g., ["monitoring", "database"]); links object with `github`, `website`, `docs`.
- **No Networks**: Rely on Dokploy's isolated deployments—avoid explicit `networks:`.
- **Versions**: Pin images to specific versions in `docker-compose.yml` (e.g., `ghost:5.82.0-alpine`); match in `meta.json.version`. **NEVER use `latest` tag**—it can break templates when upstream images change unexpectedly. **Always verify image exists** using `docker manifest inspect <image:tag>` before committing.
- **Versions**: Pin images to specific versions in `docker-compose.yml` (e.g., `ghost:5.82.0-alpine`); match in `meta.json.version`.
- **Logos**: SVG preferred; size ~128x128; file name in `meta.json.logo` (e.g., "ghost.svg").
Cross-component: Templates are independent and ship as static blueprints/meta.
+3
View File
@@ -5,6 +5,9 @@ on:
workflows: [Build Preview Deployment]
types:
- completed
pull_request:
branches:
- canary
permissions:
actions: read
deployments: write
+254 -58
View File
@@ -17,10 +17,13 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-depth: 0 # Necesitamos el historial completo para comparar con base
- name: Set up Docker Compose
run: docker compose version
run: |
echo "🐳 Setting up Docker Compose..."
# Docker Compose V2 viene preinstalado en ubuntu-latest
docker compose version
- name: Set up Node.js
uses: actions/setup-node@v4
@@ -33,89 +36,282 @@ jobs:
version: 8
- name: Install dependencies
run: cd build-scripts && pnpm install
- name: Detect changed blueprints
id: changed
run: |
echo "📦 Installing Node.js dependencies..."
cd build-scripts && pnpm install
- name: Get changed files
id: changed-files
run: |
echo "🔍 Detecting changed files..."
# Obtener la rama base
BASE_SHA=$(git merge-base HEAD origin/${{ github.base_ref }})
# Obtener todos los blueprints que tienen cambios (en docker-compose.yml o template.toml)
CHANGED_BLUEPRINTS=$(git diff --name-only --diff-filter=ACMRT $BASE_SHA HEAD | \
grep -E 'blueprints/[^/]+/(docker-compose\.yml|template\.toml)$' | \
sed 's|blueprints/\([^/]*\)/.*|\1|' | \
sort -u)
# Encontrar todos los archivos docker-compose.yml y template.toml modificados/agregados
CHANGED_COMPOSE=$(git diff --name-only --diff-filter=ACMRT $BASE_SHA HEAD | grep -E 'blueprints/.*/docker-compose\.yml$' || true)
CHANGED_TOML=$(git diff --name-only --diff-filter=ACMRT $BASE_SHA HEAD | grep -E 'blueprints/.*/template\.toml$' || true)
echo "Changed blueprints:"
echo "$CHANGED_BLUEPRINTS" | while read blueprint; do
[ -n "$blueprint" ] && echo " - $blueprint"
done
# Crear lista de directorios únicos que tienen cambios
CHANGED_DIRS=$(echo -e "$CHANGED_COMPOSE\n$CHANGED_TOML" | sed 's|blueprints/\([^/]*\)/.*|\1|' | sort -u)
# Guardar lista de blueprints (una por línea)
echo "blueprints<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_BLUEPRINTS" >> $GITHUB_OUTPUT
echo "Changed compose files:"
echo "$CHANGED_COMPOSE" | while read file; do [ -n "$file" ] && echo " - $file"; done
echo "Changed TOML files:"
echo "$CHANGED_TOML" | while read file; do [ -n "$file" ] && echo " - $file"; done
echo "Changed directories:"
echo "$CHANGED_DIRS" | while read dir; do [ -n "$dir" ] && echo " - $dir"; done
# Guardar para usar en siguientes pasos
echo "compose_files<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_COMPOSE" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
echo "toml_files<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_TOML" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
echo "directories<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_DIRS" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Validate blueprints
- name: Validate Docker Compose files syntax
id: validate-compose-syntax
run: |
BLUEPRINTS="${{ steps.changed.outputs.blueprints }}"
echo "🔍 Validating Docker Compose files syntax..."
if [ -z "$BLUEPRINTS" ] || [ "$BLUEPRINTS" = "" ]; then
echo "ℹ️ No blueprints changed, skipping validation"
ERROR=0
COMPOSE_FILES="${{ steps.changed-files.outputs.compose_files }}"
if [ -z "$COMPOSE_FILES" ]; then
echo "ℹ️ No docker-compose.yml files changed, skipping validation"
exit 0
fi
ERROR=0
# Convertir a array para evitar problemas con subshells
mapfile -t BLUEPRINT_ARRAY <<< "$BLUEPRINTS"
# Iterar sobre cada blueprint
for blueprint in "${BLUEPRINT_ARRAY[@]}"; do
[ -z "$blueprint" ] && continue
echo "$COMPOSE_FILES" | while read -r compose_file; do
if [ -z "$compose_file" ]; then
continue
fi
BLUEPRINT_PATH="blueprints/$blueprint"
COMPOSE_FILE="$BLUEPRINT_PATH/docker-compose.yml"
TOML_FILE="$BLUEPRINT_PATH/template.toml"
TEMPLATE_DIR=$(dirname "$compose_file")
TEMPLATE_NAME=$(basename "$TEMPLATE_DIR")
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Validating: $blueprint"
echo "📦 Validating syntax: $TEMPLATE_NAME"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# 1. Validar best practices de docker-compose.yml
if [ ! -f "$COMPOSE_FILE" ]; then
echo "⚠️ WARNING: docker-compose.yml not found"
# Validar sintaxis de docker-compose.yml usando docker compose
echo "🔍 Validating docker-compose.yml syntax..."
if ! docker compose -f "$compose_file" config > /dev/null 2>&1; then
echo "❌ ERROR: docker-compose.yml syntax is invalid in $TEMPLATE_NAME"
echo "Running docker compose config to show errors:"
docker compose -f "$compose_file" config 2>&1 || true
ERROR=1
continue
fi
echo "🔍 Validating docker-compose.yml best practices..."
if ! (cd build-scripts && pnpm exec tsx validate-docker-compose.ts --file "../$COMPOSE_FILE" --verbose); then
ERROR=1
continue
fi
# 3. Validar template.toml
if [ -f "$TOML_FILE" ]; then
echo "🔍 Validating template.toml..."
if ! (cd build-scripts && pnpm exec tsx validate-template.ts --dir "../$BLUEPRINT_PATH" --verbose); then
ERROR=1
continue
fi
else
echo "⚠️ WARNING: template.toml not found"
ERROR=1
continue
echo "✅ docker-compose.yml syntax is valid"
fi
echo "✅ All validations passed for $blueprint"
# Obtener lista de servicios del compose
SERVICES=$(docker compose -f "$compose_file" config --services 2>/dev/null || echo "")
echo "📋 Services found in docker-compose.yml:"
echo "$SERVICES" | while read service; do
[ -n "$service" ] && echo " - $service"
done
# Guardar servicios para validación posterior
echo "$SERVICES" > "/tmp/${TEMPLATE_NAME}_services.txt"
done
if [ $ERROR -eq 1 ]; then
echo ""
echo "❌ Validation failed for one or more blueprints"
echo "❌ Docker Compose syntax validation failed"
exit 1
else
echo ""
echo "✅ All blueprints validated successfully"
echo "✅ All Docker Compose files have valid syntax"
fi
- name: Validate Docker Compose best practices
id: validate-compose-practices
run: |
echo "🔍 Validating Docker Compose best practices..."
ERROR=0
COMPOSE_FILES="${{ steps.changed-files.outputs.compose_files }}"
if [ -z "$COMPOSE_FILES" ]; then
echo "ℹ️ No docker-compose.yml files changed, skipping validation"
exit 0
fi
# Convert to array to avoid subshell issues with pipe
# This ensures ERROR=1 inside the loop propagates to the parent shell
mapfile -t COMPOSE_ARRAY <<< "$COMPOSE_FILES"
for compose_file in "${COMPOSE_ARRAY[@]}"; do
if [ -z "$compose_file" ]; then
continue
fi
TEMPLATE_DIR=$(dirname "$compose_file")
TEMPLATE_NAME=$(basename "$TEMPLATE_DIR")
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Validating best practices: $TEMPLATE_NAME"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Validar usando el script de TypeScript
if ! (cd build-scripts && pnpm exec tsx validate-docker-compose.ts --file "../$compose_file" --verbose); then
ERROR=1
fi
done
if [ $ERROR -eq 1 ]; then
echo ""
echo "❌ Docker Compose best practices validation failed"
exit 1
else
echo ""
echo "✅ All Docker Compose files follow best practices"
fi
- name: Validate template.toml files
id: validate-toml
run: |
echo "🔍 Validating template.toml files..."
ERROR=0
DIRECTORIES="${{ steps.changed-files.outputs.directories }}"
if [ -z "$DIRECTORIES" ]; then
echo "ℹ️ No template directories changed, skipping TOML validation"
exit 0
fi
# Convert to array to avoid subshell issues with pipe
# This ensures ERROR=1 inside the loop propagates to the parent shell
mapfile -t DIRS_ARRAY <<< "$DIRECTORIES"
for template_dir in "${DIRS_ARRAY[@]}"; do
if [ -z "$template_dir" ]; then
continue
fi
TEMPLATE_PATH="blueprints/$template_dir"
TOML_FILE="$TEMPLATE_PATH/template.toml"
if [ ! -f "$TOML_FILE" ]; then
echo "⚠️ WARNING: template.toml not found in $template_dir (might be deleted)"
continue
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 Validating: $template_dir/template.toml"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Validar usando el script de TypeScript con tsx
# Ejecutar desde build-scripts para tener acceso a node_modules
if ! (cd build-scripts && pnpm exec tsx validate-template.ts --dir "../$TEMPLATE_PATH" --verbose); then
ERROR=1
fi
done
if [ $ERROR -eq 1 ]; then
echo ""
echo "❌ template.toml validation failed"
exit 1
else
echo ""
echo "✅ All template.toml files are valid"
fi
- name: Test Docker Compose (dry-run)
id: test-compose
run: |
echo "🧪 Testing Docker Compose files (dry-run)..."
ERROR=0
DIRECTORIES="${{ steps.changed-files.outputs.directories }}"
if [ -z "$DIRECTORIES" ]; then
echo "ℹ️ No template directories changed, skipping dry-run test"
exit 0
fi
echo "$DIRECTORIES" | while read -r template_dir; do
if [ -z "$template_dir" ]; then
continue
fi
COMPOSE_FILE="blueprints/$template_dir/docker-compose.yml"
if [ ! -f "$COMPOSE_FILE" ]; then
continue
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🧪 Testing: $template_dir"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# Cambiar al directorio del template para resolver rutas relativas
cd "blueprints/$template_dir"
# Validar que docker-compose puede parsear el archivo completamente
echo "🔍 Running docker compose config (full validation)..."
if docker compose config > /dev/null 2>&1; then
echo "✅ Docker Compose file is fully valid and can be processed"
# Mostrar información útil
echo "📋 Configuration summary:"
docker compose config --services | while read service; do
[ -n "$service" ] && echo " Service: $service"
done
else
echo "❌ ERROR: Docker Compose file failed full validation"
docker compose config 2>&1 || true
ERROR=1
fi
cd - > /dev/null
done
if [ $ERROR -eq 1 ]; then
echo ""
echo "❌ Docker Compose dry-run test failed"
exit 1
else
echo ""
echo "✅ All Docker Compose files passed dry-run test"
fi
- name: Summary
if: always()
run: |
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📊 Validation Summary"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ "${{ steps.validate-compose-syntax.outcome }}" == "success" ] && \
[ "${{ steps.validate-compose-practices.outcome }}" == "success" ] && \
[ "${{ steps.validate-toml.outcome }}" == "success" ] && \
[ "${{ steps.test-compose.outcome }}" == "success" ]; then
echo "✅ All validations passed!"
echo ""
echo "Your Docker Compose and template.toml files are valid and ready to merge."
else
echo "❌ Some validations failed. Please review the errors above."
echo ""
echo "Common issues to check:"
echo " - docker-compose.yml syntax errors"
echo " - template.toml syntax errors"
echo " - serviceName in template.toml must match service names in docker-compose.yml"
echo " - Avoid using container_name, explicit networks, or port mappings"
fi
+1 -3
View File
@@ -1,3 +1 @@
node_modules
package-lock.json
meta.json.backup.*
node_modules
-10
View File
@@ -170,16 +170,6 @@ This document provides essential context for AI models interacting with this pro
- **Env:** Array of strings: `env = ["KEY=VALUE", "DB_PASSWORD=${db_pass}"]`
- **Available helpers:** `${domain}`, `${password:length}`, `${base64:length}`, `${hash:length}`, `${uuid}`, `${randomPort}`, `${email}`, `${username}`, `${timestamp}`, `${timestamps:datetime}`, `${timestampms:datetime}`, `${jwt:secret_var:payload_var}`
- **JWT helper example:** `${jwt:mysecret:mypayload}` with payload containing `exp: ${timestamps:2030-01-01T00:00:00Z}`
- **Volume bind mounts (in docker-compose.yml):** When mounting host paths, do NOT use absolute paths like `"/folder:/path/in/container"`. Use relative paths instead:
```yaml
# Invalid
volumes:
- "/folder:/path/in/container" ❌
# Valid
volumes:
- "../files/my-database:/var/lib/mysql" ✅
- "../files/my-configs:/etc/my-app/config" ✅
```
- **meta.json Requirements:**
-5
View File
@@ -20,11 +20,6 @@ This project adheres to the [Contributor Covenant Code of Conduct](https://www.c
For larger changes or questions, open an issue first to discuss your ideas.
### Pull Request Guidelines
- **Keep PRs small and focused.** Avoid very large PRs; prefer several smaller PRs (e.g., one template or one logical change per PR). This speeds up review and keeps the history clear.
- **Test before submitting.** Any PR that has not been tested by the contributor will be closed. This keeps the PR queue tidy and ensures that only contributions that have been verified by their authors are considered.
## Adding a New Template
To add a new template, follow these steps:
-4
View File
@@ -1,4 +0,0 @@
## Instructions
We don't have nothing to show here....
+1 -1
View File
@@ -1,7 +1,7 @@
version: '3.3'
services:
alist:
image: xhofe/alist:v3.55.0
image: xhofe/alist:v3.41.0
volumes:
- alist-data:/opt/alist/data
environment:
+2 -6
View File
@@ -1,10 +1,6 @@
version: "3.8"
services:
appsmith:
image: appsmith/appsmith-ee:v1.94
image: index.docker.io/appsmith/appsmith-ee:v1.29
volumes:
- appsmith-data:/appsmith-stacks
restart: unless-stopped
volumes:
appsmith-data:
- ../files/stacks:/appsmith-stacks
+200 -142
View File
@@ -6,32 +6,31 @@ x-logging: &x-logging
options:
max-file: "5"
max-size: "10m"
services:
appwrite:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
container_name: appwrite
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
labels:
- traefik.enable=true
- traefik.constraint-label-stack=appwrite
volumes:
- appwrite-uploads:/storage/uploads:rw
- appwrite-imports:/storage/imports:rw
- appwrite-cache:/storage/cache:rw
- appwrite-config:/storage/config:rw
- appwrite-certificates:/storage/certificates:rw
- appwrite-functions:/storage/functions:rw
- appwrite-sites:/storage/sites:rw
- appwrite-builds:/storage/builds:rw
depends_on:
- mariadb
- redis
# - clamav
environment:
- _APP_ENV
- _APP_WORKER_PER_CORE
- _APP_LOCALE
- _APP_COMPRESSION_MIN_SIZE_BYTES
- _APP_CONSOLE_WHITELIST_ROOT
- _APP_CONSOLE_WHITELIST_EMAILS
- _APP_CONSOLE_SESSION_ALERTS
@@ -44,14 +43,10 @@ services:
- _APP_OPTIONS_ABUSE
- _APP_OPTIONS_ROUTER_PROTECTION
- _APP_OPTIONS_FORCE_HTTPS
- _APP_OPTIONS_ROUTER_FORCE_HTTPS
- _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS
- _APP_OPENSSL_KEY_V1
- _APP_DOMAIN
- _APP_DOMAIN_TARGET_CNAME
- _APP_DOMAIN_TARGET_AAAA
- _APP_DOMAIN_TARGET_A
- _APP_DOMAIN_TARGET_CAA
- _APP_DNS
- _APP_DOMAIN_TARGET
- _APP_DOMAIN_FUNCTIONS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
@@ -78,7 +73,6 @@ services:
- _APP_STORAGE_S3_SECRET
- _APP_STORAGE_S3_REGION
- _APP_STORAGE_S3_BUCKET
- _APP_STORAGE_S3_ENDPOINT
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
- _APP_STORAGE_DO_SPACES_SECRET
- _APP_STORAGE_DO_SPACES_REGION
@@ -95,26 +89,21 @@ services:
- _APP_STORAGE_WASABI_SECRET
- _APP_STORAGE_WASABI_REGION
- _APP_STORAGE_WASABI_BUCKET
- _APP_COMPUTE_SIZE_LIMIT
- _APP_FUNCTIONS_SIZE_LIMIT
- _APP_FUNCTIONS_TIMEOUT
- _APP_SITES_TIMEOUT
- _APP_COMPUTE_BUILD_TIMEOUT
- _APP_COMPUTE_CPUS
- _APP_COMPUTE_MEMORY
- _APP_FUNCTIONS_BUILD_TIMEOUT
- _APP_FUNCTIONS_CPUS
- _APP_FUNCTIONS_MEMORY
- _APP_FUNCTIONS_RUNTIMES
- _APP_SITES_RUNTIMES
- _APP_DOMAIN_SITES
- _APP_EXECUTOR_SECRET
- _APP_EXECUTOR_HOST
- _APP_LOGGING_CONFIG
- _APP_MAINTENANCE_INTERVAL
- _APP_MAINTENANCE_DELAY
- _APP_MAINTENANCE_START_TIME
- _APP_MAINTENANCE_RETENTION_EXECUTION
- _APP_MAINTENANCE_RETENTION_CACHE
- _APP_MAINTENANCE_RETENTION_ABUSE
- _APP_MAINTENANCE_RETENTION_AUDIT
- _APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE
- _APP_MAINTENANCE_RETENTION_USAGE_HOURLY
- _APP_MAINTENANCE_RETENTION_SCHEDULES
- _APP_SMS_PROVIDER
@@ -131,25 +120,94 @@ services:
- _APP_MIGRATIONS_FIREBASE_CLIENT_ID
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
- _APP_ASSISTANT_OPENAI_API_KEY
appwrite-console:
image: appwrite/console:5.0.12
container_name: appwrite-console
<<: *x-logging
image: appwrite/console:7.4.7
restart: unless-stopped
networks:
- dokploy-network
labels:
- "traefik.enable=true"
- "traefik.constraint-label-stack=appwrite"
environment:
- _APP_ENV
- _APP_WORKER_PER_CORE
- _APP_LOCALE
- _APP_CONSOLE_WHITELIST_ROOT
- _APP_CONSOLE_WHITELIST_EMAILS
- _APP_CONSOLE_SESSION_ALERTS
- _APP_CONSOLE_WHITELIST_IPS
- _APP_CONSOLE_HOSTNAMES
- _APP_SYSTEM_EMAIL_NAME
- _APP_SYSTEM_EMAIL_ADDRESS
- _APP_EMAIL_SECURITY
- _APP_SYSTEM_RESPONSE_FORMAT
- _APP_OPTIONS_ABUSE
- _APP_OPTIONS_ROUTER_PROTECTION
- _APP_OPTIONS_FORCE_HTTPS
- _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS
- _APP_OPENSSL_KEY_V1
- _APP_DOMAIN
- _APP_DOMAIN_TARGET
- _APP_DOMAIN_FUNCTIONS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_REDIS_USER
- _APP_REDIS_PASS
- _APP_DB_HOST
- _APP_DB_PORT
- _APP_DB_SCHEMA
- _APP_DB_USER
- _APP_DB_PASS
- _APP_SMTP_HOST
- _APP_SMTP_PORT
- _APP_SMTP_SECURE
- _APP_SMTP_USERNAME
- _APP_SMTP_PASSWORD
- _APP_USAGE_STATS
- _APP_STORAGE_LIMIT
- _APP_STORAGE_PREVIEW_LIMIT
- _APP_STORAGE_ANTIVIRUS
- _APP_STORAGE_ANTIVIRUS_HOST
- _APP_STORAGE_ANTIVIRUS_PORT
- _APP_STORAGE_DEVICE
- _APP_STORAGE_S3_ACCESS_KEY
- _APP_STORAGE_S3_SECRET
- _APP_STORAGE_S3_REGION
- _APP_STORAGE_S3_BUCKET
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
- _APP_STORAGE_DO_SPACES_SECRET
- _APP_STORAGE_DO_SPACES_REGION
- _APP_STORAGE_DO_SPACES_BUCKET
- _APP_STORAGE_BACKBLAZE_ACCESS_KEY
- _APP_STORAGE_BACKBLAZE_SECRET
- _APP_STORAGE_BACKBLAZE_REGION
- _APP_STORAGE_BACKBLAZE_BUCKET
- _APP_STORAGE_LINODE_ACCESS_KEY
- _APP_STORAGE_LINODE_SECRET
- _APP_STORAGE_LINODE_REGION
- _APP_STORAGE_LINODE_BUCKET
- _APP_STORAGE_WASABI_ACCESS_KEY
- _APP_STORAGE_WASABI_SECRET
- _APP_STORAGE_WASABI_REGION
- _APP_STORAGE_WASABI_BUCKET
appwrite-realtime:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: realtime
container_name: appwrite-realtime
<<: *x-logging
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.constraint-label-stack=appwrite"
networks:
- dokploy-network
depends_on:
- mariadb
- redis
labels:
- "traefik.enable=true"
- "traefik.constraint-label-stack=appwrite"
environment:
- _APP_ENV
- _APP_WORKER_PER_CORE
@@ -169,10 +227,13 @@ services:
- _APP_LOGGING_CONFIG
appwrite-worker-audits:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-audits
<<: *x-logging
container_name: appwrite-worker-audits
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -192,10 +253,13 @@ services:
- _APP_LOGGING_CONFIG
appwrite-worker-webhooks:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-webhooks
<<: *x-logging
container_name: appwrite-worker-webhooks
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -217,10 +281,13 @@ services:
- _APP_LOGGING_CONFIG
appwrite-worker-deletes:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-deletes
<<: *x-logging
container_name: appwrite-worker-deletes
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -228,7 +295,6 @@ services:
- appwrite-uploads:/storage/uploads:rw
- appwrite-cache:/storage/cache:rw
- appwrite-functions:/storage/functions:rw
- appwrite-sites:/storage/sites:rw
- appwrite-builds:/storage/builds:rw
- appwrite-certificates:/storage/certificates:rw
environment:
@@ -249,7 +315,6 @@ services:
- _APP_STORAGE_S3_SECRET
- _APP_STORAGE_S3_REGION
- _APP_STORAGE_S3_BUCKET
- _APP_STORAGE_S3_ENDPOINT
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
- _APP_STORAGE_DO_SPACES_SECRET
- _APP_STORAGE_DO_SPACES_REGION
@@ -271,16 +336,16 @@ services:
- _APP_EXECUTOR_HOST
- _APP_MAINTENANCE_RETENTION_ABUSE
- _APP_MAINTENANCE_RETENTION_AUDIT
- _APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE
- _APP_MAINTENANCE_RETENTION_EXECUTION
- _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
- _APP_EMAIL_CERTIFICATES
appwrite-worker-databases:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-databases
<<: *x-logging
container_name: appwrite-worker-databases
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -300,18 +365,19 @@ services:
- _APP_LOGGING_CONFIG
appwrite-worker-builds:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-builds
<<: *x-logging
container_name: appwrite-worker-builds
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
volumes:
- appwrite-functions:/storage/functions:rw
- appwrite-sites:/storage/sites:rw
- appwrite-builds:/storage/builds:rw
- appwrite-uploads:/storage/uploads:rw
environment:
- _APP_ENV
- _APP_WORKER_PER_CORE
@@ -332,20 +398,18 @@ services:
- _APP_VCS_GITHUB_PRIVATE_KEY
- _APP_VCS_GITHUB_APP_ID
- _APP_FUNCTIONS_TIMEOUT
- _APP_SITES_TIMEOUT
- _APP_COMPUTE_BUILD_TIMEOUT
- _APP_COMPUTE_CPUS
- _APP_COMPUTE_MEMORY
- _APP_COMPUTE_SIZE_LIMIT
- _APP_FUNCTIONS_BUILD_TIMEOUT
- _APP_FUNCTIONS_CPUS
- _APP_FUNCTIONS_MEMORY
- _APP_FUNCTIONS_SIZE_LIMIT
- _APP_OPTIONS_FORCE_HTTPS
- _APP_OPTIONS_ROUTER_FORCE_HTTPS
- _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS
- _APP_DOMAIN
- _APP_STORAGE_DEVICE
- _APP_STORAGE_S3_ACCESS_KEY
- _APP_STORAGE_S3_SECRET
- _APP_STORAGE_S3_REGION
- _APP_STORAGE_S3_BUCKET
- _APP_STORAGE_S3_ENDPOINT
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
- _APP_STORAGE_DO_SPACES_SECRET
- _APP_STORAGE_DO_SPACES_REGION
@@ -362,13 +426,15 @@ services:
- _APP_STORAGE_WASABI_SECRET
- _APP_STORAGE_WASABI_REGION
- _APP_STORAGE_WASABI_BUCKET
- _APP_DOMAIN_SITES
appwrite-worker-certificates:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-certificates
<<: *x-logging
container_name: appwrite-worker-certificates
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -380,11 +446,7 @@ services:
- _APP_WORKER_PER_CORE
- _APP_OPENSSL_KEY_V1
- _APP_DOMAIN
- _APP_DOMAIN_TARGET_CNAME
- _APP_DOMAIN_TARGET_AAAA
- _APP_DOMAIN_TARGET_A
- _APP_DOMAIN_TARGET_CAA
- _APP_DNS
- _APP_DOMAIN_TARGET
- _APP_DOMAIN_FUNCTIONS
- _APP_EMAIL_CERTIFICATES
- _APP_REDIS_HOST
@@ -399,10 +461,13 @@ services:
- _APP_LOGGING_CONFIG
appwrite-worker-functions:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-functions
<<: *x-logging
container_name: appwrite-worker-functions
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -423,10 +488,9 @@ services:
- _APP_DB_USER
- _APP_DB_PASS
- _APP_FUNCTIONS_TIMEOUT
- _APP_SITES_TIMEOUT
- _APP_COMPUTE_BUILD_TIMEOUT
- _APP_COMPUTE_CPUS
- _APP_COMPUTE_MEMORY
- _APP_FUNCTIONS_BUILD_TIMEOUT
- _APP_FUNCTIONS_CPUS
- _APP_FUNCTIONS_MEMORY
- _APP_EXECUTOR_SECRET
- _APP_EXECUTOR_HOST
- _APP_USAGE_STATS
@@ -435,10 +499,13 @@ services:
- _APP_LOGGING_CONFIG
appwrite-worker-mails:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-mails
<<: *x-logging
container_name: appwrite-worker-mails
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
environment:
@@ -462,14 +529,15 @@ services:
- _APP_SMTP_USERNAME
- _APP_SMTP_PASSWORD
- _APP_LOGGING_CONFIG
- _APP_DOMAIN
- _APP_OPTIONS_FORCE_HTTPS
appwrite-worker-messaging:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-messaging
container_name: appwrite-worker-messaging
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
volumes:
- appwrite-uploads:/storage/uploads:rw
depends_on:
@@ -495,7 +563,6 @@ services:
- _APP_STORAGE_S3_SECRET
- _APP_STORAGE_S3_REGION
- _APP_STORAGE_S3_BUCKET
- _APP_STORAGE_S3_ENDPOINT
- _APP_STORAGE_DO_SPACES_ACCESS_KEY
- _APP_STORAGE_DO_SPACES_SECRET
- _APP_STORAGE_DO_SPACES_REGION
@@ -514,12 +581,13 @@ services:
- _APP_STORAGE_WASABI_BUCKET
appwrite-worker-migrations:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: worker-migrations
<<: *x-logging
container_name: appwrite-worker-migrations
restart: unless-stopped
volumes:
- appwrite-imports:/storage/imports:rw
networks:
- dokploy-network
depends_on:
- mariadb
environment:
@@ -527,11 +595,7 @@ services:
- _APP_WORKER_PER_CORE
- _APP_OPENSSL_KEY_V1
- _APP_DOMAIN
- _APP_DOMAIN_TARGET_CNAME
- _APP_DOMAIN_TARGET_AAAA
- _APP_DOMAIN_TARGET_A
- _APP_DOMAIN_TARGET_CAA
- _APP_DNS
- _APP_DOMAIN_TARGET
- _APP_EMAIL_SECURITY
- _APP_REDIS_HOST
- _APP_REDIS_PORT
@@ -547,21 +611,20 @@ services:
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
appwrite-task-maintenance:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: maintenance
<<: *x-logging
container_name: appwrite-task-maintenance
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
environment:
- _APP_ENV
- _APP_WORKER_PER_CORE
- _APP_DOMAIN
- _APP_DOMAIN_TARGET_CNAME
- _APP_DOMAIN_TARGET_AAAA
- _APP_DOMAIN_TARGET_A
- _APP_DOMAIN_TARGET_CAA
- _APP_DNS
- _APP_DOMAIN_TARGET
- _APP_DOMAIN_FUNCTIONS
- _APP_OPENSSL_KEY_V1
- _APP_REDIS_HOST
@@ -578,15 +641,17 @@ services:
- _APP_MAINTENANCE_RETENTION_CACHE
- _APP_MAINTENANCE_RETENTION_ABUSE
- _APP_MAINTENANCE_RETENTION_AUDIT
- _APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE
- _APP_MAINTENANCE_RETENTION_USAGE_HOURLY
- _APP_MAINTENANCE_RETENTION_SCHEDULES
appwrite-task-stats-resources:
image: appwrite/appwrite:1.8.0
entrypoint: stats-resources
appwrite-worker-usage:
image: appwrite/appwrite:1.6.1
entrypoint: worker-usage
container_name: appwrite-worker-usage
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -605,39 +670,15 @@ services:
- _APP_REDIS_PASS
- _APP_USAGE_STATS
- _APP_LOGGING_CONFIG
- _APP_DATABASE_SHARED_TABLES
- _APP_STATS_RESOURCES_INTERVAL
- _APP_USAGE_AGGREGATION_INTERVAL
appwrite-worker-stats-resources:
image: appwrite/appwrite:1.8.0
entrypoint: worker-stats-resources
appwrite-worker-usage-dump:
image: appwrite/appwrite:1.6.1
entrypoint: worker-usage-dump
container_name: appwrite-worker-usage-dump
<<: *x-logging
restart: unless-stopped
depends_on:
- redis
- mariadb
environment:
- _APP_ENV
- _APP_WORKER_PER_CORE
- _APP_OPENSSL_KEY_V1
- _APP_DB_HOST
- _APP_DB_PORT
- _APP_DB_SCHEMA
- _APP_DB_USER
- _APP_DB_PASS
- _APP_REDIS_HOST
- _APP_REDIS_PORT
- _APP_REDIS_USER
- _APP_REDIS_PASS
- _APP_USAGE_STATS
- _APP_LOGGING_CONFIG
- _APP_STATS_RESOURCES_INTERVAL
appwrite-worker-stats-usage:
image: appwrite/appwrite:1.8.0
entrypoint: worker-stats-usage
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- redis
- mariadb
@@ -659,10 +700,13 @@ services:
- _APP_USAGE_AGGREGATION_INTERVAL
appwrite-task-scheduler-functions:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: schedule-functions
container_name: appwrite-task-scheduler-functions
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- mariadb
- redis
@@ -681,10 +725,13 @@ services:
- _APP_DB_PASS
appwrite-task-scheduler-executions:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: schedule-executions
container_name: appwrite-task-scheduler-executions
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- mariadb
- redis
@@ -703,10 +750,13 @@ services:
- _APP_DB_PASS
appwrite-task-scheduler-messages:
image: appwrite/appwrite:1.8.0
image: appwrite/appwrite:1.6.1
entrypoint: schedule-messages
container_name: appwrite-task-scheduler-messages
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
depends_on:
- mariadb
- redis
@@ -725,48 +775,44 @@ services:
- _APP_DB_PASS
appwrite-assistant:
image: appwrite/assistant:0.8.3
image: appwrite/assistant:0.4.0
container_name: appwrite-assistant
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
environment:
- _APP_ASSISTANT_OPENAI_API_KEY
appwrite-browser:
image: appwrite/browser:0.2.4
<<: *x-logging
restart: unless-stopped
openruntimes-executor:
container_name: openruntimes-executor
hostname: exc1
<<: *x-logging
restart: unless-stopped
stop_signal: SIGINT
image: openruntimes/executor:0.7.22
image: openruntimes/executor:0.6.11
networks:
- dokploy-network
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- appwrite-builds:/storage/builds:rw
- appwrite-functions:/storage/functions:rw
- appwrite-sites:/storage/sites:rw
# Host mount necessary to share files between executor and runtimes.
# It's not possible to share mount file between 2 containers without host mount (copying is too slow)
- /tmp:/tmp:rw
environment:
- OPR_EXECUTOR_INACTIVE_TRESHOLD=$_APP_COMPUTE_INACTIVE_THRESHOLD
- OPR_EXECUTOR_MAINTENANCE_INTERVAL=$_APP_COMPUTE_MAINTENANCE_INTERVAL
- OPR_EXECUTOR_NETWORK=$_APP_COMPUTE_RUNTIMES_NETWORK
- OPR_EXECUTOR_INACTIVE_TRESHOLD=$_APP_FUNCTIONS_INACTIVE_THRESHOLD
- OPR_EXECUTOR_MAINTENANCE_INTERVAL=$_APP_FUNCTIONS_MAINTENANCE_INTERVAL
- OPR_EXECUTOR_NETWORK=$_APP_FUNCTIONS_RUNTIMES_NETWORK
- OPR_EXECUTOR_DOCKER_HUB_USERNAME=$_APP_DOCKER_HUB_USERNAME
- OPR_EXECUTOR_DOCKER_HUB_PASSWORD=$_APP_DOCKER_HUB_PASSWORD
- OPR_EXECUTOR_ENV=$_APP_ENV
- OPR_EXECUTOR_RUNTIMES=$_APP_FUNCTIONS_RUNTIMES,$_APP_SITES_RUNTIMES
- OPR_EXECUTOR_RUNTIMES=$_APP_FUNCTIONS_RUNTIMES
- OPR_EXECUTOR_SECRET=$_APP_EXECUTOR_SECRET
- OPR_EXECUTOR_RUNTIME_VERSIONS=v5
- OPR_EXECUTOR_LOGGING_CONFIG=$_APP_LOGGING_CONFIG
- OPR_EXECUTOR_STORAGE_DEVICE=$_APP_STORAGE_DEVICE
- OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY=$_APP_STORAGE_S3_ACCESS_KEY
- OPR_EXECUTOR_STORAGE_S3_SECRET=$_APP_STORAGE_S3_SECRET
- OPR_EXECUTOR_STORAGE_S3_REGION=$_APP_STORAGE_S3_REGION
- OPR_EXECUTOR_STORAGE_S3_BUCKET=$_APP_STORAGE_S3_BUCKET
- OPR_EXECUTOR_STORAGE_S3_ENDPOINT=$_APP_STORAGE_S3_ENDPOINT
- OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY=$_APP_STORAGE_DO_SPACES_ACCESS_KEY
- OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET=$_APP_STORAGE_DO_SPACES_SECRET
- OPR_EXECUTOR_STORAGE_DO_SPACES_REGION=$_APP_STORAGE_DO_SPACES_REGION
@@ -785,9 +831,12 @@ services:
- OPR_EXECUTOR_STORAGE_WASABI_BUCKET=$_APP_STORAGE_WASABI_BUCKET
mariadb:
image: mariadb:10.11 # fix issues when upgrading using: mysql_upgrade -u root -p
image: mariadb:10.11
container_name: appwrite-mariadb
<<: *x-logging
restart: unless-stopped
networks:
- dokploy-network
volumes:
- appwrite-mariadb:/var/lib/mysql:rw
environment:
@@ -800,30 +849,39 @@ services:
redis:
image: redis:7.2.4-alpine
container_name: appwrite-redis
<<: *x-logging
restart: unless-stopped
command: >
redis-server
--maxmemory 512mb
--maxmemory-policy allkeys-lru
--maxmemory-samples 5
--maxmemory 512mb
--maxmemory-policy allkeys-lru
--maxmemory-samples 5
networks:
- dokploy-network
volumes:
- appwrite-redis:/data:rw
# clamav:
# image: appwrite/clamav:1.2.0
# restart: unless-stopped
# volumes:
# - appwrite-uploads:/storage/uploads
# Uncomment and configure if ClamAV is needed
# clamav:
# image: appwrite/clamav:1.2.0
# container_name: appwrite-clamav
# restart: unless-stopped
# networks:
# - dokploy-network
# volumes:
# - appwrite-uploads:/storage/uploads
volumes:
appwrite-mariadb:
appwrite-redis:
appwrite-cache:
appwrite-uploads:
appwrite-imports:
appwrite-certificates:
appwrite-functions:
appwrite-sites:
appwrite-builds:
appwrite-config:
networks:
dokploy-network:
external: true
+7 -47
View File
@@ -1,11 +1,5 @@
[variables]
main_domain = "${domain}"
functions_domain = "functions.${main_domain}"
sites_domain = "sites.${main_domain}"
openssl_key = "${password:32}"
db_root_pw = "${password:32}"
db_user_pw = "${password:32}"
executor_secret = "${password:32}"
[config]
env = [
@@ -14,19 +8,11 @@ env = [
"_APP_OPTIONS_ABUSE=enabled",
"_APP_OPTIONS_FORCE_HTTPS=disabled",
"_APP_OPTIONS_FUNCTIONS_FORCE_HTTPS=disabled",
"_APP_OPTIONS_ROUTER_FORCE_HTTPS=disabled",
"_APP_OPTIONS_ROUTER_PROTECTION=disabled",
"_APP_OPENSSL_KEY_V1=${openssl_key}",
"_APP_OPENSSL_KEY_V1=your-secret-key",
"_APP_DOMAIN=${main_domain}",
"_APP_CUSTOM_DOMAIN_DENY_LIST=example.com,test.com,app.example.com",
"_APP_DOMAIN_FUNCTIONS=${functions_domain}",
"_APP_DOMAIN_SITES=${sites_domain}",
"_APP_DOMAIN_TARGET=localhost",
"_APP_DOMAIN_TARGET_CNAME=localhost",
"_APP_DOMAIN_TARGET_AAAA=::1",
"_APP_DOMAIN_TARGET_A=127.0.0.1",
"_APP_DOMAIN_TARGET_CAA=",
"_APP_DNS=8.8.8.8",
"_APP_DOMAIN_FUNCTIONS=${main_domain}",
"_APP_DOMAIN_TARGET=${main_domain}",
"_APP_CONSOLE_WHITELIST_ROOT=enabled",
"_APP_CONSOLE_WHITELIST_EMAILS=",
"_APP_CONSOLE_WHITELIST_IPS=",
@@ -46,8 +32,6 @@ env = [
"_APP_USAGE_DATABASE_INTERVAL=900",
"_APP_WORKER_PER_CORE=6",
"_APP_CONSOLE_SESSION_ALERTS=disabled",
"_APP_COMPRESSION_ENABLED=enabled",
"_APP_COMPRESSION_MIN_SIZE_BYTES=1024",
"_APP_REDIS_HOST=redis",
"_APP_REDIS_PORT=6379",
"_APP_REDIS_USER=",
@@ -56,8 +40,8 @@ env = [
"_APP_DB_PORT=3306",
"_APP_DB_SCHEMA=appwrite",
"_APP_DB_USER=user",
"_APP_DB_PASS=${db_user_pw}",
"_APP_DB_ROOT_PASS=${db_root_pw}",
"_APP_DB_PASS=password",
"_APP_DB_ROOT_PASS=rootsecretpassword",
"_APP_INFLUXDB_HOST=influxdb",
"_APP_INFLUXDB_PORT=8086",
"_APP_STATSD_HOST=telegraf",
@@ -79,7 +63,6 @@ env = [
"_APP_STORAGE_S3_SECRET=",
"_APP_STORAGE_S3_REGION=us-east-1",
"_APP_STORAGE_S3_BUCKET=",
"_APP_STORAGE_S3_ENDPOINT=",
"_APP_STORAGE_DO_SPACES_ACCESS_KEY=",
"_APP_STORAGE_DO_SPACES_SECRET=",
"_APP_STORAGE_DO_SPACES_REGION=us-east-1",
@@ -97,36 +80,27 @@ env = [
"_APP_STORAGE_WASABI_REGION=eu-central-1",
"_APP_STORAGE_WASABI_BUCKET=",
"_APP_FUNCTIONS_SIZE_LIMIT=30000000",
"_APP_COMPUTE_SIZE_LIMIT=30000000",
"_APP_FUNCTIONS_BUILD_SIZE_LIMIT=2000000000",
"_APP_FUNCTIONS_TIMEOUT=900",
"_APP_FUNCTIONS_BUILD_TIMEOUT=900",
"_APP_COMPUTE_BUILD_TIMEOUT=900",
"_APP_FUNCTIONS_CONTAINERS=10",
"_APP_FUNCTIONS_CPUS=0",
"_APP_COMPUTE_CPUS=0",
"_APP_FUNCTIONS_MEMORY=0",
"_APP_COMPUTE_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=${executor_secret}",
"_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",
"_APP_COMPUTE_INACTIVE_THRESHOLD=60",
"DOCKERHUB_PULL_USERNAME=",
"DOCKERHUB_PULL_PASSWORD=",
"DOCKERHUB_PULL_EMAIL=",
"OPEN_RUNTIMES_NETWORK=appwrite_runtimes",
"_APP_FUNCTIONS_RUNTIMES_NETWORK=dokploy-network",
"_APP_COMPUTE_RUNTIMES_NETWORK=dokploy-network",
"_APP_FUNCTIONS_RUNTIMES_NETWORK=runtimes",
"_APP_DOCKER_HUB_USERNAME=",
"_APP_DOCKER_HUB_PASSWORD=",
"_APP_FUNCTIONS_MAINTENANCE_INTERVAL=3600",
"_APP_COMPUTE_MAINTENANCE_INTERVAL=3600",
"_APP_SITES_TIMEOUT=900",
"_APP_SITES_RUNTIMES=static-1,node-22,flutter-3.29",
"_APP_VCS_GITHUB_APP_NAME=",
"_APP_VCS_GITHUB_PRIVATE_KEY=",
"_APP_VCS_GITHUB_APP_ID=",
@@ -135,11 +109,9 @@ env = [
"_APP_VCS_GITHUB_WEBHOOK_SECRET=",
"_APP_MAINTENANCE_INTERVAL=86400",
"_APP_MAINTENANCE_DELAY=0",
"_APP_MAINTENANCE_START_TIME=00:00",
"_APP_MAINTENANCE_RETENTION_CACHE=2592000",
"_APP_MAINTENANCE_RETENTION_EXECUTION=1209600",
"_APP_MAINTENANCE_RETENTION_AUDIT=1209600",
"_APP_MAINTENANCE_RETENTION_AUDIT_CONSOLE=15778800",
"_APP_MAINTENANCE_RETENTION_ABUSE=86400",
"_APP_MAINTENANCE_RETENTION_USAGE_HOURLY=8640000",
"_APP_MAINTENANCE_RETENTION_SCHEDULES=86400",
@@ -158,18 +130,6 @@ port = 80
host = "${main_domain}"
path = "/"
[[config.domains]]
serviceName = "appwrite"
port = 80
host = "${sites_domain}"
path = "/"
[[config.domains]]
serviceName = "appwrite"
port = 80
host = "${functions_domain}"
path = "/"
[[config.domains]]
serviceName = "appwrite-console"
port = 80
+1 -1
View File
@@ -1,6 +1,6 @@
services:
autobase-console:
image: autobase/console:2.5.2
image: autobase/console:2.3.0
restart: unless-stopped
ports:
- "80"
+25 -12
View File
@@ -1,8 +1,8 @@
services:
apps:
image: budibase/apps:3.23.47
image: budibase.docker.scarf.sh/budibase/apps:3.5.3
restart: unless-stopped
environment:
SELF_HOSTED: 1
LOG_LEVEL: info
@@ -39,10 +39,10 @@ services:
timeout: 15s
retries: 5
start_period: 10s
worker:
image: budibase/worker:3.23.47
image: budibase.docker.scarf.sh/budibase/worker:3.2.25
restart: unless-stopped
environment:
SELF_HOSTED: 1
LOG_LEVEL: info
@@ -78,10 +78,10 @@ services:
timeout: 15s
retries: 5
start_period: 10s
minio:
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
image: minio/minio:RELEASE.2024-11-07T00-52-20Z
restart: unless-stopped
volumes:
- 'minio_data:/data'
environment:
@@ -98,10 +98,10 @@ services:
interval: 30s
timeout: 20s
retries: 3
proxy:
image: budibase/proxy:3.23.47
image: budibase/proxy:3.2.25
restart: unless-stopped
environment:
PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND: 10
PROXY_RATE_LIMIT_API_PER_SECOND: 20
@@ -130,10 +130,10 @@ services:
timeout: 15s
retries: 5
start_period: 10s
couchdb:
image: budibase/couchdb:v3.3.3
restart: unless-stopped
environment:
COUCHDB_USER: budibase
COUCHDB_PASSWORD: ${BB_COUCHDB_PASSWORD}
@@ -150,9 +150,9 @@ services:
start_period: 10s
volumes:
- 'couchdb3_data:/opt/couchdb/data'
redis:
image: redis:8.4-alpine
image: redis:7.2-alpine
restart: unless-stopped
command: 'redis-server --requirepass "${BB_REDIS_PASSWORD}"'
volumes:
@@ -168,9 +168,22 @@ services:
timeout: 15s
retries: 5
start_period: 10s
watchtower:
restart: unless-stopped
image: containrrr/watchtower:1.7.1
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
command: '--debug --http-api-update bbapps bbworker bbproxy'
environment:
WATCHTOWER_HTTP_API: true
WATCHTOWER_HTTP_API_TOKEN: ${BB_WATCHTOWER_PASSWORD}
WATCHTOWER_CLEANUP: true
labels:
- com.centurylinklabs.watchtower.enable=false
volumes:
minio_data:
couchdb3_data:
redis_data:
redis_data:
+3 -10
View File
@@ -17,9 +17,6 @@ services:
S3_INTERNAL_ENDPOINT: "http://minio:3902"
expose:
- 3000
depends_on:
- ps-mysql
- minio
ps-mysql:
image: mysql:8.0
@@ -37,10 +34,11 @@ services:
- ps-mysql:/var/lib/mysql
minio:
image: quay.io/minio/minio:RELEASE.2025-05-24T17-08-30Z
image: bitnami/minio:latest
restart: unless-stopped
command: server /bitnami/minio/data --address ":3902" --console-address ":3903"
environment:
MINIO_API_PORT_NUMBER: 3902
MINIO_CONSOLE_PORT_NUMBER: 3903
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
expose:
@@ -49,11 +47,6 @@ services:
volumes:
- minio-data:/bitnami/minio/data
- minio-certs:/certs
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3902/minio/health/ready"]
interval: 30s
timeout: 20s
retries: 3
volumes:
ps-mysql:
@@ -1,8 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 116" preserveAspectRatio="xMidYMid meet">
<path fill="#FFF" d="m202.357 49.394-5.311-2.124C172.085 103.434 72.786 69.289 66.81 85.997c-.996 11.286 54.227 2.146 93.706 4.059 12.039.583 18.076 9.671 12.964 24.484l10.069.031c11.615-36.209 48.683-17.73 50.232-29.68-2.545-7.857-42.601 0-31.425-35.497Z"/>
<path fill="#F4811F" d="M176.332 108.348c1.593-5.31 1.062-10.622-1.593-13.809-2.656-3.187-6.374-5.31-11.154-5.842L71.17 87.634c-.531 0-1.062-.53-1.593-.53-.531-.532-.531-1.063 0-1.594.531-1.062 1.062-1.594 2.124-1.594l92.946-1.062c11.154-.53 22.839-9.56 27.087-20.182l5.312-13.809c0-.532.531-1.063 0-1.594C191.203 20.182 166.772 0 138.091 0 111.535 0 88.697 16.995 80.73 40.896c-5.311-3.718-11.684-5.843-19.12-5.31-12.747 1.061-22.838 11.683-24.432 24.43-.531 3.187 0 6.374.532 9.56C16.996 70.107 0 87.103 0 108.348c0 2.124 0 3.718.531 5.842 0 1.063 1.062 1.594 1.594 1.594h170.489c1.062 0 2.125-.53 2.125-1.594l1.593-5.842Z"/>
<path fill="#FAAD3F" d="M205.544 48.863h-2.656c-.531 0-1.062.53-1.593 1.062l-3.718 12.747c-1.593 5.31-1.062 10.623 1.594 13.809 2.655 3.187 6.373 5.31 11.153 5.843l19.652 1.062c.53 0 1.062.53 1.593.53.53.532.53 1.063 0 1.594-.531 1.063-1.062 1.594-2.125 1.594l-20.182 1.062c-11.154.53-22.838 9.56-27.087 20.182l-1.063 4.78c-.531.532 0 1.594 1.063 1.594h70.108c1.062 0 1.593-.531 1.593-1.593 1.062-4.25 2.124-9.03 2.124-13.81 0-27.618-22.838-50.456-50.456-50.456"/>
<text x="128" y="65" text-anchor="middle" dominant-baseline="middle" font-size="32" font-family="Arial, Helvetica, sans-serif" font-weight="bold" fill="#fff">
DDNS
</text>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@@ -1,16 +0,0 @@
# For more details, see:
# - https://github.com/favonia/cloudflare-ddns
services:
cloudflare-ddns:
image: favonia/cloudflare-ddns:1
network_mode: host
restart: unless-stopped
user: "1000:1000"
read_only: true
cap_drop: [all]
security_opt: [no-new-privileges:true]
environment:
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN:?}
- DOMAINS=${DOMAINS:?}
- PROXIED=false
- IP6_PROVIDER=none
-9
View File
@@ -1,9 +0,0 @@
variables = {}
[config]
domains = []
mounts = []
[config.env]
CLOUDFLARE_API_TOKEN = "<INSERT YOUR TOKEN>"
DOMAINS = "example.org,www.example.org,example.io"
+2 -2
View File
@@ -3,14 +3,14 @@ services:
image: 'cloudflare/cloudflared:latest'
environment:
# Don't forget to set this in your Dokploy Environment
- 'TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN:?}'
- 'TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}'
network_mode: host
restart: unless-stopped
command: [
"tunnel",
# More tunnel run parameters here:
# https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/cloudflared-parameters/run-parameters/
# https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/configure-tunnels/tunnel-run-parameters/
"--no-autoupdate",
#"--protocol", "http2",
+1 -4
View File
@@ -1,9 +1,6 @@
variables = {}
[config]
isolated = false
domains = []
env = ["CLOUDFLARE_TUNNEL_TOKEN=\"<INSERT TOKEN>\""]
mounts = []
[config.env]
CLOUDFLARE_TUNNEL_TOKEN = ""
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

-48
View File
@@ -1,48 +0,0 @@
version: "3.8"
services:
cloudreve:
image: cloudreve/cloudreve:4.10.1
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_started
restart: unless-stopped
environment:
- CR_CONF_Database.Type=postgres
- CR_CONF_Database.Host=postgresql
- CR_CONF_Database.User=${POSTGRES_USER}
- CR_CONF_Database.Password=${POSTGRES_PASSWORD}
- CR_CONF_Database.Name=${POSTGRES_DB}
- CR_CONF_Database.Port=5432
- CR_CONF_Redis.Server=redis:6379
volumes:
- cloudreve_data:/cloudreve/data
postgresql:
image: postgres:17
restart: unless-stopped
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
redis:
image: redis:8.4.0
restart: unless-stopped
volumes:
- redis_data:/data
volumes:
cloudreve_data:
postgres_data:
redis_data:
-16
View File
@@ -1,16 +0,0 @@
[variables]
main_domain = "${domain}"
db_password = "${password:32}"
db_user = "cloudreve"
db_name = "cloudreve"
[config]
[[config.domains]]
serviceName = "cloudreve"
port = 5212
host = "${main_domain}"
[config.env]
POSTGRES_PASSWORD = "${db_password}"
POSTGRES_USER = "${db_user}"
POSTGRES_DB = "${db_name}"
+8 -8
View File
@@ -1,9 +1,9 @@
services:
backend:
image: ghcr.io/get-convex/convex-backend:5cdea511cd6527a95dd24152ea0d3c3bb2ab379f
expose:
- "3210"
- "3211"
image: ghcr.io/get-convex/convex-backend:33cef775a8a6228cbacee4a09ac2c4073d62ed13
ports:
- "${PORT:-3210}:3210"
- "${SITE_PROXY_PORT:-3211}:3211"
volumes:
- data:/convex/data
environment:
@@ -14,7 +14,7 @@ services:
- CONVEX_CLOUD_ORIGIN=${CONVEX_CLOUD_ORIGIN:-http://127.0.0.1:3210}
- CONVEX_SITE_ORIGIN=${CONVEX_SITE_ORIGIN:-http://127.0.0.1:3211}
- DATABASE_URL=${DATABASE_URL:-}
- DISABLE_BEACON=${DISABLE_BEACON:-FALSE}
- DISABLE_BEACON=${DISABLE_BEACON:-}
- REDACT_LOGS_TO_CLIENT=${REDACT_LOGS_TO_CLIENT:-}
- RUST_LOG=${RUST_LOG:-info}
- RUST_BACKTRACE=${RUST_BACKTRACE:-}
@@ -24,9 +24,9 @@ services:
start_period: 5s
dashboard:
image: ghcr.io/get-convex/convex-dashboard:5cdea511cd6527a95dd24152ea0d3c3bb2ab379f
expose:
- "6791"
image: ghcr.io/get-convex/convex-dashboard:33cef775a8a6228cbacee4a09ac2c4073d62ed13
ports:
- "${DASHBOARD_PORT:-6791}:6791"
environment:
- NEXT_PUBLIC_DEPLOYMENT_URL=${NEXT_PUBLIC_DEPLOYMENT_URL:-http://127.0.0.1:3210}
depends_on:
+2 -2
View File
@@ -32,7 +32,7 @@ services:
restart: unless-stopped
discourse-app:
image: docker.io/bitnamilegacy/discourse:3.5.0
image: docker.io/bitnami/discourse:3.3.2
volumes:
- discourse-data:/bitnami/discourse
@@ -59,7 +59,7 @@ services:
restart: unless-stopped
discourse-sidekiq:
image: docker.io/bitnamilegacy/discourse:3.5.0
image: docker.io/bitnami/discourse:3.3.2
volumes:
- discourse-sidekiq-data:/bitnami/discourse
-40
View File
@@ -1,40 +0,0 @@
services:
dolibarr:
image: dolibarr/dolibarr:21.0.0
restart: always
environment:
DOLI_DB_HOST: db
DOLI_DB_NAME: $DB_NAME
DOLI_DB_USER: $DB_USER
DOLI_DB_PASSWORD: $DB_PASSWORD
DOLI_URL_ROOT: ${DOLIBARR_HOST}
DOLI_ADMIN_LOGIN: admin
DOLI_ADMIN_PASSWORD: $ADMIN_PASSWORD
volumes:
- dolibarr_documents:/var/www/documents
- dolibarr_html:/var/www/html
depends_on:
db:
condition: service_healthy
db:
image: mariadb:10.11
restart: always
environment:
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_DATABASE: $DB_NAME
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "healthcheck.sh --connect --innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
volumes:
dolibarr_documents:
dolibarr_html:
db_data:
-1
View File
@@ -1 +0,0 @@
<svg width="625.57" height="144.4" viewBox="0 0 176.55 40.754" xmlns="http://www.w3.org/2000/svg"><g stroke-width=".265"><path d="m90.28 4.132v22.06c0 4.053.955 7.353 2.864 9.902 1.098 1.469 2.491 2.637 4.178 3.504 1.703.867 3.445 1.144 5.228 1.159 2.894.023 6.707-1.086 8.976-3.84 2.291-2.78 3.653-5.92 3.653-9.795 0-3.787-1.202-7.03-3.605-9.716-2.386-2.69-5.26-4.03-8.617-4.03-.541 0-2.386.06-2.386.06l.066 10.08s1.526.004 2.178.004c.923 0 1.703.371 2.339 1.115.637.725.955 1.628.955 2.708 0 1.044-.342 1.938-1.027 2.681-.668.725-1.488 1.089-2.459 1.089-2.276 0-3.414-1.761-3.414-5.283v-21.688h-8.928zm-90.28.259v36.24l9.692.106v-25.937h3.271c5.554 0 8.331 2.468 8.331 7.406 0 5.256-1.707 7.84-7.357 7.87l-2.67.014v10.644c1.32.005 2.381.023 2.971.023 5.01 0 9.03-1.651 12.21-5.12 3.183-3.469 4.776-7.945 4.776-13.433 0-5.734-1.863-10.273-5.585-13.618-3.135-2.796-7.472-4.195-13.01-4.195h-12.628zm62.45.024v36.34h8.928v-36.34h-8.928m-16.02 8.787c-3.597 0-6.62 1.328-9.07 3.982-2.451 2.637-3.676 5.893-3.676 9.769 0 3.805 1.225 7.06 3.676 9.769 2.451 2.69 5.403 4.03 8.857 4.03s6.398-1.345 8.833-4.03c2.451-2.69 3.676-5.946 3.676-9.769 0-3.77-1.209-7-3.628-9.69-2.402-2.708-5.292-4.061-8.666-4.061m127.38.424c-3.135 0-5.641 1.142-7.519 3.425-1.878 2.265-2.817 5.31-2.817 9.132v14.573h8.928v-12.662c0-2.761.812-4.141 2.435-4.141.509 0 1.703-.02 1.703-.02l.008-10.304s-2.038-.003-2.738-.003zm-15.66.0001c-3.135 0-5.642 1.141-7.52 3.424-1.878 2.265-2.817 5.31-2.817 9.132v14.573h8.928v-12.662c0-2.761.811-4.141 2.434-4.141.509 0 1.679-.028 1.679-.028v-10.296s-2-.002-2.704-.002m-27.977.026c-3.453 0-6.39 1.336-8.808 4.01-2.402 2.672-3.605 5.928-3.605 9.769 0 3.947 1.194 7.23 3.581 9.85 2.386 2.619 5.371 3.477 8.952 3.477h1.947l.041-9.373s-1.376.029-2.155.029c-.955 0-1.743-.354-2.364-1.061-.621-.708-.931-1.61-.931-2.708 0-1.044.342-1.947 1.026-2.708.684-.761 1.496-1.141 2.435-1.141 1.035 0 1.855.416 2.459 1.247.621.832.935 1.947.931 3.345l-.033 12.37h8.945l.017-13.09c0-4.336-1.114-7.752-3.342-10.247-2.212-2.513-5.244-3.77-9.09-3.77m-53.585.116v26.987h8.928v-26.987h-8.928m-30.395 9.228c.971 0 1.79.39 2.459 1.168.668.761 1 1.699 1 2.814 0 1.097-.342 2.035-1.027 2.814-.668.779-1.48 1.168-2.434 1.168-.939 0-1.751-.39-2.435-1.168-.668-.779-1-1.717-1-2.814 0-1.115.335-2.053 1-2.814.668-.779 1.48-1.168 2.435-1.168" fill="#263c5c"/><g fill="#007b8c"><path d="m153.43-.041l-2.088 9.501h.713l2.083-9.501h-.707m4.608 0c-.635 0-1.218.186-1.749.558-.527.368-.935.908-1.223 1.623-.285.71-.428 1.544-.428 2.5 0 .877.126 1.699.378 2.463.256.765.626 1.35 1.111 1.755.488.401 1.12.601 1.896.601.75 0 1.384-.261 1.901-.783.521-.527.881-1.289 1.081-2.288l-.953-.307c-.131.773-.382 1.356-.752 1.748s-.822.589-1.356.589c-.439 0-.847-.144-1.223-.432-.377-.288-.655-.723-.835-1.304-.177-.585-.265-1.268-.265-2.05 0-.606.075-1.193.226-1.761.151-.573.411-1.028.781-1.366.373-.338.837-.508 1.39-.508.481 0 .881.153 1.199.458.318.305.56.792.727 1.46l.939-.282c-.193-.848-.535-1.506-1.027-1.974-.491-.468-1.097-.702-1.818-.702m-26.586.157v9.188h5.374v-1.084h-4.421v-3.127h3.984v-1.079h-3.984v-2.814h4.254v-1.085h-5.207m6.705 0v9.188h.953v-4.08h1.105c.246 0 .422.015.53.044.147.046.292.127.433.244.144.117.306.322.486.614.18.293.409.715.688 1.266l.953 1.911h1.199l-1.253-2.5c-.249-.489-.513-.896-.791-1.222-.131-.15-.323-.303-.575-.458.691-.121 1.202-.405 1.533-.852s.496-.997.496-1.648c0-.506-.1-.968-.3-1.385-.2-.418-.466-.708-.8-.871-.334-.167-.822-.251-1.464-.251h-3.194m7.251 0v9.188h.953v-3.736h1.847c1.018 0 1.723-.269 2.113-.808.39-.543.584-1.204.584-1.987 0-.455-.073-.874-.221-1.254-.144-.38-.336-.675-.575-.884-.239-.213-.535-.357-.889-.432-.252-.059-.617-.088-1.095-.088h-2.717m16.788 0v9.188h.953v-4.08h1.105c.246 0 .423.015.531.044.147.046.291.127.432.244.144.117.307.322.487.614s.409.715.688 1.266l.953 1.911h1.199l-1.253-2.5c-.249-.489-.512-.896-.791-1.222-.131-.15-.323-.303-.575-.458.691-.121 1.202-.405 1.533-.852s.496-.997.496-1.648c0-.506-.1-.968-.3-1.385-.2-.418-.467-.708-.801-.871-.334-.167-.822-.251-1.464-.251h-3.193m7.222 0v9.188h.918v-7.821l2.083 7.821h.86l2.093-7.69v7.69h.919v-9.188h-1.283l-1.724 6.393c-.174.648-.301 1.139-.383 1.473-.072-.302-.186-.754-.344-1.36l-1.705-6.506h-1.435m-30.31 1.016h2.279c.534 0 .923.14 1.169.42.249.28.374.637.374 1.072 0 .297-.064.573-.192.827-.128.251-.315.435-.56.551-.246.113-.586.169-1.022.169h-2.048v-3.04m24.04 0h2.279c.534 0 .924.14 1.169.42.249.28.373.637.373 1.072 0 .297-.064.573-.191.827-.128.251-.315.435-.56.551-.246.113-.587.169-1.022.169h-2.048v-3.04m-16.786.069h1.842c.432 0 .728.027.889.081.249.088.449.269.599.545.154.272.231.601.231.984 0 .531-.129.942-.388 1.235s-.696.439-1.311.439h-1.862v-3.284"/><ellipse cx="81.02" cy="6.143" rx="4.619" ry="4.794"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

-23
View File
@@ -1,23 +0,0 @@
[variables]
main_domain = "${domain}"
db_name = "dolibarr"
db_user = "dolibarr"
db_password = "${password:32}"
db_root_password = "${password:32}"
admin_password = "${password:32}"
[config]
env = [
"DOLIBARR_HOST=${main_domain}",
"DB_NAME=${db_name}",
"DB_USER=${db_user}",
"DB_PASSWORD=${db_password}",
"DB_ROOT_PASSWORD=${db_root_password}",
"ADMIN_PASSWORD=${admin_password}"
]
mounts = []
[[config.domains]]
serviceName = "dolibarr"
port = 80
host = "${main_domain}"
@@ -1,29 +0,0 @@
version: "3.8"
services:
easyappointments:
image: alextselegidis/easyappointments:1.5.0
restart: unless-stopped
environment:
- BASE_URL=http://${DOMAIN}
- DB_HOST=mysql
- DB_NAME=easyappointments
- DB_USERNAME=root
- DB_PASSWORD=${DB_PASSWORD}
volumes:
- easyappointments:/var/www/html
depends_on:
- mysql
mysql:
image: mysql:8.0
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
- MYSQL_DATABASE=easyappointments
volumes:
- mysql:/var/lib/mysql
volumes:
easyappointments:
mysql:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

-13
View File
@@ -1,13 +0,0 @@
[variables]
main_domain = "${domain}"
db_password = "${password:32}"
[config]
[[config.domains]]
serviceName = "easyappointments"
port = 80
host = "${main_domain}"
[config.env]
DOMAIN = "${main_domain}"
DB_PASSWORD = "${db_password}"
-58
View File
@@ -1,58 +0,0 @@
# This templates requires additional traefik port mapping and entry point
# for port 8883 (mqtts over TCP)
#
# For the full instructions, refer to:
# - https://github.com/Dokploy/dokploy/discussions/3126
#
# The initial login credentials are:
# - USERNAME: admin
# - PASSWORD: public
services:
emqx:
image: emqx/emqx-enterprise:6.0.1
hostname: node1.emqx.com
environment:
EMQX_NODE_NAME: emqx@node1.emqx.com
expose:
- 1883 # MQTT
- 8083 # WS
- 18083 # Dashboard
volumes:
- emqx_data:/opt/emqx/data
- emqx_log:/opt/emqx/log
networks:
dokploy-network:
aliases:
- emqx-service
restart: unless-stopped
healthcheck:
test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
interval: 30s
timeout: 5s
retries: 3
labels:
# MQTT over TLS
- "traefik.tcp.routers.emqx-mqtts.entrypoints=mqtts"
- "traefik.tcp.routers.emqx-mqtts.rule=HostSNI(`broker.yourdomain.com`)" # Change domain
- "traefik.tcp.routers.emqx-mqtts.tls.certresolver=letsencrypt"
- "traefik.tcp.routers.emqx-mqtts.service=emqx-service"
- "traefik.tcp.services.emqx-service.loadbalancer.server.port=1883"
#
# Optional Web UI:
# - https://github.com/emqx/MQTTX/tree/main/web
#
# mqttx-web:
# image: emqx/mqttx-web:latest
# expose:
# - 80
#
volumes:
emqx_data:
emqx_log:
networks:
dokploy-network:
external: true
-6
View File
@@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="40 22 240 277">
<g fill="#5551F4" fill-rule="evenodd">
<path d="M214.8 107.087H112.496v.021c-.142-.006-.282-.021-.425-.021-5.311 0-9.616 4.293-9.616 9.589 0 5.295 4.305 9.588 9.616 9.588.143 0 .283-.015.425-.022v.022H214.8c5.31 0 9.615-4.293 9.615-9.588 0-5.296-4.305-9.59-9.615-9.59m0 91.341H112.496v.02c-.142-.005-.282-.02-.425-.02-5.311 0-9.616 4.293-9.616 9.588s4.305 9.588 9.616 9.588c.143 0 .283-.015.425-.02v.02H214.8c5.31 0 9.615-4.293 9.615-9.588s-4.305-9.588-9.615-9.588m-26.876-36.082c0-5-3.84-9.101-8.739-9.545v-.044h-87.72v.022c-.142-.006-.281-.022-.425-.022-5.31 0-9.615 4.293-9.615 9.59 0 5.295 4.305 9.588 9.615 9.588.144 0 .283-.016.426-.022v.022h87.719v-.045c4.899-.442 8.739-4.544 8.739-9.544"/>
<path fill-rule="nonzero" d="M280 91.25 160 22 40 91.25v138.5L160 299l120-69.25zM160 42.712l102.049 58.894V219.38L160 278.276 57.939 219.38V101.606z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 940 B

-11
View File
@@ -1,11 +0,0 @@
[variables]
[[config.domains]]
serviceName = "emqx"
port = 18083
host = "emqx.yourdomain.com"
[[config.domains]]
serviceName = "emqx"
port = 8083
host = "broker.yourdomain.com"
+1 -1
View File
@@ -1,6 +1,6 @@
services:
evolution-api:
image: evoapicloud/evolution-api:latest
image: atendai/evolution-api:v2.1.2
restart: always
volumes:
- evolution-instances:/evolution/instances
+1 -1
View File
@@ -1,7 +1,7 @@
version: "3.8"
services:
grafana:
image: grafana/grafana-enterprise:12.4
image: grafana/grafana-enterprise:9.5.20
restart: unless-stopped
volumes:
- grafana-storage:/var/lib/grafana
+9 -66
View File
@@ -1,18 +1,13 @@
version: "3.8"
services:
server:
image: docker.io/awinterstein/habitica-server:latest
restart: unless-stopped
depends_on:
mongo:
condition: service_healthy
- mongo
environment:
NODE_DB_URI: "mongodb://${MONGO_HABITICA_USER}:${MONGO_HABITICA_PASSWORD}@mongo/habitica?authSource=habitica"
INVITE_ONLY: "${INVITE_ONLY}"
EMAIL_SERVER_URL: "${EMAIL_SERVER_URL}"
EMAIL_SERVER_PORT: "${EMAIL_SERVER_PORT}"
EMAIL_SERVER_AUTH_USER: "${EMAIL_SERVER_AUTH_USER}"
EMAIL_SERVER_AUTH_PASSWORD: "${EMAIL_SERVER_AUTH_PASSWORD}"
ADMIN_EMAIL: "${ADMIN_EMAIL}"
- NODE_DB_URI=mongodb://mongo/habitica
client:
image: docker.io/awinterstein/habitica-client:latest
@@ -25,64 +20,12 @@ services:
mongo:
image: docker.io/mongo:latest
restart: unless-stopped
command: >
bash -c "
echo \"${MONGO_KEYFILE_CONTENT}\" > /etc/mongo-keyfile &&
chown 999:999 /etc/mongo-keyfile &&
chmod 400 /etc/mongo-keyfile &&
exec docker-entrypoint.sh mongod --replSet rs --bind_ip_all --port 27017 --keyFile /etc/mongo-keyfile
"
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_ADMIN_USER}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ADMIN_PASSWORD}
MONGO_KEYFILE_CONTENT: ${MONGO_KEYFILE_CONTENT}
MONGO_HABITICA_USER: ${MONGO_HABITICA_USER}
MONGO_HABITICA_PASSWORD: ${MONGO_HABITICA_PASSWORD}
# ---------------------------------------------------------
# SMART HEALTHCHECK: Auto-fixes Hostname Mismatches for replicaSet
# ---------------------------------------------------------
command: ["--replSet", "rs", "--bind_ip_all", "--port", "27017"]
healthcheck:
test: |
mongosh --port 27017 --quiet -u "${MONGO_ADMIN_USER}" -p "${MONGO_ADMIN_PASSWORD}" --authenticationDatabase admin --eval "
try {
// 1. Hostname Fix
const config = rs.conf();
const currentHost = require('os').hostname() + ':27017';
if (config.members[0].host !== currentHost) {
config.members[0].host = currentHost;
rs.reconfig(config, { force: true });
}
// 2. User Creation Logic
const targetDb = db.getSiblingDB('habitica');
const hUser = process.env.MONGO_HABITICA_USER;
const hPass = process.env.MONGO_HABITICA_PASSWORD;
// We can only check/create users if we are Primary
if (rs.isMaster().ismaster) {
if (!targetDb.getUser(hUser)) {
print('Creating missing user ' + hUser + '...');
targetDb.createUser({ user: hUser, pwd: hPass, roles: ['readWrite'] });
}
// SUCCESS: User exists and we are Primary
quit(0);
} else {
// We are not Primary yet (still electing), so we cannot confirm user exists.
// Fail the check so the dependent app waits.
print('Waiting for Primary state...');
quit(1);
}
} catch (err) {
// If not initialized, initiate and FAIL this check so we wait for the next cycle
try {
rs.initiate({ _id: 'rs', members: [{ _id: 0, host: require('os').hostname() + ':27017' }] });
} catch (e) {}
quit(1);
}
"
interval: 5s
timeout: 10s
retries: 20
test: echo "try { rs.status() } catch (err) { rs.initiate() }" | mongosh --port 27017 --quiet
interval: 10s
timeout: 30s
retries: 30
volumes:
- habitica-mongo-data:/data/db
+8 -16
View File
@@ -1,9 +1,6 @@
[variables]
main_domain = "${domain}"
mail_password = "${password:32}"
mongo_key = "${base64:756}"
mongo_admin_password = "${password}"
mongo_habitica_password = "${password}"
[config]
[[config.domains]]
@@ -12,21 +9,16 @@ port = 80
host = "habitica.${main_domain}"
[config.env]
BASE_URL = "https://habitica.${main_domain}"
INVITE_ONLY = "false"
EMAIL_SERVER_URL = "mail.example.com"
EMAIL_SERVER_PORT = "587"
EMAIL_SERVER_AUTH_USER = "mail_user"
EMAIL_SERVER_AUTH_PASSWORD = "${mail_password}"
MONGO_KEYFILE_CONTENT = "${mongo_key}"
MONGO_ADMIN_USER = "admin"
MONGO_ADMIN_PASSWORD = "${mongo_admin_password}"
MONGO_HABITICA_USER = "habitica"
MONGO_HABITICA_PASSWORD = "${mongo_habitica_password}"
ADMIN_EMAIL = "no-reply@${main_domain}"
BASE_URL="https://habitica.${main_domain}"
INVITE_ONLY="false"
EMAIL_SERVER_URL="mail.example.com"
EMAIL_SERVER_PORT="587"
EMAIL_SERVER_AUTH_USER="mail_user"
EMAIL_SERVER_AUTH_PASSWORD="${mail_password}"
[[config.mounts]]
serviceName = "mongo"
type = "volume"
source = "habitica-mongo-data"
target = "/data/db"
target = "/data/db"
-76
View File
@@ -1,76 +0,0 @@
version: "3.8"
services:
imgproxy:
image: darthsim/imgproxy:v3.30.1
restart: unless-stopped
environment:
IMGPROXY_KEY: ${IMGPROXY_KEY}
IMGPROXY_SALT: ${IMGPROXY_SALT}
IMGPROXY_ENABLE_WEBP_DETECTION: ${IMGPROXY_ENABLE_WEBP_DETECTION:-true}
IMGPROXY_ENFORCE_WEBP: ${IMGPROXY_ENFORCE_WEBP:-true}
IMGPROXY_TTL: ${IMGPROXY_TTL:-30600}
IMGPROXY_DEVELOPMENT_ERRORS_MODE: ${IMGPROXY_DEVELOPMENT_ERRORS_MODE:-false}
IMGPROXY_READ_TIMEOUT: ${IMGPROXY_READ_TIMEOUT:-10}
IMGPROXY_WRITE_TIMEOUT: ${IMGPROXY_WRITE_TIMEOUT:-10}
IMGPROXY_KEEP_ALIVE_TIMEOUT: ${IMGPROXY_KEEP_ALIVE_TIMEOUT:-10}
IMGPROXY_DOWNLOAD_TIMEOUT: ${IMGPROXY_DOWNLOAD_TIMEOUT:-5}
IMGPROXY_CONCURRENCY: ${IMGPROXY_CONCURRENCY:-}
IMGPROXY_MAX_CLIENTS: ${IMGPROXY_MAX_CLIENTS:-10}
IMGPROXY_SO_REUSEPORT: ${IMGPROXY_SO_REUSEPORT:-}
IMGPROXY_USER_AGENT: ${IMGPROXY_USER_AGENT:-}
IMGPROXY_USE_ETAG: ${IMGPROXY_USE_ETAG:-true}
IMGPROXY_QUALITY: ${IMGPROXY_QUALITY:-80}
IMGPROXY_ALLOWED_SOURCES: ${IMGPROXY_ALLOWED_SOURCES}
IMGPROXY_ALLOW_ORIGIN: ${IMGPROXY_ALLOW_ORIGIN:-*}
IMGPROXY_MAX_SRC_FILE_SIZE: ${IMGPROXY_MAX_SRC_FILE_SIZE:-20971520}
IMGPROXY_MAX_SRC_RESOLUTION: ${IMGPROXY_MAX_SRC_RESOLUTION:-50}
IMGPROXY_LOG_LEVEL: ${IMGPROXY_LOG_LEVEL:-error}
nginx:
image: nginx:1.28.2-alpine
restart: unless-stopped
expose:
- 80
environment:
NGINX_CACHE_LEVELS: ${NGINX_CACHE_LEVELS:-1:2}
NGINX_CACHE_KEYS_ZONE_SIZE: ${NGINX_CACHE_KEYS_ZONE_SIZE:-32m}
NGINX_CACHE_MAX_SIZE: ${NGINX_CACHE_MAX_SIZE:-500m}
NGINX_CACHE_INACTIVE: ${NGINX_CACHE_INACTIVE:-30d}
NGINX_CACHE_USE_TEMP_PATH: ${NGINX_CACHE_USE_TEMP_PATH:-off}
NGINX_CACHE_EXPIRES: ${NGINX_CACHE_EXPIRES:-30d}
depends_on:
- imgproxy
volumes:
- nginx-cache:/tmp/cache
command:
- /bin/sh
- -c
- |
cat <<EOF > /etc/nginx/conf.d/default.conf
proxy_cache_path /tmp/cache levels=$${NGINX_CACHE_LEVELS} keys_zone=my_cache:$${NGINX_CACHE_KEYS_ZONE_SIZE} max_size=$${NGINX_CACHE_MAX_SIZE} inactive=$${NGINX_CACHE_INACTIVE} use_temp_path=$${NGINX_CACHE_USE_TEMP_PATH};
server {
listen 80 default_server;
listen [::]:80 default_server;
location / {
expires $${NGINX_CACHE_EXPIRES};
access_log off;
set \$$handle_webp 0;
if (\$$http_accept ~* "image/webp") {
set \$$handle_webp 1;
}
proxy_cache my_cache;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_background_update on;
proxy_cache_lock on;
proxy_cache_key "\$$scheme\$$host\$$uri\$$handle_webp";
server_tokens off;
proxy_pass http://imgproxy:8080;
}
}
EOF
exec nginx -g 'daemon off;'
volumes:
nginx-cache:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

-56
View File
@@ -1,56 +0,0 @@
[variables]
main_domain = "${domain}"
imgproxy_key = "${hash:128}"
imgproxy_salt = "${hash:128}"
imgproxy_allowed_sources = "http://${main_domain},https://${main_domain}"
imgproxy_quality = "80"
imgproxy_ttl = "30600"
imgproxy_max_src_file_size = "20971520"
imgproxy_max_src_resolution = "50"
imgproxy_log_level = "error"
imgproxy_max_clients = "10"
imgproxy_allow_origin = "*"
imgproxy_enable_webp_detection = "true"
imgproxy_enforce_webp = "true"
imgproxy_use_etag = "true"
nginx_cache_levels = "1:2"
nginx_cache_keys_zone_size = "32m"
nginx_cache_max_size = "500m"
nginx_cache_inactive = "30d"
nginx_cache_use_temp_path = "off"
nginx_cache_expires = "30d"
[config]
[[config.domains]]
serviceName = "nginx"
port = 80
host = "${main_domain}"
[config.env]
IMGPROXY_KEY = "${imgproxy_key}"
IMGPROXY_SALT = "${imgproxy_salt}"
IMGPROXY_ENABLE_WEBP_DETECTION = "${imgproxy_enable_webp_detection}"
IMGPROXY_ENFORCE_WEBP = "${imgproxy_enforce_webp}"
IMGPROXY_TTL = "${imgproxy_ttl}"
IMGPROXY_DEVELOPMENT_ERRORS_MODE = "false"
IMGPROXY_READ_TIMEOUT = "10"
IMGPROXY_WRITE_TIMEOUT = "10"
IMGPROXY_KEEP_ALIVE_TIMEOUT = "10"
IMGPROXY_DOWNLOAD_TIMEOUT = "5"
IMGPROXY_CONCURRENCY = ""
IMGPROXY_MAX_CLIENTS = "${imgproxy_max_clients}"
IMGPROXY_SO_REUSEPORT = ""
IMGPROXY_USER_AGENT = ""
IMGPROXY_USE_ETAG = "${imgproxy_use_etag}"
IMGPROXY_QUALITY = "${imgproxy_quality}"
IMGPROXY_ALLOWED_SOURCES = "${imgproxy_allowed_sources}"
IMGPROXY_ALLOW_ORIGIN = "${imgproxy_allow_origin}"
IMGPROXY_MAX_SRC_FILE_SIZE = "${imgproxy_max_src_file_size}"
IMGPROXY_MAX_SRC_RESOLUTION = "${imgproxy_max_src_resolution}"
IMGPROXY_LOG_LEVEL = "${imgproxy_log_level}"
NGINX_CACHE_LEVELS = "${nginx_cache_levels}"
NGINX_CACHE_KEYS_ZONE_SIZE = "${nginx_cache_keys_zone_size}"
NGINX_CACHE_MAX_SIZE = "${nginx_cache_max_size}"
NGINX_CACHE_INACTIVE = "${nginx_cache_inactive}"
NGINX_CACHE_USE_TEMP_PATH = "${nginx_cache_use_temp_path}"
NGINX_CACHE_EXPIRES = "${nginx_cache_expires}"
-64
View File
@@ -1,64 +0,0 @@
services:
postgres:
image: ghcr.io/instantdb/postgresql:postgresql-16-pg-hint-plan
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- backend-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER}"]
interval: 10s
timeout: 5s
retries: 5
command:
- "postgres"
- "-c"
- "wal_level=logical"
- "-c"
- "max_replication_slots=4"
- "-c"
- "max_wal_senders=4"
- "-c"
- "shared_preload_libraries=pg_hint_plan"
- "-c"
- "random_page_cost=1.1"
server:
depends_on:
postgres:
condition: service_healthy
image: hari1367709/instantdb-server:latest
restart: unless-stopped
working_dir: /app
environment:
DATABASE_URL: "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}"
NREPL_BIND_ADDRESS: "0.0.0.0"
PORT: "8888"
HOST: "0.0.0.0"
# AWS Credentials for KMS (required for InstantDB)
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_REGION: ${AWS_REGION:-us-east-1}
# Force unbuffered output for logs
PYTHONUNBUFFERED: "1"
NODE_ENV: "production"
command: ["java", "-Djava.awt.headless=true", "-server", "-jar", "target/instant-standalone.jar"]
ports:
- "8888"
- "6005"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8888/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
backend-db:
-4
View File
@@ -1,4 +0,0 @@
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="512" height="512" fill="black"/>
<rect x="97.0973" y="91.3297" width="140" height="330" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 223 B

-29
View File
@@ -1,29 +0,0 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
postgres_user = "instant"
postgres_db = "instant"
aws_access_key_id = "FILL-YOUR-CREDENTIALS"
aws_secret_access_key = "FILL-YOUR-CREDENTIALS"
aws_region = "us-east-1"
[config]
env = [
"POSTGRES_PASSWORD=${postgres_password}",
"POSTGRES_USER=${postgres_user}",
"POSTGRES_DB=${postgres_db}",
"DATABASE_URL=postgresql://${postgres_user}:${postgres_password}@postgres:5432/${postgres_db}",
"NREPL_BIND_ADDRESS=0.0.0.0",
"PORT=8888",
"HOST=0.0.0.0",
"AWS_ACCESS_KEY_ID=${aws_access_key_id}",
"AWS_SECRET_ACCESS_KEY=${aws_secret_access_key}",
"AWS_REGION=${aws_region}",
]
mounts = []
[[config.domains]]
serviceName = "server"
port = 8888
host = "${main_domain}"
+4 -2
View File
@@ -20,7 +20,8 @@ services:
image: invoiceshelf/invoiceshelf:nightly
volumes:
- invoiceshelf-storage:/var/www/html/storage
- invoiceshelf-app-data:/data
- invoiceshelf-app-conf:/conf
environment:
- PHP_TZ=UTC
- TIMEZONE=UTC
@@ -48,4 +49,5 @@ services:
volumes:
invoiceshelf-postgres-data:
invoiceshelf-storage:
invoiceshelf-app-data:
invoiceshelf-app-conf:
-17
View File
@@ -1,17 +0,0 @@
version: "3.8"
services:
ipfs:
image: ipfs/kubo:latest
restart: unless-stopped
environment:
- IPFS_PROFILE=server
volumes:
- ipfs_data:/data/ipfs
- ipfs_staging:/export
ports:
- 4001
- 8080
- 5001
volumes:
ipfs_data: {}
ipfs_staging: {}
-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="34.3 0 443.4 512"><defs><linearGradient id="a" x1="84.315" x2="527.72" y1="771.51" y2="771.51" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4a9ea1"/></linearGradient><linearGradient id="b" x1="99.675" x2="512.36" y1="771.48" y2="771.48" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#63d3d7"/></linearGradient></defs><path fill="url(#a)" d="m84.315 899.51 221.7 128 221.7-128v-256l-221.7-127.99-221.7 128z" transform="translate(-50.017 -515.51)"/><path fill="url(#b)" d="m283.13 546.35-160.74 92.806a38.4 38.4 0 0 1 0 8.59l160.75 92.805c13.554-10 32.043-10 45.597 0l160.75-92.807a38.3 38.3 0 0 1-.001-8.588l-160.74-92.806c-13.554 10.001-32.044 10.001-45.599 0zm221.79 127.03L344 767.22c1.884 16.739-7.361 32.751-22.799 39.489l.18 184.58a38.4 38.4 0 0 1 7.439 4.294l160.75-92.805c-1.884-16.739 7.36-32.752 22.799-39.49v-185.61a38.4 38.4 0 0 1-7.44-4.294zm-397.81 1.032a38.4 38.4 0 0 1-7.438 4.295v185.61c15.438 6.738 24.683 22.75 22.799 39.489l160.74 92.806a38.4 38.4 0 0 1 7.44-4.295v-185.61c-15.439-6.738-24.684-22.75-22.8-39.49l-160.74-92.81z" transform="translate(-50.017 -515.51)"/><path fill-opacity=".251" d="m256 512 221.7-128V128L256 256z"/><path fill-opacity=".039" d="M256 512V256L34.3 128v256z"/><path fill-opacity=".13" d="m34.298 128 221.7 128 221.7-128-221.7-128z"/><path fill="#fff" d="M103.09 186h-29.2v141.2h29.2zm50.88 141.2v-51.8c7.2.6 14.4.6 20.4.6 41.6 0 53.6-20.6 53.6-46 0-30.8-22-44-56-44h-47.2v141.2zm15.8-71.8c-5.4 0-13.4 0-15.8-.2v-48h18.2c17.6 0 27.6 8.4 27.6 23.8v.4c0 12-4.4 24-30 24M327.95 186h-88.6v141.2h29.2V265h55.4v-21.2h-55.6v-36.4h57.6zm95.56 27.6 7.6-19.6c-11.4-8.2-26.8-11.2-46.2-11.2-28.2 0-51.4 13.2-51.4 40.2 0 24.2 17.8 33.8 35.6 39.6l17.8 6c12.2 4.2 22.2 8.2 22.2 21.4 0 12-10.4 16.8-26.2 16.8-16 0-33.2-4.8-43-11l-7.6 21.2c12.8 8.2 29 12.2 50.8 12.2 31 0 55-13.6 55-42.6 0-27-20.6-35.6-41.4-42.6l-19.4-6.4c-8.4-2.8-14.8-6.6-14.8-17.4 0-11 9-15.4 22.4-15.4 16.4 0 29.2 3 38.6 8.8"/></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

-25
View File
@@ -1,25 +0,0 @@
[variables]
gateway_domain = "${domain}"
api_domain = "${domain}"
[config]
env = []
[[config.domains]]
serviceName = "ipfs"
port = 8080
host = "${gateway_domain}"
[[config.domains]]
serviceName = "ipfs"
port = 5001
host = "${api_domain}"
[[config.mounts]]
filePath = "/container-init.d/001-configure-api.sh"
content = """
#!/bin/sh
ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
"""
-13
View File
@@ -1,13 +0,0 @@
version: "3.8"
services:
jenkins:
image: jenkins/jenkins:latest
volumes:
- jenkins-home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8080
volumes:
jenkins-home: {}
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 22 KiB

-12
View File
@@ -1,12 +0,0 @@
[variables]
main_domain = "${domain}"
[config]
env = {}
mounts = []
[[config.domains]]
serviceName = "jenkins"
port = 8080
host = "${main_domain}"
@@ -1,13 +0,0 @@
version: "3.8"
services:
komari:
image: ghcr.io/komari-monitor/komari:latest
restart: unless-stopped
volumes:
- komari-data:/app/data
environment:
- ADMIN_USERNAME
- ADMIN_PASSWORD
volumes:
komari-data: {}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

-15
View File
@@ -1,15 +0,0 @@
[variables]
main_domain = "${domain}"
admin_password = "${password:16}"
[config]
mounts = []
[[config.domains]]
serviceName = "komari"
port = 25_774
host = "${main_domain}"
[config.env]
ADMIN_USERNAME = "admin"
ADMIN_PASSWORD = "${admin_password}"
-41
View File
@@ -1,41 +0,0 @@
services:
fix-perms:
image: busybox:1.36
command: >
sh -c "mkdir -p /opt/Lavalink/plugins &&
chmod -R 0777 /opt/Lavalink/plugins || true &&
chown -R 1000:1000 /opt/Lavalink/plugins || true &&
echo perms-fixed && sleep 1"
volumes:
- "../files/plugins/:/opt/Lavalink/plugins/"
- "../files/application.yml:/opt/Lavalink/application.yml"
restart: "no"
lavalink:
image: ghcr.io/lavalink-devs/lavalink:4
depends_on:
- fix-perms
restart: unless-stopped
environment:
_JAVA_OPTIONS: "${_JAVA_OPTIONS:--Xmx6G}"
LAVALINK_SERVER_PASSWORD: "${LAVALINK_SERVER_PASSWORD:-youshallnotpass}"
SERVER_PORT: "${SERVER_PORT:-2333}"
volumes:
- "../files/application.yml:/opt/Lavalink/application.yml:rw"
- "../files/plugins/:/opt/Lavalink/plugins/:rw"
ports:
- ${SERVER_PORT}
healthcheck:
test: >
sh -c 'wget --header="Authorization: ${LAVALINK_SERVER_PASSWORD}" -qO- http://127.0.0.1:${SERVER_PORT}/v4/info >/dev/null 2>&1 || exit 1'
interval: 100s
timeout: 5s
retries: 5
start_period: 30s
entrypoint: >
sh -c 'until [ -w /opt/Lavalink/plugins ] ; do
echo "waiting for /opt/Lavalink/plugins to be writable";
sleep 1;
done;
exec java -jar /opt/Lavalink/Lavalink.jar'
-50
View File
@@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 100 100"
width="100%"
height="100%"
version="1.1"
id="svg13"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs7">
<linearGradient
id="grad"
x1="0"
y1="0"
x2="100"
y2="100"
spreadMethod="pad"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#ff8c00"
id="stop2"
style="stop-color:#fa9800;stop-opacity:1;" />
<stop
offset="100"
stop-color="#ff0000"
id="stop4"
style="stop-color:#ff005e;stop-opacity:1;" />
</linearGradient>
</defs>
<rect
width="100%"
height="100%"
fill="url(#grad)"
id="rect9"
x="0"
y="0"
rx="14"
ry="14"
style="fill:url(#grad)" />
<path
style="vector-effect:none;fill:#ffffff;fill-opacity:1;stroke-width:1.27808;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
d="m 57,25 h 13 l -7,27 h 12 l -2,8.5 H 48 Z"
id="path724-5" />
<path
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke-width:1.33907;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
d="m 37.5,25 h 14 l -10,40 H 72 L 70,75 H 25 Z"
id="path724" />
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

-123
View File
@@ -1,123 +0,0 @@
[variables]
main_domain = "${domain}"
server_port = "2333"
lavalink_server_password = "${password}"
[config]
[[config.mounts]]
filePath = "./application.yml"
content = """
server: # REST and WS server
port: 2333
address: 0.0.0.0
http2:
enabled: false
plugins:
# name: # Name of the plugin
# some_key: some_value # Some key-value pair for the plugin
# another_key: another_value
lavalink:
plugins:
# - dependency: "com.github.username.pluginName:pluginName-plugin:x.y.z"
# snapshot: false
# pluginsDir: "/opt/Lavalink/plugins"
# defaultPluginRepository: "https://maven.lavalink.dev/releases"
# defaultPluginSnapshotRepository: "https://maven.lavalink.dev/snapshots"
server:
password: "youshallnotpass"
sources:
# The default Youtube source is now deprecated and won't receive further updates. Please use https://github.com/lavalink-devs/youtube-source#plugin instead.
youtube: true
bandcamp: true
soundcloud: true
twitch: true
vimeo: true
nico: true
http: true
local: false
filters:
volume: true
equalizer: true
karaoke: true
timescale: true
tremolo: true
vibrato: true
distortion: true
rotation: true
channelMix: true
lowPass: true
nonAllocatingFrameBuffer: false
bufferDurationMs: 400
frameBufferDurationMs: 5000
opusEncodingQuality: 10
resamplingQuality: LOW
trackStuckThresholdMs: 10000
useSeekGhosting: true
youtubePlaylistLoadLimit: 6
playerUpdateInterval: 5
youtubeSearchEnabled: true
soundcloudSearchEnabled: true
gc-warnings: true
#ratelimit:
#ipBlocks: ["1.0.0.0/8", "..."] # list of ip blocks
#excludedIps: ["...", "..."] # ips which should be explicit excluded from usage by lavalink
#strategy: "RotateOnBan" # RotateOnBan | LoadBalance | NanoSwitch | RotatingNanoSwitch
#searchTriggersFail: true # Whether a search 429 should trigger marking the ip as failing
#retryLimit: -1 # -1 = use default lavaplayer value | 0 = infinity | >0 = retry will happen this numbers times
#youtubeConfig: # Required for avoiding all age restrictions by YouTube, some restricted videos still can be played without.
#email: "" # Email of Google account
#password: "" # Password of Google account
#httpConfig: # Useful for blocking bad-actors from ip-grabbing your music node and attacking it, this way only the http proxy will be attacked
#proxyHost: "localhost" # Hostname of the proxy, (ip or domain)
#proxyPort: 3128 # Proxy port, 3128 is the default for squidProxy
#proxyUser: "" # Optional user for basic authentication fields, leave blank if you don't use basic auth
#proxyPassword: "" # Password for basic authentication
timeouts:
connectTimeoutMs: 3000
connectionRequestTimeoutMs: 3000
socketTimeoutMs: 3000
metrics:
prometheus:
enabled: false
endpoint: /metrics
sentry:
dsn: ""
environment: ""
# tags:
# some_key: some_value
# another_key: another_value
logging:
file:
path: ./logs/
level:
root: INFO
lavalink: INFO
request:
enabled: true
includeClientInfo: true
includeHeaders: false
includeQueryString: true
includePayload: true
maxPayloadLength: 10000
logback:
rollingpolicy:
max-file-size: 1GB
max-history: 30
"""
[[config.domains]]
serviceName = "lavalink"
port = 2_333
host = "${main_domain}"
[config.env]
_JAVA_OPTIONS = "-Xmx6G"
LAVALINK_SERVER_PASSWORD = "${lavalink_server_password}"
SERVER_PORT = "${server_port}"
-131
View File
@@ -1,131 +0,0 @@
version: "3.8"
services:
# -------------------------------------------------------------------------
# Service 1: Database
# -------------------------------------------------------------------------
mysql:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MAUTIC_DB_DATABASE}
MYSQL_USER: ${MAUTIC_DB_USER}
MYSQL_PASSWORD: ${MAUTIC_DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
# -------------------------------------------------------------------------
# Service 2: Mautic Web (The Leader)
# -------------------------------------------------------------------------
mautic:
image: mautic/mautic:5.1.1-apache
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
ports:
- 80
environment:
- DOCKER_MAUTIC_ROLE=mautic_web
- DOCKER_MAUTIC_RUN_MIGRATIONS=true
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_URL=${MAUTIC_URL}
- MAUTIC_TRUSTED_PROXIES=${MAUTIC_TRUSTED_PROXIES}
- MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}
- MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
- PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT}
volumes:
- mautic_data:/var/www/html
# AUTOMATION FIX 1: Force permissions to be correct on every start
entrypoint: ["/bin/sh", "-c", "chown -R www-data:www-data /var/www/html && /entrypoint.sh apache2-foreground"]
# AUTOMATION FIX 2: Check if the CONFIG FILE exists. If not, report 'unhealthy'.
# This signals the other containers to keep waiting.
healthcheck:
test: ["CMD-SHELL", "test -f /var/www/html/config/local.php || exit 1"]
interval: 10s
timeout: 5s
retries: 3
start_period: 300s # Give you 5 mins to run the installer before marking failed
# -------------------------------------------------------------------------
# Service 3: Mautic Cron (Waits for Install)
# -------------------------------------------------------------------------
mautic-cron:
image: mautic/mautic:5.1.1-apache
restart: unless-stopped
depends_on:
mautic:
condition: service_healthy # AUTOMATION FIX 3: Do not start until config file exists
environment:
- DOCKER_MAUTIC_ROLE=mautic_cron
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_URL=${MAUTIC_URL}
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
volumes:
- mautic_data:/var/www/html
# -------------------------------------------------------------------------
# Service 4: Mautic Worker (Waits for Install)
# -------------------------------------------------------------------------
mautic-worker:
image: mautic/mautic:5.1.1-apache
restart: unless-stopped
depends_on:
mautic:
condition: service_healthy # AUTOMATION FIX 3: Do not start until config file exists
deploy:
resources:
limits:
memory: 512M
environment:
- DOCKER_MAUTIC_ROLE=mautic_worker
- DOCKER_MAUTIC_WORKERS_CONSUME_EMAIL=2
- DOCKER_MAUTIC_WORKERS_CONSUME_HIT=2
- DOCKER_MAUTIC_WORKERS_CONSUME_FAILED=2
- MAUTIC_DB_HOST=${MAUTIC_DB_HOST}
- MAUTIC_DB_PORT=${MAUTIC_DB_PORT}
- MAUTIC_DB_DATABASE=${MAUTIC_DB_DATABASE}
- MAUTIC_DB_USER=${MAUTIC_DB_USER}
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_URL=${MAUTIC_URL}
- MAUTIC_MESSENGER_DSN_EMAIL=${MAUTIC_MESSENGER_DSN_EMAIL}
- MAUTIC_MESSENGER_DSN_HIT=${MAUTIC_MESSENGER_DSN_HIT}
- PHP_INI_DATE_TIMEZONE=${PHP_INI_DATE_TIMEZONE}
volumes:
- mautic_data:/var/www/html
# -------------------------------------------------------------------------
# Service 5: phpMyAdmin
# -------------------------------------------------------------------------
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
environment:
PMA_HOST: mysql
PMA_PORT: 3306
UPLOAD_LIMIT: 64M
ports:
- 80
volumes:
mysql_data:
mautic_data:
-76
View File
@@ -1,76 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 242.6 230.8" enable-background="new 0 0 242.6 230.8" xml:space="preserve">
<g id="tagline">
<g>
<path fill="#8790B8" d="M0,206.6h12.3v1.8H2.2v6.6h9.4v1.8H2.2v8H0V206.6z"/>
<path fill="#8790B8" d="M22,213.4c-2.9,0-4.9,2.3-5,5v6.3h-2v-13h2v3.7c0.9-2.3,2.7-3.8,5-3.8V213.4z"/>
<path fill="#8790B8" d="M25.4,218.8c0.2,2.6,2.1,4.4,4.8,4.4c1.6,0,2.8-0.5,3.7-1.4c0.4,0.4,0.8,0.8,1.1,1.1
c-1.2,1.2-2.9,1.9-4.9,1.9c-4,0-6.7-2.7-6.7-6.6c0-3.9,2.5-6.6,6.2-6.6c3.6,0,6.1,2.7,6.1,6.6v0.6H25.4z M33.7,217.4
c-0.1-2.5-1.8-4.1-4.1-4.1c-2.3,0-3.9,1.7-4.2,4.1H33.7z"/>
<path fill="#8790B8" d="M39.7,218.8c0.2,2.6,2.1,4.4,4.8,4.4c1.6,0,2.8-0.5,3.7-1.4c0.4,0.4,0.8,0.8,1.1,1.1
c-1.2,1.2-2.9,1.9-4.9,1.9c-4,0-6.7-2.7-6.7-6.6c0-3.9,2.5-6.6,6.2-6.6c3.6,0,6.1,2.7,6.1,6.6v0.6H39.7z M47.9,217.4
c-0.1-2.5-1.8-4.1-4.1-4.1c-2.3,0-3.9,1.7-4.2,4.1H47.9z"/>
<path fill="#8790B8" d="M67.7,227.2c-0.9,2-2,3.5-3.9,3.5c-1.2,0-2.2-0.3-2.9-1.1l1-1.1c0.4,0.4,1.1,0.5,1.8,0.5
c1.1,0,1.8-1.1,2.4-2.5l0.9-1.8L61,211.8h2l4.8,10.7l4.9-10.7h2L67.7,227.2z"/>
<path fill="#8790B8" d="M81.4,211.6c3.9,0,6.6,2.7,6.6,6.6c0,3.9-2.7,6.6-6.6,6.6c-3.9,0-6.6-2.7-6.6-6.6
C74.8,214.3,77.5,211.6,81.4,211.6z M81.4,223.2c2.7,0,4.6-2,4.6-5s-1.9-5-4.6-5c-2.7,0-4.6,2-4.6,5S78.6,223.2,81.4,223.2z"/>
<path fill="#8790B8" d="M92.1,219.4c0,2.3,1.5,3.8,3.5,3.8c2.4,0,4.1-2.2,4.1-4.8v-6.6h2v13h-2v-3.2c-0.9,2-2.7,3.4-5,3.4
c-2.8,0-4.7-2.1-4.7-5.2v-7.9h2V219.4z"/>
<path fill="#8790B8" d="M111.9,213.4c-2.9,0-4.9,2.3-5,5v6.3h-2v-13h2v3.7c0.9-2.3,2.7-3.8,5-3.8V213.4z"/>
<path fill="#8790B8" d="M131.4,216.5c0-1.9-1.1-3.2-2.8-3.2c-2,0-3.5,1.7-3.5,4v7.4h-2v-13h2v2.5c0.9-1.6,2.4-2.6,4.3-2.6
c1.7,0,3,1,3.6,2.6c0.9-1.6,2.5-2.6,4.6-2.6c2.5,0,4.2,2,4.2,4.9v8.2h-2v-8.2c0-1.9-1.1-3.2-2.8-3.2c-2,0-3.5,1.7-3.6,4v7.4h-2
V216.5z"/>
<path fill="#8790B8" d="M144.6,213.4c1.3-1.1,2.9-1.8,5-1.8c3.2,0,5.5,2,5.5,4.8v8.3h-2v-2.9c-0.8,1.8-2.5,3-4.7,3
c-2.6,0-4.4-1.5-4.4-3.7c0-2.5,2.5-4.2,6.1-4.2c1,0,2,0.1,2.9,0.3v-0.8c0-1.9-1.4-3.2-3.4-3.2c-1.5,0-3,0.3-4,1.2L144.6,213.4z
M150.2,218.2c-2.5,0-4.3,1.1-4.3,2.7c0,1.3,1.3,2.2,3.1,2.2c2.4,0,4-2.1,4-4.6C152.1,218.3,151.3,218.2,150.2,218.2z"/>
<path fill="#8790B8" d="M165.2,213.4c-2.9,0-4.9,2.3-5,5v6.3h-2v-13h2v3.7c0.9-2.3,2.7-3.8,5-3.8V213.4z"/>
<path fill="#8790B8" d="M167.6,224.7v-18.8h2v12.1l6.1-6.3h2.4l-5.5,5.8l6.4,7.2h-2.3l-5.3-5.9l-1.7,1.9v4H167.6z"/>
<path fill="#8790B8" d="M181.5,218.8c0.2,2.6,2.1,4.4,4.8,4.4c1.6,0,2.8-0.5,3.7-1.4c0.4,0.4,0.8,0.8,1.1,1.1
c-1.2,1.2-2.9,1.9-4.9,1.9c-4,0-6.7-2.7-6.7-6.6c0-3.9,2.5-6.6,6.2-6.6s6.1,2.7,6.1,6.6v0.6H181.5z M189.7,217.4
c-0.1-2.5-1.8-4.1-4.1-4.1c-2.3,0-3.9,1.7-4.2,4.1H189.7z"/>
<path fill="#8790B8" d="M192.9,211.8h1.9v-3h2v3h4.8v1.6h-4.8v6.8c0,1.8,1.2,3,2.8,3c0.9,0,1.6-0.3,2.1-0.8l1.1,1.1
c-0.9,0.9-2,1.4-3.4,1.4c-2.7,0-4.6-1.9-4.6-4.7v-6.7h-1.9V211.8z"/>
<path fill="#8790B8" d="M204.8,206.6h2v2.4h-2V206.6z M204.8,224.7v-13h2v13H204.8z"/>
<path fill="#8790B8" d="M219.5,216.9c0-2.2-1.4-3.7-3.5-3.7c-2.5,0-4.1,2.3-4.1,5.1v6.4h-2v-13h2v3.3c0.9-2,2.7-3.4,5-3.4
c2.8,0,4.7,2,4.7,4.9v8.2h-2V216.9z"/>
<path fill="#8790B8" d="M225.1,227.7c0.9,0.8,2.3,1.3,4,1.3c2.7,0,4.5-1.8,4.5-4.3v-2.9c-0.9,1.8-2.6,3-4.9,3
c-3.1,0-5.2-2.6-5.2-6.3c0-4.1,3-6.9,7.3-6.9c1.8,0,3.4,0.3,4.8,0.9v12.2c0,3.5-2.7,6-6.5,6c-2.1,0-3.8-0.7-5.1-1.9L225.1,227.7z
M233.6,213.8c-0.9-0.3-2-0.5-3.2-0.5c-2.9,0-4.9,2.2-4.9,5.2c0,2.8,1.7,4.7,4.1,4.7c2.3,0,4-1.7,4-3.8V213.8z"/>
<path fill="#8790B8" d="M240,219.2v-12.6h2v12.6H240z M240,221.8h2v2.9h-2V221.8z"/>
</g>
</g>
<g id="logo">
<g>
<path fill="#4E5E9E" d="M26.1,187.9v-20.8c0-5.1-2.7-9.8-8-9.8c-5.2,0-8.3,4.6-8.3,9.8v20.8H0.3V149h8.9l0.7,4.7
c2-3.9,6.5-5.4,10.2-5.4c4.6,0,9.3,1.9,11.5,7.2c3.5-5.5,8-7.1,13-7.1c11,0,16.5,6.8,16.5,18.4v21h-9.6v-21c0-5.1-2.1-9.5-7.3-9.5
c-5.2,0-8.4,4.5-8.4,9.6v20.8H26.1z"/>
<path fill="#4E5E9E" d="M98.5,149.1h9.2v38.8h-9.1l-0.5-5.7c-2.2,4.6-8.3,6.8-12.6,6.9c-11.5,0.1-20-7-20-20.6
c0-13.4,8.9-20.4,20.2-20.3c5.2,0,10.2,2.4,12.4,6.3L98.5,149.1z M75.2,168.5c0,7.4,5.1,11.8,11.5,11.8c15.1,0,15.1-23.6,0-23.6
C80.3,156.7,75.2,161.1,75.2,168.5z"/>
<path fill="#4E5E9E" d="M123.5,149.1v20.3c0,5.9,3.2,10.4,9.4,10.4c5.9,0,9.9-5,9.9-10.9v-19.9h9.5V188h-8.6l-0.6-5.3
c-4,3.9-7.7,5.8-13.2,5.8c-9.3,0-16.1-7-16.1-19.1v-20.4H123.5z"/>
<path fill="#4E5E9E" d="M174.4,138.1v11h10.7v8.3h-10.8v16.8c0,3.7,2,5.5,5,5.5c1.5,0,3.2-0.5,4.6-1.2l2.7,8.2
c-2.8,1.1-5,1.6-8,1.7c-8.4,0.3-13.9-4.5-13.9-14.2v-16.8h-7.2v-8.3h7.2v-10L174.4,138.1z"/>
<path fill="#4E5E9E" d="M202.7,138.1c0,7.5-11.3,7.5-11.3,0C191.4,130.7,202.7,130.7,202.7,138.1z M192.3,148.9v39h9.6v-39H192.3z
"/>
<path fill="#4E5E9E" d="M242.6,183c-4.5,4.4-9.2,6.1-15,6.1c-11.3,0-20.6-6.8-20.6-20.6s9.4-20.6,20.6-20.6c5.5,0,9.8,1.6,14,5.8
l-6.1,6.4c-2.3-2-5.1-3.1-7.8-3.1c-6.5,0-11.2,4.7-11.2,11.5c0,7.4,5,11.3,11,11.3c3.1,0,6.1-0.9,8.5-3.2L242.6,183z"/>
</g>
</g>
<g id="brandmark">
<g>
<path fill="#4E5E9E" d="M121.2,119c-32.7,0-59.4-26.6-59.4-59.4S88.5,0.2,121.2,0.2c7.9,0,15.6,1.5,22.8,4.6c2,0.9,3,3.2,2.2,5.3
c-0.9,2-3.2,3-5.3,2.2c-6.3-2.6-12.9-3.9-19.7-3.9c-28.3,0-51.3,23-51.3,51.3s23,51.3,51.3,51.3c28.3,0,51.3-23,51.3-51.3
c0-6.1-1-12-3.1-17.6c-0.8-2.1,0.3-4.4,2.4-5.2c2.1-0.8,4.4,0.3,5.2,2.4c2.4,6.5,3.6,13.4,3.6,20.4C180.6,92.3,154,119,121.2,119z
"/>
</g>
<g>
<polygon fill="#FDB933" points="147.2,53.5 138,63.1 143.1,84.6 154.7,84.6 "/>
</g>
<polygon fill="#FDB933" points="143.4,25.1 146.6,28.3 121.2,55.2 99.5,32.9 87,84.6 98.6,84.6 105.5,55.9 121.2,73 154.8,36.4
158,39.7 161.2,21.6 "/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

-52
View File
@@ -1,52 +0,0 @@
[variables]
# Domain 1: For the main Mautic Application
mautic_domain = "${domain}"
# Domain 2: For phpMyAdmin (Database Manager)
pma_domain = "${domain}"
# Security: Random passwords
db_password = "${password:32}"
root_password = "${password:32}"
[config]
# --- Service 1: Mautic Web ---
[[config.domains]]
serviceName = "mautic"
port = 80
host = "${mautic_domain}"
path = "/"
# --- Service 2: phpMyAdmin ---
[[config.domains]]
serviceName = "phpmyadmin"
port = 80
host = "${pma_domain}"
path = "/"
# --- Shared Environment Variables ---
[config.env]
# URL Configuration
MAUTIC_URL = "https://${mautic_domain}"
# Database Connections
MAUTIC_DB_HOST = "mysql"
MAUTIC_DB_PORT = "3306"
MAUTIC_DB_DATABASE = "mautic"
MAUTIC_DB_USER = "mautic"
MAUTIC_DB_PASSWORD = "${db_password}"
MYSQL_ROOT_PASSWORD = "${root_password}"
# Security & Proxy (JSON ARRAY FIXED)
# We use single quotes '...' so TOML treats the inner [...] as a string
MAUTIC_TRUSTED_PROXIES = '["0.0.0.0/0"]'
# Queue Settings
MAUTIC_MESSENGER_DSN_EMAIL = "doctrine://default"
MAUTIC_MESSENGER_DSN_HIT = "doctrine://default"
# PHP Settings
PHP_INI_DATE_TIMEZONE = "UTC"
PHP_MEMORY_LIMIT = "512M"
-18
View File
@@ -1,18 +0,0 @@
version: "3.8"
services:
mediafetch:
image: lukedunsmoto/mediafetch:latest
restart: unless-stopped
expose:
- "3002"
volumes:
- mediafetch_data:/data/downloads
environment:
- PORT=3002
- BASIC_AUTH_USER=${BASIC_AUTH_USER}
- BASIC_AUTH_PASS=${BASIC_AUTH_PASS}
- PUBLIC_BASE_URL=https://${DOMAIN}
- OUTPUT_DIR=/data/downloads
volumes:
mediafetch_data:
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

-15
View File
@@ -1,15 +0,0 @@
[variables]
BASIC_AUTH_USER = "admin"
BASIC_AUTH_PASS = "${password:12}"
[config]
[[config.domains]]
name = "Domain"
variable = "DOMAIN"
serviceName = "mediafetch"
port = 3002
[[config.mounts]]
name = "Downloads"
filePath = "/data/downloads"
content = "mediafetch"
-29
View File
@@ -1,29 +0,0 @@
version: "3.8"
services:
backend:
image: ketbom/minepanel-backend:1.7.1
restart: unless-stopped
environment:
- NODE_ENV=production
- FRONTEND_URL=${FRONTEND_URL}
- JWT_SECRET=${JWT_SECRET}
- CLIENT_PASSWORD=${CLIENT_PASSWORD}
- CLIENT_USERNAME=${CLIENT_USERNAME}
- BASE_DIR=${BASE_DIR}
volumes:
- minepanel-servers:/app/servers
- minepanel-data:/app/data
- /var/run/docker.sock:/var/run/docker.sock
frontend:
image: ketbom/minepanel-frontend:1.7.1
restart: unless-stopped
environment:
- NEXT_PUBLIC_BACKEND_URL=${NEXT_PUBLIC_BACKEND_URL}
- NEXT_PUBLIC_DEFAULT_LANGUAGE=${NEXT_PUBLIC_DEFAULT_LANGUAGE}
depends_on:
- backend
volumes:
minepanel-servers:
minepanel-data:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

-28
View File
@@ -1,28 +0,0 @@
[variables]
main_domain = "${domain}"
jwt_secret = "${base64:32}"
client_username = "admin"
client_password = "${password:16}"
default_language = "en"
[config]
mounts = []
[[config.domains]]
serviceName = "frontend"
port = 3_000
host = "${main_domain}"
[[config.domains]]
serviceName = "backend"
port = 8_091
host = "api-${main_domain}"
[config.env]
JWT_SECRET = "${jwt_secret}"
CLIENT_USERNAME = "${client_username}"
CLIENT_PASSWORD = "${client_password}"
FRONTEND_URL = "http://${main_domain}"
NEXT_PUBLIC_BACKEND_URL = "http://api-${main_domain}"
NEXT_PUBLIC_DEFAULT_LANGUAGE = "${default_language}"
BASE_DIR = "/app"
@@ -1,43 +0,0 @@
version: "3.8"
services:
postgres:
image: postgres:18
restart: unless-stopped
environment:
- POSTGRES_PASSWORD
- POSTGRES_USER
- POSTGRES_DB
- TZ=Asia/Shanghai
volumes:
- postgres-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U danmuapi -d danmuapi"]
interval: 10s
timeout: 5s
retries: 10
start_period: 60s
danmu-app:
image: l429609201/misaka_danmu_server:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
- PUID=1000
- PGID=1000
- UMASK=0022
- TZ=Asia/Shanghai
- DANMUAPI_DATABASE__TYPE
- DANMUAPI_DATABASE__HOST
- DANMUAPI_DATABASE__PORT
- DANMUAPI_DATABASE__NAME
- DANMUAPI_DATABASE__USER
- DANMUAPI_DATABASE__PASSWORD
- DANMUAPI_ADMIN__INITIAL_USER
volumes:
- danmu-config:/app/config
volumes:
postgres-data: {}
danmu-config: {}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -1,30 +0,0 @@
[variables]
main_domain = "${domain}"
db_password = "${password:24}"
db_user = "danmuapi"
db_name = "danmuapi"
[config]
mounts = []
[[config.domains]]
serviceName = "danmu-app"
port = 7768
host = "${main_domain}"
[config.env]
# PostgreSQL
POSTGRES_PASSWORD = "${db_password}"
POSTGRES_USER = "${db_user}"
POSTGRES_DB = "${db_name}"
# Danmu App Database Connection
DANMUAPI_DATABASE__TYPE = "postgresql"
DANMUAPI_DATABASE__HOST = "postgres"
DANMUAPI_DATABASE__PORT = "5432"
DANMUAPI_DATABASE__NAME = "${db_name}"
DANMUAPI_DATABASE__USER = "${db_user}"
DANMUAPI_DATABASE__PASSWORD = "${db_password}"
# Admin
DANMUAPI_ADMIN__INITIAL_USER = "admin"
-35
View File
@@ -1,35 +0,0 @@
services:
moltbot-gateway:
image: ghcr.io/moltbot/clawdbot:2026.1.24-1
environment:
HOME: /home/node
TERM: xterm-256color
CLAWDBOT_GATEWAY_TOKEN: ${CLAWDBOT_GATEWAY_TOKEN}
CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
CLAWDBOT_GATEWAY_URL: ws://0.0.0.0:18789
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY}
volumes:
- moltbot-config:/home/node/.clawdbot
- moltbot-workspace:/home/node/clawd
ports:
- "18789"
- "18790"
init: true
restart: unless-stopped
command:
[
"node",
"dist/index.js",
"gateway",
"--bind",
"auto",
"--port",
"18789",
"--allow-unconfigured"
]
volumes:
moltbot-config:
moltbot-workspace:
-60
View File
@@ -1,60 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 16 16" role="img" aria-label="Pixel lobster">
<rect width="16" height="16" fill="none"/>
<!-- outline -->
<g fill="#3a0a0d">
<rect x="1" y="5" width="1" height="3"/>
<rect x="2" y="4" width="1" height="1"/>
<rect x="2" y="8" width="1" height="1"/>
<rect x="3" y="3" width="1" height="1"/>
<rect x="3" y="9" width="1" height="1"/>
<rect x="4" y="2" width="1" height="1"/>
<rect x="4" y="10" width="1" height="1"/>
<rect x="5" y="2" width="6" height="1"/>
<rect x="11" y="2" width="1" height="1"/>
<rect x="12" y="3" width="1" height="1"/>
<rect x="12" y="9" width="1" height="1"/>
<rect x="13" y="4" width="1" height="1"/>
<rect x="13" y="8" width="1" height="1"/>
<rect x="14" y="5" width="1" height="3"/>
<rect x="5" y="11" width="6" height="1"/>
<rect x="4" y="12" width="1" height="1"/>
<rect x="11" y="12" width="1" height="1"/>
<rect x="3" y="13" width="1" height="1"/>
<rect x="12" y="13" width="1" height="1"/>
<rect x="5" y="14" width="6" height="1"/>
</g>
<!-- body -->
<g fill="#ff4f40">
<rect x="5" y="3" width="6" height="1"/>
<rect x="4" y="4" width="8" height="1"/>
<rect x="3" y="5" width="10" height="1"/>
<rect x="3" y="6" width="10" height="1"/>
<rect x="3" y="7" width="10" height="1"/>
<rect x="4" y="8" width="8" height="1"/>
<rect x="5" y="9" width="6" height="1"/>
<rect x="5" y="12" width="6" height="1"/>
<rect x="6" y="13" width="4" height="1"/>
</g>
<!-- claws -->
<g fill="#ff775f">
<rect x="1" y="6" width="2" height="1"/>
<rect x="2" y="5" width="1" height="1"/>
<rect x="2" y="7" width="1" height="1"/>
<rect x="13" y="6" width="2" height="1"/>
<rect x="13" y="5" width="1" height="1"/>
<rect x="13" y="7" width="1" height="1"/>
</g>
<!-- eyes -->
<g fill="#081016">
<rect x="6" y="5" width="1" height="1"/>
<rect x="9" y="5" width="1" height="1"/>
</g>
<g fill="#f5fbff">
<rect x="6" y="4" width="1" height="1"/>
<rect x="9" y="4" width="1" height="1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

-18
View File
@@ -1,18 +0,0 @@
[variables]
gateway_token = "${password:32}"
[config]
[[config.domains]]
serviceName = "moltbot-gateway"
port = 18789
host = "${domain}"
[config.env]
CLAWDBOT_GATEWAY_TOKEN = "${gateway_token}"
CLAWDBOT_GATEWAY_PORT = 18789
CLAWDBOT_BRIDGE_PORT = 18790
CLAWDBOT_GATEWAY_BIND="lan"
CLAWDBOT_PLUGINS="discord,memory-core"
# Get here https://openrouter.ai/
OPENROUTER_API_KEY="YOUR-API-KEY"
+12 -14
View File
@@ -1,34 +1,32 @@
services:
nextcloud:
image: nextcloud:stable
image: nextcloud:30.0.2
restart: always
ports:
- 80
volumes:
- nextcloud_data:/var/www/html
- ../files/fix-nextcloud.sh:/usr/local/bin/fix-nextcloud.sh:ro
environment:
- NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_DOMAIN}
- MYSQL_HOST=nextcloud_db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
depends_on:
- nextcloud_db
- nextcloud_redis
- MYSQL_PASSWORD=${MYSQL_SECRET_PASSWORD}
- OVERWRITEPROTOCOL=https
nextcloud_db:
image: mariadb:10.11
image: mariadb
restart: always
volumes:
- nextcloud_db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_SECRET_PASSWORD_ROOT}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
nextcloud_redis:
image: redis:alpine
restart: always
- MYSQL_PASSWORD=${MYSQL_SECRET_PASSWORD}
volumes:
nextcloud_data:
nextcloud_db_data:
nextcloud_db_data:
@@ -0,0 +1 @@
<svg width="256" height="128" version="1.1" viewBox="0 0 256 128" xmlns="http://www.w3.org/2000/svg"><path d="m128 7c-25.871 0-47.817 17.485-54.713 41.209-5.9795-12.461-18.642-21.209-33.287-21.209-20.304 0-37 16.696-37 37s16.696 37 37 37c14.645 0 27.308-8.7481 33.287-21.209 6.8957 23.724 28.842 41.209 54.713 41.209s47.817-17.485 54.713-41.209c5.9795 12.461 18.642 21.209 33.287 21.209 20.304 0 37-16.696 37-37s-16.696-37-37-37c-14.645 0-27.308 8.7481-33.287 21.209-6.8957-23.724-28.842-41.209-54.713-41.209zm0 22c19.46 0 35 15.54 35 35s-15.54 35-35 35-35-15.54-35-35 15.54-35 35-35zm-88 20c8.4146 0 15 6.5854 15 15s-6.5854 15-15 15-15-6.5854-15-15 6.5854-15 15-15zm176 0c8.4146 0 15 6.5854 15 15s-6.5854 15-15 15-15-6.5854-15-15 6.5854-15 15-15z" color="#000000" fill="#fff" style="-inkscape-stroke:none"/></svg>

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

+12 -166
View File
@@ -1,171 +1,17 @@
[variables]
domain_name = "${domain}"
db_password = "${password:32}"
db_root_password = "${password:32}"
region = "DE"
main_domain = "${domain}"
db_password = "${password}"
db_root_password = "${password}"
[config]
env = [
"MYSQL_PASSWORD=${db_password}",
"MYSQL_ROOT_PASSWORD=${db_root_password}",
"DEFAULT_PHONE_REGION=${region}",
"NEXTCLOUD_DOMAIN=${domain_name}",
"OVERWRITEPROTOCOL=https",
"TRUSTED_PROXIES=10.0.0.0/8 172.16.0.0/12",
"REDIS_HOST=nextcloud_redis",
"MYSQL_DATABASE=nextcloud",
"MYSQL_USER=nextcloud"
]
mounts = []
[[config.domains]]
serviceName = "nextcloud"
port = 80
host = "${domain_name}"
[[config.domains]]
serviceName = "nextcloud"
port = 80
host = "${main_domain}"
[[config.mounts]]
filePath = "fix-nextcloud.sh"
content = """#!/bin/sh
#
# Nextcloud Optimization Script
# ==============================
# This script applies production-ready optimizations to Nextcloud.
#
# MANUAL EXECUTION REQUIRED
# -------------------------
# After Nextcloud completes its initial setup (create admin account, etc.),
# run this script manually:
#
# Option 1 (From Dokploy UI):
# 1. Go to your Nextcloud service in Dokploy
# 2. Open the Terminal tab
# 3. Run: su -s /bin/sh www-data -c "/bin/sh /usr/local/bin/fix-nextcloud.sh"
#
# Option 2 (From command line):
# docker exec -u www-data <container-name> /bin/sh /usr/local/bin/fix-nextcloud.sh
#
# Optimizations include:
# - Trusted proxy configuration for reverse proxy support
# - HTTPS protocol override
# - Regional settings (phone region, maintenance window)
# - Performance optimizations (database repair, missing indices)
# - Redis caching configuration (APCu, distributed, locking)
#
# The script is idempotent - it creates a marker file to prevent re-running.
# To re-run manually: delete /var/www/html/data/.nextcloud-optimized and restart container
#
MARKER_FILE="/var/www/html/data/.nextcloud-optimized"
OCC="php /var/www/html/occ"
# Check if already run
if [ -f "$MARKER_FILE" ]; then
echo "Optimizations already applied (marker file exists)."
exit 0
fi
echo "=========================================="
echo " Nextcloud Optimization Script"
echo "=========================================="
echo ""
# Check if running as www-data
CURRENT_USER=$(whoami)
if [ "$CURRENT_USER" = "www-data" ]; then
RUN_AS_WWWDATA=""
else
RUN_AS_WWWDATA="su -s /bin/sh www-data -c"
fi
# Function to run occ command with error handling
run_occ() {
description="$1"
shift
printf " - %s... " "$description"
if [ -z "$RUN_AS_WWWDATA" ]; then
# Already running as www-data
if $OCC "$@" >/dev/null 2>&1; then
echo "✓"
return 0
else
echo "✗ (failed, but continuing)"
return 1
fi
else
# Need to switch to www-data
if $RUN_AS_WWWDATA "$OCC $*" >/dev/null 2>&1; then
echo "✓"
return 0
else
echo "✗ (failed, but continuing)"
return 1
fi
fi
}
# Test database connectivity
echo "[1/5] Testing database connectivity..."
if [ -z "$RUN_AS_WWWDATA" ]; then
if $OCC status >/dev/null 2>&1; then
echo " ✓ Database is accessible"
else
echo " ✗ Database not accessible"
exit 1
fi
else
if $RUN_AS_WWWDATA "$OCC status" >/dev/null 2>&1; then
echo " ✓ Database is accessible"
else
echo " ✗ Database not accessible"
exit 1
fi
fi
# Configure trusted proxies
echo "[2/5] Configuring trusted proxies..."
run_occ "Set trusted proxy 10.0.0.0/8" config:system:set trusted_proxies 0 --value='10.0.0.0/8'
run_occ "Set trusted proxy 172.16.0.0/12" config:system:set trusted_proxies 1 --value='172.16.0.0/12'
run_occ "Set trusted proxy 192.168.0.0/16" config:system:set trusted_proxies 2 --value='192.168.0.0/16'
run_occ "Set HTTPS protocol override" config:system:set overwriteprotocol --value='https'
# Configure regional settings
echo "[3/5] Configuring regional settings..."
run_occ "Set phone region to DE" config:system:set default_phone_region --value='DE'
run_occ "Set maintenance window start" config:system:set maintenance_window_start --value=1 --type=integer
# Run performance optimizations
echo "[4/5] Running performance optimizations..."
echo " - Running maintenance repair (this may take a while)..."
if [ -z "$RUN_AS_WWWDATA" ]; then
if $OCC maintenance:repair --include-expensive 2>&1 | grep -q "No repair steps available"; then
echo " ✓ No repairs needed"
else
echo " ✓ Repair completed"
fi
else
if $RUN_AS_WWWDATA "$OCC maintenance:repair --include-expensive" 2>&1 | grep -q "No repair steps available"; then
echo " ✓ No repairs needed"
else
echo " ✓ Repair completed"
fi
fi
run_occ "Add missing database indices" db:add-missing-indices
# Configure Redis caching
echo "[5/5] Configuring Redis caching..."
run_occ "Set APCu for local cache" config:system:set memcache.local --value='\\OC\\Memcache\\APCu'
run_occ "Set Redis for distributed cache" config:system:set memcache.distributed --value='\\OC\\Memcache\\Redis'
run_occ "Set Redis for locking" config:system:set memcache.locking --value='\\OC\\Memcache\\Redis'
run_occ "Set Redis host" config:system:set redis host --value='nextcloud_redis'
run_occ "Set Redis port" config:system:set redis port --value=6379 --type=integer
# Create marker file
touch "$MARKER_FILE"
echo ""
echo "=========================================="
echo " Optimization Complete!"
echo "=========================================="
echo "All optimizations have been applied."
echo "Marker file created at: $MARKER_FILE"
echo ""
"""
[config.env]
NEXTCLOUD_DOMAIN = "${main_domain}"
MYSQL_SECRET_PASSWORD = "${db_password}"
MYSQL_SECRET_PASSWORD_ROOT = "${db_root_password}"
+30 -28
View File
@@ -3,11 +3,11 @@ services:
image: postgres:17-alpine
restart: unless-stopped
volumes:
- db_data:/var/lib/postgresql/data
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
@@ -21,36 +21,38 @@ services:
- db
environment:
# Root user configuration
ROOT_EMAIL: ${ROOT_EMAIL}
- ROOT_EMAIL=${ROOT_EMAIL}
# API configuration
API_ENDPOINT: ${API_ENDPOINT}
- API_ENDPOINT=${API_ENDPOINT}
# Database configuration
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_PREFIX: notifuse
DB_NAME: postgres
DB_SSLMODE: disable
- DB_HOST=db
- DB_PORT=5432
- DB_USER=postgres
- DB_PASSWORD=postgres
- DB_PREFIX=notifuse
- DB_NAME=notifuse_system
- DB_SSLMODE=disable
# Secret key for authentication (auto-generated)
SECRET_KEY: ${SECRET_KEY}
# PASETO keys for authentication
# Default keys for testing - GENERATE YOUR OWN for production at https://paseto.notifuse.com/
- PASETO_PRIVATE_KEY=${PASETO_PRIVATE_KEY}
- PASETO_PUBLIC_KEY=${PASETO_PUBLIC_KEY}
# SMTP configuration
- SMTP_HOST=${SMTP_HOST}
- SMTP_PORT=${SMTP_PORT}
- SMTP_USERNAME=${SMTP_USERNAME}
- SMTP_PASSWORD=${SMTP_PASSWORD}
- SMTP_FROM_EMAIL=${SMTP_FROM_EMAIL}
- SMTP_FROM_NAME=${SMTP_FROM_NAME}
# Server configuration
SERVER_PORT: 8080
SERVER_HOST: 0.0.0.0
ENVIRONMENT: production
volumes:
- notifuse_data:/app/data
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
- SERVER_PORT=8080
- SERVER_HOST=0.0.0.0
- ENVIRONMENT=production
volumes:
db_data: {}
notifuse_data: {}
db-data:
driver: local
+17 -2
View File
@@ -1,6 +1,7 @@
[variables]
main_domain = "${domain}"
secret_key = "${base64:64}"
paseto_private_key = "d04zCk3Fa45oOjDWHpAvc1AZxnLdGffOnNWK+Jt2yXf37+FTfuMMHb8flcfPMqLluRR3rvhbr555r6j1DEigrA=="
paseto_public_key = "9+/hU37jDB2/H5XHzzKi5bkUd674W6+eea+o9QxIoKw="
[config]
[[config.domains]]
@@ -11,4 +12,18 @@ host = "${main_domain}"
[config.env]
ROOT_EMAIL = "${email}"
API_ENDPOINT = "https://${main_domain}"
SECRET_KEY = "${secret_key}"
# PASETO keys for authentication
# Default keys for testing - GENERATE YOUR OWN for production at https://paseto.notifuse.com/
PASETO_PRIVATE_KEY = "${paseto_private_key}"
PASETO_PUBLIC_KEY = "${paseto_public_key}"
# SMTP Configuration (users need to configure these)
SMTP_HOST = "smtp.gmail.com"
SMTP_PORT = "587"
SMTP_USERNAME = "your-email@gmail.com"
SMTP_PASSWORD = "your-smtp-password"
SMTP_FROM_EMAIL = "noreply@yourdomain.com"
SMTP_FROM_NAME = "Notifuse"
[[config.mounts]]
-86
View File
@@ -1,86 +0,0 @@
services:
openclaw:
image: "coollabsio/openclaw:2026.2.6"
environment:
- AUTH_USERNAME=${AUTH_USERNAME}
- AUTH_PASSWORD=${AUTH_PASSWORD}
- OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
- GEMINI_API_KEY=${GEMINI_API_KEY}
- XAI_API_KEY=${XAI_API_KEY}
- GROQ_API_KEY=${GROQ_API_KEY}
- MISTRAL_API_KEY=${MISTRAL_API_KEY}
- CEREBRAS_API_KEY=${CEREBRAS_API_KEY}
- VENICE_API_KEY=${VENICE_API_KEY}
- MOONSHOT_API_KEY=${MOONSHOT_API_KEY}
- KIMI_API_KEY=${KIMI_API_KEY}
- MINIMAX_API_KEY=${MINIMAX_API_KEY}
- ZAI_API_KEY=${ZAI_API_KEY}
- AI_GATEWAY_API_KEY=${AI_GATEWAY_API_KEY}
- OPENCODE_API_KEY=${OPENCODE_API_KEY}
- SYNTHETIC_API_KEY=${SYNTHETIC_API_KEY}
- COPILOT_GITHUB_TOKEN=${COPILOT_GITHUB_TOKEN}
- XIAOMI_API_KEY=${XIAOMI_API_KEY}
- OPENCLAW_PRIMARY_MODEL=${OPENCLAW_PRIMARY_MODEL}
- DEEPGRAM_API_KEY=${DEEPGRAM_API_KEY}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_REGION=${AWS_REGION:-us-east-1}
- AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}
- BEDROCK_PROVIDER_FILTER=${BEDROCK_PROVIDER_FILTER:-anthropic}
- OLLAMA_BASE_URL=${OLLAMA_BASE_URL}
- PORT=8080
- OPENCLAW_GATEWAY_PORT=18789
- OPENCLAW_GATEWAY_BIND=${OPENCLAW_GATEWAY_BIND:-loopback}
- OPENCLAW_STATE_DIR=/data/.openclaw
- OPENCLAW_WORKSPACE_DIR=/data/workspace
- BROWSER_CDP_URL=http://browser:9223
- BROWSER_DEFAULT_PROFILE=${BROWSER_DEFAULT_PROFILE:-openclaw}
- BROWSER_EVALUATE_ENABLED=${BROWSER_EVALUATE_ENABLED:-true}
- BROWSER_SNAPSHOT_MODE=${BROWSER_SNAPSHOT_MODE:-efficient}
- BROWSER_REMOTE_TIMEOUT_MS=${BROWSER_REMOTE_TIMEOUT_MS:-1500}
- BROWSER_REMOTE_HANDSHAKE_TIMEOUT_MS=${BROWSER_REMOTE_HANDSHAKE_TIMEOUT_MS:-3000}
- HOOKS_ENABLED=${HOOKS_ENABLED:-false}
- HOOKS_PATH=${HOOKS_PATH:-/hooks}
- MOONSHOT_BASE_URL=${MOONSHOT_BASE_URL:-https://api.moonshot.ai/v1}
- KIMI_BASE_URL=${KIMI_BASE_URL:-https://api.moonshot.ai/anthropic}
- TELEGRAM_BOT_TOKEN=$TELEGRAM_BOT_TOKEN
- DISCORD_BOT_TOKEN=$DISCORD_BOT_TOKEN
- SLACK_BOT_TOKEN=$SLACK_BOT_TOKEN
- SLACK_APP_TOKEN=$SLACK_APP_TOKEN
- WHATSAPP_ENABLED=$WHATSAPP_ENABLED
- OPENCLAW_DOCKER_APT_PACKAGES=$OPENCLAW_DOCKER_APT_PACKAGES
volumes:
- "openclaw-data:/data"
depends_on:
browser:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-sf", "http://127.0.0.1:8080/healthz"]
interval: 10s
timeout: 10s
retries: 5
browser:
image: "coollabsio/openclaw-browser:latest"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- CHROME_CLI=--remote-debugging-port=9222
volumes:
- "browser-data:/config"
shm_size: 2g
healthcheck:
test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/9222' || exit 1"]
interval: 5s
timeout: 5s
retries: 10
volumes:
openclaw-data:
browser-data:
-60
View File
@@ -1,60 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 16 16" role="img" aria-label="Pixel lobster">
<rect width="16" height="16" fill="none"/>
<g fill="#3a0a0d">
<rect x="1" y="5" width="1" height="3"/>
<rect x="2" y="4" width="1" height="1"/>
<rect x="2" y="8" width="1" height="1"/>
<rect x="3" y="3" width="1" height="1"/>
<rect x="3" y="9" width="1" height="1"/>
<rect x="4" y="2" width="1" height="1"/>
<rect x="4" y="10" width="1" height="1"/>
<rect x="5" y="2" width="6" height="1"/>
<rect x="11" y="2" width="1" height="1"/>
<rect x="12" y="3" width="1" height="1"/>
<rect x="12" y="9" width="1" height="1"/>
<rect x="13" y="4" width="1" height="1"/>
<rect x="13" y="8" width="1" height="1"/>
<rect x="14" y="5" width="1" height="3"/>
<rect x="5" y="11" width="6" height="1"/>
<rect x="4" y="12" width="1" height="1"/>
<rect x="11" y="12" width="1" height="1"/>
<rect x="3" y="13" width="1" height="1"/>
<rect x="12" y="13" width="1" height="1"/>
<rect x="5" y="14" width="6" height="1"/>
</g>
<g fill="#ff4f40">
<rect x="5" y="3" width="6" height="1"/>
<rect x="4" y="4" width="8" height="1"/>
<rect x="3" y="5" width="10" height="1"/>
<rect x="3" y="6" width="10" height="1"/>
<rect x="3" y="7" width="10" height="1"/>
<rect x="4" y="8" width="8" height="1"/>
<rect x="5" y="9" width="6" height="1"/>
<rect x="5" y="12" width="6" height="1"/>
<rect x="6" y="13" width="4" height="1"/>
</g>
<g fill="#ff775f">
<rect x="1" y="6" width="2" height="1"/>
<rect x="2" y="5" width="1" height="1"/>
<rect x="2" y="7" width="1" height="1"/>
<rect x="13" y="6" width="2" height="1"/>
<rect x="13" y="5" width="1" height="1"/>
<rect x="13" y="7" width="1" height="1"/>
</g>
<g fill="#081016">
<rect x="6" y="5" width="1" height="1"/>
<rect x="9" y="5" width="1" height="1"/>
</g>
<g fill="#f5fbff">
<rect x="6" y="4" width="1" height="1"/>
<rect x="9" y="4" width="1" height="1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

-21
View File
@@ -1,21 +0,0 @@
[variables]
gateway_token = "${password:32}"
auth_username = "dokploy"
auth_password = "${password:32}"
[config]
[[config.domains]]
serviceName = "openclaw"
port = 8080
host = "${domain}"
[config.env]
OPENCLAW_GATEWAY_TOKEN = "${gateway_token}"
OPENCLAW_GATEWAY_PORT = 18789
AUTH_USERNAME="${auth_username}"
AUTH_PASSWORD="${auth_password}"
OPENCLAW_BRIDGE_PORT = 18790
OPENCLAW_GATEWAY_BIND="lan"
OPENCLAW_PLUGINS="discord,memory-core"
# Get here https://openrouter.ai/
OPENROUTER_API_KEY="YOUR-API-KEY"
+3 -3
View File
@@ -54,7 +54,7 @@ services:
retries: 5
op-api:
image: lindesvard/openpanel-api:2
image: lindesvard/openpanel-api:2.0.0
restart: always
command: >
sh -c "
@@ -97,7 +97,7 @@ services:
condition: service_healthy
op-dashboard:
image: lindesvard/openpanel-dashboard:2
image: lindesvard/openpanel-dashboard:2.0.0
restart: always
depends_on:
op-api:
@@ -111,7 +111,7 @@ services:
retries: 5
op-worker:
image: lindesvard/openpanel-worker:2
image: lindesvard/openpanel-worker:2.0.0
restart: always
depends_on:
op-api:
@@ -1,33 +0,0 @@
services:
postgres-pgdog:
image: ${PGDOG_IMAGE}
restart: unless-stopped
# Uncomment 'ports' settings below to enable external access
# ports:
# - "6432:6432"
volumes:
- ../files/pgdog.toml:/pgdog/pgdog.toml
- ../files/users.toml:/pgdog/users.toml
environment:
- RUST_LOG=${RUST_LOG}
depends_on:
postgres:
condition: service_healthy
postgres:
image: ${POSTGRES_IMAGE}
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- postgres-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres-data:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

-36
View File
@@ -1,36 +0,0 @@
[variables]
postgres_user = "${username}"
postgres_password = "${password:32}"
postgres_db = "postgres"
pgdog_image = "ghcr.io/pgdogdev/pgdog:v0.1.26"
postgres_image = "postgres:18-alpine"
[[config.mounts]]
filePath = "pgdog.toml"
content = """
[general]
host = "0.0.0.0"
port = 6432
[[databases]]
name = "${postgres_db}"
host = "postgres"
port = 5432
"""
[[config.mounts]]
filePath = "users.toml"
content = """
[[users]]
name = "${postgres_user}"
database = "${postgres_db}"
password = "${postgres_password}"
"""
[config.env]
POSTGRES_USER = "${postgres_user}"
POSTGRES_PASSWORD = "${postgres_password}"
POSTGRES_DB = "${postgres_db}"
PGDOG_IMAGE = "${pgdog_image}"
POSTGRES_IMAGE = "${postgres_image}"
RUST_LOG = "info"
-1
View File
@@ -9,7 +9,6 @@ services:
- "--web.console.templates=/usr/share/prometheus/consoles"
- "--web.enable-lifecycle"
volumes:
- ../files/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
volumes:
prometheus-data: {}
+1 -4
View File
@@ -10,10 +10,7 @@ port = 9_090
host = "${main_domain}"
[[config.mounts]]
# Note: this relative path is resolved by Dokploy to the file mounted from
# ../files/prometheus.yml in docker-compose, and mapped inside the container
# to /etc/prometheus/prometheus.yml.
filePath = "prometheus.yml"
filePath = "/etc/prometheus/prometheus.yml"
serviceName = "prometheus"
content = """
# Prometheus Configuration
-22
View File
@@ -1,22 +0,0 @@
version: "3.8"
services:
pulse:
image: rcourtman/pulse:5.1
restart: always
expose:
- 7655
volumes:
- pulse_data:/data
- /var/run/docker.sock:/var/run/docker.sock
environment:
- PULSE_AUTH_USER=${PULSE_AUTH_USER}
- PULSE_AUTH_PASS=${PULSE_AUTH_PASS}
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7655/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
volumes:
pulse_data:
-4
View File
@@ -1,4 +0,0 @@
<svg width="128" height="128" viewBox="0 0 128 128" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="128" height="128" rx="20" fill="#3B82F6"/>
<path d="M20 64H35L45 44L55 84L65 24L75 74L85 54L100 64H108" stroke="white" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 304 B

-13
View File
@@ -1,13 +0,0 @@
[variables]
main_domain = "${domain}"
pulse_auth_user = "${username}"
pulse_auth_pass = "${password:32}"
[config]
env = ["PULSE_AUTH_USER=${pulse_auth_user}", "PULSE_AUTH_PASS=${pulse_auth_pass}"]
mounts = []
[[config.domains]]
serviceName = "pulse"
port = 7_655
host = "${main_domain}"
+9 -2
View File
@@ -1,6 +1,6 @@
services:
database:
image: mariadb:11
image: mariadb:10.5
restart: always
command: --default-authentication-plugin=mysql_native_password
volumes:
@@ -14,7 +14,7 @@ services:
image: redis:alpine
restart: always
panel:
image: ghcr.io/pyrodactyl-oss/pyrodactyl:latest
image: ghcr.io/pyrohost/pyrodactyl:main
restart: always
links:
- database
@@ -35,8 +35,15 @@ services:
DB_HOST:
DB_PORT:
DB_PASSWORD: ${MYSQL_PASSWORD}
RECAPTCHA_ENABLED:
DB_CONNECTION: "mariadb"
networks:
default:
ipam:
config:
- subnet: 172.20.0.0/16
volumes:
pterodb:
pterovar:
-39
View File
@@ -1,39 +0,0 @@
version: "3.8"
services:
qbitwebui:
image: ghcr.io/maciejonos/qbitwebui:latest
restart: unless-stopped
environment:
# Required: Encryption key for storing credentials (min 32 chars)
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
# Optional: Server port (default: 3000)
- PORT=${PORT:-3000}
# Optional: Database location (default: ./data/qbitwebui.db)
- DATABASE_PATH=${DATABASE_PATH:-/data/qbitwebui.db}
# Optional: Salt file location (default: ./data/.salt)
- SALT_PATH=${SALT_PATH:-/data/.salt}
# Optional: Allow self-signed certificates for qBittorrent instances (default: false)
# - ALLOW_SELF_SIGNED_CERTS=${ALLOW_SELF_SIGNED_CERTS:-false}
# Optional: Disable authentication/login (single-user mode) (default: false)
# - DISABLE_AUTH=${DISABLE_AUTH:-false}
# Optional: Disable new registrations, creates default admin account (default: false)
# - DISABLE_REGISTRATION=${DISABLE_REGISTRATION:-false}
# Optional: Enable file browser by setting downloads path
# - DOWNLOADS_PATH=/downloads
volumes:
- qbitwebui_data:/data
# Optional: Mount downloads directory for file browser feature
# Read-only mount (browse & download only):
# - /path/to/your/downloads:/downloads:ro
# Or read-write mount (enables delete/move/copy/rename):
# - /path/to/your/downloads:/downloads
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
volumes:
qbitwebui_data:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 KiB

-16
View File
@@ -1,16 +0,0 @@
[variables]
main_domain = "${domain}"
encryption_key = "${password:32}"
[config]
[[config.domains]]
serviceName = "qbitwebui"
port = 3000
host = "${main_domain}"
path = "/"
[config.env]
ENCRYPTION_KEY = "${encryption_key}"
PORT = "3000"
DATABASE_PATH = "/data/qbitwebui.db"
SALT_PATH = "/data/.salt"
@@ -1,67 +0,0 @@
version: "3.8"
services:
postgres:
image: postgres:16-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
interval: 10s
timeout: 5s
retries: 5
minio:
image: minio/minio:latest
command: server /data
volumes:
- minio_data:/data
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
chrome:
image: ghcr.io/browserless/chromium:v2.18.0
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
TIMEOUT: 10000
CONCURRENT: 10
TOKEN: ${CHROME_TOKEN}
EXIT_ON_HEALTH_FAILURE: "true"
PRE_REQUEST_HEALTH_CHECK: "true"
app:
image: amruthpillai/reactive-resume:latest
depends_on:
- postgres
- minio
- chrome
environment:
PORT: 3000
NODE_ENV: production
PUBLIC_URL: https://${APP_DOMAIN}
STORAGE_URL: https://${APP_DOMAIN}/default
CHROME_TOKEN: ${CHROME_TOKEN}
CHROME_URL: ws://chrome:3000
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres
ACCESS_TOKEN_SECRET: ${ACCESS_TOKEN_SECRET}
REFRESH_TOKEN_SECRET: ${REFRESH_TOKEN_SECRET}
MAIL_FROM: ${MAIL_FROM}
STORAGE_ENDPOINT: minio
STORAGE_PORT: 9000
STORAGE_REGION: us-east-1
STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: ${MINIO_ROOT_USER}
STORAGE_SECRET_KEY: ${MINIO_ROOT_PASSWORD}
STORAGE_USE_SSL: "false"
STORAGE_SKIP_BUCKET_CHECK: "false"
volumes:
minio_data:
postgres_data:
-20
View File
@@ -1,20 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200">
<defs>
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
<stop offset="100%" style="stop-color:#8b5cf6;stop-opacity:1" />
</linearGradient>
</defs>
<!-- Background circle -->
<circle cx="100" cy="100" r="95" fill="url(#grad)"/>
<!-- Document icon -->
<rect x="60" y="45" width="80" height="110" rx="5" fill="white"/>
<rect x="70" y="60" width="60" height="6" rx="3" fill="#3b82f6"/>
<rect x="70" y="75" width="60" height="6" rx="3" fill="#3b82f6"/>
<rect x="70" y="90" width="45" height="6" rx="3" fill="#8b5cf6"/>
<rect x="70" y="105" width="60" height="6" rx="3" fill="#8b5cf6"/>
<rect x="70" y="120" width="50" height="6" rx="3" fill="#8b5cf6"/>
<rect x="70" y="135" width="40" height="6" rx="3" fill="#8b5cf6"/>
</svg>

Before

Width:  |  Height:  |  Size: 937 B

-33
View File
@@ -1,33 +0,0 @@
[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
minio_user = "minioadmin"
minio_password = "${password:32}"
chrome_token = "${password:32}"
access_token_secret = "${password:64}"
refresh_token_secret = "${password:64}"
mail_from = "noreply@${main_domain}"
[config]
env = [
"APP_DOMAIN=${main_domain}",
"POSTGRES_PASSWORD=${postgres_password}",
"MINIO_ROOT_USER=${minio_user}",
"MINIO_ROOT_PASSWORD=${minio_password}",
"CHROME_TOKEN=${chrome_token}",
"ACCESS_TOKEN_SECRET=${access_token_secret}",
"REFRESH_TOKEN_SECRET=${refresh_token_secret}",
"MAIL_FROM=${mail_from}",
]
mounts = []
[[config.domains]]
serviceName = "app"
port = 3000
host = "${main_domain}"
[[config.domains]]
serviceName = "minio"
port = 9000
host = "${main_domain}"
path = "/default"
-55
View File
@@ -1,55 +0,0 @@
services:
scrutiny:
restart: unless-stopped
container_name: scrutiny
image: ghcr.io/analogj/scrutiny:master-omnibus
cap_add:
- SYS_RAWIO
ports:
- 8080 # webapp
- 8086 # influxDB admin
volumes:
- /run/udev:/run/udev:ro
- ./config:/opt/scrutiny/config
- ./influxdb:/opt/scrutiny/influxdb
devices:
- "/dev/sda"
- "/dev/sdb"
# PROXMOX USERS: Proxmox LXCs don't have access to S.M.A.R.T data, while this may be possible on VMs using PCI passthrough,
# there's another way which is to run the scrutiny collector on proxmox host and have it send data to the scrutiny webapp running in an LXC or VM
# so basically you can use the following commented docker-compose (web+db) and run the collector directly on the proxmox host (guide: https://github.com/AnalogJ/scrutiny/blob/master/docs/INSTALL_HUB_SPOKE.md#setting-up-a-spoke-without-docker)
# services:
# influxdb:
# restart: unless-stopped
# image: influxdb:2.2
# ports:
# - '8086:8086'
# volumes:
# - './influxdb:/var/lib/influxdb2'
# healthcheck:
# test: ["CMD", "curl", "-f", "http://localhost:8086/health"]
# interval: 5s
# timeout: 10s
# retries: 20
#
#
# web:
# restart: unless-stopped
# image: 'ghcr.io/analogj/scrutiny:master-web'
# ports:
# - '8080:8080'
# volumes:
# - './config:/opt/scrutiny/config'
# environment:
# SCRUTINY_WEB_INFLUXDB_HOST: 'influxdb'
# depends_on:
# influxdb:
# condition: service_healthy
# healthcheck:
# test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"]
# interval: 5s
# timeout: 10s
# retries: 20
# start_period: 10s
Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

-1
View File
@@ -1 +0,0 @@
[config]

Some files were not shown because too many files have changed in this diff Show More