add production WSGI

This commit is contained in:
Yannik Schmidt
2020-02-24 10:44:10 +01:00
parent 3498668763
commit 919d358b53
3 changed files with 26 additions and 1 deletions

View File

@@ -6,6 +6,23 @@ The config file uses *COMMA* as a separator, lines are comments if they start wi
PROJECT,TOKEN,PATH_TO_SCRIPT PROJECT,TOKEN,PATH_TO_SCRIPT
# Running standalone with flask-inbuild server
usage: webhook_listener.py [-h] [-i INTERFACE] [-p PORT] [-c C]
Simple Webhook listener
optional arguments:
-h, --help show this help message and exit
-i INTERFACE, --interface INTERFACE
Interface to listen on (default: 0.0.0.0)
-p PORT, --port PORT Port to listen on (default: 5000)
-c C Config for handling of webhooks (default:
webhook.config)
# Running with waitress (WSGI)
waitress-serve --host 127.0.0.1 --port 5000 --call 'app:createApp'
# Running behind NGINX for SSL # Running behind NGINX for SSL
You can (and should) run this tool behind a reverse proxy handling SSL. I recommend nginx with this configuration. Note the *proxy_next_upstream*-directive which tells nginx, that it should only report a timeout as bad gateway, since the backend will respond with certain error codes to ease debugging. You can (and should) run this tool behind a reverse proxy handling SSL. I recommend nginx with this configuration. Note the *proxy_next_upstream*-directive which tells nginx, that it should only report a timeout as bad gateway, since the backend will respond with certain error codes to ease debugging.

3
app.py Normal file
View File

@@ -0,0 +1,3 @@
import webhook_listener as server
def createApp(envivorment=None, start_response=None):
return server.app

View File

@@ -7,6 +7,7 @@ import os
import subprocess import subprocess
app = flask.Flask("webhook-listener") app = flask.Flask("webhook-listener")
app.config["EXEC_CONFIG"] = "webhook.config"
TOKEN_HEADER = "X-Gitlab-Token" TOKEN_HEADER = "X-Gitlab-Token"
PROJECT_IDENTIFIER = "web_url" PROJECT_IDENTIFIER = "web_url"
SEPERATOR = "," SEPERATOR = ","
@@ -85,6 +86,10 @@ def readExecutionConfig(configFile):
projectIdent, token, scriptName = line.split(SEPERATOR) projectIdent, token, scriptName = line.split(SEPERATOR)
config.update({projectIdent:(token, scriptName)}) config.update({projectIdent:(token, scriptName)})
@app.before_first_request
def init():
readExecutionConfig(app.config["EXEC_CONFIG"])
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Simple Webhook listener", \ parser = argparse.ArgumentParser(description="Simple Webhook listener", \
@@ -95,5 +100,5 @@ if __name__ == "__main__":
parser.add_argument("-c", default="webhook.config", help="Config for handling of webhooks") parser.add_argument("-c", default="webhook.config", help="Config for handling of webhooks")
args = parser.parse_args() args = parser.parse_args()
readExecutionConfig(args.c) app.config["EXEC_CONFIG"] = args.c
app.run(host=args.interface, port=args.port) app.run(host=args.interface, port=args.port)