mirror of
https://github.com/EDeev/tablo.git
synced 2026-10-07 20:49:31 +03:00
Docker: образ с Chromium для экспорта, compose вместе с PostgreSQL
- Dockerfile на python:3.12-slim с Playwright/Chromium, миграции при старте, gunicorn, непривилегированный пользователь; - compose.yaml: приложение + PostgreSQL 16 с томом и проверкой готовности; - .env.example переписан: SECRET_KEY, ИИ-провайдер, DATABASE_URL или DB_*; - .gitignore.
This commit is contained in:
parent
ac8859d9d3
commit
b7de6912db
5 changed files with 82 additions and 14 deletions
10
.dockerignore
Normal file
10
.dockerignore
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
.git
|
||||||
|
.github
|
||||||
|
**/__pycache__
|
||||||
|
.venv
|
||||||
|
venv
|
||||||
|
.env
|
||||||
|
tests
|
||||||
|
docs
|
||||||
|
*.md
|
||||||
|
*.pdf
|
||||||
26
.env.example
26
.env.example
|
|
@ -1,17 +1,15 @@
|
||||||
# ── OpenAI API ──────────────────────────────────────────────────
|
# Flask: длинная случайная строка, без неё приложение не запустится
|
||||||
|
SECRET_KEY=
|
||||||
|
|
||||||
|
# ИИ-провайдер с OpenAI-совместимым API (распознавание фото и генерация трекеров)
|
||||||
OPENAI_API_KEY=
|
OPENAI_API_KEY=
|
||||||
OPENAI_BASE_URL=
|
# OPENAI_BASE_URL=https://api.openai.com/v1
|
||||||
OPENAI_MODEL=
|
OPENAI_MODEL=gpt-4o
|
||||||
|
|
||||||
# ── PostgreSQL ─────────────────────────────────────────────────
|
# PostgreSQL: либо DATABASE_URL целиком, либо DB_* по отдельности
|
||||||
|
# DATABASE_URL=postgresql://tablo:tablo@localhost:5432/tablo
|
||||||
DB_HOST=
|
DB_HOST=localhost
|
||||||
DB_PORT=
|
DB_PORT=5432
|
||||||
DB_NAME=
|
DB_NAME=tablo
|
||||||
DB_USER=
|
DB_USER=tablo
|
||||||
DB_PASSWORD=
|
DB_PASSWORD=tablo
|
||||||
|
|
||||||
# ── Переменные окружения ───────────────────────────────────────
|
|
||||||
|
|
||||||
PYTHONDONTWRITEBYTECODE=1
|
|
||||||
|
|
|
||||||
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
.env
|
||||||
|
.pytest_cache/
|
||||||
|
.ruff_cache/
|
||||||
20
Dockerfile
Normal file
20
Dockerfile
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||||
|
PYTHONUNBUFFERED=1 \
|
||||||
|
FLASK_APP=run.py \
|
||||||
|
PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt \
|
||||||
|
&& playwright install --with-deps chromium \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
RUN useradd --create-home --uid 1000 app && chown -R app:app /app
|
||||||
|
USER app
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
CMD ["sh", "-c", "flask db upgrade && gunicorn run:app --bind 0.0.0.0:8000 --workers 2 --timeout 120 --access-logfile -"]
|
||||||
33
compose.yaml
Normal file
33
compose.yaml
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: tablo
|
||||||
|
POSTGRES_PASSWORD: ${DB_PASSWORD:-tablo}
|
||||||
|
POSTGRES_DB: tablo
|
||||||
|
volumes:
|
||||||
|
- pgdata:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U tablo"]
|
||||||
|
interval: 5s
|
||||||
|
retries: 10
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
web:
|
||||||
|
build: .
|
||||||
|
image: ghcr.io/edeev/tablo:latest
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
env_file:
|
||||||
|
- path: .env
|
||||||
|
required: false
|
||||||
|
environment:
|
||||||
|
SECRET_KEY: ${SECRET_KEY:-change-me-to-a-long-random-string}
|
||||||
|
DATABASE_URL: postgresql://tablo:${DB_PASSWORD:-tablo}@db:5432/tablo
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
pgdata:
|
||||||
Loading…
Add table
Reference in a new issue