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!