Featured image of post Gitea 私有代码仓库快速部署

Gitea 私有代码仓库快速部署

摘要: 基于真实踩坑案例,实现 1Panle 平台 + Gitea 私有仓库快速部署。


前情提要

前面文章中提到了 MCP server 快速部署案例。

其中有一种场景:用户自己开发了一个 mcp server 代码,希望运行在 1Panel 的MCP 组件中,而不是只能够在本地运行。

并且文章中提到,1Panel 中新增的 mcp server配置如下——

1
/bin/sh -c "apk add git && uvx --from git+http://lab.nxlan.cn:3008/pdream/jobsearch-mcp-server.git jobsearch-mcp-server --transport stdio"

上面用到代码仓库 http://lab.nxlan.cn:3008/pdream/jobsearch-mcp-server.git 就是本文主角——gitea 个人仓库。

一、Gitea 基础配置

延续1Panel 中特色功能:图形化部署+应用内部关联。

可以 2分钟快速实现 gitea 应用的部署,5分钟完成初始化,10分钟完成反向代理配置。

之后,就可以同步自己的代码到gitea 仓库中了。

感兴趣的话,不妨参考本文一步一步操作完成。

1.1 Gitea 应用创建

首先在 “应用商店” -> “全部” -> “搜索” 栏中输入 gitea 关键字,找到可以安装的应用。

注意点击 第一个 Gitea “安装”。

如果 1Panel 中没有安装过数据库服务,会有需要安装数据库的提醒(如下图)——

如果是这种情况,就需要先安装数据库

点击"去安装"后,直接跳转到数据库安装界面——

点击**“确认”** 按键,等待数据库安装完成。

如果点击"安装" 后,提示:“未开启外部映射,将无法从外外网访问数据库服务”。

可以根据自己需求,再勾选 “高级设置"中的 “端口外部访问"选项。

一般不建议 直接开放数据库服务到外部,所以我这里默认不启用此功能。

再次回到Gitea 安装界面,数据库服务可以选择刚创建好的postgres 了。

因为,稍后使用 ssh 协议同步代码,需要访问 gitea 的ssh 服务,这里需要勾选 “端口外部访问” 的选项。

点击"确认"后,就开始自动安装 gitea 应用了。

安装成功后,可以在应用商店中看到刚新增的两个应用——

1.2 追加反代配置

默认安装完成时,gitea 应用的web 服务绑定在宿主机的 3000端口。对应我的主机就是 http://lab.nxlan.cn:3000

如果1Panel 在你的内部局域网,就可以直接访问上述页面,进行后续初始化工作。(可以跳过本段)

但是,如果gitea 宿主机在云上,又怎么能直接访问这个管理页面呢?

一种方式就是:追加反向代理配置,通过已经上线的https 服务,代理/gitea 流量到 http://127.0.0.1:3000 的真实服务。

还有一种方法是:登录到云主机 管理页面,在安全策略下,追加一条——放行公网访问主机 3000 端口的策略。

考虑到:这样临时放行后,还是要取消并开通反代,我就没有这么操作。

操作步骤上,还是先进入**“网站” -> “反向代理” -> “创建”**, 创建一条新代理规则,请求路径假设就是 /gitea。

并在原始代理配置文件内容基础上追加——

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
location ^~ /gitea {
    # 追加配置:去掉 /gitea 前缀,发给后端
    rewrite ^/gitea(/.*)$ $1 break; 

    # --- 默认设置 ---
    proxy_pass http://127.0.0.1:3000; 
    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 REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_set_header X-Forwarded-Port $server_port; 
    proxy_http_version 1.1; 
    add_header X-Cache $upstream_cache_status; 
    proxy_ssl_server_name off; 
    proxy_ssl_name $proxy_host; 
}

保存反代配置后,进入gitea 配置文件目录——/opt/1panel/apps/gitea/gitea/data/gitea/conf

修改配置文件app.ini中的一条配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[server]
APP_DATA_PATH = /data/gitea
DOMAIN = localhost
SSH_DOMAIN = localhost
HTTP_PORT = 3000
# 修改为自己外部域名和代理接口
ROOT_URL = https://lab.nxlan.cn/gitea/
DISABLE_SSH = false
SSH_PORT = 22
SSH_LISTEN_PORT = 22
LFS_START_SERVER = false

修改好后,重启gitea 应用新配置。再次访问反代地址—— https://lab.nxlan.cn/gitea,就可以看到初始化配置页面了。

1.3 完成应用初始化

在上述初始化页面中,1Panel 已经帮我们补充好了数据库地址、名称、用户、密码等信息。

这里保持默认,点击 “立即安装” 完成最后的初始化工作。

最后,完成管理员账户的设置——

管理账户创建后,重新登录。

1.4 同步代码至仓库

同步本地写好的代码前,需要先在 Gitea 上创建仓库。

我们的第一个代码仓库,名字就叫 “jobsearch-mcp-server”。

为了方便mcp server 拉取项目代码,项目可见性不勾选 “将仓库设为私有”——也就是公开的意思。

其他保持默认,这样我们第一个代码仓库就创建完成了。

仓库创建完后,需要追加个人应用 访问令牌——方便开发主机同步代码。

