# Expose local Port - > frp-demonstration

Reference → [https://github.com/REZ-OAN/frp](https://github.com/REZ-OAN/frp)

# Step-1 Go on your vm or bm

Goto your server

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled.png)

# Step-2 Download release and Extract It (on vm or bm)

Download the latest release from the github repo

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(1).png)

Select the one which meet your system architecture

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(2).png)

Now hover on the file and `right click` on it select the `copy link address`

Now `goto` the `terminal` where you `ssh` to the server

go to preferred folder where you want to download the release

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(3).png)

Now using `wget` download the release

```bash
wget https://github.com/REZ-OAN/frp/releases/download/v0.57.0/frp_0.57.0_linux_amd64.tar.gz
```

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(4).png)

In this directory you will see like this

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(5).png)

Now extract the `.tar.gz` file

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(6).png)

Now `goto`   `frp_0.57.0_linux_amd64/` this folder

This files will be there

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(7).png)

# Step-3 Running frp-server  ( on vm or bm)

Now edit the `frps.toml` because we will run the `frp-server` on our `vm` or `bm` 

We need to specify a `port` on our `vm` or `bm` on which the `frp-server`will listen to

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(8).png)

Using `nano` edit the `bindPort` if you want to 

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(9).png)

I have edited the port number

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(10).png)

Now run the server 

```bash
./frps -c ./frps.toml
```

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(11).png)

# Step-4 Running our codeserver-python (on local machine)

First need to pull the image from the docker.hub

```bash
docker pull poridhi/codeserver-python:v1.2
```

Now, run this and copy the image id to run the image

```bash
docker images
```

Run using below command

```bash
docker run -it -p 5000:8080 b25217878034
```

Your terminal will look like this

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(12).png)

# Step-5 Running frp-client (on our local machine)

Firstly do every thing in done in the **Step-2 ,** after doing all of those things 

Edit the `frpc.toml` 

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(13).png)

Here, `serverAddr` refers to the server from where you locally running service will be **exposed**

And `serverPort` refers to the port where the`frp-server` is listening

And `localPort` refers to the port in which our service is **running**

And `remotePort` refers to the `port`in the `remoteServer` in which our service will be **exposed** to 

Edit the `serverPort` to `4848` and `localPort` to `5000` and set `remotePort` to  `7050` using `nano`

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(14).png)

Now run the `frp-client` 

```bash
./frpc -c ./frpc.toml
```

# Step-6 create tunnel on cloudflare and then expose the port

Go to cloudflare dashboard select the `Zero Trust`

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(15).png)

Then open networks drop down and select the tunnels 

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(16).png)

Now click on `create tunnel` 

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(17).png)

Select the recommended connector

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(18).png)

Then click on `next`  and then give a name i choose `test-frp`

Now choose connector environment , i have chosen `docker` 

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(19).png)

Now copy the connector `command` and run it on `detach` mode on your `server` ( in our case 103.174.50.21)

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(20).png)

Now select the domain  and subdomain , and the url server `ip_address:remotePort` 

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(21).png)

Now hit the URL `test-frp.poridhi.io/?folder=/app/`  will see

![Untitled](https://github.com/REZ-OAN/frp/blob/frp-demonstration-with-cloudflare/demonstrated_images/Untitled%20(22).png)