Skip to content

Commit e382701

Browse files
committed
Reapply "v 1.0.7 添加前端自动部署"
This reverts commit dcdf7cc.
1 parent b8d633a commit e382701

5 files changed

Lines changed: 124 additions & 0 deletions

File tree

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
/mvnw text eol=lf
2+
*.sh text eol=lf
23
*.cmd text eol=crlf

.github/workflows/ci.yml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# OpenBlog:push 到 master 时编译后端、打包前端,并将静态资源与 Docker 相关文件同步到阿里云,在服务器执行 docker.sh 更新 Nginx 容器。
2+
# 需在仓库 Settings → Secrets and variables → Actions 中配置:
3+
# SERVER_SSH_KEY 服务器 SSH 私钥(完整 PEM)
4+
# SERVER_REMOTE_HOST 公网 IP 或域名
5+
# SERVER_REMOTE_USER SSH 登录用户(如 root 或 deploy)
6+
# SERVER_TARGET 服务器上部署目录绝对路径(如 /opt/openblog/web),该目录下会有 dist、Dockerfile、docker.sh、nginx.conf
7+
#
8+
# 后端 Spring Boot 需在**同一台机器宿主机**上监听 8082(java -jar 或 systemd),容器内 Nginx 通过 host.docker.internal 反代到宿主机。
9+
name: Build and deploy OpenBlog
10+
11+
on:
12+
push:
13+
branches:
14+
- master
15+
16+
jobs:
17+
build-and-deploy:
18+
runs-on: ubuntu-latest
19+
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
24+
- name: Set up JDK 17
25+
uses: actions/setup-java@v4
26+
with:
27+
java-version: "17"
28+
distribution: "temurin"
29+
cache: "maven"
30+
31+
- name: Build backend (Maven)
32+
run: mvn -B -ntp package -DskipTests
33+
34+
- name: Set up Node.js
35+
uses: actions/setup-node@v4
36+
with:
37+
node-version: "20"
38+
cache: "npm"
39+
cache-dependency-path: frontend/package-lock.json
40+
41+
- name: Install frontend dependencies and build
42+
working-directory: frontend
43+
run: |
44+
npm ci
45+
npm run build
46+
47+
- name: Prepare release bundle for server
48+
run: |
49+
mkdir -p release
50+
cp -r frontend/dist release/dist
51+
cp frontend/Dockerfile frontend/docker.sh frontend/nginx.conf release/
52+
53+
- name: Deploy files to server
54+
uses: easingthemes/ssh-deploy@v5.1.1
55+
with:
56+
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
57+
ARGS: "-rlgoDzvc --delete"
58+
SOURCE: "release/dist release/Dockerfile release/docker.sh release/nginx.conf"
59+
REMOTE_HOST: ${{ secrets.SERVER_REMOTE_HOST }}
60+
REMOTE_USER: ${{ secrets.SERVER_REMOTE_USER }}
61+
TARGET: ${{ secrets.SERVER_TARGET }}
62+
SCRIPT_BEFORE: ls -la
63+
64+
- name: Run Docker commands on server
65+
uses: appleboy/ssh-action@v1
66+
with:
67+
host: ${{ secrets.SERVER_REMOTE_HOST }}
68+
username: ${{ secrets.SERVER_REMOTE_USER }}
69+
key: ${{ secrets.SERVER_SSH_KEY }}
70+
script: |
71+
cd ${{ secrets.SERVER_TARGET }}
72+
sh docker.sh

frontend/Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FROM nginx:alpine
2+
COPY dist /usr/share/nginx/html
3+
EXPOSE 80
4+
CMD ["nginx", "-g", "daemon off;"]

frontend/docker.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/sh
2+
set -e
3+
DIR="$(cd "$(dirname "$0")" && pwd)"
4+
NAME="openblog-web"
5+
6+
docker stop "$NAME" 2>/dev/null || true
7+
docker rm "$NAME" 2>/dev/null || true
8+
docker rmi "$NAME" 2>/dev/null || true
9+
10+
docker build -t "$NAME" "$DIR"
11+
12+
docker run -d \
13+
-p 80:80 \
14+
--name "$NAME" \
15+
--add-host=host.docker.internal:host-gateway \
16+
--restart on-failure:5 \
17+
-v "$DIR/nginx.conf:/etc/nginx/conf.d/default.conf:ro" \
18+
"$NAME"

frontend/nginx.conf

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# 容器内 Nginx:静态资源 + 将 /api 反代到宿主机 Spring Boot(默认 8082)。
2+
# 依赖 docker.sh 中的 --add-host=host.docker.internal:host-gateway
3+
4+
server {
5+
listen 80;
6+
server_name _;
7+
8+
root /usr/share/nginx/html;
9+
index index.html;
10+
11+
location = /favicon.ico {
12+
alias /usr/share/nginx/html/favicon.svg;
13+
default_type image/svg+xml;
14+
access_log off;
15+
}
16+
17+
location ^~ /api/ {
18+
proxy_pass http://host.docker.internal:8082;
19+
proxy_http_version 1.1;
20+
proxy_set_header Host $host;
21+
proxy_set_header X-Real-IP $remote_addr;
22+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
23+
proxy_set_header X-Forwarded-Proto $scheme;
24+
}
25+
26+
location / {
27+
try_files $uri $uri/ /index.html;
28+
}
29+
}

0 commit comments

Comments
 (0)