Created
December 11, 2023 19:19
-
-
Save zkat/cced87b287dc7ee04ff030eb12ea8d3a to your computer and use it in GitHub Desktop.
Docker Compose in KDL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This is a KDL translation of https://gitea.treehouse.systems/treehouse/mastodon/src/branch/main/docker-compose.yml, | |
// with some examples of proposed KDL 2.0 grammar sprinkled in with comments. | |
version "3" | |
services { | |
db { | |
restart "always" | |
image "postgres:14-alpine" | |
shm_size "256mb" | |
networks { | |
- "internal_network" | |
} | |
healthcheck { | |
test "CMD" "pg_isready" "-U" "postgres" | |
} | |
volumes { | |
- "./postgres14:/var/lib/postgresql/data" | |
} | |
environment { | |
- "POSTGRES_HOST_AUTH_METHOD=trust" | |
} | |
} | |
redis { | |
restart "always" | |
image "redis:7-alpine" | |
// If you don't have a lot of items in your "arrays", you can just use a | |
// flat node argument (and move to children later). The semantics for this | |
// are determined by the application, not the parser, though. | |
networks "internal_network" | |
healthcheck { | |
test "CMD" "redis-cli" "ping" | |
} | |
volumes "./redis:/data" | |
} | |
// /- comments can be used to comment out entire nodes without having to | |
// comment each line, or use multi-line comments. | |
/-es { | |
restart "always" | |
image "docker.elastic.co/elasticsearch/elasticsearch:7.17.4" | |
// Again, you can represent this in two ways, so I'll show both. | |
environment \ | |
ES_JAVA_OPTS="-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true" \ | |
xpack.license.self_generated.type="basic" \ | |
xpack.security.enabled=false \ | |
xpack.watcher.enabled=false \ | |
xpack.graph.enabled=false \ | |
xpack.ml.enabled=false \ | |
bootstrap.memory_lock=true \ | |
cluster.name="es-mastodon" \ | |
discovery.type="single-node" \ | |
thread_pool.write.queue_size=1000 | |
// Using child nodes instead | |
/-environment { | |
ES_JAVA_OPTS "-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true" | |
xpack.license.self_generated.type "basic" | |
xpack.security.enabled false | |
} | |
networks "external_network" "internal_network" | |
healthcheck { | |
test "CMD-SHELL" "curl --silent --fail localhost:9200/_cluster/health || exit 1" | |
// With the new `#` proposal for KDL 2.0, this would look like this: | |
test "CMD-SHELL" #curl --silent --fail localhost:9200/_cluster/health || exit 1 | |
} | |
volumes "./elasticsearch:/usr/share/elasticsearch/data" | |
ulimits { | |
memlock soft=-1 hard=-1 | |
nofile soft=65536 hard=65536 | |
} | |
ports "127.0.0.1:9200:9200" | |
} | |
web { | |
build "." | |
image "ghcr.io/mastodon/mastodon:v4.2.0" | |
restart "always" | |
env_file ".env.production" | |
// KDL 1.0 | |
command r#"bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000""# | |
// KDL 2.0 | |
command #bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" | |
networks "external_network" "internal_network" | |
healthcheck { | |
// KDL 2.0 | |
test "CMD-SHELL" #wget -q --spider --proxy=off localhost:3000/health || exit 1 | |
} | |
ports "127.0.0.1:3000:3000" | |
// /- comments work for individual values, too | |
depends_on "db" /-"es" "redis" | |
volumes "./public/system:/mastodon/public/system" | |
} | |
streaming { | |
build "." | |
image "ghcr.io/mastodon/mastodon:v4.2.0" | |
restart "always" | |
env_file ".env.production" | |
command "node ./streaming" | |
networks "external_network" "internal_network" | |
healthcheck { | |
// KDL 2.0 | |
test: "CMD-SHELL" #wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1 | |
} | |
ports "127.0.0.1:4000:4000" | |
depends_on "db" "redis" | |
} | |
sidekiq { | |
build "." | |
image "ghcr.io/mastodon/mastodon:v4.2.0" | |
restart "always" | |
env_file ".env.production" | |
command "bundle exec sidekiq" | |
depends_on "db" "redis" | |
networks "external_network" "internal_network" | |
volumes "./public/system:/mastodon/public/system" | |
healthcheck { | |
// KDL 2.0 | |
test "CMD-SHELL" #ps aux | grep "[s]idekiq\ 6" || false | |
} | |
} | |
// Uncomment to enable federation with tor instances along with adding the following ENV variables | |
// http_hidden_proxy=http://privoxy:8118 | |
// ALLOW_ACCESS_TO_HIDDEN_SERVICE=true | |
/-tor { | |
image "sirboops/tor" | |
networks "internal_network" "external_network" | |
} | |
/-privoxy { | |
image "sirboops/privoxy" | |
volumes "./priv-config:/opt/config" | |
networks "internal_network" "external_network" | |
} | |
} | |
networks { | |
external_network | |
internal_network internal=true | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment