目录

Hugo文档 - 7. 使用云服务器搭建个人网站

使用github pages访问网页的速度并不理想, 决定使用云服务器来搭建个人网站

准备工作

系统: 阿里云服务器 ubuntu 18.04

工具: xshell

思路: 1. 把本地的public目录推送到云服务器中创建的仓库hugo.git中, hugo.git只存提交信息, 静态资源会存放在hugo目录中, 2. 使用Nginx访问静态资源, 当用户访问网站时, 先经过 Nginx, Nginx 把hugo目录下的静态资源返回给用户

https://pic.imgdb.cn/item/629a49e70947543129551864.png
示意图

连接服务器

使用 xshell 或者 cmd 连接到云服务器, 如果使用 cmd

1
2
3
4
5
# 如果未创建用户, 默认为 root 用户
ssh root@服务器ip

# 如果已经创建了用户
ssh 用户名@服务器ip

检查是否安装 git

1
2
3
4
git version

# 如果没安装
sudo apt install git

新建用户

1
2
3
4
5
6
7
8
9
# 使用root用户创建新用户
su root
# 新建用户
adduser hugo
# 添加root权限
vim /etc/sudoers
# 在root ALL=(ALL:ALL) ALL下添加一行
hugo    ALL=(ALL:ALL) ALL
# 输入 x! 退出

关于用户的其他指令, 这里暂时不用

1
2
3
4
# 设置用户密码, 如果是普通用户可以用来修改密码
passwd 用户名
# 删除用户
sudo userdel -r 用户名

创建"裸仓库"

1
2
3
4
5
6
7
8
# 使用hugo用户
su hugo
# 进入hugo用户目录下
cd /home/hugo
# 创建"裸仓库"
git init --bare hugo.git
# 创建用来存放push内容的目录
mkdir hugo

注意

  1. 不要使用root用户, 否则新建目录或文件时, 权限属于root用户, 还要分配目录的拥有者: chown -R hugo:hugo hugo.git, 否则push时会出现权限问题, 导致推送不成功, 使用命令 ll 可以看到目录属于哪个用户

  2. 执行 git init –bare hugo.git 会生成一个名为hugo.git的"裸仓库", 所谓的"裸仓库"是没有工作区的, 只会记录 git 提交的历史信息, git log一下是可以看到各个版本信息的, 但是没办法进行版本回退或者切换分支的操作, 但是有一个好处是可以通过添加 hooks 钩子, 然后在同级目录下新建一个目录 hugo 用来存放项目源码, 也就是说将 git 仓库与项目源码分离

  3. 如果不想在hugo的用户目录下存放项目, 可以在你想放的位置新建目录, 然后执行: chown -R username:username 目录的绝对路径

配置钩子

post-receive 钩子在整个过程完结以后运行, 可以用来更新其他系统服务或者通知用户

1
vim /home/hugo/hugo.git/hooks/post-receive

把下面代码复制到里面

1
2
#!/bin/sh
git --work-tree=/home/hugo/hugo --git-dir=/home/hugo/hugo.git checkout -f

配置权限

1
chmod +x /home/hugo/hugo.git/hooks/post-receive

配置Nginx

安装Nginx

1
2
sudo apt update 
sudo apt install nginx

修改Nginx默认的配置文件

1
2
vim /etc/nginx/sites-available/default
# 把 root /var/www/html 改成 /home/hugo/hugo

重启服务

1
2
3
service nginx reload
service nginx restart
# 使用普通账号启动或重载系统服务, 会提示需要输入密码, 根据提示输入密码即可

关于Nginx的其他指令, 这里暂时不用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 删除除了配置文件以外的所有文件
sudo apt remove nginx nginx-common

# 删除所有与nginx有关的东西, 包括配置文件。
sudo apt purge nginx nginx-common 

# 在上面命令结束后执行, 主要是删除与Nginx有关的且不再被使用的依赖包
sudo apt autoremove 

# 删除两个主要的包。
sudo apt remove nginx-full nginx-common 

# 重启nginx, 重启失败, 说明已成功卸载nginx
sudo service nginx restart

建立连接

道理跟连接 GitHub 一样

先配置SSH公钥, 在本地电脑执行下面命令, 会在用户目录下生成一个 .ssh 的目录, 打开 id_rsa.pub 并复制内容

1
ssh-keygen -t RSA -C "邮箱地址"

在服务器中创建 .ssh 目录, 再创建文件 authorized_keys 用来存放公钥

1
2
3
4
5
6
7
# 此时所在的目录是 /home/hugo
mkdir .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

# 打开文件, 把 id_rsa.pub 里面的公钥复制到里面
vim .ssh/authorized_keys

推送

如何配置站点和生成public目录就不多说了

在mysite下执行 hugo后, 把 public目录推送到服务器中的 hugo.git 仓库里面

1
2
3
4
5
6
cd public
git init
git add .
git commit -m '使用云服务器创建个人网站'  # 如果没有设置用户和邮箱, 根据提示设置
git remote add origin hugo@服务器ip:/home/hugo/hugo.git  # Linux用户名@服务器地址(或ip):仓库绝对路径
git push -u origin master  # 提示输入密码, 输入 hugo 用户的密码

在浏览器中输入你的域名( 如果没有购买域名, 就输入服务器IP地址)就能查看到网站了

初级篇

使用 xftp 把 public 目录传送到服务器上, 修改/etc/nginx/sites-available/default, 把 root /var/www/html 改成 public 目录的绝对路径, 重载服务器: systemctl reload nginx或nginx -s reload, 然后在浏览器中输入服务器ip地址访问