搭建Gitea并自动拉取代码 安装 Gitea (代码托管 网页后台)1\创建目录sudo mkdir -p /opt/gitea cd /opt/gitea2、创建 docker-compose.ymlvim docker-compose.yml写入下面内容services: gitea: image: gitea/gitea:latest container_name: gitea-server restart: always ports: # 只监听本地供 Nginx 转发不直接暴露给公网 - 127.0.0.1:3000:3000 # SSH 端口供 Git 命令使用因为我已改了ssh端口所以这里这可以映射22端口 - 22:22 volumes: # 建议改为绝对路径防止路径混淆 - /opt/gitea-data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro environment: - USER_UID33 - USER_GID33 - GITEA__database__DB_TYPEsqlite3 - GITEA__server__DOMAINgit.xxx.top - GITEA__server__ROOT_URLhttps://git.xxx.top - GITEA__actions__ENABLEDtrue # 可选确保信任反向代理传来的头部通常默认开启显式写出更稳妥 - GITEA__server__REVERSE_PROXY_LIMIT1 - GITEA__server__REVERSE_PROXY_TRUSTED_PROXIES* # 强制登录 首页直接跳登录页 - GITEA__server__LANDING_PAGElogin - GITEA__service__REQUIRE_SIGNIN_VIEWtrue # ✅ 一开始就彻底关闭 OpenID - GITEA__openid__ENABLE_OPENID_SIGNINfalse - GITEA__openid__ENABLE_OPENID_SIGNUPfalse3、启动 Giteasudo docker compose up -d4、一般我们用Nginx做外部访问代理配置Nginxvim /etc/nginx/conf.d/git.qf100.top.conf写入下面内容server { listen 80; server_name git.xxx.top; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name git.xxx.top; include ssl-conf; location / { proxy_pass http://127.0.0.1:3000; # 必须的 Header 设置否则 Gitea 重定向会出错 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 支持 WebSocket (用于实时通知等) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; # 增加超时时间防止大文件推送中断 proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; # 允许上传大文件 (Git LFS 可能需要) client_max_body_size 200M; } }5、重启nginxservice nginx restart6、然后打开浏览器配置网站理员账号密码配置自动拉取1、下载并安装二进制文件# 下载适合 Linux AMD64 的版本2026年稳定版 curl -L https://dl.gitea.com/act_runner/0.2.11/act_runner-0.2.11-linux-amd64 -o /usr/local/bin/act_runner # 赋予执行权限 chmod x /usr/local/bin/act_runner # 测试是否安装成功 act_runner --version2、 生成并修改配置在宿主机运行我们依然要告诉它不要开 Docker直接在原地干活。# 创建配置目录 mkdir -p /etc/act_runner3、创建配置文件vim /etc/act_runner/config.yaml写入下面内容log: level: info runner: file: .runner capacity: 1 envs: A_TEST_ENV_NAME_1: a_test_env_value_1 timeout: 3h shutdown_timeout: 0s insecure: false fetch_timeout: 5s fetch_interval: 2s labels: - ubuntu-latest:host - ubuntu-22.04:host - ubuntu-20.04:host cache: enabled: true dir: host: port: 0 external_server: container: network: privileged: false options: workdir_parent: valid_volumes: [] docker_host: force_pull: true force_rebuild: false require_docker: false docker_timeout: 0s host: workdir_parent:4、获取全局token这样所有项目都可以自动拉取5、注册 Runner只需一次去 Gitea 后台拿那个最新的 Tokenact_runner register \ --instance https://git.xxx.top \ --token 你的最新TOKEN \ --no-interactive \ --config /etc/act_runner/config.yaml注册成功后程序在当前目录下生成了一个 .runner 文件。我们要把它挪到配置目录里否则一会儿启动服务会找不到它。mv .runner /etc/act_runner/6、创建 Systemd 服务让它后台常驻我们不希望关掉黑窗口程序就停了。请直接复制以下这段创建系统服务cat EOF /etc/systemd/system/act_runner.service [Unit] DescriptionGitea Actions runner Afternetwork.target [Service] # 必须在这个目录下运行因为 .runner 文件在这里 WorkingDirectory/etc/act_runner ExecStart/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml Restartalways RestartSec10 Userroot [Install] WantedBymulti-user.target EOF7、启动# 重载系统配置 systemctl daemon-reload # 启动并设置开机自启 systemctl enable act_runner --now # 检查一下状态 systemctl status act_runner8、配置自动拉取脚本去后台管理页面新建项目然后在本地项目里新建 .gitea/workflows 文件夹然后在这个文件夹里新建deploy.yaml 文件写入下面内容name: Auto Deploy (Production) on: push: branches: [main] # 只有当 main 分支变动时包括合并才触发 jobs: deploy_job: runs-on: ubuntu-latest steps: - name: 生产环境同步 run: | cd /home/wwwroot/my_shop_api || exit 1 git config --global --add safe.directory /home/wwwroot/my_shop_api echo 收到合并请求正在同步生产环境... export GIT_SSH_COMMANDssh -o StrictHostKeyCheckingno # 1. 取消所有本地修改 git checkout . # 2. 【新增建议】清理所有不在 Git 里的临时文件防止 dev 的垃圾留在服务器 git clean -fd # 3. 同步最新 main 分支 git fetch origin main git reset --hard origin/main echo ✅ 线上代码已同步到最新版本时间$(date)9、在服务器生成 SSH 密钥ssh-keygen -t rsa然后一路回车生成成功后查看公匙并复制到管理后台的密匙管理里cat ~/.ssh/id_rsa.pub10、提交本地项目克隆空项目https://git.xxx.top/case/test_shop_api.git然后把所有项目文件移到这个文件夹下再在这个项目文件夹里新建脚本目录md .gitea\workflows然后在workflows文件夹里新建 deploy.yaml 文件写入下面内容name: Auto Deploy (Production) on: push: branches: [main] # 只有当 main 分支变动时包括合并才触发 jobs: deploy_job: runs-on: ubuntu-latest steps: - name: 生产环境同步 run: | cd /home/wwwroot/my_shop_api || exit 1 git config --global --add safe.directory /home/wwwroot/my_shop_api echo 收到合并请求正在同步生产环境... export GIT_SSH_COMMANDssh -o StrictHostKeyCheckingno # 1. 取消所有本地修改 git checkout . # 2. 【新增建议】清理所有不在 Git 里的临时文件防止 dev 的垃圾留在服务器 git clean -fd # 3. 同步最新 main 分支 git fetch origin main git reset --hard origin/main echo ✅ 线上代码已同步到最新版本时间$(date)把本地代码提交到线上git add . git commit -m first commit git push11、在服务器上拉取代码自动拉取第一次需要先在服务器上克隆项目给与项目权限sudo chown -R www-data:www-data /home/wwwroot/my_shop_api sudo find /home/wwwroot/my_shop_api -type d -exec chmod 755 {} \; sudo find /home/wwwroot/my_shop_api -type f -exec chmod 644 {} \; sudo chmod -R 775 /home/wwwroot/my_shop_api/storage /home/wwwroot/my_shop_api/bootstrap/cache新建开发分支并提交git checkout -b dev git push --set-upstream origin dev