惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
博客园 - 【当耐特】
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
IT之家
IT之家
博客园 - 叶小钗
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
B
Blog RSS Feed
H
Help Net Security
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
L
LangChain Blog
Vercel News
Vercel News

ncc的个人网站

MCSManager 数据备份与迁移实践 Goland Update Delve frp反向代理群晖WebDAV服务器 1panel安装的Mysql版本从5.7升级到8.4.5 备份mc服务器脚本 威联通使用screen报错 Cannot find terminfo entry for 'screen.linux' Brew No Available Formula QQ邮箱文件夹重新开启通知 Act_runner 使用 supervisor 启动无法正常识别到 asdf 设置的环境问题(二) 将博客从Typecho迁移到Hugo
Gitea迁移和SSH容器直通
FGHWETT · 2024-12-09 · via ncc的个人网站

警告

本文最后更新于 2025-01-22,文中内容可能已过时。

昨天早上看到【聊天室 API】集群式摸鱼派聊天室 Beta 上线啦!,于是我想着咱也搞一个节点做做贡献。但是原先我在腾讯买的服务器根本达不到要求,2C4G还好说,但是带宽10M+真的不是一般人能承担得起的。

于是在我精打细选之后,想到了之前的腾讯云无忧计划轻量云升级之后好像可以达到条件。刚好新加坡那边的git服务器也要到期了,于是就有了今天的迁移计划。

Gitea的迁移是挺简单的,不过之前有个遗憾的地方是没有设置SSH直通,导致拉取代码会多带一个端口号,挺丑的。但是没想到在这里碰到了不少问题。

说起来,我的Gitea服务器也是一波三折,一开始是在国内直接部署的,后来国内换服务器导致重新备案,于是我就把服务器迁移到了香港,采用了docker的方式部署,而在这一直用的是PostgresSQL。

第二次迁移是因为香港的太贵了,于是换了新加坡的主机。考虑到也才2G,就用回了MYSQL,因此也写了一个脚本专门用于迁移仓库,顺便采用1panel封装好的APP方式部署。

这第三次迁移就是重新迁移到国内,之后应该不会再次迁移了。不过这次还是采用自己管理的Compose的方式部署,同时修改了1panel使用的国内Gitea镜像,因此也升级了版本。

Gitea的migrate部分还是挺令人放心的,尽管是从国内改为官方,还升级了版本,影响也不会很大。

迁移的过程非常简单,首先备份docker引用到的目录,然后导出数据库。之后在迁移到新的服务器上,重新写一个compose文件就可以了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
services:
  gitea:
    container_name: gitea
    image: gitea/gitea:1.22.4
    restart: unless-stopped
    ports:
      - 30140:3000
      - 2222:22
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - USER_UID=1000
      - USER_GID=1000
    networks:
      - 1panel-network

networks:
  1panel-network:
    external: true

SSH容器直通

既然是长期使用,那么我还是做了第二部分,去掉git连接中那个丑陋的端口号。

首先就是更改data/gitea/conf/app.ini[server]下的SSH_PORT为22,如果是新部署的就可以忽略这步骤。

之后就是宿主机上需要操作的部分了。需要确保宿主机有一个git的用户,这里为了方便用户和用户组都采用了新的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 创建用户组 用户id不和其他用户重复
groupadd -g 1100 git

# 创建用户 用户组id不和其他用户组重复
useradd -u 1100 -g 1100 git

# 创建ssh密钥
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"

# 创建文件/usr/local/bin/gitea 并附加运行权限
ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"

# 添加密钥 用户宿主机连接容器主机使用 其他管理面板添加的需要重新添加一下(任意一个即可)
echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys

最后说两句

说了这么多,主要还是因为中文的翻译文档导致的,相比英文的文档,中文的部分貌似是翻译加人工过滤之后的,虽然简洁明了,但是有些话还是有歧义的,导致一开始我以为只要是是有对应环境变量中用户的宿主机用户去操作就可以了,结果弄了半天都不行。

不过,我猜测使用其他用户应该也是可以的,而git@git.example.com:username/repo.git中的第一个git就是对应的用户名。不过后来也懒得测试了,就先这样吧。