template.yaml 3.5 KB

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