当前位置: 首页 > news >正文

搭建Gitea并自动拉取代码

安装 Gitea (代码托管 + 网页后台)

1\创建目录:

sudo mkdir -p /opt/gitea cd /opt/gitea

2、创建 docker-compose.yml:

vim 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_UID=33 - USER_GID=33 - GITEA__database__DB_TYPE=sqlite3 - GITEA__server__DOMAIN=git.xxx.top - GITEA__server__ROOT_URL=https://git.xxx.top - GITEA__actions__ENABLED=true # 👇 可选:确保信任反向代理传来的头部(通常默认开启,显式写出更稳妥) - GITEA__server__REVERSE_PROXY_LIMIT=1 - GITEA__server__REVERSE_PROXY_TRUSTED_PROXIES=* # 👇 强制登录 + 首页直接跳登录页 - GITEA__server__LANDING_PAGE=login - GITEA__service__REQUIRE_SIGNIN_VIEW=true # ✅ 一开始就彻底关闭 OpenID - GITEA__openid__ENABLE_OPENID_SIGNIN=false - GITEA__openid__ENABLE_OPENID_SIGNUP=false

3、启动 Gitea:

sudo docker compose up -d

4、一般我们用Nginx做外部访问代理,配置Nginx

vim /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、重启nginx

service nginx restart

6、然后打开浏览器配置网站理员账号密码

配置自动拉取

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 --version

2、 生成并修改配置
在宿主机运行,我们依然要告诉它:不要开 Docker,直接在原地干活。

# 创建配置目录 mkdir -p /etc/act_runner

3、创建配置文件

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 后台拿那个最新的 Token:

act_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] Description=Gitea Actions runner After=network.target [Service] # 必须在这个目录下运行,因为 .runner 文件在这里 WorkingDirectory=/etc/act_runner ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml Restart=always RestartSec=10 User=root [Install] WantedBy=multi-user.target EOF

7、启动

# 重载系统配置 systemctl daemon-reload # 启动并设置开机自启 systemctl enable act_runner --now # 检查一下状态 systemctl status act_runner

8、配置自动拉取脚本
去后台管理页面新建项目
然后在本地项目里新建 .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_COMMAND="ssh -o StrictHostKeyChecking=no" # 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.pub

10、提交本地项目
克隆空项目

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_COMMAND="ssh -o StrictHostKeyChecking=no" # 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 push

11、在服务器上拉取代码
自动拉取第一次需要先在服务器上克隆项目,给与项目权限

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
http://www.jsqmd.com/news/551182/

相关文章:

  • 春联生成模型-中文-base功能体验:支持多种祝福词,生成对仗工整春联
  • 3分钟掌握Adobe扩展安装效率工具:设计师必备的开源解决方案
  • DiskInfo开源硬盘检测工具:实时监控与健康诊断解决方案
  • 【问题】thor上的cubLas
  • 实战应用构建:基于快马平台开发可部署的智能成片PPT网站
  • Qwen3-0.6B-FP8实战:构建基于操作系统的命令行智能助手
  • 正规的座机号码认证服务商有哪些?固定电话显示企业名称 - 企业服务推荐
  • OptiScaler终极指南:解锁游戏性能与画质的完美平衡
  • 【js基础】继承(原型链继承、组合式继承、寄生组合式继承、class的实现)
  • SWAT建模(学习中)
  • 什么是大模型投毒?大模型投毒原理、路径和案例剖析
  • 告别论文焦虑:Paperxie 如何用四大降重神器搞定毕业论文重复率与 AIGC 率
  • 为你的员工考核提供25个聪明的绩效考核问题
  • 爱芯元智上市后首次年报:营收5.6亿同比增19% 智能汽车业务成增长引擎
  • 终极资源下载神器:res-downloader 全网视频音频一键获取完整指南
  • Keil魔术棒里这10个配置,搞懂一半你就能超越80%的嵌入式新手
  • 数据模型与指标模型有什么区别?一文讲清
  • 深入解析CSS2盒子模型:三大布局技巧与两大空白问题解决方案
  • 想转行AI行业?从入门到精通,掌握人工智能的核心技能!非常详细收藏我这一篇就够了
  • 大模型技能加持!运维工程师薪资飙升53%,AI架构师跃迁秘籍大公开!
  • 2026年3月进口户外漆厂家推荐,进口户外木漆、木器漆、防水漆、地面漆、金属漆、庭院栅栏漆、水性户外漆,长效耐候防腐实力源头厂商 - 品牌企业推荐师(官方)
  • Web渗透测试之密码找回漏洞实战心得体会
  • 面向 iOS 蓝牙开发者的“蓝牙地图”
  • 51单片机实战手记8 -- 超声波避障小车
  • 3个维度彻底解决磁盘空间失控问题:Czkawka技术原理与实战指南
  • 告别命令行:用Docker Compose一键部署Ollama WebUI可视化界面(含汉化配置)
  • Python与Rust混合编程实战:用PyO3让你的代码快10倍
  • 个人作品集展示的最佳实践与工具选择
  • MusePublic风格迁移教程:将经典画作风格注入现代人像生成
  • FlexASIO配置终极指南:解决音频延迟与音质问题的完整解决方案