Compare commits

...

55 Commits

Author SHA1 Message Date
shanshanzhong147 e37ad50410 ci: 将linux作业的运行环境从vpn改为ubuntu-latest 2025-08-09 08:17:36 -07:00
shanshanzhong147 c503e06c9c ci(workflow): 将linux作业的运行环境改为vpn
避免使用公共runner以提高构建安全性
2025-08-09 08:00:12 -07:00
shanshanzhong147 0992c2ad7b ci(docker): 更新Docker工作流以包含构建步骤
添加checkout步骤并使用环境变量进行认证
包含构建Linux可执行文件的步骤
2025-08-09 07:18:58 -07:00
shanshanzhong147 e78b93d6fb ci: 移除不必要的检出步骤 2025-08-09 07:13:25 -07:00
shanshanzhong147 79020ccea0 1 2025-08-09 06:55:11 -07:00
shanshanzhong147 8a8ece76b1 ci: 将Linux构建任务运行环境从vpn改为ubuntu-latest 2025-08-09 06:26:21 -07:00
shanshanzhong147 0316345e9f ci: 将linux job的运行环境从vpn-runner改为vpn 2025-08-09 06:25:23 -07:00
shanshanzhong147 b56b1240f3 ci(workflow): 将linux job的运行环境改为vpn-runner并移除build-linux步骤 2025-08-09 06:23:30 -07:00
shanshanzhong147 77b3af8015 init 2025-08-09 05:18:44 -07:00
shanshanzhong147 634f43d644 fix: 更新MySQL和Redis的连接地址为具体IP
将MySQL和Redis的连接地址从服务名称改为具体IP地址,以便在特定网络环境下能够正确连接
2025-08-05 10:37:47 -07:00
shanshanzhong147 e5b4dc75d7 fix(deploy): 更新docker-compose配置和数据库连接地址
- 在docker-compose中添加时区环境变量
- 将MySQL和Redis连接地址从localhost改为服务名
- 更新Makefile中的docker compose命令语法
2025-08-05 10:12:29 -07:00
shanshanzhong147 40b8c07036 chore: 在docker-run命令中添加当前工作目录打印 2025-08-05 10:00:07 -07:00
shanshanzhong147 b261ddeeb1 ci(docker): 更新Docker工作流,添加构建步骤并注释发布步骤
添加应用构建步骤以确保镜像包含最新代码
暂时注释发布步骤以进行本地测试
2025-08-05 09:52:27 -07:00
shanshanzhong147 62f07b7f6b ci(docker): 移除构建应用的步骤并修复docker-compose命令
移除docker.yml中冗余的go mod tidy和build-linux步骤,这些步骤已在其他流程中处理
将docker compose命令改为docker-compose以兼容旧版本
2025-08-05 09:46:27 -07:00
shanshanzhong147 31a2aa0e84 ci(workflow): 优化Docker工作流配置并简化步骤
- 添加DOMAIN环境变量以替代硬编码的域名
- 简化git克隆流程,使用凭证存储提高安全性
- 移除不必要的SSH文件复制步骤
- 添加构建和发布Docker镜像的详细日志输出
2025-08-05 09:24:13 -07:00
shanshanzhong147 7965c33790 ci(docker): 更新Gitea工作流以使用容器化构建环境
将Linux作业改为在golang容器中运行,简化Go环境设置步骤
移除不必要的SSH步骤,优化构建流程
2025-08-05 09:22:37 -07:00
shanshanzhong147 fcae874fd2 ci: 移除不再需要的Node.js安装步骤 2025-08-05 09:20:50 -07:00
shanshanzhong147 dad83339c1 ci(docker): 更新Gitea工作流配置并优化构建步骤
- 使用标准actions/checkout@v4替代自定义checkout
- 添加Go环境设置步骤并启用缓存
- 优化SSH action使用标准appleboy/ssh-action
- 调整工作空间路径变量为github标准
2025-08-05 09:18:32 -07:00
shanshanzhong147 84842ec3dd ci(docker): 添加 Node.js 设置步骤以支持前端构建 2025-08-05 09:16:06 -07:00
shanshanzhong147 59bc008b69 ci(docker): 更新SSH action的版本引用
使用明确的版本号v1替代隐式引用,提高工作流的稳定性
2025-08-05 09:13:06 -07:00
shanshanzhong147 8cb58ad91f ci(docker): 更新Gitea Actions checkout步骤使用v1版本
修复checkout步骤未指定版本的问题,确保构建稳定性
2025-08-05 09:12:16 -07:00
shanshanzhong147 7372302618 ci(docker): 移除actions引用中的main分支后缀 2025-08-05 09:10:44 -07:00
shanshanzhong147 cbf5a2b450 1 2025-08-05 09:09:02 -07:00
shanshanzhong147 33f450cdbc init 2025-08-05 08:47:18 -07:00
shanshanzhong147 bce4c4e56e ci(workflow): 更新Gitea工作流使用内部actions
使用内部认证的actions替换公开actions以增强安全性
2025-08-05 08:22:04 -07:00
shanshanzhong147 b6cbcb3040 ci: 移除不必要的Node.js设置和检出步骤 2025-08-05 08:09:59 -07:00
shanshanzhong147 fdbe3c75ee ci(workflow): 添加Node.js环境并降级checkout action版本
添加Node.js环境设置步骤以满足构建需求
将actions/checkout从v4降级至v3以解决兼容性问题
2025-08-05 08:08:36 -07:00
shanshanzhong147 bf13c56261 ci: 更新Gitea工作流中使用GitHub官方actions
将自定义的actions地址替换为GitHub官方actions,提高工作流的稳定性和可维护性
2025-08-05 08:05:21 -07:00
shanshanzhong147 85343f3f82 fix(deploy): 修正GITEA_RUNNER_NAME变量值为vpn-runner 2025-08-05 08:01:25 -07:00
shanshanzhong147 51b493a10d ci(workflow): 将linux作业的运行环境从ubuntu-latest改为vpn 2025-08-05 07:59:50 -07:00
shanshanzhong147 ae04e0d518 chore: 更新GITEA_RUNNER_NAME为vpn-runner 2025-08-05 07:54:18 -07:00
shanshanzhong147 2b1ce740e1 ci: 更新部署配置和CI认证方式
将域名从ppanel.kxsw.us更改为api.kxsw.us
将CI工作流中的SSH认证方式从私钥改为密码认证
2025-08-05 07:47:50 -07:00
shanshanzhong147 e620abcce6 init 2025-08-05 06:19:25 -07:00
shanshanzhong147 7ea6fc226e refactor(Dockerfile): 优化时区文件拷贝并添加注释
将单个时区文件拷贝改为拷贝整个时区目录,提高可维护性
添加时区设置的环境变量注释
2025-07-28 06:56:07 -07:00
shanshanzhong147 d5f4b04c6c fix(deploy): 将API外部端口从8070改为8080 2025-07-24 09:33:40 -07:00
shanshanzhong147 a0ca976e66 chore: 开启调试模式并添加代码对比脚本
开启调试模式以便更好地排查问题。
添加代码对比脚本 see.sh,用于简洁地对比代码变更,包括文件变更对比和变更统计,方便查看我们和他们的修改情况。
2025-07-23 10:13:42 -07:00
shanshanzhong147 917732eeee fix: 修改 MySQL 配置中的密码和数据库名 2025-07-23 09:43:38 -07:00
shanshanzhong147 f0fbd9d208 fix: 更新MySQL和Redis连接地址以及Docker网络名称
将MySQL地址从localhost改为mysql_db,Redis地址从127.0.0.1改为redis_cache
更新Docker网络名称为ppanel-script_ppanel-network以匹配部署配置
2025-07-23 09:25:32 -07:00
shanshanzhong147 2d07182bd6 fix: 修正 Dockerfile 中的 CMD 命令参数 2025-07-23 09:20:32 -07:00
shanshanzhong147 e0ae15355b style: 将项目名称从Ppanel改为ppanel以保持命名一致性 2025-07-23 08:48:36 -07:00
shanshanzhong147 c0e0d03431 fix: 修正Dockerfile和Makefile中的可执行文件名称
将Dockerfile中的CMD命令和Makefile中的build-linux目标输出文件名称统一为'ppanel',确保容器运行时使用正确的可执行文件名称
2025-07-23 08:22:45 -07:00
shanshanzhong147 bb5d6974fa ci: 从发布流程中移除docker登录步骤
移除Makefile中自动登录docker的步骤,因为登录凭证应通过更安全的方式处理
2025-07-23 07:51:46 -07:00
shanshanzhong147 df7fcddb40 refactor: 更新Dockerfile和Makefile配置
统一服务名称为Ppanel并更新相关变量命名
优化Makefile结构,移除无用swagger相关命令
添加构建时间变量并改进构建命令
2025-07-23 07:36:26 -07:00
shanshanzhong147 6c9d5fb39e fix: 修正Makefile中的服务名称拼写错误 2025-07-22 10:25:41 -07:00
shanshanzhong147 4ecc5177ed ci(docker): 优化Go环境设置并启用缓存
使用setup-go替代gitea-tool-cache来设置Go环境
启用依赖缓存以提高构建效率
移除不必要的清理步骤
2025-07-22 10:11:10 -07:00
shanshanzhong147 c11d46bdbf ci: 更新工作流中使用的工作空间变量从github到gitea 2025-07-22 10:09:55 -07:00
shanshanzhong147 9b7a588997 ci(workflow): 更新docker工作流配置
- 添加GOSUMDB=off设置并清理go缓存
- 修复工作空间路径变量引用错误
- 增加go.sum清理步骤
2025-07-22 10:05:09 -07:00
shanshanzhong147 0f40c63ea0 ci(docker): 修复工作流中容器环境变量处理逻辑
修复容器名称变量引用错误,并添加对RUNNER_CONTAINER_NAME未设置的检查
2025-07-22 09:53:59 -07:00
shanshanzhong147 1d1d8c0e30 ci(workflows): 修改docker工作流中的环境文件路径
将环境文件存储路径从/install/cicd_env_files改为用户主目录下的~/cicd_env_files,避免权限问题
2025-07-22 09:52:25 -07:00
shanshanzhong147 5d890fdfcc ci: 更新Gitea Actions的引用版本为main分支 2025-07-22 09:50:20 -07:00
shanshanzhong147 94e2f33db1 ci: 移除Gitea Actions插件版本号以使用最新版本 2025-07-22 09:45:30 -07:00
shanshanzhong147 a7d9deb9cd ci(workflow): 更新 setup-go action 的引用方式 2025-07-22 09:36:18 -07:00
shanshanzhong147 9f9e832e37 chore(deploy): 更新GITEA_RUNNER_NAME为server-runner 2025-07-22 09:08:59 -07:00
shanshanzhong147 a73a3f2313 feat: 添加docker-compose配置和用户管理逻辑更新
fix(ci): 移除敏感信息并更新SSH认证方式

