Add option to specify port (#192)
This commit is contained in:
parent
2be20745f1
commit
22deb9eb1b
@ -15,6 +15,9 @@ class Config(Base):
|
|||||||
# The username.
|
# The username.
|
||||||
username: Optional[str] = None
|
username: Optional[str] = None
|
||||||
|
|
||||||
|
# The frontend port.
|
||||||
|
port: str = constants.FRONTEND_PORT
|
||||||
|
|
||||||
# The backend API url.
|
# The backend API url.
|
||||||
api_url: str = constants.API_URL
|
api_url: str = constants.API_URL
|
||||||
|
|
||||||
|
@ -57,6 +57,8 @@ PCVERSION_APP_FILE = os.path.join(WEB_DIR, "pcversion.txt")
|
|||||||
|
|
||||||
|
|
||||||
# Commands to run the app.
|
# Commands to run the app.
|
||||||
|
# The frontend default port.
|
||||||
|
FRONTEND_PORT = "3000"
|
||||||
# The backend api url.
|
# The backend api url.
|
||||||
API_URL = "http://localhost:8000"
|
API_URL = "http://localhost:8000"
|
||||||
# The default path where bun is installed.
|
# The default path where bun is installed.
|
||||||
@ -68,7 +70,7 @@ BACKEND_HOST = "0.0.0.0"
|
|||||||
# The default timeout when launching the gunicorn server.
|
# The default timeout when launching the gunicorn server.
|
||||||
TIMEOUT = 120
|
TIMEOUT = 120
|
||||||
# The command to run the backend in production mode.
|
# The command to run the backend in production mode.
|
||||||
RUN_BACKEND_PROD = f"gunicorn --worker-class uvicorn.workers.UvicornH11Worker --bind 0.0.0.0:8000 --preload --timeout {TIMEOUT} --log-level critical".split()
|
RUN_BACKEND_PROD = f"gunicorn --worker-class uvicorn.workers.UvicornH11Worker --preload --timeout {TIMEOUT} --log-level critical".split()
|
||||||
|
|
||||||
# Compiler variables.
|
# Compiler variables.
|
||||||
# The extension for compiled Javascript files.
|
# The extension for compiled Javascript files.
|
||||||
|
@ -14,6 +14,7 @@ import string
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import uvicorn
|
import uvicorn
|
||||||
|
from urllib.parse import urlparse
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from subprocess import PIPE
|
from subprocess import PIPE
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
@ -500,7 +501,10 @@ def run_frontend(app: App):
|
|||||||
|
|
||||||
# Run the frontend in development mode.
|
# Run the frontend in development mode.
|
||||||
console.rule("[bold green]App Running")
|
console.rule("[bold green]App Running")
|
||||||
subprocess.Popen([get_package_manager(), "run", "dev"], cwd=constants.WEB_DIR)
|
os.environ["PORT"] = get_config().port
|
||||||
|
subprocess.Popen(
|
||||||
|
[get_package_manager(), "run", "dev"], cwd=constants.WEB_DIR, env=os.environ
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def run_frontend_prod(app: App):
|
def run_frontend_prod(app: App):
|
||||||
@ -515,8 +519,12 @@ def run_frontend_prod(app: App):
|
|||||||
# Export the app.
|
# Export the app.
|
||||||
export_app(app)
|
export_app(app)
|
||||||
|
|
||||||
|
os.environ["PORT"] = get_config().port
|
||||||
|
|
||||||
# Run the frontend in production mode.
|
# Run the frontend in production mode.
|
||||||
subprocess.Popen([get_package_manager(), "run", "prod"], cwd=constants.WEB_DIR)
|
subprocess.Popen(
|
||||||
|
[get_package_manager(), "run", "prod"], cwd=constants.WEB_DIR, env=os.environ
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_num_workers() -> int:
|
def get_num_workers() -> int:
|
||||||
@ -533,6 +541,19 @@ def get_num_workers() -> int:
|
|||||||
return (os.cpu_count() or 1) * 2 + 1
|
return (os.cpu_count() or 1) * 2 + 1
|
||||||
|
|
||||||
|
|
||||||
|
def get_api_port() -> int:
|
||||||
|
"""Get the API port.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The API port.
|
||||||
|
"""
|
||||||
|
port = urlparse(get_config().api_url).port
|
||||||
|
if port is None:
|
||||||
|
port = urlparse(constants.API_URL).port
|
||||||
|
assert port is not None
|
||||||
|
return port
|
||||||
|
|
||||||
|
|
||||||
def run_backend(app_name: str, loglevel: constants.LogLevel = constants.LogLevel.ERROR):
|
def run_backend(app_name: str, loglevel: constants.LogLevel = constants.LogLevel.ERROR):
|
||||||
"""Run the backend.
|
"""Run the backend.
|
||||||
|
|
||||||
@ -543,6 +564,7 @@ def run_backend(app_name: str, loglevel: constants.LogLevel = constants.LogLevel
|
|||||||
uvicorn.run(
|
uvicorn.run(
|
||||||
f"{app_name}:{constants.APP_VAR}.{constants.API_VAR}",
|
f"{app_name}:{constants.APP_VAR}.{constants.API_VAR}",
|
||||||
host=constants.BACKEND_HOST,
|
host=constants.BACKEND_HOST,
|
||||||
|
port=get_api_port(),
|
||||||
log_level=loglevel,
|
log_level=loglevel,
|
||||||
reload=True,
|
reload=True,
|
||||||
)
|
)
|
||||||
@ -559,6 +581,8 @@ def run_backend_prod(
|
|||||||
"""
|
"""
|
||||||
num_workers = get_num_workers()
|
num_workers = get_num_workers()
|
||||||
command = constants.RUN_BACKEND_PROD + [
|
command = constants.RUN_BACKEND_PROD + [
|
||||||
|
"--bind",
|
||||||
|
f"0.0.0.0:{get_api_port()}",
|
||||||
"--workers",
|
"--workers",
|
||||||
str(num_workers),
|
str(num_workers),
|
||||||
"--threads",
|
"--threads",
|
||||||
|
Loading…
Reference in New Issue
Block a user