Make Your Local Service Public over Internet with FRP

This is a NO-BS guide on how to make any of your locally running services publicly available on internet. Let's get straight at it.
Often you just want to expose a local service like:
- localhost:3000 // running some website
- localhost:3001 // running some service
to the public internet so friends or other devs can access it.
Normally this means:
- Docker
- Reverse proxie setup (caddy,nginx etc)
- VPS setup (install deps, configure etc)
FRP (Fast Reverse Proxy) removes all that.
Repo: github
Why FRP ?
No docker
No docker-compose setup
No reverse Proxy setup (caddy, nginx)
Setup in Two steps:
Run frps on your vps (vps has a public ip)
Run frpc on client, your local machine
That's it! your local server becomes available at: http://[your-vps-ip]:[remotePort]
Here's a quick step-by-step guide to do it.
Let's assume: There is some web-app/service running on: localhost:3000 & localhost:3001
- Install frp on both vps & your local machine: https://github.com/fatedier/frp/releases/tag/v0.66.0
- you can choose the latest release
- enter this in your terminal:
wget https://github.com/fatedier/frp/releases/download/v0.66.0/frp_0.66.0_linux_amd64.tar.gz
tar -xzf frp_0.66.0_linux_amd64.tar.gz
cd frp_0.66.0_linux_amd64
You'll see these files in the directory:
frpc
frpc.toml
frps
frps.toml
LICENSE
On your vps:
[Optinal]
- check if firewall is enabled:
sudo ufw status
- if ufw is enabled allow required ports:
sudo ufw allow 7000
sudo ufw allow 8081
sudo ufw allow 8082
- If UFW is not enabled, you can skip this step.
(Note: 7000 is the FRP control port; 8081 / 8082 are the public ports exposed by FRP.)
edit the frps config, for example:
bindPort = 7000
auth.token="meow"
- `auth.token` is a secret string that your local-machine & vps share for auth.
- `bindPort` is the port with which the client (frpc) will communicate
- start the frps by entering this cmd in terminal:
On local machine:
start any service, let's say a website is running on port: 3000
edit the frpc.toml config file:
serverAddr = "<your-vps-ip>"
serverPort = 7000
auth.token="meow"
[[proxies]]
name = "web-app-1"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000
remotePort = 8081
[[proxies]]
name = "web-app-2"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3001
remotePort = 8082
start the frp client on you local machine
./frpc -c frpc.toml
!! Security notes (important)
- These ports are public
- Anyone can access them
- Use strong tokens
- Do not expose sensitive services without proper security
---
Yup -- That's it, your services are online & publicly accessible, you can check them here: http://[your-vps-ip]:[remotePort]
FRP supports many more features like custom domains,
TLS, encryption, security,load balancing, and much more.
This guide only covers a basic quickstart — be sure to read the official FRP README for advanced setups.
Published at
2026-01-17 13:29:55 UTCEvent JSON
{
"id": "2871fe12d44ac6c7e8f56bd68e86a13d211e8b1a5d356c05e52b2dab354835bb",
"pubkey": "b70562c435de7aa21b376b72b7c60271957af1d170051cdd801ba45841af5e56",
"created_at": 1768656595,
"kind": 30023,
"tags": [
[
"client",
"YakiHonne",
"31990:20986fb83e775d96d188ca5c9df10ce6d613e0eb7e5768a0f0b12b37cdac21b3:1700732875747"
],
[
"d",
"074c4b6d38972dfb"
],
[
"image",
""
],
[
"title",
"Make Your Local Service Public over Internet with FRP"
],
[
"summary",
"A NO-BS guide on how to make any of your locally running services publically available on internet."
],
[
"published_at",
"1768656595"
]
],
"content": "\n\nThis is a ***NO-BS*** guide on how to make any of your locally running services publicly available on internet. Let's get straight at it.\n\nOften you just want to expose a local service like: \n - localhost:3000 // running some website\n - localhost:3001 // running some service\nto the public internet so friends or other devs can access it.\n\nNormally this means:\n- Docker\n- Reverse proxie setup (caddy,nginx etc)\n- VPS setup (install deps, configure etc)\n\n\n**FRP** (Fast Reverse Proxy) removes all that.\nRepo: [github]( https://github.com/fatedier/frp/)\n\n## Why FRP ?\n- No docker\n- No docker-compose setup\n- No reverse Proxy setup (caddy, nginx)\n## Setup in Two steps:\n- Run frps on your vps (vps has a public ip)\n- Run frpc on client, your local machine\n\nThat's it! your local server becomes available at: ` http://[your-vps-ip]:[remotePort]`\n\n---\n\n## Here's a quick step-by-step guide to do it.\nLet's assume: There is some web-app/service running on: localhost:3000 \u0026 localhost:3001\n\n1. Install frp on both vps \u0026 your local machine: https://github.com/fatedier/frp/releases/tag/v0.66.0\n - you can choose the latest release\n - enter this in your terminal:\n```bash\nwget https://github.com/fatedier/frp/releases/download/v0.66.0/frp_0.66.0_linux_amd64.tar.gz\ntar -xzf frp_0.66.0_linux_amd64.tar.gz\ncd frp_0.66.0_linux_amd64\n```\n\n\n2. You'll see these files in the directory:\n - `frpc` \n - `frpc.toml` \n - `frps`\n - `frps.toml` \n - `LICENSE`\n\n3. On your vps:\n - [Optinal] \n - check if firewall is enabled: `sudo ufw status`\n - if ufw is enabled allow required ports: \n sudo ufw allow 7000\n sudo ufw allow 8081\n sudo ufw allow 8082\n - If UFW is not enabled, you can skip this step.\n\n - (Note: 7000 is the FRP control port; 8081 / 8082 are the public ports exposed by FRP.)\n - edit the frps config, for example:\n ```toml\n bindPort = 7000\n auth.token=\"meow\"\n ```\n - `auth.token` is a secret string that your local-machine \u0026 vps share for auth.\n - `bindPort` is the port with which the client (frpc) will communicate \n - start the frps by entering this cmd in terminal:\n - `./frps -c frps.toml`\n\n4. On local machine:\n - start any service, let's say a website is running on port: 3000\n - edit the frpc.toml config file:\n ```toml\n serverAddr = \"\u003cyour-vps-ip\u003e\"\n serverPort = 7000\n auth.token=\"meow\"\n\n [[proxies]]\n name = \"web-app-1\"\n type = \"tcp\"\n localIP = \"127.0.0.1\"\n localPort = 3000\n remotePort = 8081\n\n [[proxies]]\n name = \"web-app-2\"\n type = \"tcp\"\n localIP = \"127.0.0.1\"\n localPort = 3001\n remotePort = 8082\n ``` \n - \n - start the frp client on you local machine\n - ./frpc -c frpc.toml\n### !! Security notes (important)\n- These ports are public\n- Anyone can access them\n- Use strong tokens\n- Do not expose sensitive services without proper security\n---\n\n\nYup -- That's it, your services are online \u0026 publicly accessible, you can check them here: ` http://[your-vps-ip]:[remotePort]`\n\nFRP supports many more features like custom domains, \nTLS, encryption, security,load balancing, and much more.\n\nThis guide only covers a basic quickstart — be sure to read the official FRP README for advanced setups.",
"sig": "585ec06ae671df8aa0a5983b61021f2b73ef9e4396f177ba120429fed4789c4b8100a25070425513acfcadfd7e3b054bd5a17af8815e47e2a98ff026b949b74d"
}