docker-compose.yaml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. {% set tpl = ix_lib.base.render.Render(values) %}
  2. {% set c1 = tpl.add_container(values.consts.steam_headless_container_name, "image") %}
  3. {% do c1.set_ipc_mode("host") %}
  4. {% do c1.add_device_cgroup_rule("c 13:* rwm") %}
  5. {% do c1.remove_security_opt("no-new-privileges") %}
  6. {% do c1.add_security_opt("seccomp", "unconfined") %}
  7. {% do c1.add_security_opt("apparmor", "unconfined") %}
  8. {% do c1.add_caps([
  9. "AUDIT_WRITE",
  10. "CHOWN",
  11. "DAC_OVERRIDE",
  12. "FOWNER",
  13. "FSETID",
  14. "KILL",
  15. "MKNOD",
  16. "NET_ADMIN",
  17. "SETGID",
  18. "SETUID",
  19. "SYS_ADMIN",
  20. "SYS_NICE",
  21. "SYS_RESOURCE",
  22. ]) %}
  23. {% do c1.set_shm_size_mb(values.steam_headless.shm_size_mb) %}
  24. {% do c1.set_hostname(values.steam_headless.name) %}
  25. {% do c1.add_extra_host(values.steam_headless.name, "127.0.0.1") %}
  26. {% do c1.add_port(values.network.vnc_port) %}
  27. {% do c1.healthcheck.set_test("curl", {"port": values.network.vnc_port.port_number}) %}
  28. {% do c1.environment.add_user_envs(values.steam_headless.additional_envs) %}
  29. {% do c1.environment.add_env("WEB_UI_MODE", "vnc") %}
  30. {% do c1.environment.add_env("DISPLAY", values.steam_headless.display or ":99") %}
  31. {% do c1.environment.add_env("USER_PASSWORD", values.steam_headless.user_password) %}
  32. {% do c1.environment.add_env("PORT_NOVNC_WEB", values.network.vnc_port.port_number) %}
  33. {% do c1.environment.add_env("HOST_DBUS", true) %}
  34. {% do c1.environment.add_env("ENABLE_EVDEV_INPUTS", values.steam_headless.enable_ev_dev_inputs) %}
  35. {% do c1.environment.add_env("MODE", values.steam_headless.mode) %}
  36. {% if values.steam_headless.mode == "primary" %}
  37. {% do c1.environment.add_env("FORCE_X11_DUMMY_CONFIG", values.steam_headless.force_x11_dummy_config) %}
  38. {% endif %}
  39. {% if values.steam_headless.steam.enable %}
  40. {% do c1.environment.add_env("ENABLE_STEAM", true) %}
  41. {% do c1.environment.add_env("STEAM_ARGS", values.steam_headless.steam.args|unique|list|join(" ")) %}
  42. {% endif %}
  43. {% if values.steam_headless.sunshine.enable %}
  44. {% do c1.environment.add_env("ENABLE_SUNSHINE", true) %}
  45. {% do c1.environment.add_env("SUNSHINE_USER", values.steam_headless.sunshine.username) %}
  46. {% do c1.environment.add_env("SUNSHINE_PASS", values.steam_headless.sunshine.password) %}
  47. {% endif %}
  48. {# TODO: Does one affect another?
  49. MODE: primary/secondary
  50. FORCE_X11_DUMMY_CONFIG: true/false
  51. WEB_UI_MODE: vnc/neko
  52. #}
  53. {% do c1.devices.add_device("/dev/fuse", "/dev/fuse") %}
  54. {% if values.steam_headless.enable_ev_dev_inputs %}
  55. {% do c1.devices.add_device("/dev/uinput", "/dev/uinput") %}
  56. {% endif %}
  57. {% do c1.add_storage("/run/dbus", {"type": "host_path", "read_only": true, "host_path_config": {"path": "/run/dbus"}}) %}
  58. {% do c1.add_storage("/home/default", values.storage.home) %}
  59. {% do c1.add_storage("/mnt/games", values.storage.games) %}
  60. {% do c1.add_storage("/tmp/.X11-unix", values.storage.x11_socket) %}
  61. {% do c1.add_storage("/tmp/pulse", values.storage.pulse_socket) %}
  62. {% for store in values.storage.additional_storage %}
  63. {% do c1.add_storage(store.mount_path, store) %}
  64. {% endfor %}
  65. {% do tpl.portals.add(values.network.vnc_port) %}
  66. {{ tpl.render() | tojson }}