服务器上的Git-配置服务器原创
来源https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E9%85%8D%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8
- 在服务器上搭建Git环境,创建Git仓库
- 在主机生成blog(hexo or vuepress)静态文件,通过与服务器连接,推到服务器上的Git仓库
- 通过git-hooks实现自动部署到网站资源目录
- Nginx做静态文件服务器,实现外界对网站资源目录的访问
# 创建一个Git用户
创建一个git用户,并在home目录下建立一个.ssh
目录,赋予其700权限。
sudo adduser -m git
su git
mkdir ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
然后只需要将ssh连接的公钥复制到authorized_keys
文件中就可以通过ssh 连接git用户了
接着,我们需要为系统用户 git
的 authorized_keys
文件添加一些开发者 SSH 公钥。 假设我们已经获得了若干受信任的公钥,并将它们保存在临时文件中。
创建用户并配置其仓库
创建用户 useradd git
设置密码 passwd git
切换用户 su git
进入git用户的家目录 cd /home/git/
项目存在的真实目录(当然你可以创建在其他地方) mkdir -p projects/blog
创建文件夹 mkdir repos && cd repos
创建一个裸露的仓库 git init --bare blog.git
cd blog.git/hooks
创建 hook 钩子函数,输入了内容如下 vi post-receive
-------------分割线不需要复制-------------
#!/bin/sh git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f
-------------分割线不需要复制-------------
按住ESC,然后输出`:wq`可以保存退出哦! // 为刚才的文件添加可执行的权限 chmod +x post-receive // 退出到 root 登录 exit // 添加权限 chown -R git:git /home/git/repos/blog.git
一、通过Git生成SSH密钥
// 假如没有设置git的全局信息需要先设置 设置过了可以忽略
git config --global user.name "yourname"
git config --global user.email youremail@example.com
// 生成SSH密钥
ssh-keygen -t rsa -C "youremail@example.com"
// 禁用自动转换,这个不设置后面上传时会出现警告
git config --global core.autocrlf false
命令,不过无妨,既然不能使用命令,那么我就手动。如果你上面的两个命令没有问题,那么可以跳过我手动建立信任关系的过程。 手动设置:
依次执行以下命令 切换到git用户 su git 进入家目录,如果没有.ssh目录,那么需要创建。如果存在直接进入即可 cd ~ 创建.ssh目录 mkdir .ssh 赋予权限 chmod 700 .ssh/ 进入.ssh目录 cd .ssh 编辑一个名为authorized_keys的文件,并写入公钥(id_rsa.pub)内容 vi authorized_keys 添加完成后赋予权限 chmod 600 authorized_keys
图片中的命令如果与给出代码命令有出入,请以给出代码为准,图片仅作参考。
- 在自己电脑测试能否连接成功。 ssh git@server_ip此时登录就需要密码了。
完成以上步骤后通过
ssh git@server_ip
连接服务器是不需要密码的。如果还是需要密码,请检查你是否遗漏的哪一步没有做为了安全,禁用 git 用户的 shell 登录权限。从而只能用 git clone,git push 等登录 在服务器端输入以下命令: // 如果不是root用户请切换至root用户 su root // 查看 git-shell 是否在登录方式里面 cat /etc/shells // 查看是否安装 which git-shell vi /etc/shells // 添加上2步显示出来的路劲,通常在 /usr/bin/git-shell
修改/etc/passwd
中的权限
修改passwd文件 vi /etc/passwd
将原来的 git❌1000:1000::/home/git:/bin/bash
修改为 git❌1000:1000::/home/git:/bin/git-shell
# 限制git用户的shell
上面创建的git用户可以通过ssh连接,进行任何操作。为了安全性,我们需要将git用户的活动限制在与Git相关的范围,也就是把git用户的shell改成 git-shell
sudo chsh git -s $(which git-shell)
当然通过修改/etc/profile
也可以达成这一目的。
# 创建blog 对应的git仓库
在 /var/repo
下,创建一个空的blog.git
仓库,请灵活替换。
mkdir /var/repo
cd /var/repo
git init --bare blog.git
# 配置git-hooks
也就是配置git推送后执行的脚本
vim /var/repo/blog.git/hooks/post-receive
添加
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
意思是从blog.git
仓库覆盖掉/var/hexo
目录,达到更新的目的。为其添加执行权限
chmod +x /var/repo/blog.git/hooks/post-receive
改变blog.git目录的拥有者
chown -R git:git blog.git
# 创建静态文件目录,并赋予权限
mkdir /var/www/hexo
chown -R git:git /var/www/hexo
chmod -R 755 /var/www/hexo
# 测试
配置完git后,可以通过git clone git@<ip地址或域名>:/var/repo/blog.git
来测试git ssh
# 配置hexo
打开hexo blog的目录,修改_config.yml
文件,然后就可以使用npx hexo clean && npx hexo g -d
进行生成部署了
deploy:
type: git
repository : git@<ip地址或与域名>:/var/repo/blog.git
branch: master
# nginx配置http强制跳转https
很多网站虽然支持 https, 但是直接在浏览器地址栏输入网址后, 默认仍是以 http 协议去访问的, http 强制跳转 https 的需求应运而生,
# rewrite 方法
这是最常用的实现方法, 将所有 http 请求通过 rewrite 重定向到 https 即可
进入nginx.conf文件下
vim /usr/local/nginx/nginx.conf
或
vim /etc/nginx/sites-available/default
打开之后文件,可以将没用的东西都删除掉,删除的时候注意,括号要对应起来。
然后进行配置,输入:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
#监听443端口
listen 443 ssl;
#index index.html index.htm;
#access_log /var/log/nginx/docs.log main;
#你的域名
server_name zervan.cn;
ssl on;
#ssl证书的pem文件路径
ssl_certificate /etc/nginx/cert/7105204_zervan.cn.pem;
#ssl证书的key文件路径
ssl_certificate_key /etc/nginx/cert/7105204_zervan.cn.key;
location / {
root /var/www/hexo;
#proxy_pass http://公网地址:项目端口号;
}
}
server {
listen 80;
server_name zervan.cn;
#将请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
# return 302 https://$host$request_uri;
}
}
###
server {
listen 443 ssl;
server_name zervan.cn;
ssl_certificate /etc/nginx/cert/7105204_zervan.cn.pem;
ssl_certificate_key /etc/nginx/7105204_zervan.cn.key;
location / {
root /var/www/hexo;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/hexo;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
注意:这里需要在安全组中开放443端口。
配置完成,重启nginx服务。