前言
去年就有搭建个人博客的想法,现在推迟开学,就开始着手准备了,我在这个过程中也踩了很多坑,现在我就来填坑吧。。。
本文将以这篇博客为基础,加上自己的理解整理而成,这篇文章将记录我是如何把搭建好的hexo部署到阿里云服务器上的。这篇文章将默认您已经在GitHub上部署好hexo静态博客。
命令行前的井号#
代表在服务器端的操作,而$
代表在本地进行操作。
+
之后的一行内容是要添加的内容。
-
之后的一行内容是要删除的内容。
云服务器购买
无论是阿里云还是腾讯云对学生都有很大的优惠。
腾讯云¥10/月,阿里云¥9.5/月
这里我使用的是阿里云,点击此购买链接。
云服务器配置
配置安全组规则
由于阿里云是默认不授权80端口的访问的,所以我们要手动配置。
打开阿里云服务器管理控制台->点击左侧安全组->点击右侧的配置规则->点击添加安全组规则
如下图
服务器环境搭建
从来没用过阿里云,一开始连命令行窗口都找不到。。。
远程连接
先修改远程连接密码
重启服务器后密码就会生效。
然后在本地打开git bash 使用命令:
# ssh -p 22 root@(这里填服务器公网IP地址)
然后输入密码,密码不会显示,尽管输入就行。(这里需要密码登录,下面要介绍ssh key免密登录)
安装nginx
我们需要nginx作为我们的服务器,所以我们首先要安装nginx。可以使用yum命令直接进行安装。
安装执行命令如下
# yum install -y nginx
启动服务器:
# systemctl start nginx
# systemctl enable nginx
现在我们可以尝试使用自己的电脑去访问服务器的公网IP。我们可以惊喜地发现,公网IP可以打开一个nginx的默认网页。
如果这里显示的不是nginx页面而是CentOS界面也不用着急,可以继续往下,如果有人能解决这个问题,可以在评论区留言,感谢斧正。我们要记住的是/etc/nginx/是nginx默认的配置路径,一会要用到。安装并启动服务器后,我们就完成了第一步,现在我们可以尝试使用自己的电脑去访问服务器的公网IP。我们可以惊喜地发现,公网IP可以打开一个nginx的默认网页。这样,我们就成功了第一步。
但是我们实际上是想要让这个地址指向我们的博客,而不是nginx的默认网址,这就需要我们去配置nginx的配置文件。阿里云默认的库下载的是fedora版本的nginx,所以我们应该配置的是位于 etc/nginx/ 下的 nginx.conf 。
nginx默认网址重定向
接下来,在/etc/nginx/目录下创建一个文件夹 叫 vhost
cd /etc/nginx
mkdir vhost
cd vhost
vim blog.conf
编辑 blog.conf文件内容
server{
listen 80;
root /home/www/website;这里填博客目录存放的地址
server_name 这里填域名如(www.baidu.com) 如果暂时没有+域名就填阿里云的公网ip,以后+有了再改回来;
location /{
}
}
保存退出输入
:wq
打开/etc/nginx/目录下的nginx.conf文件
# vi /etc/nginx/nginx.conf
注意vi
编辑模式要按i
。
做出如下修改:
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
+ include /etc/nginx/vhost/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /home/www/website;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
}
}
保存退出输入
:wq
如果以后还想添加新的网站,也可以在vhost目录下新建一个conf配置文件。
在刚才我们自己写的blog.conf配置文件中root的路径相应路径建立博客的目录:
# cd /home
# mkdir www
# cd /www
# mkdir website
这样我们就可以得到 /home/www/website 作为博客的根路径,就和配置文件中的路径对应上了。
安装Git以及Node.js
安装node.js
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs
安装完成后执行 node -v 和 npm -v 如果打印版本号则安装成功
# node -v
v10.9.0
# npm -v
6.2.0
安装git
这一部分主要目的是让我们个人的电脑可以通过ssh方式连接到云服务器,然后我们就可以通过命令行方式将我们的博客Po到服务器上。操作如下:
安装git:
# yum install git
配置git用户
# adduser git
修改用户权限:
# chmod 740 /etc/sudoers
对sudoers文件作出修改
# vi /etc/sudoers
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults env_keep += "HOME"
Defaults secure_path = / sbin:/bin:/usr/sbin:/usr/bin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
+ git ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
保存并退出,输入:
:wq
将sudoers文件权限改回原样
# chmod 400 /etc/sudoers
设置git用户的密码
# sudo passwd git
如果不设置ssh,每次push(更新博客都需要密码,很不方便)。所以我们就来设置一下。
ssh免密登录
切换到git用户,然后在~目录下创建.ssh文件夹
# su git
# cd ~
# mkdir .ssh
# cd .ssh
在这里,其实ssh公钥没有必要重复生成。如果你已经把hexo部署到GitHub上,直接使用GitHub上之前你设置的公钥内容。
在电脑里找到id_rsa.pub(可以直接全局搜索)用记事本打开,把内容复制下来。
如果没有公钥文件,我们就必须生成公钥文件。
接下来在本地生成公钥文件,在桌面空白处右击选择git bash(这里默认个人电脑已经安装git),执行以下命令。
# ssh-keygen
生成公钥密钥文件,这一步很重要。
然后直接一路回车。不需要设置密码。
此时在目录下就会有两个文件,分别是id_rsa 和 id_rsa.pub
其中 id_rsa.pub 就是公钥文件 我们复制一份
创建authorized_keys,执行
# vi authorized_keys
接着我们把公钥内容粘贴到服务器的git/.ssh/authorized_keys中
ctrl + insert
在Linux中是复制的命令。
shift + insert
在Linux中是粘贴的命令。
最后我们修改它的权限
# chmod 600 ~/.ssh/authorized_keys
# chmod 700 ~/.ssh
然后我们在自己的电脑上,打开cmd,使用ssh方式连接我们的云服务器并输入密码。
$ ssh -v git@(这里填服务器公网IP地址)
最后提示
Welcome to Alibaba Cloud Elastic Compute Service !
说明登录成功了。
现在我们要创建一个git的仓库,并且新建一个post-receive文件,操作如下:
# cd ~
# git init --bare blog.git
# vi ~/blog.git/hooks/post-receive
对post-receive文件添加如下内容:
+ git --work-tree=/home/www/website --git-dir=/home/git/blog.git checkout -f
保存并退出,输入:
:wq
授予该文件可执行权限
# chmod +x ~/blog.git/hooks/post-receive
至此我们就完成了所有关于服务器端的配置。
配置_config.yml完成服务器的部署
这里假定你已经在本地搭建好自己的博客。
在hexo主目录下,找到并打开_config.yml,(注意这里不是主题文件夹下的_config.yml)。
找到deploy做出如下修改:
deploy:
type: git
- repository: https://github.com/yourname/yourname.github.io.git
+ repo: git@这里改为服务器公网IP:/home/git/blog.git
branch: master
保存并退出
在服务器上重新运行nginx服务器。
# nginx -s reload
如果此时出现错误,请仔细检查上面配置的文件,因为复制的时候,或者操作的时候不小心漏了某个字符,我就犯过这样的错误的。。。。
然后用浏览器输入域名或服务器外网IP就会看到自己的网页了。
欢迎大家访问我的blog
可能遇到的错误
- 配置好后网页打开提示404
说明网页找不到路径,请仔细检查之前的步骤,我一开始就是把/home目录搞错了,在~目录下新建的www文件,所以导致了404
- 配置好后网页打开提示403
之后我又遇到了403页面,真是让人凌乱。。这是权限不够的问题,如果你的博客放在/home/www/website/blog 那么你就要 在/home目录下 使用
# chmod -R 777 ./www
检查配置文件/etc/nginx/nginx.conf
,将第五行的user,做修改:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
- user nginx;
+ user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
尝试改为 root 并重启 nginx, 再次刷新网页,问题解决。