hexo部署阿里云服务器详细指南

前言

去年就有搭建个人博客的想法,现在推迟开学,就开始着手准备了,我在这个过程中也踩了很多坑,现在我就来填坑吧。。。

本文将以这篇博客为基础,加上自己的理解整理而成,这篇文章将记录我是如何把搭建好的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, 再次刷新网页,问题解决。

发布了7 篇原创文章 · 获赞 0 · 访问量 71

猜你喜欢

转载自blog.csdn.net/weixin_45646006/article/details/105021143