template.yaml 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. ---
  2. kind: compose
  3. metadata:
  4. icon:
  5. provider: selfh
  6. id: pangolin
  7. name: Pangolin
  8. description: |
  9. Self-hosted reverse proxy server that securely exposes private resources on distributed networks through
  10. encrypted WireGuard tunnels. Pangolin enables access from anywhere without opening ports, using a custom
  11. user-space WireGuard client (Newt) for secure connectivity. Features include automatic tunnel management,
  12. integrated CrowdSec security, and support for both PostgreSQL and SQLite databases.
  13. ## References
  14. * **Project:** https://github.com/fosrl/pangolin
  15. * **Documentation:** https://github.com/fosrl/pangolin/blob/main/README.md
  16. * **Docker Hub:** https://hub.docker.com/r/fosrl/pangolin
  17. version: latest
  18. author: Christian Lempa
  19. date: '2025-11-13'
  20. tags:
  21. - traefik
  22. - swarm
  23. - proxy
  24. - wireguard
  25. draft: true
  26. next_steps: |
  27. ### 1. Configure Database
  28. {% if postgres_enabled -%}
  29. Make sure PostgreSQL is running and accessible at:
  30. * Connection string: {{ postgres_connection_string }}
  31. {% else -%}
  32. Pangolin will use SQLite database stored in the data volume.
  33. {% endif -%}
  34. ### 2. Deploy the Service
  35. {% if swarm_enabled -%}
  36. Deploy to Docker Swarm:
  37. ```bash
  38. docker stack deploy -c compose.yaml pangolin
  39. ```
  40. {% else -%}
  41. Start Pangolin using Docker Compose:
  42. ```bash
  43. docker compose up -d
  44. ```
  45. {% endif -%}
  46. ### 3. Access the Web Interface
  47. {% if traefik_enabled -%}
  48. * Navigate to: **https://{{ traefik_host }}.{{ traefik_domain }}**
  49. {% else -%}
  50. * Navigate to: **http://localhost:{{ ports_http }}**
  51. {% endif -%}
  52. ### 4. Configure WireGuard Clients
  53. * Use the Pangolin web interface to create and manage WireGuard tunnels
  54. * Deploy Newt client on remote machines to establish secure connections
  55. spec:
  56. general:
  57. vars:
  58. service_name:
  59. default: "pangolin"
  60. container_name:
  61. default: "pangolin"
  62. container_hostname:
  63. default: "pangolin"
  64. traefik:
  65. vars:
  66. traefik_host:
  67. default: "pangolin"
  68. network:
  69. vars:
  70. network_name:
  71. default: "pangolin_network"
  72. ports:
  73. vars:
  74. ports_http:
  75. description: "External HTTP port (web interface)"
  76. type: int
  77. default: 8080
  78. needs: ["traefik_enabled=false", "network_mode=bridge"]
  79. volume:
  80. vars:
  81. volume_mount_path:
  82. default: "/mnt/storage/pangolin"
  83. postgres:
  84. title: "PostgreSQL Configuration"
  85. toggle: postgres_enabled
  86. needs: null
  87. vars:
  88. postgres_enabled:
  89. type: bool
  90. default: false
  91. description: "Use PostgreSQL database (SQLite is default)"
  92. postgres_connection_string:
  93. type: str
  94. default: "postgresql://postgres:postgres@localhost:5432"
  95. description: "PostgreSQL connection string"
  96. needs: "postgres_enabled=true"
  97. environment:
  98. title: "Environment Variables"
  99. toggle: environment_enabled
  100. needs: null
  101. vars:
  102. environment_enabled:
  103. type: bool
  104. default: false
  105. description: "Configure additional environment variables"
  106. environment_crowdsec_enabled:
  107. type: bool
  108. default: false
  109. description: "Enable CrowdSec integration"
  110. needs: "environment_enabled=true"
  111. environment_log_level:
  112. type: enum
  113. default: "info"
  114. options: ["debug", "info", "warn", "error"]
  115. description: "Log level"
  116. needs: "environment_enabled=true"