diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index e7de1ab..519441e 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -1,5 +1,6 @@ name: Build docker and publish -run-name: The pipeline for docker build +run-name: 简化的Docker构建和部署流程 + on: push: branches: @@ -9,75 +10,118 @@ on: - main env: - # Docker + # Docker镜像仓库 REPO: ${{ vars.REPO }} - # Gitea - GIT_USERNAME: ${{ vars.GIT_USERNAME }} - GIT_PASSWORD: ${{ vars.GIT_PASSWORD }} - # Host SSH + # SSH连接信息 SSH_HOST: ${{ vars.SSH_HOST }} SSH_PORT: ${{ vars.SSH_PORT }} SSH_USER: ${{ vars.SSH_USER }} SSH_PASSWORD: ${{ vars.SSH_PASSWORD }} + # TG通知 + TG_BOT_TOKEN: 8114337882:AAHkEx03HSu7RxN4IHBJJEnsK9aPPzNLIk0 + TG_CHAT_ID: "-4940243803" jobs: - linux: - runs-on: ubuntu-latest - - strategy: - matrix: - # 使用gitea-tool-cache需要指定具体的版本号 - go: ["1.24.3"] - + build: + runs-on: ppanel-server + steps: - - name: Checkout - uses: https://${{ env.GIT_USERNAME }}:${{ env.GIT_PASSWORD }}@${{ vars.DOMAIN_OF_GITEA}}/actions/checkout@main - - # 将.env环境变量配置文件拷贝致gitea runner容器 - - name: copy env file to runner container - uses: https://${{ env.GIT_USERNAME }}:${{ env.GIT_PASSWORD }}@${{ vars.DOMAIN_OF_GITEA}}/actions/ssh-action@main + # 步骤1: 下载代码 + - name: 📥 下载代码 + uses: actions/checkout@v4 + + # 步骤2: 打包编译 (执行dockerfile编译 + make build) + - name: 🔨 打包编译 + run: | + echo "开始编译..." + make build + echo "编译完成,开始构建Docker镜像..." + make docker + echo "Docker镜像构建完成" + + # 步骤3: 发布到镜像仓库 + - name: 📤 发布到镜像仓库 + run: | + echo "开始推送镜像到仓库..." + make publish-docker + echo "镜像推送完成" + + # 步骤4: 连接服务器拉镜像启动 + - name: 🚀 连接服务器拉镜像启动 + uses: appleboy/ssh-action@v1.0.3 with: host: ${{ env.SSH_HOST }} username: ${{ env.SSH_USER }} password: ${{ env.SSH_PASSWORD }} port: ${{ env.SSH_PORT }} - debug: true + timeout: 300s + command_timeout: 600s script: | - mkdir -p ~/cicd_env_files - cd ~/cicd_env_files - rm -f ./.env - docker cp ${{ vars.JOB_CONTAINER_NAME }}:${{ github.workspace }}/deploy/.env ./.env - source ./.env - if [ -n "${{ vars.RUNNER_CONTAINER_NAME }}" ]; then - docker cp .env ${{ vars.RUNNER_CONTAINER_NAME }}:/.env - docker exec ${{ vars.RUNNER_CONTAINER_NAME }} /bin/bash -c "source /.env" - else - echo "RUNNER_CONTAINER_NAME is not set, skipping container operations" + echo "连接服务器成功,开始部署..." + + # 停止并删除旧容器 + if docker ps -a | grep -q ppanel-server; then + echo "停止旧容器..." + docker stop ppanel-server || true + docker rm ppanel-server || true fi - - - name: Setup Go environment with cache - uses: https://${{ env.GIT_USERNAME }}:${{ env.GIT_PASSWORD }}@${{ vars.DOMAIN_OF_GITEA}}/actions/setup-go@main + + # 拉取最新镜像 + echo "拉取最新镜像..." + docker pull ${{ env.REPO }}:latest + + # 启动新容器 + echo "启动新容器..." + docker run -d \ + --name ppanel-server \ + --restart unless-stopped \ + -p 8080:8080 \ + ${{ env.REPO }}:latest + + # 检查容器状态 + sleep 5 + if docker ps | grep -q ppanel-server; then + echo "✅ 容器启动成功" + else + echo "❌ 容器启动失败" + exit 1 + fi + + # 步骤5: TG通知 (成功) + - name: 📱 发送成功通知到Telegram + if: success() + uses: chapvic/telegram-notify@master with: - go-version: ${{ matrix.go }} - cache: true - cache-dependency-path: go.sum - - - - name: Prepare GO environment - run: | - go env -w GOPROXY=https://goproxy.cn,direct - go env -w GOPRIVATE="${{ vars.DOMAIN_OF_GITEA}}" - go env -w GOSUMDB=off - git config --global url."https://${{ env.GIT_USERNAME }}:${{ env.GIT_PASSWORD }}@${{ vars.DOMAIN_OF_GITEA}}/".insteadOf "https://${{ vars.DOMAIN_OF_GITEA}}/" - go clean -modcache - rm -rf go.sum - - - name: Build and push docker image - run: | - source ${{ gitea.workspace }}/deploy/.env - go mod tidy - make build-linux - make docker - make publish-docker - make docker-run + bot_token: ${{ env.TG_BOT_TOKEN }} + chat_id: ${{ env.TG_CHAT_ID }} + message: | + ✅ **部署成功!** + + 📦 **项目**: ${{ github.repository }} + 🌿 **分支**: ${{ github.ref_name }} + 📝 **提交**: ${{ github.sha }} + 👤 **提交者**: ${{ github.actor }} + 🕐 **时间**: ${{ github.event.head_commit.timestamp }} + + 🚀 **服务已成功部署到生产环境** + parse_mode: Markdown + + # 步骤5: TG通知 (失败) + - name: 📱 发送失败通知到Telegram + if: failure() + uses: chapvic/telegram-notify@master + with: + bot_token: ${{ env.TG_BOT_TOKEN }} + chat_id: ${{ env.TG_CHAT_ID }} + message: | + ❌ **部署失败!** + + 📦 **项目**: ${{ github.repository }} + 🌿 **分支**: ${{ github.ref_name }} + 📝 **提交**: ${{ github.sha }} + 👤 **提交者**: ${{ github.actor }} + 🕐 **时间**: ${{ github.event.head_commit.timestamp }} + + ⚠️ **请检查构建日志获取详细信息** + parse_mode: Markdown \ No newline at end of file diff --git a/deploy/.env b/deploy/.env deleted file mode 100644 index 0fbdb54..0000000 --- a/deploy/.env +++ /dev/null @@ -1,31 +0,0 @@ -#******** MODIFY THE FOLLOWING VARIABLES TO YOUR OWN SETTINGS ********# -# 构建说明: -# 1. docker-compose.yaml文件放置目录为:/deploy/docker-compose/project/ -# 2. 将swagger json文件添加至 api dockerfile的app目录中,用于两个容器之间的文件中转。 - -# PROJECT DEFINE -export DOMAIN=api.kxsw.us -export PROJECT_NAME=ppanel # 容器项目名称 -export SERVICE_NAME=server # 容器服务名称 -export API_INNER_PORT=8080 -export API_EXTERNAL_PORT=8080 - -# Container Repository -export REGISTRY_URL=registry.kxsw.us # 本地 Docker Registry 地址,请根据实际情况修改 -export REGISTRY_NAMESPACE=ppanel # 镜像仓库命名空间 -# Project DockerCompose File -export DOCKER_COMPOSE_FILE=deploy/project/docker-compose.yaml - -# DOCKER VARS -export DOCKER_PROJECT_NAME=${PROJECT_NAME}-${SERVICE_NAME} # 项目名称,需要保持全局唯一 - -export DOCKER_NETWORK_NAME=ppanel-network -# API DOCKER DEFINE don't forget modify the service name in docker-compose file -export API_PROJECT_BUILD_SUFFIX=api -export API_LOG_DIR=/home/logs/${PROJECT_NAME}-${SERVICE_NAME}/${API_PROJECT_BUILD_SUFFIX} -export GITEA_RUNNER_NAME=ubuntu-latest #*修改为你自己的gitea-runner容器名称 - -#******** DON'T MODIFY THE FOLLOWING VARIABLES ********# -#### API ENVS -export API_IMAGE_NAME=${REGISTRY_URL}/${REGISTRY_NAMESPACE}/${PROJECT_NAME}-${SERVICE_NAME}-${API_PROJECT_BUILD_SUFFIX} -export API_CONTAINER_NAME=${PROJECT_NAME}-${SERVICE_NAME}-${API_PROJECT_BUILD_SUFFIX} \ No newline at end of file diff --git a/deploy/project/docker-compose.yaml b/deploy/project/docker-compose.yaml deleted file mode 100644 index ae3a60a..0000000 --- a/deploy/project/docker-compose.yaml +++ /dev/null @@ -1,17 +0,0 @@ -services: - # need modify service name to your owner - server-api: - image: ${API_IMAGE_NAME} - container_name: ${API_CONTAINER_NAME} - restart: always - ports: - - ${API_EXTERNAL_PORT}:${API_INNER_PORT} - volumes: - - ${API_LOG_DIR}:/app/logs - environment: - - TZ=Asia/Shanghai - -networks: - default: - name: ${DOCKER_NETWORK_NAME} - external: true diff --git a/generate/gopure-amd64.exe b/generate/gopure-amd64.exe deleted file mode 100755 index cd250fb..0000000 Binary files a/generate/gopure-amd64.exe and /dev/null differ diff --git a/generate/gopure-arm64.exe b/generate/gopure-arm64.exe deleted file mode 100755 index 3b90adb..0000000 Binary files a/generate/gopure-arm64.exe and /dev/null differ diff --git a/generate/gopure-darwin-amd64 b/generate/gopure-darwin-amd64 deleted file mode 100755 index 496dd4b..0000000 Binary files a/generate/gopure-darwin-amd64 and /dev/null differ diff --git a/generate/gopure-darwin-arm64 b/generate/gopure-darwin-arm64 deleted file mode 100755 index 4c7f6b8..0000000 Binary files a/generate/gopure-darwin-arm64 and /dev/null differ diff --git a/generate/gopure-linux-amd64 b/generate/gopure-linux-amd64 deleted file mode 100755 index 80832ef..0000000 Binary files a/generate/gopure-linux-amd64 and /dev/null differ diff --git a/generate/gopure-linux-arm64 b/generate/gopure-linux-arm64 deleted file mode 100755 index ee5d21d..0000000 Binary files a/generate/gopure-linux-arm64 and /dev/null differ