docker-compose.yaml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. {% from "macros/haproxy_config.macro" import haproxy_config %}
  2. {% set tpl = ix_lib.base.render.Render(values) %}
  3. {#
  4. Postgres will always create an empty database on the first start.
  5. It will default to "user" if database is not specified.
  6. Asigra on the other hand will check if the database exists, and if it exists,
  7. it also assumes that the schema is already created and will not create it.
  8. Therefore, we create a "dummy" database and let asigra to create its own database.
  9. Asigra will create a database named after the value in values.consts.db_name.
  10. #}
  11. {% set pg_conf = {
  12. "user": values.consts.db_user,
  13. "database": "dummy",
  14. "password": values.asigra.db_password,
  15. "volume": values.storage.postgres_data,
  16. } %}
  17. {% set perms_container = tpl.deps.perms(values.consts.perms_container_name) %}
  18. {% set postgres = tpl.deps.postgres(values.consts.postgres_container_name, "postgres_image", pg_conf, perms_container) %}
  19. {# Asigra needs the hostname to be set, even if the PGHOST is set and internal dns resolves to the container #}
  20. {% do postgres.container.set_hostname(values.consts.postgres_container_name) %}
  21. {# Create asigra containers #}
  22. {% set asigra_container_names = namespace(x=[]) %}
  23. {% set cluster_size = values.asigra.cluster_size or 1 %}
  24. {% for i in range(cluster_size) %}
  25. {% set container_name = values.consts.asigra_container_name %}
  26. {# Default name plus index only if cluster size > 1 #}
  27. {% if cluster_size > 1 %}
  28. {% set container_name = "%s-%d" |format(values.consts.asigra_container_name, loop.index0 + 1) %}
  29. {% endif %}
  30. {% do asigra_container_names.x.append(container_name) %}
  31. {% set c = tpl.add_container(container_name, "image") %}
  32. {% do c.depends.add_dependency(values.consts.postgres_container_name, "service_healthy") %}
  33. {% do c.set_user(0, 0) %}
  34. {% do c.add_caps(["CHOWN", "FOWNER", "DAC_OVERRIDE"]) %}
  35. {% do c.healthcheck.set_custom_test("/Health-Check.sh") %}
  36. {% do c.set_hostname(container_name) %}
  37. {% do c.add_storage(values.consts.data_path, values.storage.data) %}
  38. {% for store in values.storage.additional_storage %}
  39. {% do c.add_storage(store.mount_path, store) %}
  40. {% endfor %}
  41. {% do c.environment.add_user_envs(values.asigra.additional_envs) %}
  42. {% do c.environment.add_env("PGPORT", 5432) %}
  43. {% do c.environment.add_env("PGHOST", values.consts.postgres_container_name) %}
  44. {% do c.environment.add_env("PGDATABASE", values.consts.db_name) %}
  45. {% do c.environment.add_env("PGUSER", values.consts.db_user) %}
  46. {% do c.environment.add_env("PGPASSWORD", values.asigra.db_password) %}
  47. {% do c.environment.add_env("DATA", values.consts.data_path) %}
  48. {% do c.environment.add_env("DSSLANGUAGE", values.asigra.language) %}
  49. {% do c.environment.add_env("ADMINPASSWORD", values.asigra.admin_password) %}
  50. {% do c.environment.add_env("OPERPASSWORD", values.asigra.operator_password) %}
  51. {% if cluster_size == 1 %}
  52. {% do c.add_port(values.network.client_port, {"container_port": 4401}) %}
  53. {% do c.add_port(values.network.admin_port, {"container_port": 4404}) %}
  54. {% do c.add_port(values.network.replication_port, {"container_port": 4409}) %}
  55. {% do c.add_port(values.network.billing_port, {"container_port": 4415}) %}
  56. {% else %}
  57. {% do c.environment.add_env("CLUSTERSIZE", cluster_size) %}
  58. {% do c.environment.add_env("CLUSTERID", loop.index0 + 1) %}
  59. {% endif %}
  60. {% endfor %}
  61. {# On cluster size > 1, we need to create a haproxy container #}
  62. {% if cluster_size > 1 %}
  63. {% set haproxy_container = tpl.add_container(values.consts.haproxy_container_name, "haproxy_image") %}
  64. {% do haproxy_container.set_user(568, 568) %}
  65. {% do haproxy_container.add_port(values.network.client_port, {"container_port": 4401}) %}
  66. {% do haproxy_container.add_port(values.network.admin_port, {"container_port": 4404}) %}
  67. {% do haproxy_container.add_port(values.network.replication_port, {"container_port": 4409}) %}
  68. {% do haproxy_container.add_port(values.network.billing_port, {"container_port": 4415}) %}
  69. {% do haproxy_container.sysctls.add("net.ipv6.conf.all.disable_ipv6", 1) %}
  70. {% do haproxy_container.healthcheck.disable() %}
  71. {# Make sure all containers are healthy before starting haproxy #}
  72. {% for c in asigra_container_names.x %}
  73. {% do haproxy_container.depends.add_dependency(c, "service_healthy") %}
  74. {% endfor %}
  75. {% do haproxy_container.configs.add("haproxy_config", haproxy_config(asigra_container_names.x, values), "/usr/local/etc/haproxy/haproxy.cfg", "0555") %}
  76. {% endif %}
  77. {% if perms_container.has_actions() %}
  78. {% do perms_container.activate() %}
  79. {% do postgres.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  80. {% endif %}
  81. {% do tpl.notes.set_body(values.consts.notes_body) %}
  82. {{ tpl.render() | tojson }}