diff --git a/.env.example b/.env.example index 1624c6e..c0608c5 100644 --- a/.env.example +++ b/.env.example @@ -3,4 +3,7 @@ MONGO_PORT= MONGO_USERNAME= MONGO_PASSWORD= OPENROUTER_API_KEY= -SENTRY_DSN= \ No newline at end of file +SENTRY_DSN= +VIRTUAL_HOST= +LETSENCRYPT_HOST= +LETSENCRYPT_EMAIL= \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..160d605 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.12 + +RUN curl -sSL https://pdm-project.org/install-pdm.py | python3 - + +WORKDIR /app + +ADD pdm.lock /app + +RUN pdm install + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3eb44cc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,25 @@ +version: "3" + +services: + simplylab: + build: + dockerfile: Dockerfile + context: . + restart: always + command: gunicorn simplylab.main:app --workers=4 --worker-class=uvicorn.workers.UvicornWorker --bind=0.0.0.0:8000 --worker-tmp-dir /dev/shm --log-level=debug + environment: + TZ: "Asia/Shanghai" + VIRTUAL_HOST: ${VIRTUAL_HOST} + LETSENCRYPT_HOST: ${LETSENCRYPT_HOST} + LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL} + expose: + - 8000 + tty: true + stdin_open: true + networks: + - simplylab + logging: + driver: "json-file" + options: + max-size: "2m" + max-file: "10" \ No newline at end of file diff --git a/pdm.lock b/pdm.lock index bc0434c..4259ba5 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default"] strategy = ["cross_platform", "inherit_metadata"] lock_version = "4.4.1" -content_hash = "sha256:68aec295b130841c79040d9aae40daa7c15c204a7b5756850923308c9460d5b4" +content_hash = "sha256:64230f6c1194c02cb0bf18c190ac2a97d0a50add0cd0697a8c770b3ea68a7cf9" [[package]] name = "annotated-types" @@ -108,6 +108,20 @@ files = [ {file = "fastapi-0.110.0.tar.gz", hash = "sha256:266775f0dcc95af9d3ef39bad55cff525329a931d5fd51930aadd4f428bf7ff3"}, ] +[[package]] +name = "gunicorn" +version = "21.2.0" +requires_python = ">=3.5" +summary = "WSGI HTTP Server for UNIX" +groups = ["default"] +dependencies = [ + "packaging", +] +files = [ + {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, + {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, +] + [[package]] name = "h11" version = "0.14.0" @@ -212,6 +226,17 @@ files = [ {file = "openai-1.14.0.tar.gz", hash = "sha256:e287057adf0ec3315abc32ddcc968d095879abd9b68bf51c0402dab13ab5ae9b"}, ] +[[package]] +name = "packaging" +version = "24.0" +requires_python = ">=3.7" +summary = "Core utilities for Python packages" +groups = ["default"] +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + [[package]] name = "pydantic" version = "2.6.4" diff --git a/pyproject.toml b/pyproject.toml index b617b11..1ae6cfb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ dependencies = [ "motor>=3.3.2", "sentry-sdk>=1.42.0", "pydantic-mongo>=2.1.2", + "gunicorn>=21.2.0", ] requires-python = "==3.12.*" readme = "README.md"