feat: use gunicorn programmatically, make configurable

This commit is contained in:
2025-04-01 22:32:44 +02:00
parent 189ab8be1f
commit 73d1a51838
2 changed files with 17 additions and 15 deletions

View File

@@ -148,6 +148,7 @@ def main():
)
parser.add_argument("--host", default="localhost", help="Hostname of the server")
parser.add_argument("-p", "--port", type=int, default=8000, help="Port of the server")
parser.add_argument("-w", "--workers", type=int, default=4, help="Gunicorn webserver workers")
parser.add_argument(
"-vv",
"--debug",
@@ -162,7 +163,9 @@ def main():
app = create_app(config_path=os.path.abspath(args.config_file))
app.run(debug=args.debug, host=args.host, port=args.port)
else:
serve_via_gunicorn(config_file=args.config_file)
serve_via_gunicorn(
config_file=args.config_file, host=args.host, port=args.port, workers=args.workers
)
if __name__ == "__main__":

View File

@@ -7,11 +7,12 @@
import hashlib
import hmac
import os
import subprocess
import sys
import yaml
from bcrypt import checkpw
from flask import Flask, abort, current_app, request
from gunicorn.app.wsgiapp import WSGIApplication
def load_config(app: Flask, filename: str) -> None:
@@ -71,16 +72,14 @@ def get_stream_token(username: str) -> str:
return hmac.new(secret.encode(), username.encode(), hashlib.sha256).hexdigest()[:16]
def serve_via_gunicorn(config_file: str) -> None:
"""Serve the application using Gunicorn."""
subprocess.run(
[
"gunicorn",
"-w",
"4",
"-b",
"0.0.0.0:8000",
f"home_stream.wsgi:create_app('{config_file}')",
],
check=True,
)
def serve_via_gunicorn(config_file: str, host: str, port: int, workers: int) -> None:
"""Serve the application using Gunicorn programmatically."""
sys.argv = [
"gunicorn",
"-w",
str(workers),
"-b",
f"{host}:{port}",
f"home_stream.wsgi:create_app('{config_file}')",
]
WSGIApplication().run()