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
13 changed files with 267 additions and 463 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
+1 -1
View File
@@ -55,7 +55,7 @@ No tests in repo—focus on manual validation via scripts and Dokploy deploys. D
- 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.
- **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.
+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
-184
View File
@@ -1,184 +0,0 @@
services:
postgres:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_USER: oneuptime
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: oneuptime
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U oneuptime"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
environment:
REDISCLI_AUTH: ${REDIS_PASSWORD}
volumes:
- redis_data:/data
healthcheck:
test: ["CMD-SHELL", "redis-cli ping"]
interval: 10s
timeout: 5s
retries: 5
clickhouse:
image: clickhouse/clickhouse-server:23.8-alpine
restart: unless-stopped
environment:
CLICKHOUSE_DB: oneuptime
CLICKHOUSE_USER: default
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
volumes:
- clickhouse_data:/var/lib/clickhouse
healthcheck:
test: ["CMD-SHELL", "clickhouse-client --query 'SELECT 1'"]
interval: 10s
timeout: 5s
retries: 5
home:
image: oneuptime/home:${ONEUPTIME_VERSION}
restart: unless-stopped
environment:
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USERNAME: oneuptime
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
DATABASE_NAME: oneuptime
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: 8123
CLICKHOUSE_USER: default
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
CLICKHOUSE_DATABASE: oneuptime
SERVER_URL: http://${ONEUPTIME_HOST}
ENCRYPTION_SECRET: ${ENCRYPTION_SECRET}
ONEUPTIME_SECRET: ${ONEUPTIME_SECRET}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
clickhouse:
condition: service_healthy
dashboard:
image: oneuptime/dashboard:${ONEUPTIME_VERSION}
restart: unless-stopped
environment:
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USERNAME: oneuptime
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
DATABASE_NAME: oneuptime
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
SERVER_URL: http://${ONEUPTIME_HOST}
ONEUPTIME_SECRET: ${ONEUPTIME_SECRET}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
accounts:
image: oneuptime/accounts:${ONEUPTIME_VERSION}
restart: unless-stopped
environment:
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USERNAME: oneuptime
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
DATABASE_NAME: oneuptime
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
SERVER_URL: http://${ONEUPTIME_HOST}
ONEUPTIME_SECRET: ${ONEUPTIME_SECRET}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
status-page:
image: oneuptime/status-page:${ONEUPTIME_VERSION}
restart: unless-stopped
environment:
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USERNAME: oneuptime
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
DATABASE_NAME: oneuptime
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
SERVER_URL: http://${ONEUPTIME_HOST}
ONEUPTIME_SECRET: ${ONEUPTIME_SECRET}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
app:
image: oneuptime/app:${ONEUPTIME_VERSION}
restart: unless-stopped
environment:
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USERNAME: oneuptime
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
DATABASE_NAME: oneuptime
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: 8123
CLICKHOUSE_USER: default
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
CLICKHOUSE_DATABASE: oneuptime
SERVER_URL: http://${ONEUPTIME_HOST}
ENCRYPTION_SECRET: ${ENCRYPTION_SECRET}
ONEUPTIME_SECRET: ${ONEUPTIME_SECRET}
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
clickhouse:
condition: service_healthy
probe:
image: oneuptime/probe:${ONEUPTIME_VERSION}
restart: unless-stopped
environment:
DATABASE_HOST: postgres
DATABASE_PORT: 5432
DATABASE_USERNAME: oneuptime
DATABASE_PASSWORD: ${DATABASE_PASSWORD}
DATABASE_NAME: oneuptime
SERVER_URL: http://${ONEUPTIME_HOST}
ONEUPTIME_URL: http://${ONEUPTIME_HOST}
ONEUPTIME_SECRET: ${ONEUPTIME_SECRET}
PROBE_KEY: ${PROBE_KEY}
PROBE_NAME: ${PROBE_NAME}
depends_on:
postgres:
condition: service_healthy
volumes:
postgres_data:
redis_data:
clickhouse_data:
-25
View File
@@ -1,25 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
<defs>
<linearGradient id="gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#4F46E5;stop-opacity:1" />
<stop offset="100%" style="stop-color:#7C3AED;stop-opacity:1" />
</linearGradient>
</defs>
<!-- Background circle -->
<circle cx="256" cy="256" r="240" fill="url(#gradient)"/>
<!-- Uptime arrow/chart icon -->
<g fill="white">
<!-- Base line -->
<rect x="120" y="340" width="272" height="12" rx="6"/>
<!-- Vertical bars representing uptime -->
<rect x="140" y="260" width="40" height="80" rx="8"/>
<rect x="200" y="200" width="40" height="140" rx="8"/>
<rect x="260" y="160" width="40" height="180" rx="8"/>
<rect x="320" y="140" width="40" height="200" rx="8"/>
<!-- Up arrow -->
<path d="M 380 180 L 420 200 L 420 240 L 400 240 L 400 280 L 360 280 L 360 240 L 340 240 L 340 200 Z" opacity="0.9"/>
</g>
<!-- Check/tick mark overlay -->
<circle cx="380" cy="150" r="45" fill="#10B981"/>
<path d="M 360 150 L 375 165 L 400 140" stroke="white" stroke-width="8" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

