docker-compose.yaml 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. {% set tpl = ix_lib.base.render.Render(values) %}
  2. {% set c1 = tpl.add_container(values.consts.terraria_container_name, values.terraria.image_selector) %}
  3. {% do c1.set_user(0, 0) %}
  4. {% do c1.set_tty(true) %}
  5. {% do c1.set_stdin(true) %}
  6. {% if values.ci %}
  7. {% do c1.healthcheck.set_test("tcp", {"port": values.network.server_port.port_number}) %}
  8. {% else %}
  9. {% do c1.healthcheck.disable() %}
  10. {% endif %}
  11. {#
  12. 'worldevil', 'dificulty' and 'autocreate' flags are only used
  13. when a world is generated. According to docs server will
  14. ignore them if a world exists, so we can safely pass
  15. them all the time and let application handle it.
  16. Also 'autocreate' must come before other flags.
  17. #}
  18. {% set cmd = namespace(x=[
  19. "-autocreate", values.consts.sizes_map[values.terraria.world_size],
  20. "-worldevil", values.terraria.world_evil,
  21. "-difficulty", values.consts.difficulty_map[values.terraria.world_difficulty],
  22. ]) %}
  23. {% if values.terraria.world_seed %}
  24. {% do cmd.x.extend(["-seed", values.terraria.world_seed]) %}
  25. {% endif %}
  26. {% do cmd.x.extend([
  27. "-port", values.network.server_port.port_number,
  28. "-world", "%s/%s.wld" | format(values.consts.world_path, values.terraria.world_name),
  29. "-additionalplugins", values.consts.plugins_path,
  30. "-maxplayers", values.terraria.max_players,
  31. ]) %}
  32. {% if values.network.tshock_api_port.bind_mode %}
  33. {% do cmd.x.extend([
  34. "-rest-port", values.network.tshock_api_port.port_number,
  35. "-rest-enabled", true,
  36. ]) %}
  37. {% endif %}
  38. {% if values.terraria.password %}
  39. {% do cmd.x.extend(["-password", values.terraria.password]) %}
  40. {% endif %}
  41. {% if values.terraria.secure %}
  42. {% do cmd.x.append("-secure") %}
  43. {% endif %}
  44. {% if values.terraria.force_update %}
  45. {% do cmd.x.append("-forceupdate") %}
  46. {% endif %}
  47. {% for item in values.terraria.additional_args %}
  48. {% if item.key in values.consts.reserved_args %}
  49. {% do tpl.funcs.fail("Argument [%s] is automatically handled by the app, please use the corresponding field." | format(item.key)) %}
  50. {% endif %}
  51. {% do cmd.x.append(item.key) %}
  52. {% if item.value %}
  53. {% do cmd.x.append(item.value) %}
  54. {% endif %}
  55. {% endfor %}
  56. {% do c1.set_command(cmd.x) %}
  57. {% do c1.environment.add_env("CONFIGPATH", values.consts.config_path) %}
  58. {% do c1.environment.add_env("WORLDPATH", values.consts.world_path) %}
  59. {% do c1.environment.add_user_envs(values.terraria.additional_envs) %}
  60. {% do c1.add_port(values.network.server_port) %}
  61. {% do c1.add_port(values.network.tshock_api_port) %}
  62. {% do c1.add_storage(values.consts.config_path, values.storage.config) %}
  63. {% do c1.add_storage(values.consts.world_path, values.storage.world) %}
  64. {% do c1.add_storage(values.consts.plugins_path, values.storage.plugins) %}
  65. {% for store in values.storage.additional_storage %}
  66. {% do c1.add_storage(store.mount_path, store) %}
  67. {% endfor %}
  68. {{ tpl.render() | tojson }}