chore: 部署、启动参数模板
parent
c3d2ab56a9
commit
30f477550a
@ -0,0 +1,19 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.venv
|
||||||
|
__pycache__
|
||||||
|
*.py[cod]
|
||||||
|
.pytest_cache
|
||||||
|
.mypy_cache
|
||||||
|
.ruff_cache
|
||||||
|
*.egg-info
|
||||||
|
build
|
||||||
|
dist
|
||||||
|
runtime
|
||||||
|
logs
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
*.db
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
APP_ENV=prod
|
||||||
|
APP_PORT=8000
|
||||||
|
|
||||||
|
MYSQL_HOST=host.docker.internal
|
||||||
|
MYSQL_PORT=3306
|
||||||
|
MYSQL_ROOT_PASSWORD=root-password
|
||||||
|
MYSQL_DATABASE=app
|
||||||
|
MYSQL_USER=app
|
||||||
|
MYSQL_PASSWORD=change-me
|
||||||
|
|
||||||
|
SECRET_KEY=change-me
|
||||||
|
JWT_SECRET_KEY=change-me
|
||||||
|
LOG_FILE_ENABLED=true
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "{{ project_name }}: FastAPI",
|
||||||
|
"type": "debugpy",
|
||||||
|
"request": "launch",
|
||||||
|
"module": "uvicorn",
|
||||||
|
"args": [
|
||||||
|
"main:app",
|
||||||
|
"--reload",
|
||||||
|
"--host",
|
||||||
|
"127.0.0.1",
|
||||||
|
"--port",
|
||||||
|
"8000"
|
||||||
|
],
|
||||||
|
"cwd": "${workspaceFolder}",
|
||||||
|
"env": {
|
||||||
|
"APP_ENV": "dev",
|
||||||
|
"APP_ENV_DIR": "${workspaceFolder}"
|
||||||
|
},
|
||||||
|
"jinja": true,
|
||||||
|
"justMyCode": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||||
|
PYTHONUNBUFFERED=1 \
|
||||||
|
UV_LINK_MODE=copy \
|
||||||
|
UV_COMPILE_BYTECODE=1
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends curl git \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
RUN pip install --no-cache-dir uv \
|
||||||
|
&& if [ -f uv.lock ]; then \
|
||||||
|
uv sync --frozen --no-dev; \
|
||||||
|
else \
|
||||||
|
uv sync --no-dev; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
|
||||||
|
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
@ -1 +1,3 @@
|
|||||||
"""{{ project_name }} package."""
|
from .app_factory import create_app
|
||||||
|
|
||||||
|
__all__ = ["create_app"]
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from iti import create_app as create_framework_app
|
||||||
|
{% if include_system %}
|
||||||
|
from iti_system import create_system_module
|
||||||
|
{% endif %}
|
||||||
|
from config import config
|
||||||
|
from app.modules.example.module import ExampleModule
|
||||||
|
|
||||||
|
|
||||||
|
def create_app(config_name: str | None = None, config_overrides: dict | None = None):
|
||||||
|
config_name = config_name or os.getenv("APP_ENV", "dev")
|
||||||
|
modules = [ExampleModule()]
|
||||||
|
{% if include_system %}
|
||||||
|
modules.append(create_system_module())
|
||||||
|
{% endif %}
|
||||||
|
app = create_framework_app(
|
||||||
|
config_name=config_name,
|
||||||
|
config_mapping=config,
|
||||||
|
modules=modules,
|
||||||
|
)
|
||||||
|
if config_overrides:
|
||||||
|
for key, value in config_overrides.items():
|
||||||
|
setattr(app.state.config, key.lower(), value)
|
||||||
|
return app
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
services:
|
||||||
|
app:
|
||||||
|
environment:
|
||||||
|
MYSQL_HOST: db
|
||||||
|
MYSQL_PORT: 3306
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: mysql:8.4
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root-password}
|
||||||
|
MYSQL_DATABASE: ${MYSQL_DATABASE:-app}
|
||||||
|
MYSQL_USER: ${MYSQL_USER:-app}
|
||||||
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-change-me}
|
||||||
|
command:
|
||||||
|
- --character-set-server=utf8mb4
|
||||||
|
- --collation-server=utf8mb4_unicode_ci
|
||||||
|
ports:
|
||||||
|
- "${MYSQL_PORT:-3306}:3306"
|
||||||
|
volumes:
|
||||||
|
- mysql-data:/var/lib/mysql
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u$${MYSQL_USER} -p$${MYSQL_PASSWORD} --silent"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mysql-data:
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
image: {{ project_slug | replace('_', '-') }}:local
|
||||||
|
environment:
|
||||||
|
APP_ENV: ${APP_ENV:-prod}
|
||||||
|
SECRET_KEY: ${SECRET_KEY:-change-me}
|
||||||
|
JWT_SECRET_KEY: ${JWT_SECRET_KEY:-change-me}
|
||||||
|
MYSQL_HOST: ${MYSQL_HOST:-host.docker.internal}
|
||||||
|
MYSQL_PORT: ${MYSQL_PORT:-3306}
|
||||||
|
MYSQL_DATABASE: ${MYSQL_DATABASE:-app}
|
||||||
|
MYSQL_USER: ${MYSQL_USER:-app}
|
||||||
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-change-me}
|
||||||
|
LOG_FILE_ENABLED: ${LOG_FILE_ENABLED:-true}
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
ports:
|
||||||
|
- "${APP_PORT:-8000}:8000"
|
||||||
|
volumes:
|
||||||
|
- ./runtime:/app/runtime
|
||||||
|
command: >
|
||||||
|
sh -c "{% if include_system %}uv run iti-system migrations sync --target migrations/versions &&
|
||||||
|
{% endif %}uv run alembic -c migrations/alembic.ini upgrade head &&
|
||||||
|
{% if include_system %}PYTHONPATH=. uv run iti-system seed system app:create_app &&
|
||||||
|
{% endif %}uv run uvicorn main:app --host 0.0.0.0 --port 8000"
|
||||||
@ -1,22 +1,4 @@
|
|||||||
import os
|
from app import create_app
|
||||||
|
|
||||||
from iti import create_app
|
|
||||||
{% if include_system %}from iti_system import create_system_module
|
|
||||||
|
|
||||||
{% endif -%}
|
app = create_app()
|
||||||
from config import config
|
|
||||||
from app.modules.example.module import ExampleModule
|
|
||||||
|
|
||||||
|
|
||||||
modules = [
|
|
||||||
ExampleModule(),
|
|
||||||
{% if include_system %} create_system_module(),
|
|
||||||
{% endif -%}
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
app = create_app(
|
|
||||||
config_name=os.getenv("APP_ENV", os.getenv("ITI_ENV", "dev")),
|
|
||||||
config_mapping=config,
|
|
||||||
modules=modules,
|
|
||||||
)
|
|
||||||
|
|||||||
Loading…
Reference in New Issue