Add production Dockerfile for backend deployment
This commit is contained in:
13
backend/.dockerignore
Normal file
13
backend/.dockerignore
Normal file
@@ -0,0 +1,13 @@
|
||||
.git
|
||||
.gitignore
|
||||
.venv
|
||||
__pycache__
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
.pytest_cache
|
||||
.ruff_cache
|
||||
tests
|
||||
.env
|
||||
.env.development
|
||||
*.log
|
||||
19
backend/Dockerfile
Normal file
19
backend/Dockerfile
Normal file
@@ -0,0 +1,19 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install runtime dependencies from local package metadata.
|
||||
COPY pyproject.toml /app/pyproject.toml
|
||||
COPY app /app/app
|
||||
COPY scripts /app/scripts
|
||||
COPY README.md /app/README.md
|
||||
|
||||
RUN pip install --no-cache-dir --upgrade pip && \
|
||||
pip install --no-cache-dir .
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
@@ -12,6 +12,29 @@ psql "$DATABASE_URL" -f scripts/init_schema.sql
|
||||
./scripts/start_dev.sh
|
||||
```
|
||||
|
||||
## Docker (VPS / Production)
|
||||
|
||||
Build image:
|
||||
```bash
|
||||
cd backend
|
||||
docker build -t memberapi-backend:latest .
|
||||
```
|
||||
|
||||
Run container:
|
||||
```bash
|
||||
docker run -d \
|
||||
--name memberapi-backend \
|
||||
--restart unless-stopped \
|
||||
-p 127.0.0.1:8000:8000 \
|
||||
--env-file .env \
|
||||
memberapi-backend:latest
|
||||
```
|
||||
|
||||
Health check:
|
||||
```bash
|
||||
curl http://127.0.0.1:8000/healthz
|
||||
```
|
||||
|
||||
## Keycloak env
|
||||
|
||||
- Required:
|
||||
|
||||
@@ -87,3 +87,7 @@ npm run dev
|
||||
1. 建立 `api_client`。
|
||||
2. 用 `X-Client-Key` + `X-API-Key` 呼叫 `/internal/*`。
|
||||
3. 驗證未授權 key 會被拒絕。
|
||||
|
||||
## 8) VPS Docker 啟動(Backend)
|
||||
- Dockerfile: [backend/Dockerfile](../backend/Dockerfile)
|
||||
- 建置與啟動指令:參考 [backend/README.md](../backend/README.md) 的 `Docker (VPS / Production)` 章節。
|
||||
|
||||
Reference in New Issue
Block a user