503ee7372e
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
2.3 KiB
Bash
Executable File
63 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
EC2_HOST="${EC2_HOST:-$(grep EC2_HOST ~/.env 2>/dev/null | cut -d= -f2)}"
|
|
EC2_USER="${EC2_USER:-$(grep EC2_USER ~/.env 2>/dev/null | cut -d= -f2)}"
|
|
EC2_KEY="${EC2_KEY:-~/.ssh/wangjia.pem}"
|
|
FORGEJO_URL="https://git.51yanmei.com"
|
|
FORGEJO_TOKEN="${FORGEJO_TOKEN:-$(grep FORGEJO_TOKEN ~/.env 2>/dev/null | cut -d= -f2)}"
|
|
|
|
echo "==> 1/5 Go 测试"
|
|
cd backend && go test ./... && cd ..
|
|
|
|
echo "==> 2/5 编译 Go 后端 (linux/amd64)"
|
|
cd backend
|
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o jiu-server .
|
|
cd ..
|
|
|
|
echo "==> 3/5 编译 Flutter Web"
|
|
cd client
|
|
flutter build web --release \
|
|
--dart-define=BASE_URL=https://jiu.51yanmei.com \
|
|
--dart-define=PUBLIC_URL=https://jiu.51yanmei.com
|
|
cd ..
|
|
|
|
echo "==> 4/5 上传到 Forgejo Releases"
|
|
tar -czf /tmp/web.tar.gz -C client/build web
|
|
VERSION="v$(date +%Y%m%d.%H%M)"
|
|
RESP=$(curl -s -X POST "${FORGEJO_URL}/api/v1/repos/wangjia/jiu/releases" \
|
|
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"tag_name\":\"${VERSION}\",\"name\":\"Release ${VERSION}\",\"draft\":false,\"prerelease\":false}")
|
|
RELEASE_ID=$(echo "${RESP}" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
|
|
curl -sf -X POST "${FORGEJO_URL}/api/v1/repos/wangjia/jiu/releases/${RELEASE_ID}/assets" \
|
|
-H "Authorization: token ${FORGEJO_TOKEN}" -F "attachment=@backend/jiu-server"
|
|
curl -sf -X POST "${FORGEJO_URL}/api/v1/repos/wangjia/jiu/releases/${RELEASE_ID}/assets" \
|
|
-H "Authorization: token ${FORGEJO_TOKEN}" -F "attachment=@/tmp/web.tar.gz"
|
|
echo "Release ${VERSION} 已创建"
|
|
|
|
echo "==> 5/5 部署到 EC2"
|
|
scp -O -i ${EC2_KEY} backend/jiu-server ${EC2_USER}@${EC2_HOST}:/tmp/jiu-server
|
|
rsync -avz --delete -e "ssh -i ${EC2_KEY}" \
|
|
client/build/web/ ${EC2_USER}@${EC2_HOST}:/tmp/jiu-web-new/
|
|
ssh -i ${EC2_KEY} ${EC2_USER}@${EC2_HOST} << 'ENDSSH'
|
|
sudo systemctl stop jiu
|
|
cp /tmp/jiu-server /opt/jiu/backend/jiu-server
|
|
chmod +x /opt/jiu/backend/jiu-server
|
|
sudo systemctl start jiu
|
|
for i in $(seq 1 30); do
|
|
curl -sf http://localhost:8080/health && break
|
|
sleep 2
|
|
done
|
|
rm -rf /opt/jiu/web-old
|
|
mv /opt/jiu/web /opt/jiu/web-old 2>/dev/null || true
|
|
mv /tmp/jiu-web-new /opt/jiu/web
|
|
sudo nginx -s reload
|
|
ENDSSH
|
|
|
|
echo ""
|
|
echo "✓ 部署完成!版本: ${VERSION}"
|
|
echo " 回滚地址: ${FORGEJO_URL}/wangjia/jiu/releases/tag/${VERSION}"
|