1107 字
6 分钟
gitea在Synology的实践
2023-06-29

预期:在Synology上使用Docker运行gitea并支持HTTPS和SSH操作仓库。

效果图: https ssh

总览#

以下是实践的方案:

  1. 安装gitea并配置使用的域名
  2. 使用Synology的反向代理设置来配置HTTPS访问
  3. 配置SSH访问,同时保留群晖22端口的正常访问

    note: ssh是最难配置的部分

配置教程#

0. 基础要求#

本文主要介绍配置https和ssh操作仓库,需要具有一定的基础能力

  • 能够使用SSH访问群晖
  • 给群晖配置好了https访问
  • 具有linux操作能力

1. 安装gitea并配置使用的域名#

该步主要参考 gitea的Dcoker安装文档 install-with-docker

群晖容器配置 下面是我的服务配置

version: "3"
services:
  server:
    image: gitea/gitea:1.20.0-rc2
    container_name: gitea
    environment:
      - USER_UID=1032
      - USER_GID=100
      #- DOMAIN=git.jianyun.run
      #- SSH_DOMAIN=git.jianyun.run
      #- GITEA__database__DB_TYPE=postgres
      #- GITEA__database__HOST=192.168.1.1:5432
      #- GITEA__database__NAME=gitea
      #- GITEA__database__USER=xxxxxxxx
      #- GITEA__database__PASSWD=xxxxxx
      - "TZ=Asia/Chongqing"
    restart: always
    volumes:
      - ./data:/data
      # ssh直通时使用,初次安装时不需要
      - /var/services/homes/git/.ssh/:/data/git/.ssh
      # 群晖本地没有这个配置
      #- /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "127.0.0.1:2122:22"

environment环境变量被注释是初次安装的配置,第一次启动后配置就持久到配置文件了,后续注释掉这个环境变量。程序会默认使用配置文件。

2. 使用Synology的反向代理设置来配置HTTPS访问:#

这里需要先配置好群晖的https和域名

  • 在群晖管理界面中打开控制面板 ==> 登录门户 ==> 高级 ==> 反向代理服务器
  • 创建一个新的反向代理规则,将本地的HTTPS流量转发到gitea容器运行的地址和端口(例如将来自域名git.jianyun.run的HTTPS流量转发到127.0.0.1:3000) 新建反向代理
  • 保存配置后,即可通过HTTPS访问gitea

如果页面上提示,访问的url不对,可以在gitea的数据目录中,修改app.ini文件,相对路径gitea/conf/app.ini。将ROOL_URL修改为你的域名,例如ROOT_URL = https://git.jianyun.run/

3. 配置SSH访问:#

a. 新建git用户#

在群晖管理界面中打开控制面板,并选择用户,创建一个新的用户 gituser ,用于SSH访问gitea的仓库。群晖禁用了创建git账号,不过我们可以绕过去。

在创建gituser后,ssh登录到群晖终端。我们强行把gituser修改为git。

sudo su
synouser --rename gituser git

在控制面板中用户权限页面,允许访问homes和数据所在的配置共享文件夹。 在File Station中,找到homes,选择git目录修改它的属性,让这个目录所有权属于git 1IpOjh Eslslz

然后在终端中,编辑/etc/passwd,允许git用户登录,将/sbin/nologin 修改为 /bin/sh 保存。

git:x:1032:100::/var/services/homes/git:/bin/sh

需要修改用户目录为755,这是群晖的一个已知问题,不修改会导致使用git登录ssh失败。

sudo chmod 755 /var/services/homes/git

b. 配置群晖的ssh#

在root用户下执行

# 记录uid、gid
# 示例: uid=1032(git) gid=100(users)
id git

# 创建gitea ssh端口转发配置
touch /usr/local/bin/gitea
# docker gitea映射的ssh端口是2122
echo 'ssh -p 2122 -o StrictHostKeyChecking=no [email protected] "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"' > /usr/local/bin/gitea
# 使用git用户的uid,gid
sudo chown -R 1032:100 /usr/local/bin/gitea
sudo chmod +x /usr/local/bin/gitea
# 创建git用户的 .ssh 目录
mkdir /var/services/homes/git/.ssh
sudo chown -R 1032:100 /var/services/homes/git/.ssh
sudo chmod -R 700 /var/services/homes/git/.ssh
# 创建 gitea key
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
sudo cat /var/services/homes/git/.ssh/id_rsa.pub >> /var/services/homes/git/.ssh/authorized_keys
sudo chown -R 1032:100 /var/services/homes/git/.ssh/authorized_keys
sudo chmod -R 600 /var/services/homes/git/.ssh/authorized_keys

c. 修改gitea docker-compose配置#

修改环境变量中的USER_UID、USER_GID,使它和git用户的保持一致。

environment:
  - USER_UID=1032
  - USER_GID=100

挂载ssh目录

volumes:
  # ssh直通时使用,初次安装时不需要
  - /var/services/homes/git/.ssh/:/data/git/.ssh

gitea的数据目录需要群晖中修改属主,改为git。在File Station中改也行,在终端中也可以

假设当前在数据目录这里

sudo chown -R 1032:100 ./data

修改完成后重启服务。

d. 测试#

在gitea网页上,增加自己的公钥。 然后 ssh [email protected],正确的话可以获得这样的提示。

IKSDdH

[可选] 禁用ssh密码登录#

为了更好地安全性,我们应该禁用SSH密码登录。当然你必须先设置好公钥登录。 使用在群晖终端上,修改/etc/ssh/sshd_config文件, PasswordAuthentication设置为no。然后使用sudo systemctl restart sshd 重启服务。

PasswordAuthentication no

End#

这样,gitea就可以在Synology上成功运行,并支持HTTPS和SSH访问。你可以根据实际情况进行配置和调整。

引用#

  1. Configure Synology NAS SSH Key-based authentication
  2. gitea: 使用 Docker 安装
gitea在Synology的实践
https://www.jianyun.run/posts/use-gitea-in-synology/
作者
唐长老日志
发布于
2023-06-29
许可协议
CC BY-NC-SA 4.0