安装步骤
- 确认群晖版本
- 安装docker
- 开启ssh
- 创建git用户
- 拉取gitea镜像
- 开启ssh端口共享
首先确定一下群辉版本
6.x的去套件中心安装 docker
7.x版本安装Container Manager
开启群辉的ssh服务
并使用ssh工具连接到群辉上
创建gitea用户
如果创建用户时候提示 【出于安全原因,请使用“git”以外的账户名称】,可以先随便起一个名字
用户组这里就保持不变就可以了
共享文件夹权限,只保留一个必要的目录,也就是gitea
的工作目录,其他目录权限一律不给
这里的应用程序权限全都拒绝,也就是这个账号不允许使用任何dsm的功能,这样的话可以把风险降到最低
账号创建好了以后,用ssh
登录群辉并切换到root
用户,通过该命令行修改创建的用户【gitea
】为【git
】
synouser --rename gitea git
然后使用 id git
命令来获取git用户的 uid
和gid
,这里获取到的uid为1033
,gid
为100
,把这两个值填写到下面的docker-compose.yml
中
修改账号名称的目的是让gitea
的运行用户为git
这样git clone
的地址就是 git clone git@doman.com:/username/repo.git
如果不修改的话 上面的这个地址就是 git clone gitea@doman.com:/username/repo.git
部署gitea
这里使用docker-compose部署,compose.yml文件如下
version: "3" networks: gitea: external: false services: server: image: gitea/gitea:1.20.0-rc1 container_name: gitea environment: - USER=git - USER_UID=1033 # id git 命令获取到的 uid和gid - USER_GID=100 # id git 命令获取到的 uid和gid - GITEA_CUSTOM=/data/gitea - GITEA__database__DB_TYPE=mysql - GITEA__database__HOST=gitea-mysql:3306 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always networks: - gitea ports: - "3000:3000" - "2222:22" volumes: - /volume1/homes/git/.ssh:/data/git/.ssh - /volume1/docker/gitea/gitea:/data - /etc/localtime:/etc/localtime:ro depends_on: - gitea-mysql gitea-mysql: image: mysql:8 restart: always environment: - MYSQL_ROOT_PASSWORD=gitea - MYSQL_USER=gitea - MYSQL_PASSWORD=gitea - MYSQL_DATABASE=gitea networks: - gitea volumes: - /volume1/docker/gitea/mysql:/var/lib/mysql
手动创建一下如下的几个目录
# ssh 认证目录 mkdir -p /volume1/homes/git/.ssh # gitea工作目录 mkdir -p /volume1/docker/gitea/gitea # 数据库工作目录 mkdir -p /volume1/docker/gitea/mysql
注意:配置文件中映射了几个目录 这几个目录一定要提前创建好否则启动失败
然后使用 docker-compose -f /path/to/compose.yml up
启动gitea
启动完成后 可以通过 http://【群晖的ip地址,ddns域名】:3000
来打开gitea的初始化页面,进行初始化配置
开启ssh端口共享
下面命令直接一步一步执行就可以,针对群辉的目录结构做了路径修改
# 生成用来验证的密钥对 sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key" # 把出来的密钥对的公钥放到免密登录的认证文件中 sudo -u git cat /volume1/homes/git/.ssh/id_rsa.pub | sudo -u git tee -a /volume1/homes/git/.ssh/authorized_keys # 修改免密登录认证文件的权限,该权限是固定的如果不是该权限就会直接走密码认证 sudo -u git chmod 600 /volume1/home/git/.ssh/authorized_keys # 增加ssh透传到容器的脚本,该脚本名称和路径都是固定的不能动 cat <<"EOF" | sudo tee /usr/local/bin/gitea #!/bin/sh ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@" EOF # 让脚本所有人都有执行权限 sudo chmod 777 /usr/local/bin/gitea
这时候 使用 ssh git@localhost 去连接 会提示一个错误
root@nap:/volume1# ssh git@localhost PTY allocation request failed on channel 0 Permission denied, please try again. Connection to localhost closed.
这个错误是由于git
用户就没有登录系统的权限,而群辉非管理员账户都不允许使用类似telnet、ssh
之类的工具连接,所以需要手动修改配置文件让git
用户可以有登录系统的权限,有了登录系统的权限,ssh
就自然能连接上了。
解决权限问题直接采用群辉计划任务
新建一个开机启动的脚本,脚本内容如下
#!/bin/bash filePath="/etc/passwd" function backupPasswd() { # if [ ! -f "$filePath.bak" ]; then echo "backup passwd files to: $filePath.bak"; cp $filePath $filePath.bak; chmod a+r $filePath.bak; # fi; } function modifyLogin () { echo "modify login permission"; backupPasswd; sed -i -e 's/\/var\/services\/homes\/git:\/sbin\/nologin/\/var\/services\/homes\/git:\/bin\/sh/' $filePath; checkGitLogin; } function checkGitLogin() { checkNoLogin=$(grep /var/services/homes/git:/sbin/nologin $filePath); if [ ${#checkNoLogin} -ne 0 ]; then echo "git login is not allowed"; return 1; else echo "git login is allowed not need change"; return 0; fi; } checkGitLogin; if [ $? -eq 1 ]; then modifyLogin; fi;
新增任务,写一个任务名称,用户账号选择root
把上面的脚本粘贴到自定义脚本中
创建好任务以后 手动运行一下
点击运行以后 查看运行结果,如下图所示就是成功了
测试一下是否有效,连接成功以后输出如下图就是成功了