概述
使用Ubuntu系统存放git裸仓库和文件镜像,前者用来作为git仓库的远程存储库,后者作为预览或者开启pages的内容呈现。初步的需求较为简单,就是作为一个博客发布页的存放位置,可以提供pages服务以供浏览。
服务器准备:首先需要在ubuntu中创建名为git
的系统用户,远程仓库地址为ssh链接:git@[address]:[username]/[repo_name].git
;接着为该用户分配管理员权限,便于执行一些文件操作;最后出于安全考虑禁用该用户的远程shell登录,保证其功能唯一性。
创建远程存储库:创建两个文件夹——git仓库(/home/git/whuls/sample.git
)和文件镜像(/home/git/whuls/sample
),在git仓库中创建推送后钩子(post-receive),用于更新文件镜像;接着将钩子的文件权限设置为可执行;最后将两个文件夹的所属权设置为git
用户。
在服务器创建用户
创建用户git
1 | sudo adduser git |
为git
分配管理员权限:在/etc/sudoers
中添加一行
1 | git ALL=(ALL:ALL) ALL |
禁用git
的远程登录:在/etc/passwd
中,找到git:x:1001:1002:,,,:/home/git:/bin/bash
,将其改为:
1 | git:x:1001:1002:,,,:/home/git:/usr/bin/git-shell |
/etc/passwd
每条记录的格式为:account:password:用户ID:组ID:一般信息;目录;终端
这是将终端设备改为git-shell
,该终端每次一登录就自动退出,避免登录;但可以正常通过ssh使用git。
创建证书登录
找到/home/git/.ssh/authorized_keys
,若不存在则创建,客户端的将~/.ssh/id_rsa.pub
中的公钥拷贝进去,一行一个。
客户端配置~/.ssh/config
,写入远程的主机的name和ip(name可以与ip相同,也可以自定义字符串)
1 | Host [name] |
创建一个仓库
创建镜像
1 | sudo mkdir /home/git/whuls/sample |
初始化裸仓库
1 | sudo git init --bare /home/git/whuls/sample.git |
先把所有权改为当前执行的用户
1 | sudo chown -R whurs:whurs /home/git/whuls/sample.git |
创建推送后钩子
1 | sudo echo "git --work-tree=/home/git/whuls/sample --git-dir=/home/git/whuls/sample.git checkout -f" > /home/git/whuls/sample.git/hooks/post-receive |
设置钩子可执行
1 | sudo chmod u+x /home/git/whuls/sample.git/hooks/post-receive |
最后改回所有权
1 | sudo chown -R git:git /home/git/whuls/sample.git |
创建完成后将git@[ip]:whuls/sample.git
添加到git的远程地址中,就可以使用该地址了;将/home/git/whuls/sample
作为静态页面,即可实现pages。