珂珂的个人博客 - 一个程序猿的个人网站

docker 安装gitea

很久没动服务器了,准备在上面安装个git服务。

因为上面已经有docker了  

那么先安装docker -compose   

运行

sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

查看docker-compose版本

docker-compose --version


起初我还运行了个pip install docker-compose

但这个安装后查看docker-compose会报错,我也没卸载直接用上面的安装方法可以。

然后创建docker-compose.yml 文件

内容为

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.21.3
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=xxxxxx:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=xxxxx
      - GITEA__database__PASSWD=xxxxx
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"

然后运行

docker-compose up -d

然后cd到 docker-compose.yml 这个文件所在目录运行

docker-compose ps

用来查看是否启动


5.22

备份与恢复

参考官方文档备份与恢复 | Gitea Documentation

docker exec -u git -it -w /tmp 32adc16692a5 bash -c '/usr/local/bin/gitea dump'

32adcxxx  是容器ID

我找了半天没找到备份的文件,原来是在docker的容器中,我没有映射docker容器中的/tmp

下面命令可以看到

docker exec -it 32adc16692a5 ls /tmp

用下面命令进入bash

docker exec --user git -it 32adc16692a5 bash

用以下命令将docker容器中的文件复制到主机

docker cp 32adc16692a5:/tmp/gitea-dump-1716367822.zip /root/gitea_backup/gitea-dump-1716367822.zip

解压这个zip 可以看到两个文件夹 data 和repos  其中repos 是git项目,其实直接 git clone 这个repose 中的项目也是可以的。

实际上git项目也存在于 docker-compose.yml 所在目录下的gitea/git/repositories/.......   也是可以直接clone的


由于我是用nginx 配置了代理,拉取推送大的仓库时候会报错

error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413

fatal: the remote end hung up unexpectedly

这是因为采用http  https推送git的时候默认http.postBuffer是1MB,使用以下命令修改为500MB

git config --global http.postBuffer 524288000

但我在docker容器中和本机上都试了还是无效?

后来查找到需要配置nginx

修改/etc/nginx/nginx.conf  在server节点中增加

client_max_body_size 500m;

改完这个配置之后,执行nginx -t,验证配置文件的合规性;再执行nginx -s reload 重新加载配置文件。

当然用ssh 方式拉取代码不会出现以上错误。


5.23  配置SSH

先生成ssh密钥对

我起初是在阿里云的密钥对管理中生成的,但没看到公钥,后来又在腾讯云密钥对管理中生成,可以看到公钥。但导入到gitea中会报错

无法验证您的 SSH 密钥: key length is not enough: got 2048, needs 3071

这个意思看来是腾讯云中生成的密钥是2048位  但gitea中至少需要3071 位

那么用命令生成一个4096 位的,linux和windows下都可以运行此命令

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"   

按三次回车,注意第二次如果输入了不包含路径文件名那么会在当前目录中生成公钥和私钥

三次回车后在/root/.ssh/下生成了id_rsa.pub 公钥和id_rsa 私钥

然后将id_rsa.pub的内容添加到gitea中


最开始我用  ssh://git@git.kecq.com/yuanjun/CoreLib.git

提示要求输入密码,这个显然不是 gitea账户的密码,实际上分析这个是连接到宿主机ssh 22端口的而不是gitea容器中的22端口,还需要修改gitea容器中的app.ini 文件

我的路径在/root/gitea/gitea/gitea/conf

将SSH_PORT 和SSH_LISTEN_PORT  改为docker-compose.yml 中一样的,我的是8222

然后重启容器,可以看到gitea网站中的ssh 路径已经带端口号了

 ssh://git@git.kecq.com:8222/yuanjun/CoreLib.git


windows中ssh 访问

右键选择 Open Git GUI Here   再点击Help 菜单下的Show SSH Key这里也可以生成密钥对,实际上它是读取的.ssh路径下的id_rsa

如果在用ssh-keygen -t rsa -b 4096 -C "your_email@example.com"    生成的时候第二步输入了文件名,那么需要将生成的公钥和私钥改名为id_rsa  放到本机的.ssh 路径下,我的是C:\Users\fyj\.ssh


如果不想更改名称或者为git客户端配置多个ssh,可以采用如下方法

新建一个SSH配置文件 ~/.ssh/config,添加如下内容

其中 Host 和 HostName 填写 git 服务器的域名,IdentityFile 填写对应的私钥的路径


Host git.kecq.com

    HostName git.kecq.com

    Port 8222

    User git

    IdentityFile ~/.ssh/myssh 


这样就可以通过ssh 使用git clone 了,注意上面的host  不能改为名称如myssh这样的名称git clone 会报Permission denied (publickey).

另外我还想将这个密钥对加入阿里云服务器连接,继续在此文件中加入

Host aliyun

    HostName kecq.com

    Port 22

    User root

    IdentityFile ~/.ssh/myssh


然后先用密码连接上阿里云 运行

ssh-copy-id -i ~/.ssh/id_rsa.pub kecq.com

注意上面的kecq.com 不能改为myssh不然会报

 ERROR: ssh: Could not resolve hostname myssh: Name or service not known

第一次添加可能会出现ED25519 key fingerprint is SHA256  

输入yes  回车  再输入密码就可以了

然后在windows  cmd中输入 ssh aliyun  就可以连接了


分别测试SSH连通性

ssh -T git.kecq.com

ssh -T aliyun

但用下面的无法通过测试

ssh -T root@kecq.com

ssh -T git@git.kecq.com

会报错

 Could not resolve hostname git.kecq.com:8222: \262\273\326\252\265\300\325\342\321\371\265\304\326\367\273\372\241\243



ssh 访问git代码库

但用TortoiseGit 小乌龟不能clone  会报错,因为它默认不是使用系统的ssh

需要设置中将ssh路径由C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe 改为C:\Program Files\Git\usr\bin\ssh.exe

如第一次连接出现

The authenticity of host 'gitea.com (IP ADDRESS)' can't be established.

RSA key fingerprint is SHA256:Fo6Tm/SLyse8uglFB1JShqQWchU0kcPzSRueD1O9K0I.

Are you sure you want to continue connecting (yes/no/[fingerprint])?

这种的话需要输入 yes回车


Linux  访问ssh  git

如果直接执行git clone ssh:xxxxxxxxxxxxxxxxxxx

会报出

Permissions 0644 for '/root/.ssh/id_rsa' are too open.

需要执行

chmod 600 /root/.ssh/id_rsa

然后就可以git clone 了 



上一篇:个人代码全部开源

下一篇:AMD 5800H 小主机折腾记


0 评论

查看所有评论

给个评论吧