# 只打包「游客在线客服聊天框」 # 前端:官方 Chatwoot production 镜像(构建期已 assets:precompile / Vite 编译) # 运行:RAILS_ENV=production,不跑 development / vite / pnpm / bundle install # # 对照:https://github.com/chatwoot/chatwoot/blob/v4.16.2/docker-compose.production.yaml # https://github.com/chatwoot/chatwoot/blob/v4.16.2/docker/Dockerfile FROM chatwoot/chatwoot:v4.16.2 USER root # 确认生产静态资源已存在(官方镜像 precompile 产物) RUN test -d /app/public/assets \ && test -d /app/public/vite/assets \ && test "$(ls -A /app/public/vite/assets 2>/dev/null | wc -l)" -gt 0 \ && echo "[ok] Chatwoot production frontend assets present" RUN apk add --no-cache python3 py3-pip py3-virtualenv WORKDIR /opt/guest-cs RUN python3 -m venv /opt/guest-cs/.venv ENV PATH="/opt/guest-cs/.venv/bin:$PATH" COPY flask/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY flask/ . COPY start-chat.sh /usr/local/bin/start-chat.sh RUN chmod +x /usr/local/bin/start-chat.sh \ && mkdir -p /app/storage \ && sed -i 's/\r$//' /usr/local/bin/start-chat.sh # 与 docker-compose.production.yaml 对齐;聊天框经 7788 代理 widget ENV RAILS_ENV=production \ NODE_ENV=production \ INSTALLATION_ENV=docker \ RAILS_SERVE_STATIC_FILES=true \ BUNDLE_WITHOUT=development:test \ EXECJS_RUNTIME=Disabled \ APP_HOST=0.0.0.0 \ APP_PORT=7788 \ APP_DEBUG=false \ CHATWOOT_GUEST_PROXY_TARGET=http://127.0.0.1:3000 \ CHATWOOT_GUEST_API_BASE=http://127.0.0.1:3000 \ CHATWOOT_GUEST_BASE_URL=http://127.0.0.1:7788/cw # 对外产品口是 7788(聊天框);3000 仅容器内给 widget API EXPOSE 7788 WORKDIR /app ENTRYPOINT ["/usr/local/bin/start-chat.sh"]