template.yaml 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. schema: "1.2"
  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"