compose.yaml.j2 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. services:
  2. {{ service_name }}:
  3. image: docker.io/twingate/connector:{{ twingate_version }}
  4. {#
  5. If not in swarm mode, apply restart policy and container_name,
  6. else swarm mode handles restarts via deploy.restart_policy
  7. #}
  8. {% if not swarm_enabled %}
  9. restart: {{ restart_policy }}
  10. container_name: {{ container_name }}
  11. {% endif %}
  12. {#
  13. Set container hostname (Twingate connector uses this for identification)
  14. #}
  15. hostname: {{ container_hostname }}
  16. {#
  17. Environment variables for Twingate Connector configuration
  18. - TZ: Timezone
  19. - TWINGATE_NETWORK: Your Twingate network name
  20. - TWINGATE_ACCESS_TOKEN: Access token (from env or secret)
  21. - TWINGATE_REFRESH_TOKEN: Refresh token (from env or secret)
  22. - TWINGATE_LOG_LEVEL: Log verbosity level
  23. - TWINGATE_DNS: Optional local DNS server override
  24. #}
  25. environment:
  26. - TZ={{ container_timezone }}
  27. - TWINGATE_NETWORK={{ twingate_network }}
  28. {% if swarm_enabled %}
  29. - TWINGATE_ACCESS_TOKEN=/run/secrets/twingate_access_token
  30. - TWINGATE_REFRESH_TOKEN=/run/secrets/twingate_refresh_token
  31. {% else %}
  32. - TWINGATE_ACCESS_TOKEN=${TWINGATE_ACCESS_TOKEN:?error}
  33. - TWINGATE_REFRESH_TOKEN=${TWINGATE_REFRESH_TOKEN:?error}
  34. {% endif %}
  35. - TWINGATE_LOG_LEVEL={{ twingate_log_level }}
  36. {% if twingate_dns %}
  37. - TWINGATE_DNS={{ twingate_dns }}
  38. {% endif %}
  39. {#
  40. Required sysctls for Twingate connector networking
  41. #}
  42. sysctls:
  43. net.ipv4.ping_group_range: "0 2147483647"
  44. {#
  45. Deploy configuration for Swarm mode:
  46. - Supports both replicated and global deployment modes
  47. - Uses Docker secrets for sensitive credentials
  48. - Optional resource limits and reservations
  49. #}
  50. {% if swarm_enabled %}
  51. secrets:
  52. - twingate_access_token
  53. - twingate_refresh_token
  54. deploy:
  55. {% if swarm_placement_mode == 'replicated' %}
  56. replicas: {{ swarm_replicas }}
  57. placement:
  58. constraints:
  59. - node.hostname == {{ swarm_placement_host }}
  60. {% else %}
  61. mode: global
  62. {% endif %}
  63. restart_policy:
  64. condition: on-failure
  65. {% if resources_enabled %}
  66. resources:
  67. limits:
  68. cpus: '{{ resources_cpu_limit }}'
  69. memory: {{ resources_memory_limit }}
  70. reservations:
  71. cpus: '{{ resources_cpu_reservation }}'
  72. memory: {{ resources_memory_reservation }}
  73. {% endif %}
  74. {% endif %}
  75. {#
  76. Docker Swarm secrets (external secrets managed via docker secret create)
  77. #}
  78. {% if swarm_enabled %}
  79. secrets:
  80. twingate_access_token:
  81. external: true
  82. twingate_refresh_token:
  83. external: true
  84. {% endif %}