mirror of
https://github.com/hanzo-apps/templates.git
synced 2026-11-02 20:18:23 +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.
82 lines
2.9 KiB
YAML
82 lines
2.9 KiB
YAML
services:
|
|
elasticsearch:
|
|
image: elastic/elasticsearch:9.1.2
|
|
environment:
|
|
- ELASTIC_USER=elastic
|
|
- ELASTIC_PASSWORD=${SERVICE_PASSWORD_ELASTICSEARCH}
|
|
- ES_JAVA_OPTS=-Xms512m -Xmx512m
|
|
- discovery.type=single-node
|
|
- bootstrap.memory_lock=true
|
|
- xpack.security.http.ssl.enabled=false
|
|
volumes:
|
|
- /etc/localtime:/etc/localtime:ro
|
|
- elasticsearch-data:/usr/share/elasticsearch/data
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- curl --user elastic:${SERVICE_PASSWORD_ELASTICSEARCH} --silent --fail http://localhost:9200/_cluster/health
|
|
interval: 10s
|
|
timeout: 10s
|
|
retries: 24
|
|
kibana:
|
|
image: kibana:9.1.2
|
|
environment:
|
|
- KIBANA_PASSWORD=${SERVICE_PASSWORD_KIBANA}
|
|
- ELASTICSEARCH_SERVICEACCOUNTTOKEN=${ELASTICSEARCH_SERVICEACCOUNTTOKEN}
|
|
- SERVER_NAME=${SERVICE_FQDN_KIBANA}
|
|
- SERVER_PUBLICBASEURL=${SERVICE_URL_KIBANA}
|
|
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
|
|
- XPACK.SECURITY.ENABLED=true
|
|
- XPACK_SECURITY_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKSECURITY}
|
|
- XPACK_REPORTING_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKREPORTING}
|
|
- XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKENCRYPTEDSAVEDOBJECTS}
|
|
- TELEMETRY_OPTIN=${TELEMETRY_OPTIN:-false}
|
|
volumes:
|
|
- /etc/localtime:/etc/localtime:ro
|
|
- kibana-data:/usr/share/kibana/data
|
|
depends_on:
|
|
elasticsearch:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test:
|
|
- CMD-SHELL
|
|
- curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'
|
|
interval: 10s
|
|
timeout: 10s
|
|
retries: 120
|
|
kibana-token-generator:
|
|
image: alpine:latest
|
|
depends_on:
|
|
elasticsearch:
|
|
condition: service_healthy
|
|
exclude_from_hc: true
|
|
environment:
|
|
- ELASTIC_PASSWORD=${SERVICE_PASSWORD_ELASTICSEARCH}
|
|
entrypoint:
|
|
- sh
|
|
- -c
|
|
- |
|
|
apk add --no-cache curl jq >/dev/null 2>&1
|
|
echo "Generating Kibana service token..."
|
|
RESPONSE=$(curl -s -w "\n%{http_code}" -u elastic:"$${ELASTIC_PASSWORD}" -X POST "http://elasticsearch:9200/_security/service/elastic/kibana/credential/token/kibana-service-token")
|
|
HTTP_CODE=$$(echo "$${RESPONSE}" | tail -n1)
|
|
BODY=$$(echo "$${RESPONSE}" | head -n -1)
|
|
if [ "$${HTTP_CODE}" = "200" ]; then
|
|
CREATED=$$(echo "$${BODY}" | jq -r '.created')
|
|
if [ "$${CREATED}" = "true" ]; then
|
|
TOKEN_VALUE=$$(echo "$${BODY}" | jq -r '.token.value')
|
|
echo "Token created successfully:"
|
|
echo "$${TOKEN_VALUE}"
|
|
else
|
|
echo "Unexpected response, token not created:"
|
|
echo "$${BODY}"
|
|
fi
|
|
elif [ "$${HTTP_CODE}" = "409" ]; then
|
|
echo "Token already exists. Skipping token creation."
|
|
else
|
|
echo "Failed to create token. HTTP code: $${HTTP_CODE}"
|
|
echo "$${BODY}"
|
|
exit 1
|
|
fi
|
|
restart: no
|