Hexo部署到个人服务器
一、搭建一个Git服务端
1. 安装Git及创建用户
# 安装Git
yum install git
创建一个git用户组和用户,用来运行git服务
groupadd git
adduser git -g git禁止git用户登录:
修改 /etc/passwd文件,修改
# 找到这句:
git:x:503:503::/home/git:/bin/bash
改为:
git:x:503:503::/home/git:/bin/git-shell2. 创建证书登录
mkdir /home/git/.ssh
chmod 700 /home/git/.ssh
touch 700 /home/git/.ssh/authorized_keys
chmod 600 /home/git/.ssh/authorized_keys
注意,如果是采用的 sudo方式来创建git和相应的文件的,需要设置 /home/git/.ssh/的owner为git,否则还是每次要输入密码的。
# owner改为git
sudo chown -R git:git /home/git/.ssh/
编辑 /home/git/.ssh/authorized_keys,把客户端的公钥放进去,1个公钥1行。
附:如何创建私钥:
# 创建私钥,文件位于用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件
ssh-keygen -t rsa -C "youremail@example.com"
3. 初始化git仓库
cd /home
mkdir gitrepo
chown git:git gitrepo/
cd gitrepo
创建一个空的Git仓库,服务器上的Git仓库通常都以.git结尾
git init --bare blog.git
将仓库所属用户改为git
chown -R git:git blog.git
4. 克隆仓库
在另一台电脑上(下面称为:Client),安装git,并且运行下面的命令:
git clone git@10.123.123.123:/srv/gitrepo/project.git
5. 验证安装
# 在本地Client的project目录下,创建一个文件:text.txt,内容随意,然后上传到远端:
git push origin master
在本地Client的另外一个目录下,克隆一下:
git clone git@10.123.123.123:/srv/gitrepo/project.git
6. 常用Git命令
git add . 添加所有文件 注意有个 .
git commit -m '注释' 提交本地
git push origin master提交给默认分支
git -rm 删除
git pull origin master 从默认分支下载
git branch -v 查看所有分支
二、后续配置
1. 本地_config.yml配置
将_config.yml中deploy配置修改为服务器自己生成的个人仓库地址;例:
deploy:
type: git
message: update
repo: git@101.34.70.247:/home/gitrepo/blog.git
branch: master
2. 配置Git脚本
成功推送到自己的仓库后;需要利用脚本将仓库的public资源拉取到一个文件夹下,作为Nginx后面在配置的映射地址;进入配置的仓库下的Hooks文件夹;例:
cd /home/blog.git/hooks
touch post-receive
vim post-receive
写入以下脚本:
#!/bin/sh
GIT_REPO=/home/gitrepo/blog.git
TMP_GIT_CLONE=/home/gitrepo/tmp/blog
PUBLIC_WWW=/home/gitrepo/project/blog
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}
cp -rf ${TMP_GIT_CLONE} ${PUBLIC_WWW}
脚本内容是为了让Git仓库每次检测到push行为后,将最新的资源文件Git clone在你要访问的文件夹下。
并且需要修改文件夹的读写权限,不然是无法自动执行该脚本:
sudo chown -R root:git /home/gitrepo/tmp
chmod -R g+w /home/gitrepo/tmp
3. 配置Nginx
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /home/gitrepo/project/blog;
server_name 域名或IP;
access_log /srv/nginxlog/blog_access.log;
error_log /srv/nginxlog/blog_error.log;
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /home/gitrepo/project/blog;
access_log off;
expires 1d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /home/gitrepo/project/blog;
access_log off;
expires 10m;
}
location / {
root /home/gitrepo/project/blog;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}
}
默认评论
Halo系统提供的评论