Commit 0f4af2e8 authored by wenwen.tang's avatar wenwen.tang 😕

feat(deploy): 部署改为服务器 Git 同步,Dockerfile 适配仓库根上下文

- deploy/Dockerfile:构建上下文由 app/ 布局改为**仓库根**布局
  · COPY rentos/ web/ assets/ templates/ build_notices.py
  · 新增 COPY tools/:服务器无 Python 3(yum 仅 3.6.8),台账迁移只能在容器内跑
  · wecom-cli 改为从仓库内 cli-linux-x64.tgz 解压,不再依赖未入库的 wecom/x/
- .dockerignore:新增。构建上下文变为仓库根,需裁剪 .git / data / output /
  samples / tools/shots* 等无关内容
- tools/deploy_git.py:新增 Git 同步部署脚本(setup / sync / pull / build / run /
  status / logs)。凭据经 SFTP 直写服务器 ~/.git-credentials(600),不经命令行;
  容器与验证逻辑复用 deploy_docker.py
parent 6538a8b7
Pipeline #834 canceled with stages
# ============================================================
# 构建上下文 = 仓库根,排除与镜像无关的内容以缩短构建时间
# 注意:deploy/wheels/ 与 deploy/wecom/ 是构建**必需**材料,切勿排除
# ============================================================
# 版本控制与工作区元数据
.git
.gitignore
.gitattributes
.workbuddy
# Python 缓存
__pycache__
**/__pycache__
*.pyc
*.pyo
# 运行期数据与产物(容器内由 volume 挂载,不进镜像)
data
output
uploads
logs
# 调研 / 样张 / 构建暂存,镜像不需要
samples
deploy/_stage
tools/shots
tools/shots2
tools/shots3
tools/shots4
tools/shots5
tools/shots6
*.bak
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# 租金通知系统 —— 云端镜像 # 租金通知系统 —— 云端镜像
# 底座用服务器本地已有的 python:3.11.3-slim(离线可用,无需拉取) # ---------------------------------------------------------------
# 依赖全部以 wheel 形式随包带入(openpyxl / reportlab / pillow / charset-normalizer); # 构建上下文 = **仓库根**(git 工作副本),路径直接取自仓库结构。
# wecom-cli 用官方 Linux 二进制随包带入。构建期不联网。 # 这样服务器只需 `git pull` 即可获得完整构建材料:
# deploy/wheels/ 离线 wheel(openpyxl / reportlab / pillow / charset-normalizer)
# deploy/wecom/*.tgz 企业微信官方 Linux CLI
# assets/fonts/simhei.ttf 中文字体(PDF 出单必需)
# 底座 python:3.11.3-slim 为服务器本地已有镜像,构建期零联网。
# ---------------------------------------------------------------
FROM python:3.11.3-slim FROM python:3.11.3-slim
ENV PYTHONUNBUFFERED=1 \ ENV PYTHONUNBUFFERED=1 \
...@@ -15,38 +20,45 @@ WORKDIR /app ...@@ -15,38 +20,45 @@ WORKDIR /app
# ---- 1. 离线安装运行期依赖 ---- # ---- 1. 离线安装运行期依赖 ----
# openpyxl 台账 / 批次数据导出 xlsx # openpyxl 台账 / 批次数据导出 xlsx
# reportlab + pillow 收费通知书直接绘制 PDF(2026-10-12 起统一 PDF,不再依赖 Office) # reportlab + pillow 收费通知书直接绘制 PDF(2026-10-12 起统一 PDF,不依赖 Office)
# charset-normalizer reportlab 的依赖 # charset-normalizer reportlab 的依赖
# 全部为 cp311 / py3 的 manylinux2014 wheel,apt 无新增(pillow wheel 自带图像库) # 全部为 cp311 / py3 的 manylinux wheel,apt 无新增(pillow wheel 自带图像库)
COPY wheels/ /wheels/ COPY deploy/wheels/ /wheels/
RUN pip install --no-index --find-links=/wheels \ RUN pip install --no-index --find-links=/wheels \
openpyxl reportlab pillow charset-normalizer \ openpyxl reportlab pillow charset-normalizer \
&& rm -rf /wheels && rm -rf /wheels
# ---- 2. 企业微信官方 CLI(Linux 静态二进制,@wecom/cli-linux-x64 1.3.4) ---- # ---- 2. 企业微信官方 CLI(Linux 静态二进制,@wecom/cli-linux-x64 1.3.4)----
# 放到 PATH 上,rentos/wecom.py 的 shutil.which("wecom-cli") 即可命中,无需改代码。 # 从仓库内 tgz 解压(包结构 package/bin/wecom-cli),落到 PATH 上即可被
# rentos/wecom.py 的 shutil.which("wecom-cli") 命中,无需改代码。
# 凭据**不打进镜像**,运行时由 /opt/rentos/wecom-config 挂到 /root/.config/wecom。 # 凭据**不打进镜像**,运行时由 /opt/rentos/wecom-config 挂到 /root/.config/wecom。
COPY wecom/wecom-cli /usr/local/bin/wecom-cli COPY deploy/wecom/cli-linux-x64.tgz /tmp/wecom.tgz
RUN chmod 755 /usr/local/bin/wecom-cli \ RUN tar xzf /tmp/wecom.tgz -C /tmp \
&& mv /tmp/package/bin/wecom-cli /usr/local/bin/wecom-cli \
&& chmod 755 /usr/local/bin/wecom-cli \
&& rm -rf /tmp/package /tmp/wecom.tgz \
&& /usr/local/bin/wecom-cli --version && /usr/local/bin/wecom-cli --version
# ---- 3. 应用代码 ---- # ---- 3. 应用代码(仓库根布局)----
COPY app/rentos/ /app/rentos/ COPY rentos/ /app/rentos/
COPY app/build_notices.py /app/build_notices.py COPY build_notices.py /app/build_notices.py
COPY app/web/ /app/web/ COPY web/ /app/web/
COPY app/assets/ /app/assets/ COPY assets/ /app/assets/
COPY app/templates/ /app/templates/ COPY templates/ /app/templates/
# 维护脚本随镜像带上:服务器无 Python 3(yum 仅 3.6.8,项目需 3.7+),
# 台账迁移 / 数据核对只能在容器内执行。
COPY tools/ /app/tools/
# ---- 3b. 构建期自检:中文字体随包带上 + PDF 渲染链可用 ---- # ---- 3b. 构建期自检:中文字体随包带上 + PDF 渲染链可用 ----
# simhei.ttf 是 asset 的一部分(约 9.7MB),缺失时会回落到 CID 字体、中文有缺字风险, # simhei.ttf 缺失时会回落到 CID 字体、中文有缺字风险;这里直接注册一次,
# 这里直接注册一次,构建失败即暴露问题,不要等到线上出单才发现。 # 构建失败即暴露问题,不要等到线上出单才发现。
RUN test -s /app/assets/fonts/simhei.ttf \ RUN test -s /app/assets/fonts/simhei.ttf \
&& python -c "from reportlab.pdfbase import pdfmetrics; \ && python -c "from reportlab.pdfbase import pdfmetrics; \
from reportlab.pdfbase.ttfonts import TTFont; \ from reportlab.pdfbase.ttfonts import TTFont; \
pdfmetrics.registerFont(TTFont('simhei','/app/assets/fonts/simhei.ttf')); \ pdfmetrics.registerFont(TTFont('simhei','/app/assets/fonts/simhei.ttf')); \
import PIL, reportlab; print('PDF 渲染链 OK: reportlab', reportlab.Version, '/ pillow', PIL.__version__)" import PIL, reportlab; print('PDF 渲染链 OK: reportlab', reportlab.Version, '/ pillow', PIL.__version__)"
# ---- 4. 运行期目录(实际由 volume 覆盖,此处保证镜像可独立运行) ---- # ---- 4. 运行期目录(实际由 volume 覆盖,此处保证镜像可独立运行)----
RUN mkdir -p /app/data /app/output /app/logs /app/uploads /app/output/exports \ RUN mkdir -p /app/data /app/output /app/logs /app/uploads /app/output/exports \
/root/.config/wecom /root/.config/wecom
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment