ge
Build and publish Jiaowu packages and container image / Test, package and publish (push) Successful in 29m11s

xiufu
This commit is contained in:
2026-07-25 21:49:56 +08:00 Unverified
parent eb13465b49
commit d42ec74822
4 changed files with 101 additions and 7 deletions
+1
View File
@@ -119,6 +119,7 @@ jobs:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
pull: true
push: true
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}
+4 -7
View File
@@ -10,18 +10,15 @@ RUN npm --prefix web run build
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:10.0-alpine AS build
ARG TARGETARCH
WORKDIR /source
COPY global.json ./
COPY .env.example ./
COPY src/Jiaowu.Api/Jiaowu.Api.csproj ./src/Jiaowu.Api/
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
arch="${TARGETARCH/amd64/x64}" && \
dotnet restore ./src/Jiaowu.Api/Jiaowu.Api.csproj --arch "$arch"
RUN dotnet restore ./src/Jiaowu.Api/Jiaowu.Api.csproj --arch "$TARGETARCH"
COPY src/Jiaowu.Api/ ./src/Jiaowu.Api/
COPY --from=frontend /source/src/Jiaowu.Api/wwwroot/ ./src/Jiaowu.Api/wwwroot/
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages \
arch="${TARGETARCH/amd64/x64}" && \
dotnet publish ./src/Jiaowu.Api/Jiaowu.Api.csproj \
RUN dotnet publish ./src/Jiaowu.Api/Jiaowu.Api.csproj \
--configuration Release \
--arch "$arch" \
--arch "$TARGETARCH" \
--no-restore \
--no-self-contained \
--output /app/publish \
+62
View File
@@ -80,6 +80,68 @@ Kubernetes 或密钥管理系统仍可覆盖文件中的值。
`chmod 600 .env`Windows 应通过 ACL 只允许服务账号和管理员读取。连接串中的证书
路径必须是运行服务器上的实际路径。
### Linux systemd 服务
仓库提供 [`deploy/systemd/jiaowu.service`](deploy/systemd/jiaowu.service),适用于
使用 systemd 的 Linux 发行版。示例假定自包含发布包位于 `/opt/jiaowu`,服务使用
无登录权限的 `jiaowu` 账号。程序会自动读取 `/opt/jiaowu/.env`,因此服务单元没有再
配置 `EnvironmentFile=`
以 Debian/Ubuntu 为例,先创建账号并设置文件权限:
```bash
sudo useradd --system \
--home-dir /opt/jiaowu \
--shell /usr/sbin/nologin \
jiaowu
sudo chown -R root:jiaowu /opt/jiaowu
sudo chmod 0750 /opt/jiaowu
sudo chmod 0750 /opt/jiaowu/Jiaowu.Api
sudo chmod 0640 /opt/jiaowu/.env
```
如果账号已存在,`useradd` 会报错,可以跳过该命令。RHEL 系发行版的 `nologin` 通常
位于 `/sbin/nologin`,请按服务器实际路径调整。如果连接串使用私有 CA,还要确保
`jiaowu` 组对 `SslCa` 指向的证书文件具有读取权限。首次启动前,先停止旧实例,并以
服务账号执行迁移;仅专用空演示库需要执行第二条灌数命令:
```bash
sudo -u jiaowu /opt/jiaowu/Jiaowu.Api --migrate-only
sudo -u jiaowu /opt/jiaowu/Jiaowu.Api \
--seed-demo-data \
--confirm-production-demo-data
```
演示数据成功后,从 `/opt/jiaowu/.env` 删除临时的 `SeedAdmin__*` 配置。随后安装并
验证服务单元:
```bash
sudo install \
--owner=root \
--group=root \
--mode=0644 \
deploy/systemd/jiaowu.service \
/etc/systemd/system/jiaowu.service
sudo systemd-analyze verify /etc/systemd/system/jiaowu.service
sudo systemctl daemon-reload
sudo systemctl enable --now jiaowu.service
```
查看状态、实时日志和数据库就绪探针:
```bash
sudo systemctl status jiaowu.service --no-pager
sudo journalctl --unit=jiaowu.service --follow
curl --fail http://127.0.0.1:8080/health/ready
```
更新程序时应先 `sudo systemctl stop jiaowu.service`,替换发布文件并执行
`--migrate-only`,确认迁移成功后再运行 `sudo systemctl start jiaowu.service`
服务以失败重启策略运行,但不会在正常退出或管理员主动停止后自行拉起。
数据库应明确使用 `utf8mb4`;MySQL 8.4 的默认排序规则为
`utf8mb4_0900_ai_ci`。新建数据库时可执行:
+34
View File
@@ -0,0 +1,34 @@
[Unit]
Description=Jiaowu Academic Affairs System
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=jiaowu
Group=jiaowu
WorkingDirectory=/opt/jiaowu
ExecStart=/opt/jiaowu/Jiaowu.Api
Restart=on-failure
RestartSec=5s
TimeoutStopSec=30s
SyslogIdentifier=jiaowu
Environment=DOTNET_EnableDiagnostics=0
NoNewPrivileges=true
PrivateTmp=true
PrivateDevices=true
ProtectSystem=full
ProtectHome=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictSUIDSGID=true
LockPersonality=true
CapabilityBoundingSet=
AmbientCapabilities=
UMask=0077
[Install]
WantedBy=multi-user.target