-30
View File
@@ -1,30 +0,0 @@
[variables]
main_domain = "${domain}"
oneuptime_version = "release"
database_password = "${password:32}"
redis_password = "${password:32}"
clickhouse_password = "${password:32}"
encryption_secret = "${password:64}"
oneuptime_secret = "${password:64}"
probe_key = "${password:32}"
probe_name = "Dokploy Probe"
[config]
env = [
"ONEUPTIME_HOST=${main_domain}",
"ONEUPTIME_VERSION=${oneuptime_version}",
"DATABASE_PASSWORD=${database_password}",
"REDIS_PASSWORD=${redis_password}",
"CLICKHOUSE_PASSWORD=${clickhouse_password}",
"ENCRYPTION_SECRET=${encryption_secret}",
"ONEUPTIME_SECRET=${oneuptime_secret}",
"PROBE_KEY=${probe_key}",
"PROBE_NAME=${probe_name}",
]
mounts = []
[[config.domains]]
serviceName = "home"
port = 3002
host = "${main_domain}"
-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
@@ -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"
-3
View File
@@ -33,9 +33,6 @@ services:
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_EMAIL_ADDRESS: "${ZITADEL_FIRSTINSTANCE_ORG_HUMAN_EMAIL_ADDRESS}"
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_FIRSTNAME: "${ZITADEL_FIRSTINSTANCE_ORG_HUMAN_FIRSTNAME}"
ZITADEL_FIRSTINSTANCE_ORG_HUMAN_LASTNAME: "${ZITADEL_FIRSTINSTANCE_ORG_HUMAN_LASTNAME}"
# Default Instance Features
ZITADEL_DEFAULTINSTANCE_FEATURES_LOGINV2_REQUIRED: false
depends_on:
db:
-37
View File
@@ -4260,25 +4260,6 @@
"secure"
]
},
{
"id": "oneuptime",
"name": "OneUptime",
"version": "release",
"description": "Complete open-source observability platform with uptime monitoring, status pages, incident management, and on-call scheduling.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/OneUptime/oneuptime",
"website": "https://oneuptime.com/",
"docs": "https://oneuptime.com/docs"
},
"tags": [
"monitoring",
"uptime",
"observability",
"status-page",
"incident-management"
]
},
{
"id": "ontime",
"name": "Ontime",
@@ -5066,24 +5047,6 @@
"rabbitmq"
]
},
{
"id": "reactive-resume",
"name": "Reactive Resume",
"version": "latest",
"description": "A free and open-source resume builder that simplifies the process of creating, updating, and sharing your resume.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/AmruthPillai/Reactive-Resume",
"website": "https://rxresu.me/",
"docs": "https://docs.rxresu.me/"
},
"tags": [
"resume",
"cv",
"productivity",
"document"
]
},
{
"id": "registry",
"name": "Docker Registry",