Compare commits

...
Author SHA1 Message Date
Mauricio SiuandGitHub 9de737b21b Update docker-compose.yml 2025-12-20 00:15:30 -06:00
copilot-swe-agent[bot]andSiumauricio 85b07df702 Remove package-lock.json (project uses pnpm)
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-20 04:59:03 +00:00
copilot-swe-agent[bot]andSiumauricio 77779f87a3 Add ONEUPTIME_SECRET environment variable to all services
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-20 04:58:47 +00:00
Mauricio SiuandGitHub cc1a169fdd Update docker-compose.yml 2025-12-19 22:46:57 -06:00
Mauricio SiuandGitHub 4f1ae3752e Update docker-compose.yml 2025-12-19 22:43:31 -06:00
copilot-swe-agent[bot]andSiumauricio f96da34bf5 Remove package-lock.json (project uses pnpm)
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-20 04:42:46 +00:00
copilot-swe-agent[bot]andSiumauricio 1e1cbf30d1 Add PROBE_KEY and PROBE_NAME environment variables to probe service
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-20 04:42:21 +00:00
Mauricio SiuandGitHub ab3c139ee7 Update blueprints/oneuptime/docker-compose.yml 2025-12-19 22:35:01 -06:00
Mauricio SiuandGitHub 3fd61bd12c Update blueprints/oneuptime/docker-compose.yml 2025-12-19 22:34:54 -06:00
Mauricio SiuandGitHub 05ce6581f5 Update blueprints/oneuptime/docker-compose.yml 2025-12-19 22:34:45 -06:00
Mauricio SiuandGitHub 50997d94d1 Update blueprints/oneuptime/docker-compose.yml 2025-12-19 22:34:39 -06:00
Mauricio SiuandGitHub 6de2978e97 Update blueprints/oneuptime/docker-compose.yml 2025-12-19 22:34:31 -06:00
Mauricio SiuandGitHub adbdbcdd4f Update blueprints/oneuptime/docker-compose.yml 2025-12-19 22:34:13 -06:00
Mauricio SiuandGitHub ff481a7f0d Update docker-compose.yml 2025-12-19 22:32:42 -06:00
copilot-swe-agent[bot]andSiumauricio 20576fc810 Add OneUptime observability platform template
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-20 04:29:07 +00:00
copilot-swe-agent[bot]andSiumauricio fb86d2c496 Add ONEUPTIME_URL env var to probe service
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-20 04:27:21 +00:00
Mauricio SiuandGitHub e273dcad95 Update template.toml 2025-12-19 18:31:35 -06:00
copilot-swe-agent[bot]andSiumauricio ab902e17b9 Fix OneUptime: use microservices architecture, fix health checks, remove version field
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-20 00:21:32 +00:00
Mauricio SiuandGitHub 3d995322db Update docker-compose.yml 2025-12-19 18:00:49 -06:00
copilot-swe-agent[bot]andSiumauricio f088a3214b Improve security: use environment variables for health check authentication
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-19 22:17:20 +00:00
copilot-swe-agent[bot]andSiumauricio 79042376f1 Fix ClickHouse health check authentication and remove package-lock.json
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-19 22:16:20 +00:00
copilot-swe-agent[bot]andSiumauricio a63d67bcae Fix Redis health check to authenticate with password
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-19 22:15:09 +00:00
copilot-swe-agent[bot]andSiumauricio a43cf890f3 Verify OneUptime template passes all validations
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-19 22:13:39 +00:00
copilot-swe-agent[bot]andSiumauricio dc59349116 Add OneUptime monitoring template
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-19 22:11:26 +00:00
copilot-swe-agent[bot] 2b62d182a8 Initial plan 2025-12-19 22:07:25 +00:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>SiumauricioCopilot
be3c7f2d1d [WIP] Fix mounted prometheus.yml file not working (#605)
* Initial plan

* Fix Prometheus mounted prometheus.yml file by adding volume mount

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Update blueprints/prometheus/template.toml

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-19 16:06:36 -06:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Siumauricio
f5552b557c Add Reactive Resume template (#603)
* Initial plan

* Add Reactive Resume template with docker-compose, template.toml, and meta.json entry

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Fix MinIO storage path alignment between template.toml and docker-compose.yml

Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>

* Update docker-compose.yml

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com>
2025-12-19 16:03:32 -06:00
Huy PhamandGitHub e4ffe271e0 fix: update zitadel default instance features (#544) 2025-12-19 15:57:48 -06:00
Mauricio Siu dd8ef5b3c8 refactor: enhance Docker Compose validation workflow
Updated the GitHub Actions workflow for validating Docker Compose files by streamlining the detection of changed blueprints and improving the validation process. Removed redundant steps and consolidated the validation of docker-compose.yml and template.toml files into a more efficient structure. Added clearer output messages for validation results and ensured that best practices are checked for each blueprint. This refactor aims to improve maintainability and clarity in the CI/CD process.
2025-12-19 15:54:36 -06:00
Mauricio Siu 4757c59da3 docs: update copilot instructions to emphasize version pinning in docker-compose.yml
Clarified the importance of pinning image versions in docker-compose.yml and explicitly stated to avoid using the `latest` tag to prevent potential issues with template functionality when upstream images change.
2025-12-19 15:45:08 -06:00
12 changed files with 455 additions and 248 deletions
+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`.
- **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.
- **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.
+50 -246
View File
@@ -17,13 +17,10 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Necesitamos el historial completo para comparar con base
fetch-depth: 0
- name: Set up Docker Compose
run: |
echo "🐳 Setting up Docker Compose..."
# Docker Compose V2 viene preinstalado en ubuntu-latest
docker compose version
run: docker compose version
- name: Set up Node.js
uses: actions/setup-node@v4
@@ -36,282 +33,89 @@ jobs:
version: 8
- name: Install dependencies
run: |
echo "📦 Installing Node.js dependencies..."
cd build-scripts && pnpm install
run: cd build-scripts && pnpm install
- name: Get changed files
id: changed-files
- name: Detect changed blueprints
id: changed
run: |
echo "🔍 Detecting changed files..."
# Obtener la rama base
BASE_SHA=$(git merge-base HEAD origin/${{ github.base_ref }})
# 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)
# 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)
# Crear lista de directorios únicos que tienen cambios
CHANGED_DIRS=$(echo -e "$CHANGED_COMPOSE\n$CHANGED_TOML" | sed 's|blueprints/\([^/]*\)/.*|\1|' | sort -u)
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 Docker Compose files syntax
id: validate-compose-syntax
run: |
echo "🔍 Validating Docker Compose files syntax..."
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
echo "$COMPOSE_FILES" | while read -r compose_file; do
if [ -z "$compose_file" ]; then
continue
fi
TEMPLATE_DIR=$(dirname "$compose_file")
TEMPLATE_NAME=$(basename "$TEMPLATE_DIR")
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Validating syntax: $TEMPLATE_NAME"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# 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
else
echo "✅ docker-compose.yml syntax is valid"
fi
# 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"
echo "Changed blueprints:"
echo "$CHANGED_BLUEPRINTS" | while read blueprint; do
[ -n "$blueprint" ] && echo " - $blueprint"
done
if [ $ERROR -eq 1 ]; then
echo ""
echo "❌ Docker Compose syntax validation failed"
exit 1
else
echo ""
echo "✅ All Docker Compose files have valid syntax"
fi
# Guardar lista de blueprints (una por línea)
echo "blueprints<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGED_BLUEPRINTS" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Validate Docker Compose best practices
id: validate-compose-practices
- name: Validate blueprints
run: |
echo "🔍 Validating Docker Compose best practices..."
BLUEPRINTS="${{ steps.changed.outputs.blueprints }}"
ERROR=0
COMPOSE_FILES="${{ steps.changed-files.outputs.compose_files }}"
if [ -z "$COMPOSE_FILES" ]; then
echo "ℹ️ No docker-compose.yml files changed, skipping validation"
if [ -z "$BLUEPRINTS" ] || [ "$BLUEPRINTS" = "" ]; then
echo "ℹ️ No blueprints 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
# Convertir a array para evitar problemas con subshells
mapfile -t BLUEPRINT_ARRAY <<< "$BLUEPRINTS"
# 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
# Iterar sobre cada blueprint
for blueprint in "${BLUEPRINT_ARRAY[@]}"; do
[ -z "$blueprint" ] && continue
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
BLUEPRINT_PATH="blueprints/$blueprint"
COMPOSE_FILE="$BLUEPRINT_PATH/docker-compose.yml"
TOML_FILE="$BLUEPRINT_PATH/template.toml"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📝 Validating: $template_dir/template.toml"
echo "📦 Validating: $blueprint"
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"
# 1. Validar best practices de docker-compose.yml
if [ ! -f "$COMPOSE_FILE" ]; then
echo "⚠️ WARNING: docker-compose.yml not found"
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
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
# 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 "❌ ERROR: Docker Compose file failed full validation"
docker compose config 2>&1 || true
echo "⚠️ WARNING: template.toml not found"
ERROR=1
continue
fi
cd - > /dev/null
echo "✅ All validations passed for $blueprint"
done
if [ $ERROR -eq 1 ]; then
echo ""
echo "❌ Docker Compose dry-run test failed"
echo "❌ Validation failed for one or more blueprints"
exit 1
else
echo ""
echo "✅ All Docker Compose files passed dry-run test"
echo "✅ All blueprints validated successfully"
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
@@ -0,0 +1,184 @@
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
@@ -0,0 +1,25 @@
<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>

After

Width:  |  Height:  |  Size: 1.2 KiB

+30
View File
@@ -0,0 +1,30 @@
[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,6 +9,7 @@ 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: {}
+4 -1
View File
@@ -10,7 +10,10 @@ port = 9_090
host = "${main_domain}"
[[config.mounts]]
filePath = "/etc/prometheus/prometheus.yml"
# 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"
serviceName = "prometheus"
content = """
# Prometheus Configuration
@@ -0,0 +1,67 @@
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
@@ -0,0 +1,20 @@
<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>

After

Width:  |  Height:  |  Size: 937 B

+33
View File
@@ -0,0 +1,33 @@
[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,6 +33,9 @@ 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,6 +4260,25 @@
"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",
@@ -5047,6 +5066,24 @@
"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",