预期:在Synology上使用Docker运行gitea并支持HTTPS和SSH操作仓库。
效果图:
总览
以下是实践的方案:
- 安装gitea并配置使用的域名
- 使用Synology的反向代理设置来配置HTTPS访问
- 配置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
然后在终端中,编辑/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],正确的话可以获得这样的提示。
[可选] 禁用ssh密码登录
为了更好地安全性,我们应该禁用SSH密码登录。当然你必须先设置好公钥登录。 使用在群晖终端上,修改/etc/ssh/sshd_config
文件, PasswordAuthentication
设置为no
。然后使用sudo systemctl restart sshd
重启服务。
PasswordAuthentication no
End
这样,gitea就可以在Synology上成功运行,并支持HTTPS和SSH访问。你可以根据实际情况进行配置和调整。