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 clone https://github.com/abhinavsingh/proxy.py.git
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)
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
here is sample
services: proxy: build: . container_name: custom-proxy ports: - "8899:8899" restart: always extra_hosts: - "example.com:188.8.131.52"
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
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!