forked from Botanical/BotanJS
Rewrite service files for uwsgi & systemctl
This commit is contained in:
parent
a63e4751df
commit
7419c1c869
@ -1,57 +0,0 @@
|
|||||||
#!env/bin/python
|
|
||||||
|
|
||||||
import os, sys
|
|
||||||
from botanjs.config import Config as config, DEBUG
|
|
||||||
from subprocess import Popen
|
|
||||||
from botanjs.service.webapi import WebAPI
|
|
||||||
|
|
||||||
SiteRoot = os.path.abspath( "." )
|
|
||||||
|
|
||||||
# Setting the SiteRoot for config
|
|
||||||
config["Paths"]["SiteRoot"] = SiteRoot;
|
|
||||||
|
|
||||||
# Create the lock folder for celery
|
|
||||||
lockDir = os.path.join( SiteRoot, "env", "var", "run", "celery" )
|
|
||||||
|
|
||||||
os.makedirs( lockDir, exist_ok=True )
|
|
||||||
|
|
||||||
sys.path.append( os.path.abspath( "." ) )
|
|
||||||
|
|
||||||
RUNTIME_ENV = os.path.abspath( os.path.join( "env", "bin" ) )
|
|
||||||
if RUNTIME_ENV not in os.environ[ "PATH" ]:
|
|
||||||
os.environ[ "PATH" ] = RUNTIME_ENV + os.pathsep + os.environ[ "PATH" ]
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
jwork = "botanjs.service.jwork"
|
|
||||||
nodeName = "botanNode1"
|
|
||||||
|
|
||||||
celOut = open( os.path.join( config["Paths"]["Log"], jwork + "-err.log" ), "a+" )
|
|
||||||
cel = Popen(
|
|
||||||
[
|
|
||||||
"celery", "multi", "restart", nodeName
|
|
||||||
, "-A", jwork, "worker"
|
|
||||||
, "--pidfile=" + os.path.join( lockDir, jwork + ".pid" )
|
|
||||||
, "--logfile=" + os.path.join( config["Paths"]["Log"], jwork + ".log" )
|
|
||||||
, "--workdir=" + config["Paths"]["Runtime"]
|
|
||||||
, "beat", "-l", "info"
|
|
||||||
]
|
|
||||||
, stdout = celOut
|
|
||||||
, stderr = celOut
|
|
||||||
)
|
|
||||||
|
|
||||||
celOut.close()
|
|
||||||
|
|
||||||
if not DEBUG and os.fork():
|
|
||||||
import logging
|
|
||||||
logging.basicConfig(
|
|
||||||
filename = os.path.join( config["Paths"]["Log"], "access.log" )
|
|
||||||
, level = logging.DEBUG
|
|
||||||
)
|
|
||||||
sys.exit()
|
|
||||||
|
|
||||||
WebAPI(
|
|
||||||
jsCache = config["Paths"]["Cache"]
|
|
||||||
, jsRoot = config["BotanJS"]["SrcDir"]
|
|
||||||
, brokerURL = config["BotanJS"]["CeleryBroker"]
|
|
||||||
)
|
|
0
botanjs/compressor/closure.py
Executable file → Normal file
0
botanjs/compressor/closure.py
Executable file → Normal file
0
botanjs/compressor/yui.py
Executable file → Normal file
0
botanjs/compressor/yui.py
Executable file → Normal file
0
botanjs/config.py
Executable file → Normal file
0
botanjs/config.py
Executable file → Normal file
9
botanjs/service/webapi.py
Executable file → Normal file
9
botanjs/service/webapi.py
Executable file → Normal file
@ -1,11 +1,10 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask import Response
|
from flask import Response
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
from flask import request
|
from flask import request
|
||||||
from botanjs.service.jclassresv import BotanClassResolver as JCResv
|
from botanjs.service.jclassresv import BotanClassResolver as JCResv
|
||||||
from botanjs.service.jwork import app as CeleryApp, JWork
|
from botanjs.service.jwork import app as CeleryApp, JWork
|
||||||
from botanjs.config import Config, DEBUG
|
from botanjs.config import Config
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
@ -33,10 +32,8 @@ class WebAPI:
|
|||||||
self.app.add_url_rule( "/<mode>/" , view_func = lambda mode: self.api_request( mode, "zpayload" ) )
|
self.app.add_url_rule( "/<mode>/" , view_func = lambda mode: self.api_request( mode, "zpayload" ) )
|
||||||
self.app.add_url_rule( "/<mode>/<path:code>" , view_func = self.api_request )
|
self.app.add_url_rule( "/<mode>/<path:code>" , view_func = self.api_request )
|
||||||
|
|
||||||
self.app.run(
|
def run( self, *args, **kwargs ):
|
||||||
host = Config[ "Service" ][ "BindAddress" ]
|
return self.app.run( *args, **kwargs )
|
||||||
, port = int( Config[ "Service" ][ "Port" ] )
|
|
||||||
, debug = DEBUG )
|
|
||||||
|
|
||||||
def index( self ):
|
def index( self ):
|
||||||
return "Hello, this is the BotanJS Service API.", 200
|
return "Hello, this is the BotanJS Service API.", 200
|
||||||
|
22
main.py
Normal file
22
main.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#!env/bin/python
|
||||||
|
|
||||||
|
import os
|
||||||
|
from botanjs.config import Config as config, DEBUG
|
||||||
|
from subprocess import Popen
|
||||||
|
from botanjs.service.webapi import WebAPI
|
||||||
|
|
||||||
|
SiteRoot = os.path.abspath( "." )
|
||||||
|
|
||||||
|
# Setting the SiteRoot for config
|
||||||
|
config["Paths"]["SiteRoot"] = SiteRoot;
|
||||||
|
|
||||||
|
service = WebAPI(
|
||||||
|
jsCache = config["Paths"]["Cache"]
|
||||||
|
, jsRoot = config["BotanJS"]["SrcDir"]
|
||||||
|
, brokerURL = config["BotanJS"]["CeleryBroker"]
|
||||||
|
)
|
||||||
|
|
||||||
|
application = service.app
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
service.run( debug = DEBUG )
|
15
setup/celery.conf
Normal file
15
setup/celery.conf
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Absolute or relative path to the 'celery' command:
|
||||||
|
CELERY_BIN="BIN_ROOT/celery"
|
||||||
|
|
||||||
|
CELERYD_NODES="w1 w2"
|
||||||
|
CELERY_APP="botanjs.service.jwork"
|
||||||
|
|
||||||
|
# How to call manage.py
|
||||||
|
CELERYD_MULTI="multi"
|
||||||
|
|
||||||
|
# - %n will be replaced with the first part of the nodename.
|
||||||
|
# # - %I will be replaced with the current child process index
|
||||||
|
# # and is important when using the prefork pool to avoid race conditions.
|
||||||
|
CELERYD_PID_FILE="RUN_ROOT/tasks-%n.pid"
|
||||||
|
CELERYD_LOG_FILE="PROJ_ROOT/logs/tasks-%n.log"
|
||||||
|
CELERYD_LOG_LEVEL="INFO"
|
19
setup/compiler-tasks.service
Normal file
19
setup/compiler-tasks.service
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=BotanJS Compiler Tasks
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
EnvironmentFile=-ETC_ROOT/celery.conf
|
||||||
|
WorkingDirectory=PROJ_ROOT
|
||||||
|
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
|
||||||
|
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
|
||||||
|
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
|
||||||
|
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
|
||||||
|
--pidfile=${CELERYD_PID_FILE}'
|
||||||
|
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
|
||||||
|
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
|
||||||
|
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
13
setup/config
Executable file
13
setup/config
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
[[ $CONFIG ]] && return
|
||||||
|
CONFIG=1
|
||||||
|
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
SCRIPT_DIR="$( realpath "$SCRIPT_DIR" )"
|
||||||
|
PROJ_ROOT="$( cd "$SCRIPT_DIR/../" && pwd )"
|
||||||
|
ENV_ROOT="$PROJ_ROOT/env"
|
||||||
|
BIN_ROOT="$ENV_ROOT/bin"
|
||||||
|
ETC_ROOT="$ENV_ROOT/etc"
|
||||||
|
RUN_ROOT="$ENV_ROOT/run"
|
||||||
|
PYTHON="$BIN_ROOT/python3"
|
21
setup/install
Executable file
21
setup/install
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
INST_DIR=$( dirname "${BASH_SOURCE[0]}" )
|
||||||
|
source "$INST_DIR/config"
|
||||||
|
|
||||||
|
mkdir -p "$RUN_ROOT"
|
||||||
|
mkdir -p "$ETC_ROOT"
|
||||||
|
|
||||||
|
sed -e "s|PROJ_ROOT|$PROJ_ROOT|g" \
|
||||||
|
-e "s|BIN_ROOT|$BIN_ROOT|g" \
|
||||||
|
-e "s|RUN_ROOT|$RUN_ROOT|g" \
|
||||||
|
"$INST_DIR/celery.conf" > "$ETC_ROOT/celery.conf"
|
||||||
|
|
||||||
|
sed -e "s|PROJ_ROOT|$PROJ_ROOT|g" \
|
||||||
|
-e "s|ETC_ROOT|$ETC_ROOT|g" \
|
||||||
|
-e "s|RUN_AS|$RUN_AS|g" \
|
||||||
|
"$INST_DIR/compiler-tasks.service" > $HOME/.config/systemd/user/botanjs-tasks.service
|
||||||
|
|
||||||
|
systemctl --user enable botanjs-tasks.service
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user start botanjs-tasks.service
|
Loading…
Reference in New Issue
Block a user