mirror of
https://github.com/hanzo-apps/templates.git
synced 2026-10-30 14:48:30 +00:00
Aggregates five OSS one-click/self-hosting catalogs into the Dokploy blueprint
shape the Hanzo PaaS consumes (meta.json array + blueprints/<id>/{template.toml,
docker-compose.yml,meta.json,logo}):
Dokploy 500 (MIT, verbatim) · Coolify 174 (Apache-2.0) · CapRover 161
(Apache-2.0) · CasaOS 85 (Apache-2.0) · Runtipi 110 (GPL-3.0)
Deduped by app identity; each source + app keeps its upstream license
(ATTRIBUTION.md). Deterministic aggregators + a hard validator (every
template.toml parses with the platform's toml lib, every compose parses as YAML,
meta.json is the expected array, and an over-HTTP fetch probe exercises all
1030) — 0 hard failures. Served natively by hanzoai/static on DOKS (no CDN/Pages/
Vercel); CI builds on the hanzo-build-linux-amd64 arc pool; operator App CR in
crs/ serves it at templates.hanzo.ai.
79 lines
2.9 KiB
YAML
79 lines
2.9 KiB
YAML
version: "3.8"
|
|
services:
|
|
imgproxy:
|
|
image: darthsim/imgproxy:v3.30.1
|
|
restart: unless-stopped
|
|
expose:
|
|
- 8080
|
|
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:
|