自建 VPS 服务器的一些攻略

Gitea,自建 git 服务器

本篇教程适用于熟悉 git 操作的用户。关于如何使用 git / gitea,请参阅其它教程

Gitea 是一款开源的、轻量级、自托管的 Git 代码托管平台,类似于 GitHub 或 GitLab。用户将代码或者文档托管在自己的服务器上,更好地保护了安全隐私。

本文的安装配置,使用 SQLite 数据库,对于个人使用足够了。更复杂的配置,可以参见官网的 docker 安装教程

常见的 2 种使用 git 的方式:https 和 ssh。如果只用到 https,配置相对更简单一些。本文会在后面介绍使用 ssh 需要的额外操作。

docker compose 目录结构

/DOCKERS/gitea
├── gitea              # 数据文件夹
└── docker-compose.yml # 配置文件

docker-compose.yml

services:
  gitea:
    image: docker.gitea.com/gitea:1.26.1
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "5511:3000"
# 如果不需要通过 ssh 使用 git,可以省略下面的代码
      - "5512:22"
    networks:
      - network_expose
networks:
  network_expose:
    external: true

Nginx conf 配置文件(官网样例):

假设为 gitea 分配的域名为 gitea.example.com

server {
    server_name gitea.example.com;

    listen 443 ssl;
    ssl_certificate /ADMIN/https-certs/all.example.com.public.pem;
    ssl_certificate_key /ADMIN/https-certs/all.example.com.private.key;

    location / {
        # 基础代理设置
        proxy_pass http://localhost:5511;

        client_max_body_size 512M;
        proxy_set_header Connection $http_connection;
        proxy_set_header Upgrade $http_upgrade;
        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;
    }
}

启动 docker compose 服务,重启 nginx 网络服务器。然后,从浏览器进入网站,初次运行会进入设置界面,重点修改下列选项:

然后点击 Install Gitea,安装后,自动进入管理员界面,就可以使用了。

更多配置,位于 docker compose 文件夹下的 gitea/gitea/conf/app.ini 文件,修改后重启 gitea(重启 docker compose)生效。

cd /DOCKERS/gitea
sudo docker-compose down
sudo nano ./gitea/gitea/conf/app.ini
sudo docker-compose up -d

使用 ssh 连接 git 服务器

服务器端设置

在 ./gitea/gitea/conf/app.ini 配置文件中,设置 SSH_DOMAIN。默认的 SSH_DOMAIN 和 https 使用的 DOMAIN 相同(譬如 gitea.example.com)。这个 SSH_DOMAIN 唯一的作用,是在页面一键复制项目的 git 地址时,比较方便而已。可以将 SSH_DOMAIN 改成任何别名,只需要和下文客户端里配置的 Host 名称一致即可。

app.ini 里的相关配置,修改后重启 gitea 生效:

[server]
DOMAIN = gitea.example.com      # https 使用的域名
SSH_DOMAIN = hostname-sample      # ssh 使用的别名
HTTP_PORT = 3000
DISABLE_SSH = false             # 默认开启 SSH 功能
SSH_PORT = 22
SSH_LISTEN_PORT = 22

然后可以在网页里得到这样的 ssh 项目地址:

git@hostname-sample:repository-name.git

客户端设置

从客户端访问 gitea 服务器的真实地址,可以使用下面几种方式:

其实这两种方式都会暴露 VPS 的 ip 地址,所以在需要考虑隐私安全的场合,尽量在个人范围内谨慎使用。也有一些可以隐藏 VPS 真实 ip 的方式,譬如使用 Nginx 的 stream 模块,把另一个指向 443 端口的 Proxied 域名请求分流到 gitea 的 ssh 端口;或者使用 cloudflared 来隐藏 ip。但是都需要复杂的设置,这里就不多介绍了,如果不想向外人泄露 VPS ip 地址,还是建议只用 https 使用 gitea。

客户端 ssh 连接 gitea 的步骤(以 Linux 为例):

  1. 在客户端本地生成密钥,譬如
ssh-keygen -t rsa -f ~/.ssh/vps-gitea
  1. 在 gitea 网页的 User Settings - SSH/GPG Keys 页面,添加 SSH key,复制上一步生成的公钥内容( ~/.ssh/vps-gitea.pub )

  2. 编辑本地的 ~/.ssh/config 文件,添加:

Host hostname-sample              # 任意别名,最好和 gitea 的 SSH_DOMAIN 一致
    HostName 123.123.123.123      # VPS ip 或指向它的域名
    Port 5512                     # 本文 docker-compose.yml 里使用的 ssh 端口
    User git
    IdentityFile ~/.ssh/vps-gitea # 第 1 步生成的密钥
  1. 可以用如下命令进行测试
ssh -T git@hostname-sample

#Server #Manage #Git