Add option to specify port (#192)

This commit is contained in:
pysqz 2023-01-01 01:41:48 +08:00 committed by GitHub
parent 2be20745f1
commit 22deb9eb1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 3 deletions

View File

@ -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

View File

@ -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.

View File

@ -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",