“个人信息” -> “应用” -> “生成新的令牌” 中 输入令牌名称,并追加repository 等读写的权限。

添加成功后,会出现一行令牌字符串,类似于——a385cac305f80ff43dfe202d727b5a33176d18b3

在开发主机上,按照以下命令顺序执行,同步代码到gitea 仓库:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# git 项目初始化
git init

# 查看当前 remote
git remote -v

# 删除过往 remote
git remote remove origin

# 追加
git remote add origin https://pdream:[TOKEN]@lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server.git

# 推送本地代码到仓库
git push --set-upstream origin master
Enumerating objects: 52, done.
Counting objects: 100% (52/52), done.
Delta compression using up to 4 threads
Compressing objects: 100% (42/42), done.
Writing objects: 100% (52/52), 100.22 KiB | 5.90 MiB/s, done.
Total 52 (delta 19), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To https://lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server.git
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.

提示同步成功。此时访问仓库页面,就可以看到刚上传的代码了。


二、1Panel MCP Server 部署(从 Gitea 拉取)

2.1 场景

在 1Panel 上通过 MCP 管理界面部署 MCP Server时,因为源代码在个人 Gitea上,所以在MCP server 启动要指定git项目地址。

2.2 正确启动命令

经过反代服务器(推荐)

1
/bin/sh -c "apk add git && uvx --from git+https://lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server jobsearch-mcp-server --transport stdio"

直连 Gitea(不经反代,数据未加密)

1
/bin/sh -c "apk add git && uvx --from git+http://lab.nxlan.cn:3000/pdream/jobsearch-mcp-server.git jobsearch-mcp-server --transport stdio"

参数说明

  • --transport stdio — 1Panel MCP 托管必须使用 stdio 传输模式(解决 SSE 嵌套冲突)

2.3 注意事项

  • 路径格式git+https:// 而非本地路径,容器内无法访问宿主机文件系统

  • 传输模式:必须加 --transport stdio,否则与 1Panel MCP 托管机制冲突

  • 反代 vs 直连:经反代走 443 端口(SSL 由反代终止),直连走 3000 数据不经加密传输(服务直接暴露在公网)。

  • 环境变量:在jobserch 这个 MCP Server 项目中需要声明环境变量 “DEEPSEEK_API_KEY”,否则提示 OPENAI_API_KEY 未配置。


三、补充 :使用ssh方式同步代码

前提:

Gitea 应用创建时,勾选了 “端口外部访问” 的选项。

3.1 SSH Key 生成

开发主机密钥生成

1
2
3
4
ssh-keygen -t ed25519 -C "your_email@xx.com"
# 输出:
#   id_ed25519      (私钥)
#   id_ed25519.pub  (公钥)

添加主机的ssh key到 Gitea

1
2
3
4
5
6
7
# 查看公钥
cat ~/.ssh/id_ed25519.pub
# 复制内容 → Gitea Web UI → 用户设置 → SSH 密钥 → 添加

# 验证连通性
ssh -p 222 git@lab.nxlan.cn -T
# 预期:Welcome to Gitea!

仓库 ssh 密钥截图

3.2 修改git remote 配置

1
2
3
4
5
6
7
8
# 删除之前的 remote
git remote remove origin

# 将 之前配置的 HTTPS 改为 SSH(注意端口 222)
git remote set-url origin ssh://git@lab.nxlan.cn:222/pdream/jobsearch-mcp-server.git

# 验证
git remote -v

3.3 HTTP 与 SSH 的分工

通道 用途 使用场景
HTTP(S) 拉取源代码 MCP Server 容器内 uvx --from git+https://... 从 Gitea 拉代码
HTTP(S) 上传源代码 本地编辑完成后 git push 将代码同步回 Gitea。此时origin为: https://pdream:[TOKEN]@lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server.git
SSH 上传源代码 本地编辑完成后 git push 将代码同步回 Gitea 。此时origin为: ssh://git@lab.nxlan.cn:222/pdream/jobsearch-mcp-server.git

本例实战

  • MCP Server 部署:容器通过 HTTPS 拉取 jobsearch-mcp-server 源码
  • 代码编辑后推送:本地也通过 HTTPS 方式 ( https://pdream:[TOKEN]@lab.nxlan.cn/...) 提交到 Gitea

两者各司其职,不冲突。


四、mcp server 排错速查

症状 原因 解法
uvx --from /path/to/repo 报错 容器内无法访问宿主机路径 改用 git+https://
git clone 卡住/超时 容器网络不通或缺 git apk add git,检查网络
SSL certificate problem 自签证书 git config --global http.sslVerify false
容器启动后立刻退出 缺环境变量 检查 OPENAI_API_KEY 等必填变量
SSH 克隆认证失败 端口非 22 确认 Gitea SSH 端口为 222

五、Principle(经验规则)

  1. supergateway 容器内操作默认缺 git,先用 apk add git 兜底
  2. MCP server 启动命令只支持单字段,/bin/sh -c 串联多条指令
  3. 使用 HTTPS 服务推送源代码时,注意令牌权限要给够,否则会报告 403 的错误
  4. Gitea SSH 端口映射为 222,配置 remote 时需注意指定端口
Licensed under CC BY-NC-SA 4.0