Skip to content

Commit 5b5e65a

Browse files
authored
Merge pull request #1074 from fosrl/dev
1.7.0
2 parents da36a21 + 417811e commit 5b5e65a

File tree

310 files changed

+24321
-7606
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

310 files changed

+24321
-7606
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ bruno/
2727
LICENSE
2828
CONTRIBUTING.md
2929
dist
30+
.git

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ yarn-error.log*
1818
next-env.d.ts
1919
*.db
2020
*.sqlite
21+
!Dockerfile.sqlite
2122
*.sqlite3
2223
*.log
2324
.machinelogs*.json

CONTRIBUTING.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ Please see the contribution and local development guide on the docs page before
66

77
https://docs.fossorial.io/development
88

9-
For ideas about what features to work on and our future plans, please see the roadmap:
10-
11-
https://docs.fossorial.io/roadmap
12-
139
### Licensing Considerations
1410

1511
Please note that your contributions will be distributed under the AGPLv3 and the Fossorial Commercial license. For inquiries about commercial licensing, please contact us.
@@ -21,4 +17,4 @@ By creating this pull request, I grant the project maintainers an unlimited,
2117
perpetual license to use, modify, and redistribute these contributions under any terms they
2218
choose, including both the AGPLv3 and the Fossorial Commercial license terms. I
2319
represent that I have the right to grant this license for all contributed content.
24-
```
20+
```

Dockerfile.dev

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
FROM node:20-alpine
2+
3+
WORKDIR /app
4+
5+
COPY package*.json ./
6+
7+
# Install dependencies
8+
RUN npm ci
9+
10+
# Copy source code
11+
COPY . .
12+
13+
# Use tsx watch for development with hot reload
14+
CMD ["npm", "run", "dev"]
File renamed without changes.

Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ build-release:
55
echo "Error: tag is required. Usage: make build-release tag=<tag>"; \
66
exit 1; \
77
fi
8-
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:latest -f Dockerfile --push .
9-
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:$(tag) -f Dockerfile --push .
8+
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:latest -f Dockerfile.sqlite --push .
9+
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:$(tag) -f Dockerfile.sqlite --push .
1010
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:postgresql-latest -f Dockerfile.pg --push .
1111
docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:postgresql-$(tag) -f Dockerfile.pg --push .
1212

@@ -16,8 +16,8 @@ build-arm:
1616
build-x86:
1717
docker buildx build --platform linux/amd64 -t fosrl/pangolin:latest .
1818

19-
build:
20-
docker build -t fosrl/pangolin:latest -f Dockerfile .
19+
build-sqlite:
20+
docker build -t fosrl/pangolin:latest -f Dockerfile.sqlite .
2121

2222
build-pg:
2323
docker build -t fosrl/pangolin:postgresql-latest -f Dockerfile.pg .

README.md

Lines changed: 47 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
</h2>
88
</div>
99

10-
<h4 align="center">Tunneled Reverse Proxy Server with Access Control</h4>
10+
<h4 align="center">Secure gateway to your private networks</h4>
1111
<div align="center">
1212

13-
_Your own self-hosted zero trust tunnel._
13+
_Pangolin tunnels your services to the internet so you can access anything from anywhere._
1414

1515
</div>
1616

@@ -36,22 +36,32 @@ _Your own self-hosted zero trust tunnel._
3636

3737
</div>
3838

39+
<p align="center">
40+
<strong>
41+
Start testing Pangolin at <a href="https://pangolin.fossorial.io/auth/signup">pangolin.fossorial.io</a>
42+
<br/>
43+
</strong>
44+
</p>
45+
3946
Pangolin is a self-hosted tunneled reverse proxy server with identity and access control, designed to securely expose private resources on distributed networks. Acting as a central hub, it connects isolated networks — even those behind restrictive firewalls — through encrypted tunnels, enabling easy access to remote services without opening ports.
4047

4148
<img src="public/screenshots/hero.png" alt="Preview"/>
4249

43-
_Resources page of Pangolin dashboard (dark mode) showing multiple resources available to connect._
50+
![gif](public/clip.gif)
4451

4552
## Key Features
4653

4754
### Reverse Proxy Through WireGuard Tunnel
4855

