updated prod deployment to gunicorn
This commit is contained in:
parent
6e61d54c68
commit
4c36f19794
93
flake.nix
93
flake.nix
|
@ -10,20 +10,83 @@
|
||||||
pkgs = import nixpkgs { system = "x86_64-linux"; };
|
pkgs = import nixpkgs { system = "x86_64-linux"; };
|
||||||
lib = pkgs.lib;
|
lib = pkgs.lib;
|
||||||
types = lib.types;
|
types = lib.types;
|
||||||
|
deps = [
|
||||||
|
pkgs.python3
|
||||||
|
pkgs.python3Packages.flask
|
||||||
|
pkgs.python3Packages.flask-socketio
|
||||||
|
pkgs.python3Packages.requests
|
||||||
|
pkgs.python3Packages.gunicorn
|
||||||
|
pkgs.python3Packages.eventlet
|
||||||
|
];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
packages.x86_64-linux.default = pkgs.python3Packages.buildPythonApplication rec {
|
packages.x86_64-linux.default = pkgs.python3Packages.buildPythonPackage rec {
|
||||||
pname = "ozai-webui";
|
pname = "ozai-webui";
|
||||||
version = "0.1.1";
|
version = "0.1.1";
|
||||||
propagatedBuildInputs = [ pkgs.python3Packages.flask pkgs.python3Packages.flask-socketio pkgs.python3Packages.requests ];
|
#propagatedBuildInputs = deps;
|
||||||
|
dependencies = deps;
|
||||||
src = ./src;
|
src = ./src;
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mkdir -p $out/share/ozai-webui
|
mkdir -p $out/share/ozai_webui/static
|
||||||
cp -r static $out/share/ozai-webui/static
|
mkdir -p $out/share/ozai_webui/templates
|
||||||
cp -r templates $out/share/ozai-webui/templates
|
install -Dm444 ${src}/static/* $out/share/ozai_webui/static/
|
||||||
mv $out/bin/main.py $out/bin/ozai-webui
|
install -Dm444 ${src}/templates/* $out/share/ozai_webui/templates/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
packages.x86_64-linux.ozai-webui-run = pkgs.stdenv.mkDerivation rec {
|
||||||
|
pname = "ozai-webui-run";
|
||||||
|
version = "0.1.1";
|
||||||
|
src = ./src;
|
||||||
|
|
||||||
|
pythonEnv = pkgs.python3.withPackages (ps: with ps; [
|
||||||
|
flask
|
||||||
|
flask-socketio
|
||||||
|
requests
|
||||||
|
gunicorn
|
||||||
|
eventlet
|
||||||
|
]);
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.bash
|
||||||
|
pythonEnv
|
||||||
|
];
|
||||||
|
|
||||||
|
propagatedBuildInputs = buildInputs;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.makeWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp $src/run.sh $out/bin/run
|
||||||
|
chmod +x $out/bin/run
|
||||||
|
wrapProgram $out/bin/run \
|
||||||
|
--prefix PATH : ${lib.makeBinPath buildInputs}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
devShells.x86_64-linux.default = pkgs.mkShell {
|
||||||
|
buildInputs = deps;
|
||||||
|
shellHook = ''
|
||||||
|
OZAI_WEBUI_STATIC_FOLDER=result/share/ozai-webui/static
|
||||||
|
OZAI_WEBUI_TEMPLATE_FOLDER=result/share/ozai-webui/templates
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,11 +108,6 @@
|
||||||
default = "http://localhost:8000/api/";
|
default = "http://localhost:8000/api/";
|
||||||
description = "The URL of the Ozai server";
|
description = "The URL of the Ozai server";
|
||||||
};
|
};
|
||||||
secretKey = lib.mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "secret_key";
|
|
||||||
description = "The secret key for the Flask app";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf config.services.ozai-webui.enable {
|
config = lib.mkIf config.services.ozai-webui.enable {
|
||||||
|
@ -57,8 +115,17 @@
|
||||||
description = "Ozai WebUI server";
|
description = "Ozai WebUI server";
|
||||||
after = [ "network.target" ];
|
after = [ "network.target" ];
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
environment = {
|
||||||
|
OZAI_URL= "${config.services.ozai-webui.ozaiUrl}";
|
||||||
|
OZAI_WEBUI_HOST= "${config.services.ozai-webui.host}";
|
||||||
|
OZAI_WEBUI_PORT= toString(config.services.ozai-webui.port);
|
||||||
|
OZAI_WEBUI_STATIC_FOLDER= "${self.packages.x86_64-linux.default}/share/ozai-webui/static";
|
||||||
|
OZAI_WEBUI_TEMPLATE_FOLDER="${self.packages.x86_64-linux.default}/share/ozai-webui/templates";
|
||||||
|
};
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${self.packages.x86_64-linux.default}/bin/ozai-webui --port ${toString config.services.ozai-webui.port} --host '${config.services.ozai-webui.host}' --ozai_url '${config.services.ozai-webui.ozaiUrl}' --secret_key '${config.services.ozai-webui.secretKey}' --static_folder '${self.packages.x86_64-linux.default}/share/ozai-webui/static' --template_folder '${self.packages.x86_64-linux.default}/share/ozai-webui/templates'";
|
#ExecStart = "${self.packages.x86_64-linux.ozai-webui-run}/bin/run ${config.services.ozai-webui.host} ${toString(config.services.ozai-webui.port)} ${self.packages.x86_64-linux.default}/bin";
|
||||||
|
ExecStart = "${self.packages.x86_64-linux.ozai-webui-run}/bin/run ${config.services.ozai-webui.host} ${toString(config.services.ozai-webui.port)} ${self.packages.x86_64-linux.default}/lib/python3.11/site-packages/";
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/y0qplxs953g27lij0rzlrb764wqxj495-ozai-webui-run-0.1.1
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/v1f53kxj21mfchmnzxhf32val7hv8v9a-python3.11-ozai-webui-0.1.1
|
|
@ -2,18 +2,15 @@
|
||||||
from flask import Flask, render_template, request
|
from flask import Flask, render_template, request
|
||||||
from flask_socketio import SocketIO, join_room
|
from flask_socketio import SocketIO, join_room
|
||||||
import requests
|
import requests
|
||||||
import argparse
|
#import argparse
|
||||||
import os
|
import os
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
socketio = SocketIO(app)
|
|
||||||
|
|
||||||
ozai_url = 'http://localhost:8000/api/'
|
ozai_url = 'http://localhost:8000/api/'
|
||||||
ozai_webui_host = '0.0.0.0'
|
ozai_webui_host = '0.0.0.0'
|
||||||
ozai_webui_port = 5000
|
ozai_webui_port = 5000
|
||||||
app.config['SECRET_KEY'] = "secret"
|
static_folder = '../../../../share/ozai_webui/static'
|
||||||
static_folder = 'static'
|
template_folder = '../../../../share/ozai_webui/templates'
|
||||||
template_folder = 'templates'
|
|
||||||
|
|
||||||
#check if the environment variables are set
|
#check if the environment variables are set
|
||||||
if os.getenv('OZAI_URL') is not None:
|
if os.getenv('OZAI_URL') is not None:
|
||||||
|
@ -29,31 +26,42 @@ if os.getenv('OZAI_WEBUI_STATIC_FOLDER') is not None:
|
||||||
if os.getenv('OZAI_WEBUI_TEMPLATE_FOLDER') is not None:
|
if os.getenv('OZAI_WEBUI_TEMPLATE_FOLDER') is not None:
|
||||||
template_folder = os.getenv('TEMPLATE_FOLDER')
|
template_folder = os.getenv('TEMPLATE_FOLDER')
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Run the Ozai WebUI server")
|
|
||||||
|
|
||||||
parser.add_argument('-H', '--host', type=str, default=ozai_webui_host, help='The host to run the server on')
|
print(f"using host { ozai_webui_host }")
|
||||||
parser.add_argument('-P', '--port', type=int, default=ozai_webui_port, help='The port to run the server on')
|
print(f"using port { ozai_webui_port }")
|
||||||
parser.add_argument('-O', '--ozai_url', type=str, default=ozai_url, help='The URL of the Ozai server')
|
print(f"using ozai url { ozai_url }")
|
||||||
parser.add_argument('-S', '--secret_key', type=str, default=app.config['SECRET_KEY'], help='The secret key for the Flask app')
|
print(f"using template folder { template_folder }")
|
||||||
parser.add_argument('--static_folder', type=str, default=static_folder, help='The location of the static folder')
|
print(f"using static folder { static_folder }")
|
||||||
parser.add_argument('--template_folder', type=str, default=template_folder, help='The location of the template folder')
|
|
||||||
|
|
||||||
|
app = Flask(__name__,template_folder=template_folder,static_folder=static_folder )
|
||||||
|
socketio = SocketIO(app)
|
||||||
|
app.config['SECRET_KEY'] = "secret"
|
||||||
|
|
||||||
args = parser.parse_args()
|
#parser = argparse.ArgumentParser(description="Run the Ozai WebUI server")
|
||||||
|
#
|
||||||
if args.host:
|
#parser.add_argument('-H', '--host', type=str, default=ozai_webui_host, help='The host to run the server on')
|
||||||
ozai_webui_host = args.host
|
#parser.add_argument('-P', '--port', type=int, default=ozai_webui_port, help='The port to run the server on')
|
||||||
if args.port:
|
#parser.add_argument('-O', '--ozai_url', type=str, default=ozai_url, help='The URL of the Ozai server')
|
||||||
ozai_webui_port = args.port
|
#parser.add_argument('-S', '--secret_key', type=str, default=app.config['SECRET_KEY'], help='The secret key for the Flask app')
|
||||||
if args.ozai_url:
|
#parser.add_argument('--static_folder', type=str, default=static_folder, help='The location of the static folder')
|
||||||
ozai_url = args.ozai_url
|
#parser.add_argument('--template_folder', type=str, default=template_folder, help='The location of the template folder')
|
||||||
if args.secret_key:
|
#
|
||||||
app.config['SECRET_KEY'] = args.secret_key
|
#
|
||||||
if args.static_folder:
|
#args = parser.parse_args()
|
||||||
app.static_folder = args.static_folder
|
#
|
||||||
if args.template_folder:
|
#if args.host:
|
||||||
app.template_folder = args.template_folder
|
# ozai_webui_host = args.host
|
||||||
|
#if args.port:
|
||||||
|
# ozai_webui_port = args.port
|
||||||
|
#if args.ozai_url:
|
||||||
|
# ozai_url = args.ozai_url
|
||||||
|
#if args.secret_key:
|
||||||
|
# app.config['SECRET_KEY'] = args.secret_key
|
||||||
|
#if args.static_folder:
|
||||||
|
# app.static_folder = args.static_folder
|
||||||
|
#if args.template_folder:
|
||||||
|
# app.template_folder = args.template_folder
|
||||||
|
#
|
||||||
|
|
||||||
#home page
|
#home page
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
|
@ -210,7 +218,9 @@ def ws_message(data):
|
||||||
#send message to the player that the move was invalid
|
#send message to the player that the move was invalid
|
||||||
socketio.emit('move_status', response.text, room=game_id)
|
socketio.emit('move_status', response.text, room=game_id)
|
||||||
|
|
||||||
|
def main ():
|
||||||
|
# app.run(debug=True, host='0.0.0.0', port=5000,ssl_context='adhoc')
|
||||||
|
return socketio.run(app, debug=False, host=ozai_webui_host, port=ozai_webui_port, allow_unsafe_werkzeug=True)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# app.run(debug=True, host='0.0.0.0', port=5000,ssl_context='adhoc')
|
main()
|
||||||
socketio.run(app, debug=False, host=ozai_webui_host, port=ozai_webui_port, allow_unsafe_werkzeug=True)
|
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/ldv1rcfs9phhh7hh2wzcvn2600dvgw4y-python3.11-ozai-webui-0.1.1
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Default values for host, port, and package path
|
||||||
|
DEFAULT_HOST="0.0.0.0"
|
||||||
|
DEFAULT_PORT="8000"
|
||||||
|
DEFAULT_PACKAGE_PATH="ozai_webui"
|
||||||
|
|
||||||
|
# Get the host, port, and package path from command line arguments, or use defaults
|
||||||
|
HOST="${1:-$DEFAULT_HOST}"
|
||||||
|
PORT="${2:-$DEFAULT_PORT}"
|
||||||
|
PACKAGE_PATH="${3:-$DEFAULT_PACKAGE_PATH}"
|
||||||
|
|
||||||
|
# Run Gunicorn with the specified host, port, and package path
|
||||||
|
#gunicorn -w 1 --chdir "$PACKAGE_PATH" --bind "$HOST:$PORT" __init__:main
|
||||||
|
gunicorn --worker-class eventlet -w 1 --chdir "$PACKAGE_PATH" --bind "$HOST:$PORT" ozai_webui:app
|
||||||
|
|
13
src/setup.py
13
src/setup.py
|
@ -6,6 +6,8 @@ requires = (
|
||||||
"flask",
|
"flask",
|
||||||
"flask-socketio",
|
"flask-socketio",
|
||||||
"requests",
|
"requests",
|
||||||
|
"gunicorn",
|
||||||
|
"eventlet",
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,9 +19,16 @@ setup(
|
||||||
name='ozai-webui',
|
name='ozai-webui',
|
||||||
version='0.1.1',
|
version='0.1.1',
|
||||||
author = "Adrian Gunnar Lauterer",
|
author = "Adrian Gunnar Lauterer",
|
||||||
packages=find_packages(),
|
packages=find_packages("."),
|
||||||
scripts=["main.py"],
|
#scripts=["ozai_webui.py"],
|
||||||
|
#scripts={"ozai_webui:main": "ozai_webui"},
|
||||||
|
entry_points = {
|
||||||
|
"console_scripts": [
|
||||||
|
"ozai_webui = ozai_webui:main"
|
||||||
|
]
|
||||||
|
},
|
||||||
install_requires=requires,
|
install_requires=requires,
|
||||||
|
#package_dir= {'':'src'},
|
||||||
package_data={
|
package_data={
|
||||||
'': ['templates/*.html', 'static/*.*'],
|
'': ['templates/*.html', 'static/*.*'],
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue