| | FROM python:3.11-slim |
| |
|
| | |
| | ENV PYTHONDONTWRITEBYTECODE=1 \ |
| | PYTHONUNBUFFERED=1 \ |
| | PIP_NO_CACHE_DIR=1 \ |
| | DEBIAN_FRONTEND=noninteractive |
| |
|
| | WORKDIR /app |
| |
|
| | |
| | RUN apt-get update \ |
| | && apt-get install -y --no-install-recommends build-essential \ |
| | && rm -rf /var/lib/apt/lists/* |
| |
|
| | |
| | COPY . /app |
| |
|
| | |
| | |
| | RUN python - <<'PY' |
| | import os, shutil |
| | root = "/app" |
| | for name in list(os.listdir(root)): |
| | p = os.path.join(root, name) |
| | if os.path.isfile(p) and ":" in name: |
| | dst = os.path.join(root, name.replace(":", "/")) |
| | os.makedirs(os.path.dirname(dst), exist_ok=True) |
| | shutil.move(p, dst) |
| | PY |
| |
|
| | |
| | RUN bash -lc '\ |
| | set -euo pipefail; \ |
| | if [ -f backend/requirements.txt ]; then \ |
| | pip install --no-cache-dir -r backend/requirements.txt; \ |
| | elif [ -f requirements.txt ]; then \ |
| | pip install --no-cache-dir -r requirements.txt; \ |
| | else \ |
| | echo "[info] requirements.txt が無いため最小依存を直接インストールします"; \ |
| | pip install --no-cache-dir \ |
| | fastapi==0.112.0 \ |
| | uvicorn[standard]==0.30.6 \ |
| | pydantic==2.8.2 \ |
| | python-dotenv==1.0.1 \ |
| | httpx==0.27.0 \ |
| | openai==1.50.0; \ |
| | fi' |
| |
|
| | |
| | RUN bash -lc '\ |
| | set -euo pipefail; \ |
| | if [ -f /app/app.py ]; then \ |
| | echo "[warn] /app/app.py を _app_legacy.py へリネームしてモジュール衝突を回避します"; \ |
| | mv /app/app.py /app/_app_legacy.py; \ |
| | fi' |
| |
|
| | |
| | RUN bash -lc '\ |
| | set -euo pipefail; \ |
| | if [ -d /app/backend/app ]; then \ |
| | rm -rf /app/app && mv /app/backend/app /app/app; \ |
| | fi' |
| |
|
| | |
| | RUN bash -lc '\ |
| | set -e; \ |
| | if [ ! -f /app/app/main.py ]; then \ |
| | echo "[error] Missing /app/app/main.py(FastAPI エントリが見つかりません)"; \ |
| | echo "----- /app tree -----"; \ |
| | ls -R /app || true; \ |
| | exit 1; \ |
| | fi' |
| |
|
| | |
| | EXPOSE 8000 |
| | CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] |
| |
|