4956
- Expose private resources on your network **without opening ports** (firewall punching).
50-
- Secure and easy to configure site-to-site connectivity via a custom **user space WireGuard client**, [Newt](https://github.com/fosrl/newt).
57+
- Secure and easy to configure private connectivity via a custom **user space WireGuard client**, [Newt](https://github.com/fosrl/newt).
5158
- Built-in support for any WireGuard client.
5259
- Automated **SSL certificates** (https) via [LetsEncrypt](https://letsencrypt.org/).
5360
- Support for HTTP/HTTPS and **raw TCP/UDP services**.
5461
- Load balancing.
62+
- Extend functionality with existing [Traefik](https://github.com/traefik/traefik) plugins, such as [CrowdSec](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin) and [Geoblock](https://github.com/PascalMinder/geoblock).
63+
- **Automatically install and configure Crowdsec via Pangolin's installer script.**
64+
- Attach as many sites to the central server as you wish.
5565

5666
### Identity & Access Management
5767

@@ -65,89 +75,73 @@ _Resources page of Pangolin dashboard (dark mode) showing multiple resources ava
6575
- **Temporary, self-destructing share links.**
6676
- Resource specific pin codes.
6777
- Resource specific passwords.
78+
- Passkeys
6879
- External identity provider (IdP) support with OAuth2/OIDC, such as Authentik, Keycloak, Okta, and others.
6980
- Auto-provision users and roles from your IdP.
7081

71-
### Simple Dashboard UI
82+
<img src="public/auth-diagram1.png" alt="Auth and diagram"/>
7283

73-
- Manage sites, users, and roles with a clean and intuitive UI.
74-
- Monitor site usage and connectivity.
75-
- Light and dark mode options.
76-
- Mobile friendly.
84+
## Use Cases
7785

78-
### Easy Deployment
86+
### Manage Access to Internal Apps
7987

80-
- Run on any cloud provider or on-premises.
81-
- **Docker Compose based setup** for simplified deployment.
82-
- Future-proof installation script for streamlined setup and feature additions.
83-
- Use any WireGuard client to connect, or use **Newt, our custom user space client** for the best experience.
84-
- Use the API to create custom integrations and scripts.
85-
- Fine-grained access control to the API via scoped API keys.
86-
- Comprehensive Swagger documentation for the API.
88+
- Grant users access to your apps from anywhere using just a web browser. No client software required.
8789

88-
### Modular Design
90+
### Developers and DevOps
8991

90-
- Extend functionality with existing [Traefik](https://github.com/traefik/traefik) plugins, such as [CrowdSec](https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin) and [Geoblock](https://github.com/PascalMinder/geoblock).
91-
- **Automatically install and configure Crowdsec via Pangolin's installer script.**
92-
- Attach as many sites to the central server as you wish.
92+
- Expose and test internal tools and dashboards like **Grafana**. Bring localhost or private IPs online for easy access.
9393

94-
<img src="public/screenshots/collage.png" alt="Collage"/>
94+
### Secure API Gateway
9595

96-
## Deployment and Usage Example
96+
- One application load balancer across multiple clouds and on-premises.
9797

98-
1. **Deploy the Central Server**:
98+
### IoT and Edge Devices
9999

100-
- Deploy the Docker Compose stack onto a VPS hosted on a cloud platform like RackNerd, Amazon EC2, DigitalOcean Droplet, or similar. There are many cheap VPS hosting options available to suit your needs.
100+
- Easily expose **IoT devices**, **edge servers**, or **Raspberry Pi** to the internet for field equipment monitoring.
101101

102-
> [!TIP]
103-
> Many of our users have had a great experience with [RackNerd](https://my.racknerd.com/aff.php?aff=13788). Depending on promotions, you can get a [**VPS with 1 vCPU, 1GB RAM, and ~20GB SSD for just around $12/year**](https://my.racknerd.com/aff.php?aff=13788&pid=912). That's a great deal!
104-
> We are part of the [RackNerd](https://my.racknerd.com/aff.php?aff=13788) affiliate program, so if you purchase through [our link](https://my.racknerd.com/aff.php?aff=13788), we receive a small commission which helps us maintain the project and keep it free for everyone.
102+
<img src="public/screenshots/sites.png" alt="Sites"/>
103+
104+
## Deployment Options
105105

106-
1. **Domain Configuration**:
106+
### Fully Self Hosted
107107

108-
- Point your domain name to the VPS and configure Pangolin with your preferred settings.
108+
Host the full application on your own server or on the cloud with a VPS. Take a look at the [documentation](https://docs.fossorial.io/Getting%20Started/quick-install) to get started.
109109

110-
2. **Connect Private Sites**:
110+
> Many of our users have had a great experience with [RackNerd](https://my.racknerd.com/aff.php?aff=13788). Depending on promotions, you can get a [**VPS with 1 vCPU, 1GB RAM, and ~20GB SSD for just around $12/year**](https://my.racknerd.com/aff.php?aff=13788&pid=912). That's a great deal!
111111
112-
- Install Newt or use another WireGuard client on private sites.
113-
- Automatically establish a connection from these sites to the central server.
112+
### Pangolin Cloud
114113

115-
3. **Expose Resources**:
114+
Easy to use with simple pay as you go pricing. [Check it out here](https://pangolin.fossorial.io/auth/signup).
116115

117-
- Add resources to the central server and configure access control rules.
118-
- Access these resources securely from anywhere.
116+
- Everything you get with self hosted Pangolin, but fully managed for you.
119117

120-
**Use Case Example - Bypassing Port Restrictions in Home Lab**:
121-
Imagine private sites where the ISP restricts port forwarding. By connecting these sites to Pangolin via WireGuard, you can securely expose HTTP and HTTPS resources on the private network without any networking complexity.
118+
### Hybrid & High Availability
122119

123-
**Use Case Example - Deploying Services For Your Business**:
124-
You can use Pangolin as an easy way to expose your business applications to your users behind a safe authentication portal you can integrate into your IdP solution. Expose resources on prem and on the cloud.
120+
Managed control plane, your infrastructure
125121

126-
**Use Case Example - IoT Networks**:
127-
IoT networks are often fragmented and difficult to manage. By deploying Pangolin on a central server, you can connect all your IoT sites via Newt or another WireGuard client. This creates a simple, secure, and centralized way to access IoT resources without the need for intricate networking setups.
122+
- We manage database and control plane.
123+
- You self-host lightweight exit-node.
124+
- Traffic flows through your infra.
125+
- We coordinate failover between your nodes or to Cloud when things go bad.
128126

129-
## Similar Projects and Inspirations
127+
If interested, [contact us](mailto:numbat@fossorial.io).
130128

131-
**Cloudflare Tunnels**:
132-
A similar approach to proxying private resources securely, but Pangolin is a self-hosted alternative, giving you full control over your infrastructure.
129+
### Full Enterprise On-Premises
133130

134-
**Authelia**:
135-
This inspired Pangolin’s centralized authentication system for proxies, enabling robust user and role management.
131+
[Contact us](mailto:numbat@fossorial.io) for a full distributed and enterprise deployments on your infrastructure controlled by your team.
136132

137133
## Project Development / Roadmap
138134

139-
> [!NOTE]
140-
> Pangolin is under heavy development. The roadmap is subject to change as we fix bugs, add new features, and make improvements.
141-
142-
View the [project board](https://github.com/orgs/fosrl/projects/1) for more detailed info.
135+
We want to hear your feature requests! Add them to the [discussion board](https://github.com/orgs/fosrl/discussions/categories/feature-requests).
143136

144137
## Licensing
145138

146-
Pangolin is dual licensed under the AGPL-3 and the Fossorial Commercial license. Please see the [LICENSE](./LICENSE) file in the repository for details. For inquiries about commercial licensing, please contact us at [numbat@fossorial.io](mailto:numbat@fossorial.io).
139+
Pangolin is dual licensed under the AGPL-3 and the Fossorial Commercial license. For inquiries about commercial licensing, please contact us at [numbat@fossorial.io](mailto:numbat@fossorial.io).
147140

148141
## Contributions
149142

143+
Looking for something to contribute? Take a look at issues marked with [help wanted](https://github.com/fosrl/pangolin/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22help%20wanted%22).
144+
150145
Please see [CONTRIBUTING](./CONTRIBUTING.md) in the repository for guidelines and best practices.
151146

152147
Please post bug reports and other functional issues in the [Issues](https://github.com/fosrl/pangolin/issues) section of the repository.
153-
For all feature requests, or other ideas, please use the [Discussions](https://github.com/orgs/fosrl/discussions) section.

bruno/Clients/createClient.bru

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
meta {
2+
name: createClient
3+
type: http
4+
seq: 1
5+
}
6+
7+
put {
8+
url: http://localhost:3000/api/v1/site/1/client
9+
body: json
10+
auth: none
11+
}
12+
13+
body:json {
14+
{
15+
"siteId": 1,
16+
"name": "test",
17+
"type": "olm",
18+
"subnet": "100.90.129.4/30",
19+
"olmId": "029yzunhx6nh3y5",
20+
"secret": "l0ymp075y3d4rccb25l6sqpgar52k09etunui970qq5gj7x6"
21+
}
22+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
meta {
2+
name: pickClientDefaults
3+
type: http
4+
seq: 2
5+
}
6+
7+
get {
8+
url: http://localhost:3000/api/v1/site/1/pick-client-defaults
9+
body: none
10+
auth: none
11+
}

config/config.example.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,3 @@ flags:
4646
disable_signup_without_invite: true
4747
disable_user_create_org: true
4848
allow_raw_resources: true
49-
allow_base_domain_resources: true

0 commit comments

Comments
 (0)