部署:push origin 就由开发机编好、测过再传到服务器,服务器不再自己编,push 后一两分钟上线。照 OJ2 的做法,开发机上的 gitea-runner(和 OJ2 共用,标签 iot-deploy,一次只跑一个任务)跑 .gitea/workflows/deploy.yml:编 C# 运行时(Release)、网页和 server.js,跑服务端测试(用要上线的 Release 版运行时)、网页端测试和类型检查,产物 rsync 到服务器的 prebuilt/(按内容比、传完才换上、断了重试),服务器上 deploy/update.sh --prebuilt 用现成产物构建镜像,只剩几条 COPY。以前 GitHub 上测试约 5 分钟、服务器 2 核再编约一分钟(编的时候学生程序会卡),push 后 6 分钟多才上线。host 模式用开发机自己的 ssh 和 git 访问,不需要 secret。Dockerfile 加构建参数 ARTIFACTS(build 默认在镜像里编 / prebuilt 用现成产物),服务器自己编的能力保留;prebuilt/COMMIT 和要部署的提交对不上时 update.sh 直接失败。服务端测试同时跑:文件之间 --parallel,评分测试标 describe.concurrent(--max-concurrency=8),本机 4 分钟降到半分钟,连跑三遍都通过。GitHub 的 ci.yml 改成 PR 跑测试、手动触发才部署(服务器自己编),开发机不在时用,push 不再两边各部署一遍。顺手:update.sh 每次部署拉一下 caddy:2-alpine(up 不会自己拉,一直是第一次部署时那份);app 和 caddy 的容器日志限 10MB × 3。部署说明、README、设计方案同步
Deploy / deploy (push) Successful in 1m38s
Deploy / deploy (push) Successful in 1m38s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
77bfaba7ff
commit
4c3ce31fe1
10 files changed
+274
-69
No files matched your search
+12
-2
@@ -5,7 +5,11 @@ services:
|
||||
init-data:
|
||||
image: iot-sim:latest
|
||||
# 和 app 同一个镜像(构建有缓存,不会重复构建);写上 build,新服务器上就不会去 Docker Hub 拉这个镜像
|
||||
build: .
|
||||
build: &build
|
||||
context: .
|
||||
# build:在镜像里编(默认);prebuilt:用 prebuilt/ 里开发机编好的产物,见 Dockerfile 开头
|
||||
args:
|
||||
ARTIFACTS: ${ARTIFACTS:-build}
|
||||
user: root
|
||||
command: ['sh', '-c', 'chown -R "$$APP_UID" /data']
|
||||
volumes:
|
||||
@@ -15,8 +19,13 @@ services:
|
||||
|
||||
app:
|
||||
image: iot-sim:latest
|
||||
build: .
|
||||
build: *build
|
||||
restart: unless-stopped
|
||||
logging: &logging # 默认的 json-file 日志不限大小,会一直涨
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: 10m
|
||||
max-file: '3'
|
||||
depends_on:
|
||||
init-data:
|
||||
condition: service_completed_successfully
|
||||
@@ -60,6 +69,7 @@ services:
|
||||
caddy:
|
||||
image: caddy:2-alpine
|
||||
restart: unless-stopped
|
||||
logging: *logging
|
||||
depends_on: [app]
|
||||
expose:
|
||||
- 80
|
||||
|
||||
Reference in new issue
Block a user