Skip to main content

Command Palette

Search for a command to run...

How to set up and use proxy in your server | Docker | Docker-compose | Proxy.py

Published
3 min read
How to set up and use proxy in your server | Docker | Docker-compose | Proxy.py

I wanted to run a proxy in my server, I tried everything but still failed to set it up. I tried mitmproxy, squid, and some other proxies that I forgot, yet I somehow failed in all of them.

After researching a little more I finally found a solution that works perfectly. Proxy.py

This awesome tool is written in python, has docker configurations, and HTTPS certificate generator.

So let's start.

I reckon that you are already on your server's terminal, you have git and python3-virtualenv installed.

git clone https://github.com/abhinavsingh/proxy.py.git
cd proxy.py
python3 -m venv env
. env/bin/activate
pip install -r requirements.txt

So if you run all commands so far, you should be good.

Now, this is where we do a little customization. In proxy.py docs, they are building and running containers through docker engine, but we will create our own docker-compose file for more comfort.

if you don't have already installed docker and docker-compose please follow these links:

for docker: docker/download

for docker-compose (ubuntu): linuxize/docker-compose

Let's dig in.

create a file called docker-compose.yml in our cloned directory (proxy.py)

nano docker-compose.yml

paste this context

version: "3"

services:
  proxy:
    build: .
    container_name: custom-proxy
    ports:
      - "8899:8899"
    restart: always

if you have an entry for hosts file you can use extra-hosts

here is sample

services:
  proxy:
    build: .
    container_name: custom-proxy
    ports:
      - "8899:8899"
    restart: always
    extra_hosts:
      - "example.com:1.2.3.4"

Let me break these lines for you

proxy is just the name of the service

build is where our Dockerfile is located (yes it's in the current directory!)

container_name is not necessary, I just did it because I like it that way

ports: we expose the ports to the public (proxy.py default is 8899)

restart: always is simply saying start running container again if an error occurs

That's that.

Now that we have our docker-compose file we can update and run our containers more easily! Run the following command to build and get your container up.

sudo docker-compose build

when this command finishes you'll have something like this

...
Step 14/15 : ENTRYPOINT [ "proxy" ]
 ---> Using cache
 ---> a18dd7a78abb
Step 15/15 : CMD [ "--hostname=0.0.0.0" ]
 ---> Using cache
 ---> 012db77b2da2
Successfully built 012db77b2da2
Successfully tagged proxypy_proxy:latest

to get you container up and running

sudo docker-compose up

note: add -d parameter at the end to run in the background

Creating exbir-proxy ... done
Attaching to exbir-proxy
exbir-proxy | 2020-12-04 18:43:35,267 - pid:1 [I] load_plugins:334 - Loaded plugin proxy.http.proxy.HttpProxyPlugin
exbir-proxy | 2020-12-04 18:43:35,268 - pid:1 [I] listen:113 - Listening on 0.0.0.0:8899
exbir-proxy | 2020-12-04 18:43:35,277 - pid:1 [I] start_workers:136 - Started 2 workers

CONGRATULATIONS! your proxy works in your server on port 8899!

At this point, I have a little bonus for you. If you have your own customizations too, to make docker-compose controls easier, go ahead and make temporary alias for yourself.

alias dd="sudo docker-compose down -v && sudo docker-compose build && sudo docker-compose up -d"

You can add it to your .bashrc (or other shells) file if you want to make it permanent.

Please ask me any questions related to this post!

A

This is a good guide but in case you wanted to use Docker, they have started releasing official images too. Hence the steps you just mentioned can be skipped.

More from this blog

mirkenan's blog

6 posts