Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/romnn/proxybootstrap
A simple python wrapper script for bootstrapping a reverse proxy inside a docker container.
https://github.com/romnn/proxybootstrap
ci cors dev-proxy frontend helper proxy python python-wrapper-script reverse-proxy web-development
Last synced: about 1 month ago
JSON representation
A simple python wrapper script for bootstrapping a reverse proxy inside a docker container.
- Host: GitHub
- URL: https://github.com/romnn/proxybootstrap
- Owner: romnn
- License: mit
- Created: 2019-11-23T17:32:01.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-03-20T15:32:40.000Z (9 months ago)
- Last Synced: 2024-11-15T03:57:30.960Z (about 1 month ago)
- Topics: ci, cors, dev-proxy, frontend, helper, proxy, python, python-wrapper-script, reverse-proxy, web-development
- Language: Python
- Homepage:
- Size: 98.6 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## CORS reverse development proxy
[![Build Status](https://github.com/romnn/proxybootstrap/workflows/test/badge.svg)](https://github.com/romnn/proxybootstrap/actions)
[![PyPI License](https://img.shields.io/pypi/l/proxybootstrap)](https://pypi.org/project/proxybootstrap/)
[![PyPI Version](https://img.shields.io/pypi/v/proxybootstrap)](https://pypi.org/project/proxybootstrap/)
[![PyPI Python versions](https://img.shields.io/pypi/pyversions/proxybootstrap)](https://pypi.org/project/proxybootstrap/)A simple yet extensible python wrapper script for templating a proxy `nginx` configuration
that functions as host mapped reverse proxy container.#### Why and when to use?
Modern browsers enforce CORS policy and [won't let you](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) make requests
from your frontend running on `localhost:8080` to your backend at
`localhost:4000`. To solve this problem, start a proxy at `localhost:5000`
(or any other spare port) and proxy requests based on paths:
- `localhost:5000/api` and `localhost:5000/buy` will be routed to the backend `localhost:4000`
- `localhost:5000/` will be routed to the frontend `localhost:8080`#### Installation and usage
```bash
pip install proxybootstrap # using pip
```
**Note**: You will need `docker` for running the proxy containerStart the proxy server with your configuration
```bash
proxybootstrap \
--port 5000 \
/api@http://127.0.0.1:4000 /buy@http://127.0.0.1:4000 /@http://127.0.0.1:8080
```#### Customization
| Option | Description | Default
| ----------------------|:--------------------------------------------------|---------
| `locations` | service locations to proxy. | None
| `-c` / `-config` | `nginx` config template file | `./config/default.conf`
| `--port` | listening port for the reverse proxy | 5000
| `--verbose` | enable verbose output | `False`
| `--sync` | force synchronous communication with the proxy | `False`
| `--tag` | docker tag for the reverse proxy container | dev/cors-reverse-proxy
| `--dockerfile` | dockerfile for building the container | `./Dockerfile`Under the hood, configuration options are applied to the `--config` template
file and rendered using `jinja2`. If you wish, you can pass additional arguments and use
them in the config template.
Example:
```bash
proxybootstrap \
-my_var1 Test1 \
--my_var2 Test2 \
--port 5000 \
/@http://127.0.0.1:8080
```
can be accessed in a template with
```
{{ my_var1 }}
{{ my_var2 }}
```#### Alternatives
- Write a custom proxy configuration for `nginx` or other proxy servers like
`trafik`, `envoy` or `haproxy`
- When using webpack or another popular tool there might be some plugins like
[devserver-proxy](https://cli.vuejs.org/config/#devserver-proxy) for [vuejs](https://vuejs.org)
- Mess around with headers to allow specific CORS requests#### Development
If you do not have `pipx` and `pipenv`, install with
```bash
python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install pipenv
```Install all dependencies with
```bash
pipenv install --dev
```To format, sort imports and check PEP8 conformity, run
```bash
pipenv run black .
pipenv run isort
pipenv run flake8
```
(These are also configured as a git pre commit hook)#### Notice
This configuration is very minimal and intended for development use only.