Hugo创建个人网站并部署到vps

信息
请先参考上一篇文章学习创建git用户并赋予root权限,设置免密登录以及在服务器上创建仓库。

/etc/sudoers添加git用户权限

sudo chmod +w /etc/sudoers
sudo vim /etc/sudoers

root ALL=(ALL:ALL) ALL下面添加git ALL=(ALL:ALL) ALL,保存退出

取消/etc/sudoers写权限

sudo chmod -w /etc/sudoers
su git # 切换到git用户
cd 
mkdir project/blog
cd project/blog
git init --bare blog.git
chmod -R 777 blog.git
mkdir -p /var/www
cd /var/www
mkdir blog
chown -R git:git /var/www/blog/
sudo chmod -R 777 /tmp

切换为 git 用户和文件夹,新建 post-receive 脚本文件

su git
cd /home/git/project/blog/blog.git/hooks
vim post-receive

post-receive文件内容如下:

#!/bin/bash

GIT_REPO=/home/git/project/blog/blog.git
TMP_DIR_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/blog
rm -rf ${TMP_DIR_CLONE}
git clone $GIT_REPO $TMP_DIR_CLONE
rm -rf $PUBLIC_WWW/*
cp -rf $TMP_DIR_CLONE/* $PUBLIC_WWW

添加可执行权限

chmod +x post-receive

进入hugo生成的public文件夹,初始化仓库,配置仓库信息,提交一次

cd public
git init 
git config user.name your_git_name
git config user.email your_git_email
git add -A
git commit -m 'first commit'

绑定远程仓库后再push

git remote add origin git@your_VPS_IP:/home/git/project/blog/blog.git
# 或者使用上一篇教程设置的别名
git remote add origin git_server:/home/git/project/blog/blog.git


git remote set-url origin ssh://git@your_VPS_IP:SSH_Port/home/git/project/blog/blog.git
# 或者使用别名
git remote set-url origin ssh://git_server:SSH_Port/home/git/project/blog/blog.git


git push -u origin master

通过上述操作,在本地push后,public文件夹的文件经过钩子脚本处理后会克隆一份到/var/www/blog中,后面就可以使用nginx配合域名来实现网站上线了。

建议使用宝塔面板进行配置,最关键就是修改静态文件所在位置:root /var/www/blog;

server
{
	...
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    # location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    # {
    #     expires      30d;
    #     error_log /dev/null;
    #     access_log /dev/null;
    # }
    
    # location ~ .*\.(js|css)?$
    # {
    #     expires      12h;
    #     error_log /dev/null;
    #     access_log /dev/null; 
    # }
    location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
        root /var/www/blog;
        access_log   off;
        expires      1d;
    }
    
    location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
        root /var/www/blog;
        access_log   off;
        expires      10m;
    }
    
    location / {
        root /var/www/blog;
        if (-f $request_filename) {
        rewrite ^/(.*)$  /$1 break;
        }
    }
    
    location /nginx_status {
        stub_status on;
        access_log off;
    }
    ...
}