refactor: 清理无用文件和更新Makefile配置

docs: 添加项目配置文件和更新环境变量说明
2025-07-22 08:53:30 -07:00
shanshanzhong147 cc6ebc18e5 ci(docker): 添加docker构建工作流并更新Makefile配置
添加Gitea的docker构建工作流,包含环境变量配置、Go环境安装、镜像构建和发布步骤
重构Makefile以支持多平台构建、docker操作和swagger文档生成
2025-07-21 07:25:47 -07:00
12 changed files with 269 additions and 357 deletions
+81
View File
@@ -0,0 +1,81 @@
name: Build docker and publish
run-name: The pipeline for docker build
on:
push:
branches:
- main
pull_request:
branches:
- main
env:
# Docker
REPO: ${{ vars.REPO }}
# Gitea
GIT_USERNAME: ${{ vars.GIT_USERNAME }}
GIT_PASSWORD: ${{ vars.GIT_PASSWORD }}
# Host SSH
SSH_HOST: ${{ vars.SSH_HOST }}
SSH_PORT: ${{ vars.SSH_PORT }}
SSH_USER: ${{ vars.SSH_USER }}
SSH_PASSWORD: ${{ vars.SSH_PASSWORD }}
jobs:
linux:
runs-on: ubuntu-latest
strategy:
matrix:
# 使用gitea-tool-cache需要指定具体的版本号
go: ["1.24.3"]
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
with:
host: ${{ env.SSH_HOST }}
username: ${{ env.SSH_USER }}
password: ${{ env.SSH_PASSWORD }}
port: ${{ env.SSH_PORT }}
debug: true
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"
fi
- name: Setup Go environment with cache
uses: https://${{ env.GIT_USERNAME }}:${{ env.GIT_PASSWORD }}@${{ vars.DOMAIN_OF_GITEA}}/actions/setup-go@main
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}}/"
- 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
-50
View File
@@ -1,50 +0,0 @@
name: Deploy
on:
push:
branches: ["develop"]
pull_request:
branches: ["develop"]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Get short Git commit ID
id: vars
run: echo "COMMIT_ID=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Build Docker image
run: docker build -t ${{ secrets.DOCKER_USERNAME }}/ppanel-server-dev:${{ env.COMMIT_ID }} .
- name: Push Docker image
run: docker push ${{ secrets.DOCKER_USERNAME }}/ppanel-server-dev:${{ env.COMMIT_ID }}
- name: Deploy to server
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
if [ $(docker ps -a -q -f name=ppanel-server-dev) ]; then
echo "Stopping and removing existing ppanel-server container..."
docker stop ppanel-server-dev
docker rm ppanel-server-dev
else
echo "No existing ppanel-server-dev container running."
fi
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker run -d --restart=always --log-driver=journald --name ppanel-server-dev -p 8080:8080 -v /www/wwwroot/api/etc:/app/etc --restart=always -d ${{ secrets.DOCKER_USERNAME }}/ppanel-server-dev:${{ env.COMMIT_ID }}
-131
View File
@@ -1,131 +0,0 @@
name: Release
on:
push:
tags:
- 'v*'
jobs:
build-docker:
runs-on: ubuntu-latest
env:
IMAGE_NAME: ppanel-server
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract version from git tag
id: version
run: echo "VERSION=$(git describe --tags --abbrev=0 | sed 's/^v//')" >> $GITHUB_ENV
- name: Get short SHA
id: sha
run: echo "GIT_SHA=${GITHUB_SHA::8}" >> $GITHUB_ENV
- name: Set BUILD_TIME env
run: echo BUILD_TIME=$(date --iso-8601=seconds) >> ${GITHUB_ENV}
- name: Build and push Docker image for main release
if: "!contains(github.ref_name, 'beta')"
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
push: true
build-args: |
VERSION=${{ env.VERSION }}
tags: |
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:latest
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }}-${{ env.GIT_SHA }}
- name: Build and push Docker image for beta release
if: contains(github.ref_name, 'beta')
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
push: true
build-args: |
VERSION=${{ env.VERSION }}
tags: |
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:beta
${{ secrets.DOCKER_USERNAME }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }}-${{ env.GIT_SHA }}
release-notes:
runs-on: ubuntu-latest
needs: build-docker
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
- name: Install GoReleaser
run: |
go install github.com/goreleaser/goreleaser/v2@latest
- name: Run GoReleaser
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
goreleaser check
goreleaser release --clean
releases-matrix:
name: Release ppanel-server binary
runs-on: ubuntu-latest
needs: release-notes # wait for release-notes job to finish
strategy:
matrix:
# build and publish in parallel: linux/386, linux/amd64, linux/arm64,
# windows/386, windows/amd64, windows/arm64, darwin/amd64, darwin/arm64
goos: [ linux, windows, darwin ]
goarch: [ '386', amd64, arm64 ]
exclude:
- goarch: '386'
goos: darwin
steps:
- uses: actions/checkout@v2
- name: Extract version from git tag
id: version
run: echo "VERSION=$(git describe --tags --abbrev=0 | sed 's/^v//')" >> $GITHUB_ENV
- name: Set BUILD_TIME env
run: echo BUILD_TIME=$(date --iso-8601=seconds) >> ${GITHUB_ENV}
- uses: actions/checkout@v4
- uses: wangyoucao577/go-release-action@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
goos: ${{ matrix.goos }}
goarch: ${{ matrix.goarch }}
asset_name: "ppanel-server-${{ matrix.goos }}-${{ matrix.goarch }}"
goversion: "https://dl.google.com/go/go1.23.3.linux-amd64.tar.gz"
project_path: "."
binary_name: "ppanel-server"
extra_files: LICENSE etc
ldflags: -X "github.com/perfect-panel/server/pkg/constant.Version=${{env.VERSION}}" -X "github.com/perfect-panel/server/pkg/constant.BuildTime=${{env.BUILD_TIME}}"
-83
View File
@@ -1,83 +0,0 @@
name: Go CI/CD with goctl and Swagger
on:
# release:
# types: [published]
push:
branches:
- develop
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install goctl
run: |
curl -L https://github.com/zeromicro/go-zero/releases/download/tools%2Fgoctl%2Fv1.7.2/goctl-v1.7.2-linux-amd64.tar.gz -o goctl-v1.7.2-linux-amd64.tar.gz
tar -xvzf goctl-v1.7.2-linux-amd64.tar.gz
chmod +x goctl
sudo mv goctl /usr/local/bin/goctl
goctl --version
- name: Install goctl-swagger
run: |
curl -L https://github.com/tensionc/goctl-swagger/releases/download/v1.0.1/goctl-swagger-v1.0.1-linux-amd64.tar.gz -o goctl-swagger.tar.gz
tar -xvzf goctl-swagger.tar.gz
chmod +x goctl-swagger
sudo mv goctl-swagger /usr/local/bin/
- name: Generate Swagger file
run: |
mkdir -p swagger
goctl api plugin -plugin goctl-swagger='swagger -filename common.json -pack Response -response "[{\"name\":\"code\",\"type\":\"integer\",\"description\":\"状态码\"},{\"name\":\"msg\",\"type\":\"string\",\"description\":\"消息\"},{\"name\":\"data\",\"type\":\"object\",\"description\":\"数据\",\"is_data\":true}]";' -api ./apis/swagger_common.api -dir ./swagger
goctl api plugin -plugin goctl-swagger='swagger -filename user.json -pack Response -response "[{\"name\":\"code\",\"type\":\"integer\",\"description\":\"状态码\"},{\"name\":\"msg\",\"type\":\"string\",\"description\":\"消息\"},{\"name\":\"data\",\"type\":\"object\",\"description\":\"数据\",\"is_data\":true}]";' -api ./apis/swagger_user.api -dir ./swagger
goctl api plugin -plugin goctl-swagger='swagger -filename app.json -pack Response -response "[{\"name\":\"code\",\"type\":\"integer\",\"description\":\"状态码\"},{\"name\":\"msg\",\"type\":\"string\",\"description\":\"消息\"},{\"name\":\"data\",\"type\":\"object\",\"description\":\"数据\",\"is_data\":true}]";' -api ./apis/swagger_app.api -dir ./swagger
goctl api plugin -plugin goctl-swagger='swagger -filename admin.json -pack Response -response "[{\"name\":\"code\",\"type\":\"integer\",\"description\":\"状态码\"},{\"name\":\"msg\",\"type\":\"string\",\"description\":\"消息\"},{\"name\":\"data\",\"type\":\"object\",\"description\":\"数据\",\"is_data\":true}]";' -api ./apis/swagger_admin.api -dir ./swagger
goctl api plugin -plugin goctl-swagger='swagger -filename ppanel.json -pack Response -response "[{\"name\":\"code\",\"type\":\"integer\",\"description\":\"状态码\"},{\"name\":\"msg\",\"type\":\"string\",\"description\":\"消息\"},{\"name\":\"data\",\"type\":\"object\",\"description\":\"数据\",\"is_data\":true}]";' -api ppanel.api -dir ./swagger
goctl api plugin -plugin goctl-swagger='swagger -filename node.json -pack Response -response "[{\"name\":\"code\",\"type\":\"integer\",\"description\":\"状态码\"},{\"name\":\"msg\",\"type\":\"string\",\"description\":\"消息\"},{\"name\":\"data\",\"type\":\"object\",\"description\":\"数据\",\"is_data\":true}]";' -api ./apis/swagger_node.api -dir ./swagger
- name: Verify Swagger file
run: |
test -f ./swagger/common.json
test -f ./swagger/user.json
test -f ./swagger/app.json
test -f ./swagger/admin.json
- name: Checkout target repository
uses: actions/checkout@v4
with:
repository: perfect-panel/ppanel-docs
token: ${{ secrets.GH_TOKEN }}
path: ppanel-docs
persist-credentials: true
- name: Verify or create public/swagger directory
run: |
mkdir -p ./ppanel-docs/public/swagger
- name: Copy Swagger files
run: |
cp -rf swagger/* ppanel-docs/public/swagger
cd ppanel-docs
- name: Check for file changes
run: |
cd ppanel-docs
git add .
git status
if [ "$(git status --porcelain)" ]; then
echo "Changes detected in the doc repository."
git config user.name "GitHub Actions"
git config user.email "actions@ppanel.dev"
git commit -m "Update Swagger files"
git push
else
echo "No changes detected."
exit 0
fi
@@ -1,15 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="go build github.com/perfect-panel/server" type="GoApplicationRunConfiguration" factoryName="Go Application" nameIsGenerated="true">
<module name="server" />
<working_directory value="$PROJECT_DIR$" />
<parameters value="run --config etc/ppanel-dev.yaml" />
<envs>
<env name="PPANEL_MODE" value="demo" />
</envs>
<kind value="PACKAGE" />
<package value="github.com/perfect-panel/server" />
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$/ppanel.go" />
<method v="2" />
</configuration>
</component>
+2 -1
View File
@@ -28,8 +28,9 @@ FROM scratch
# Copy CA certificates and timezone data
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
# Set Shanghai timezone
ENV TZ=Asia/Shanghai
# Set working directory and copy binary
+66 -77
View File
@@ -1,84 +1,73 @@
NAME="ppanel-server"
BINDIR=bin
VERSION=$(shell git describe --tags || echo "unknown version")
BUILDTIME=$(shell date -u)
# Custom configuration | 独立配置
# Service name | 项目名称
SERVICE=ppanel
# Service name in specific style | 项目经过style格式化的名称
SERVICE_STYLE=ppanel
# Service name in lowercase | 项目名称全小写格式
SERVICE_LOWER=ppanel
# Service name in snake format | 项目名称下划线格式
SERVICE_SNAKE=ppanel
# Service name in snake format | 项目名称短杠格式
SERVICE_DASH=ppanel
# The project version, if you don't use git, you should set it manually | 项目版本,如果不使用git请手动设置
VERSION=$(shell git describe --tags --always)
# Build time | 构建时间
BUILDTIME=$(shell date '+%Y-%m-%d %H:%M:%S')
# The project file name style | 项目文件命名风格
PROJECT_STYLE=go_zero
# Whether to use i18n | 是否启用 i18n
PROJECT_I18N=true
# The suffix after build or compile | 构建后缀
PROJECT_BUILD_SUFFIX=api
# The arch of the build | 构建的架构
GOARCH=amd64
# The repository of docker | Docker 仓库地址
DOCKER_REPO=docker.i.on ticcheck
# ---- You may not need to modify the codes below | 下面的代码大概率不需要更改 ----
GO ?= go
GOFMT ?= gofmt "-s"
GOFILES := $(shell find . -name "*.go")
LDFLAGS := -s -w
# Build command with version injection | 带版本信息注入的构建命令
GOBUILD=CGO_ENABLED=0 go build -trimpath -ldflags '-X "github.com/perfect-panel/server/pkg/constant.Version=$(VERSION)" \
-X "github.com/perfect-panel/server/pkg/constant.BuildTime=$(BUILDTIME)" \
-w -s -buildid='
-X "github.com/perfect-panel/server/pkg/constant.BuildTime=$(BUILDTIME)" \
-w -s -buildid='
PLATFORM_LIST = \
darwin-amd64 \
darwin-amd64-v3 \
darwin-arm64 \
linux-386 \
linux-amd64 \
linux-amd64-v3 \
linux-armv5 \
linux-armv6 \
linux-armv7 \
linux-arm64 \
.PHONY: docker
docker: # Build the docker image | 构建 docker 镜像
docker build -f Dockerfile -t ${API_IMAGE_NAME}:${VERSION} .
@echo "Build docker successfully"
WINDOWS_ARCH_LIST = \
windows-386 \
windows-amd64 \
windows-amd64-v3 \
windows-arm64 \
windows-armv7
.PHONY: publish-docker
publish-docker: # Publish docker image | 发布 docker 镜像
docker tag ${API_IMAGE_NAME}:${VERSION} ${API_IMAGE_NAME}:latest
docker push ${API_IMAGE_NAME}:latest
@echo "Publish docker successfully"
all: linux-amd64 darwin-amd64 windows-amd64 # Most used
darwin-amd64:
GOARCH=amd64 GOOS=darwin $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
darwin-amd64-v3:
GOARCH=amd64 GOOS=darwin GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
darwin-arm64:
GOARCH=arm64 GOOS=darwin $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
linux-386:
GOARCH=386 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
linux-amd64:
GOARCH=amd64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
linux-amd64-v3:
GOARCH=amd64 GOOS=linux GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
linux-armv5:
GOARCH=arm GOOS=linux GOARM=5 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
linux-armv6:
GOARCH=arm GOOS=linux GOARM=6 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
linux-armv7:
GOARCH=arm GOOS=linux GOARM=7 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
linux-arm64:
GOARCH=arm64 GOOS=linux $(GOBUILD) -o $(BINDIR)/$(NAME)-$@
windows-386:
GOARCH=386 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
windows-amd64:
GOARCH=amd64 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
windows-amd64-v3:
GOARCH=amd64 GOOS=windows GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
windows-arm64:
GOARCH=arm64 GOOS=windows $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
windows-armv7:
GOARCH=arm GOOS=windows GOARM=7 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@.exe
.PHONY: docker-run
docker-run: # Publish docker image | 发布 docker 镜像
docker rm -f ${API_CONTAINER_NAME}
@echo "pwd: $(pwd)"
docker compose -p ${DOCKER_PROJECT_NAME} -f ${DOCKER_COMPOSE_FILE} up -d
@echo "docker run successfully"
gz_releases=$(addsuffix .gz, $(PLATFORM_LIST))
zip_releases=$(addsuffix .zip, $(WINDOWS_ARCH_LIST))
.PHONY: build-linux
build-linux: # Build project for Linux | 构建Linux下的可执行文件
GOOS=linux GOARCH=$(GOARCH) $(GOBUILD) -o /app/ppanel $(SERVICE_STYLE).go
@echo "Build project for Linux successfully"
$(gz_releases): %.gz : %
chmod +x $(BINDIR)/$(NAME)-$(basename $@)
gzip -f -S -$(VERSION).gz $(BINDIR)/$(NAME)-$(basename $@)
$(zip_releases): %.zip : %
zip -m -j $(BINDIR)/$(NAME)-$(basename $@)-$(VERSION).zip $(BINDIR)/$(NAME)-$(basename $@).exe
.PHONY: help
help: # Show help | 显示帮助
@grep kfile | sort | while read-r l; do printf "\033[1;32m$$(echo $$l | cut -f 1 -d':')\033[00m:$$(echo $$l | cut -f 2- -d'#')\n"; done
+31
View File
@@ -0,0 +1,31 @@
#******** 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-script_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=vpn-runner #*修改为你自己的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}
+17
View File
@@ -0,0 +1,17 @@
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
+39
View File
@@ -0,0 +1,39 @@
Host: 0.0.0.0
Port: 8080
TLS:
Enable: false
CertFile: ""
KeyFile: ""
Debug: true
JwtAuth:
AccessSecret: 89270267-f1dc-4136-9c9c-dc38c4685d63
AccessExpire: 604800
Logger:
ServiceName: PPanel
Mode: file
Encoding: json
TimeFormat: "2006-01-02 15:04:05.000"
Path: logs
Level: info
MaxContentLength: 0
Compress: false
Stat: true
KeepDays: 0
StackCooldownMillis: 100
MaxBackups: 0
MaxSize: 0
Rotation: daily
FileTimeFormat: 2006-01-02T15:04:05.000Z07:00
MySQL:
Addr: 172.245.180.199:3306
Username: root
Password: 123456
Dbname: ppanel
Config: charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
MaxIdleConns: 10
MaxOpenConns: 10
SlowThreshold: 1000
Redis:
Host: 172.245.180.199:6379
Pass:
DB: 0
@@ -44,6 +44,8 @@ func (l *UpdateUserBasicInfoLogic) UpdateUserBasicInfo(req *types.UpdateUserBasi
userInfo.Balance = req.Balance
userInfo.GiftAmount = req.GiftAmount
userInfo.Commission = req.Commission
userInfo.IsAdmin = &req.IsAdmin
userInfo.Enable = &req.Enable
if req.Password != "" {
if userInfo.Id == 2 && isDemo {
+31
View File
@@ -0,0 +1,31 @@
#!/bin/bash
# 简洁的代码对比脚本
echo "🔍 代码对比报告"
echo "==========================================="
echo ""
# 检查old远程仓库是否存在
if ! git remote | grep -q "old"; then
echo "❌ 请先添加old远程仓库: git remote add old https://github.com/perfect-panel/server.git && git fetch old"
exit 1
fi
echo "📋 文件变更对比:"
echo "-------------------------------------------"
echo "我们修改的文件:"
git diff --name-status old/master main | grep -E '^[AM]' | sed 's/^A/🆕 新增: /' | sed 's/^M/✏️ 修改: /'
echo ""
echo "他们修改的文件:"
git diff --name-status main old/master | grep -E '^[AM]' | sed 's/^A/🆕 新增: /' | sed 's/^M/✏️ 修改: /'
echo ""
echo "📊 变更统计:"
echo "-------------------------------------------"
echo "我们的变更:"
git diff --stat --color=always old/master main | tail -1
echo "他们的变更:"
git diff --stat --color=always main old/master | tail -1
echo ""
echo "✅ 对比完成!"