新增
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
# 至少 10 位,且同时包含字母和数字。首次登录后仍会要求修改密码。
|
||||
WECOM_ADMIN_INITIAL_PASSWORD=ChangeThisPassword123
|
||||
|
||||
# 本机或 HTTPS 反向代理使用 127.0.0.1;局域网直连使用 0.0.0.0。
|
||||
BACKEND_BIND_IP=127.0.0.1
|
||||
BACKEND_PORT=8765
|
||||
@@ -0,0 +1,20 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1
|
||||
|
||||
RUN useradd --create-home --uid 10001 backend \
|
||||
&& mkdir -p /data \
|
||||
&& chown backend:backend /data
|
||||
|
||||
WORKDIR /app
|
||||
COPY --chown=backend:backend admin_backend.py /app/admin_backend.py
|
||||
|
||||
USER backend
|
||||
EXPOSE 8765
|
||||
VOLUME ["/data"]
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
||||
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8765/health', timeout=3)"
|
||||
|
||||
CMD ["python", "/app/admin_backend.py", "--host", "0.0.0.0", "--port", "8765", "--db", "/data/backend.db", "--runtime-file", "/tmp/backend_runtime.json"]
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!admin_backend.py
|
||||
@@ -0,0 +1,15 @@
|
||||
# 后台部署目录
|
||||
|
||||
这里是配置后台的独立部署配置。后台程序只有一个源文件:项目根目录的 `admin_backend.py`,不依赖桌面端组件,也不需要安装项目的 `requirements.txt`。
|
||||
|
||||
推荐从项目根目录执行:
|
||||
|
||||
```powershell
|
||||
Copy-Item backend_deploy\.env.example backend_deploy\.env
|
||||
notepad backend_deploy\.env
|
||||
docker compose --env-file backend_deploy/.env -f backend_deploy/compose.yaml up -d --build
|
||||
```
|
||||
|
||||
完整说明、连接方法、备份与故障排查见项目根目录的 `BACKEND_DEPLOY.md`。
|
||||
|
||||
使用宝塔面板部署时,请查看项目根目录的 `BAOTA_DEPLOY.md`。
|
||||
@@ -0,0 +1,3 @@
|
||||
# 至少 10 位,且同时包含字母和数字。首次登录后仍会要求修改密码。
|
||||
WECOM_ADMIN_INITIAL_PASSWORD=ChangeThisPassword123
|
||||
BACKEND_PORT=8765
|
||||
@@ -0,0 +1,20 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1
|
||||
|
||||
RUN useradd --create-home --uid 10001 backend \
|
||||
&& mkdir -p /data \
|
||||
&& chown backend:backend /data
|
||||
|
||||
WORKDIR /app
|
||||
COPY --chown=backend:backend admin_backend.py /app/admin_backend.py
|
||||
|
||||
USER backend
|
||||
EXPOSE 8765
|
||||
VOLUME ["/data"]
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
||||
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8765/health', timeout=3)"
|
||||
|
||||
CMD ["python", "/app/admin_backend.py", "--host", "0.0.0.0", "--port", "8765", "--db", "/data/backend.db", "--runtime-file", "/tmp/backend_runtime.json"]
|
||||
@@ -0,0 +1,18 @@
|
||||
# 企微客服配置后台 · 宝塔部署包
|
||||
|
||||
1. 将整个目录上传并解压到 `/www/wwwroot/wechat-backend`。
|
||||
2. 把 `.env.example` 复制为 `.env`,设置初始管理员强密码。
|
||||
3. 在宝塔终端进入该目录,执行:
|
||||
|
||||
```bash
|
||||
docker compose --env-file .env up -d --build
|
||||
curl http://127.0.0.1:8765/health
|
||||
```
|
||||
|
||||
4. 在宝塔创建带 SSL 的网站,将域名反向代理到 `http://127.0.0.1:8765`。
|
||||
5. 登录后台,在“桌面端版本升级”中填写最新版本号、下载地址和更新说明。
|
||||
6. 开启“强制升级”后,版本不一致的桌面端只能下载新版或退出;未开启时允许稍后继续使用。
|
||||
|
||||
首次启用强制升级前,请务必确认下载地址能从客户电脑正常打开。
|
||||
|
||||
完整步骤见项目中的 `BAOTA_DEPLOY.md`。
|
||||
@@ -0,0 +1,17 @@
|
||||
services:
|
||||
backend:
|
||||
container_name: wechat-config-backend
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
WECOM_ADMIN_INITIAL_PASSWORD: ${WECOM_ADMIN_INITIAL_PASSWORD:?请在 .env 中设置初始管理员密码}
|
||||
ports:
|
||||
- "127.0.0.1:${BACKEND_PORT:-8765}:8765"
|
||||
volumes:
|
||||
- backend-data:/data
|
||||
|
||||
volumes:
|
||||
backend-data:
|
||||
name: wechat-backend-data
|
||||
@@ -0,0 +1,33 @@
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$projectRoot = Split-Path -Parent $PSScriptRoot
|
||||
$templateRoot = Join-Path $PSScriptRoot "baota_bundle"
|
||||
$packageStage = Join-Path $PSScriptRoot ".baota-package-stage"
|
||||
$packageFile = Join-Path $PSScriptRoot "wechat-backend-baota.zip"
|
||||
$expectedStage = [System.IO.Path]::GetFullPath(
|
||||
(Join-Path $projectRoot "backend_deploy\.baota-package-stage")
|
||||
)
|
||||
|
||||
if ([System.IO.Path]::GetFullPath($packageStage) -ne $expectedStage) {
|
||||
throw "临时目录校验失败"
|
||||
}
|
||||
|
||||
if (Test-Path -LiteralPath $packageStage) {
|
||||
Remove-Item -LiteralPath $packageStage -Recurse -Force
|
||||
}
|
||||
|
||||
try {
|
||||
New-Item -ItemType Directory -Path $packageStage | Out-Null
|
||||
Copy-Item -LiteralPath (Join-Path $projectRoot "admin_backend.py") -Destination $packageStage
|
||||
Copy-Item -LiteralPath (Join-Path $templateRoot "Dockerfile") -Destination $packageStage
|
||||
Copy-Item -LiteralPath (Join-Path $templateRoot "compose.yaml") -Destination $packageStage
|
||||
Copy-Item -LiteralPath (Join-Path $templateRoot ".env.example") -Destination $packageStage
|
||||
Copy-Item -LiteralPath (Join-Path $templateRoot "README.md") -Destination $packageStage
|
||||
Compress-Archive -Path (Join-Path $packageStage "*") -DestinationPath $packageFile -Force
|
||||
Write-Output "已生成:$packageFile"
|
||||
}
|
||||
finally {
|
||||
if (Test-Path -LiteralPath $packageStage) {
|
||||
Remove-Item -LiteralPath $packageStage -Recurse -Force
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
services:
|
||||
backend:
|
||||
container_name: wechat-config-backend
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: backend_deploy/Dockerfile
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
WECOM_ADMIN_INITIAL_PASSWORD: ${WECOM_ADMIN_INITIAL_PASSWORD:?请在 backend_deploy/.env 中设置初始管理员密码}
|
||||
ports:
|
||||
- "${BACKEND_BIND_IP:-127.0.0.1}:${BACKEND_PORT:-8765}:8765"
|
||||
volumes:
|
||||
- backend-data:/data
|
||||
|
||||
volumes:
|
||||
backend-data:
|
||||
name: wechat-backend-data
|
||||
Reference in New Issue
Block a user