FROM python:3.11-slim # 設定工作目錄 WORKDIR /app # 安裝系統依賴 (包含 PostgreSQL 客戶端庫 + Chrome/Selenium 依賴) # 注意:Debian Trixie 已移除 libgconf-2-4,改用 libglib2.0-0 RUN apt-get update && apt-get install -y \ gcc \ g++ \ curl \ libpq-dev \ postgresql-client \ # Chrome/Selenium 依賴 wget \ gnupg \ unzip \ libnss3 \ libglib2.0-0 \ libfontconfig1 \ libx11-xcb1 \ libasound2t64 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libcups2 \ libdrm2 \ libgbm1 \ libgtk-3-0 \ libxcomposite1 \ libxdamage1 \ libxrandr2 \ xdg-utils \ fonts-liberation \ fonts-noto-cjk \ fonts-noto-cjk-extra \ libreoffice-impress \ openssh-client \ libappindicator3-1 || true \ && rm -rf /var/lib/apt/lists/* # 安裝 Chrome (使用新版 GPG 金鑰管理方式,apt-key 已被移除) RUN mkdir -p /etc/apt/keyrings \ && wget -q -O /etc/apt/keyrings/google-chrome.asc https://dl.google.com/linux/linux_signing_key.pub \ && echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.asc] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \ && apt-get update \ && apt-get install -y google-chrome-stable \ && rm -rf /var/lib/apt/lists/* # 複製 requirements COPY requirements.txt . # 安裝 Python 依賴 RUN pip install --no-cache-dir -r requirements.txt # 複製應用程式 COPY . . # 建立必要的目錄 RUN mkdir -p data logs backups # 確保 components symlink 正確(根目錄頁面需要此路徑) RUN rm -rf /app/components && ln -sf /app/templates/components /app/components # 設定環境變數 ENV PYTHONUNBUFFERED=1 ENV FLASK_APP=app.py # 暴露端口(容器內 app 綁 80,docker-compose / k8s 對外映射依環境而定) EXPOSE 80 # 啟動應用(production 用 gunicorn;preload + post_fork DB pool reset 見 gunicorn.conf.py) CMD ["gunicorn", "--config", "gunicorn.conf.py", "app:app"]