docker-compose.yaml 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. {% set tpl = ix_lib.base.render.Render(values) %}
  2. {% set perm_container = tpl.deps.perms(values.consts.perms_container_name) %}
  3. {% set perm_config = {"uid": values.consts.run_as_user, "gid": values.consts.run_as_group, "mode": "check"} %}
  4. {% set monerod = tpl.add_container(values.consts.monerod_container_name, "image") %}
  5. {% do monerod.set_user(values.consts.run_as_user, values.consts.run_as_group) %}
  6. {% do monerod.healthcheck.set_test("netcat", {"port": values.network.monerod_restricted_rpc_port.port_number}) %}
  7. {% for flag in values.monero.additional_flags %}
  8. {% for reserved_flag in values.consts.reserved_flags %}
  9. {% if flag.startswith(reserved_flag) %}
  10. {% do tpl.funcs.fail("Flag [%s] is reserved and cannot be set." | format(flag)) %}
  11. {% endif %}
  12. {% endfor %}
  13. {% endfor %}
  14. {# This way we get rid of fixuid #}
  15. {% do monerod.set_entrypoint(["monerod", "--non-interactive"]) %}
  16. {% set commands = namespace(x=[
  17. "--rpc-bind-ip=%s" | format("0.0.0.0" if values.network.monerod_rpc_port.bind_mode else "127.0.0.1"),
  18. "--rpc-bind-port=%d" | format(values.network.monerod_rpc_port.port_number),
  19. "--rpc-restricted-bind-ip=0.0.0.0",
  20. "--rpc-restricted-bind-port=%d" | format(values.network.monerod_restricted_rpc_port.port_number),
  21. "--p2p-bind-port=%d" | format(values.network.monerod_p2p_port.port_number),
  22. "--no-igd",
  23. ]) %}
  24. {% if values.monero.pruned %}
  25. {% do commands.x.append("--prune-blockchain") %}
  26. {% endif %}
  27. {% if values.monero.publicly_available %}
  28. {% do commands.x.append("--public-node") %}
  29. {% else %}
  30. {% do commands.x.append("--hide-my-port") %}
  31. {% endif %}
  32. {% if values.monero.publicly_available or values.network.monerod_rpc_port.bind_mode %}
  33. {% do commands.x.append("--confirm-external-bind") %}
  34. {% endif %}
  35. {% if values.monero.dns_blocklist %}
  36. {% do commands.x.append("--enable-dns-blocklist") %}
  37. {% endif %}
  38. {% for flag in values.monero.additional_flags %}
  39. {% do commands.x.append(flag) %}
  40. {% endfor %}
  41. {% if values.monero.ipv6_enabled %}
  42. {% do commands.x.append("--p2p-use-ipv6") %}
  43. {% do commands.x.append("--rpc-use-ipv6") %}
  44. {% do commands.x.append("--rpc-restricted-bind-ipv6-address=::") %}
  45. {% endif %}
  46. {% if values.monero.tor_connections_enabled %}
  47. {% do commands.x.append("--tx-proxy=tor,%s:%d,16" | format(values.monero.tor_ip, values.monero.tor_port)) %}
  48. {% if values.monero.routing == "tor" %}
  49. {% do commands.x.append("--proxy=%s:%d" | format(values.monero.tor_ip, values.monero.tor_port)) %}
  50. {% do commands.x.append("--p2p-bind-ip=%s" | format(values.monero.tor_ip)) %}
  51. {% endif %}
  52. {% endif %}
  53. {% if values.monero.tor_inbound_connections_enabled and values.network.tor_inbound_port.bind_mode %}
  54. {% do commands.x.append("--anonymous-inbound=%s,0.0.0.0:%d" | format(
  55. values.monero.tor_inbound_address,
  56. values.network.tor_inbound_port.port_number
  57. )) %}
  58. {% endif %}
  59. {% if values.monero.i2p_connections_enabled %}
  60. {% do commands.x.append("--tx-proxy=i2p,%s:%d,16" | format(values.monero.i2p_ip, values.monero.i2p_port)) %}
  61. {% endif %}
  62. {% if values.monero.i2p_inbound_connections_enabled and values.network.i2p_inbound_port.bind_mode %}
  63. {% do commands.x.append("--anonymous-inbound=%s,0.0.0.0:%d" | format(
  64. values.monero.i2p_inbound_address,
  65. values.network.i2p_inbound_port.port_number
  66. )) %}
  67. {% endif %}
  68. {% if values.monero.tor_connections_enabled or values.monero.i2p_connections_enabled %}
  69. {% do commands.x.append("--pad-transactions") %}
  70. {% endif %}
  71. {% if values.network.monerod_zmq_rpc_port.bind_mode %}
  72. {% do commands.x.append("--zmq-rpc-bind-ip=0.0.0.0") %}
  73. {% do commands.x.append("--zmq-rpc-bind-port=%d" | format(values.network.monerod_zmq_rpc_port.port_number)) %}
  74. {% endif %}
  75. {% if values.network.monerod_zmq_pub_port.bind_mode %}
  76. {% do commands.x.append("--zmq-pub=tcp://0.0.0.0:%d" | format(values.network.monerod_zmq_pub_port.port_number)) %}
  77. {% endif %}
  78. {% if not values.network.monerod_zmq_rpc_port.bind_mode and not values.network.monerod_zmq_pub_port.bind_mode %}
  79. {% do commands.x.append("--no-zmq") %}
  80. {% endif %}
  81. {% do monerod.set_command(commands.x) %}
  82. {% for store in values.storage.additional_storage %}
  83. {% do monerod.add_storage(store.mount_path, store) %}
  84. {% do perm_container.add_or_skip_action(store.mount_path, store, perm_config) %}
  85. {% endfor %}
  86. {% do monerod.add_storage("/home/monero/.bitmonero", values.storage.bitmonero) %}
  87. {% do perm_container.add_or_skip_action("bitmonero", values.storage.bitmonero, perm_config) %}
  88. {% if not values.network.host_network %}
  89. {% do monerod.add_port(values.network.monerod_p2p_port) %}
  90. {% do monerod.add_port(values.network.monerod_rpc_port) %}
  91. {% do monerod.add_port(values.network.monerod_restricted_rpc_port) %}
  92. {% do monerod.add_port(values.network.monerod_zmq_rpc_port) %}
  93. {% do monerod.add_port(values.network.tor_inbound_port) %}
  94. {% do monerod.add_port(values.network.i2p_inbound_port) %}
  95. {% endif %}
  96. {% if perm_container.has_actions() %}
  97. {% do perm_container.activate() %}
  98. {% do monerod.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  99. {% endif %}
  100. {{ tpl.render() | tojson }}