feat: enhance deployment and proxy support

- Updated README to include detailed production deployment steps using uWSGI and Caddy for better performance and scalability.
- Added setup instructions for local development.
- Integrated ProxyFix middleware in the app to handle headers from reverse proxies, improving compatibility with various proxy setups.

Addresses better production readiness and proxy configuration.
This commit is contained in:
Kumi 2024-09-26 07:44:10 +02:00
parent ceb49bc114
commit c67746ea89
Signed by: kumi
GPG key ID: ECBCC9082395383F
2 changed files with 76 additions and 0 deletions

View file

@ -32,6 +32,8 @@ Small is an alternative frontend for Medium articles, built with Flask. It allow
## Usage ## Usage
### Local / Development
1. Start the Flask development server: 1. Start the Flask development server:
``` ```
small small
@ -45,6 +47,72 @@ Small is an alternative frontend for Medium articles, built with Flask. It allow
- Original URL: `https://medium.com/@username/article-title-123abc` - Original URL: `https://medium.com/@username/article-title-123abc`
- Small URL: `http://localhost:5000/@username/article-title-123abc` - Small URL: `http://localhost:5000/@username/article-title-123abc`
### Production
For production use, it is recommended to deploy Small using a WSGI server like uWSGI, and behind a reverse proxy like Caddy.
This is a basic guide to deploy Small using uWSGI and Caddy.
1. Clone the repository:
```
git clone https://git.private.coffee/PrivateCoffee/small.git
cd small
```
2. Create a virtual environment and activate it:
```
python -m venv venv
source venv/bin/activate
```
3. Install the package:
```
pip install .
```
4. Install uWSGI:
```
pip install uwsgi
```
5. Create a `small.ini` file with the following content (adjust as needed):
```
[uwsgi]
module = small.app:app
uid = small
gid = small
master = true
processes = 5
plugins = python3
virtualenv = /srv/small/venv/
chdir = /srv/small/
http-socket = /tmp/small.sock
chown-socket = caddy
```
6. Start the uWSGI server (consider using a process manager like `systemd`):
```
uwsgi --ini small.ini
```
7. Configure Caddy to reverse proxy requests to the uWSGI server:
```
small.example.com {
reverse_proxy unix//tmp/small.sock
}
```
#### Proxy Fix
If you are using a reverse proxy like Nginx, and it is setting the `X-Forwarded-Host` header instead of passing the `Host` header, you can use the `ProxyFix` middleware to fix the issue. To enable it, simply set the `PROXY_FIX` environment variable to `1`.
For uWSGI, you can add the following line to the `small.ini` file:
```
env = PROXY_FIX=1
```
## Contributing ## Contributing

View file

@ -1,4 +1,5 @@
from flask import Flask from flask import Flask
from werkzeug.middleware.proxy_fix import ProxyFix
from os import environ from os import environ
@ -14,6 +15,13 @@ app.register_blueprint(proxy.bp)
def main(): def main():
port = int(environ.get("PORT", 8115)) port = int(environ.get("PORT", 8115))
if int(environ.get("DEBUG", 0)):
app.debug = True
if int(environ.get("PROXY_FIX", 0)):
app.wsgi_app = ProxyFix(app.wsgi_app)
app.run(port=port) app.run(port=port)