这个帖子会持续记录在云服务器上搭建本网站的笔记:
1. Hexo建站
1.1 Hexo安装
Hexo主页对安装和使用Hexo的方式,有详细说明。
第一步,安装Git和Node.js。去官网下载安装程序即可。
Git可以安装最新版。
Node.js不要安装最新版,而d是安装12版;这是因为hexo-deployer-git的作者在此之后停止了更新,如果要将网站上传至git的话,使用过新的Node.js会导致错误(如上传的文件全部为空白的)。
接下来安装hexo。对于mac和linux,直接输入下面命令。对于windows,需要在网站根目录处点击鼠标右键打开git bash
后,输入下面命令。
|
|
1.1.1 Mac与Linux下的rsync安装
如果是mac或者Linux,只需要在终端确认已安装rsyc
即可。
1.1.2 Windows下的rsync安装
如果是windows,则会麻烦一些。因为windows本身没有类似于rsync的命令,
因此需要安装Cygwin(一个在windows环境下提供类UNIX环境支持的软件,其中包含了大量的GNU和开源工具)。
第一步,去Cygwin官网下载安装程序。选择国内镜像,默认安装结束后,来到选择软件包这一步时,将“试图”改为完整,并通过搜索栏将openssh
与rsync
的操作由跳过
改为最新的版本。不停地下一步安装即可。
第二步,设置Cygwin的环境变量。
- win+s呼出搜索,搜索“环境变量”,打开
编辑系统环境变量
,单击环境变量
,在系统变量
中找到Path
,双击打开,新建一个项,内容为C:\cygwin64\bin
(根据Cygwin真实的安装路径进行修改),然后将其上移至第一位,不然一会使用rsync时会自动调用windows自带的openssh。保存设置。
打开cmd或powershell,输入rsync -V
查看是否安装成功。
第三步,安装hexo-deployer-rsync
,在hexo网站根目录下打开git bash,输入:
npm install hexo-deployer-rsync --save
1.1.3 上传至云服务器
如果是在mac或者linux系统中,过程很简单,只需要使用默认的hexo
命令即可。
但在windows下,有两个问题:
- hexo网站文件夹的权限需要修改。否则rsync上传至服务器后,会出现
403 forbidden
报错。 git bash
只能使用SSH Key方式连接阿里云服务器。
关于第一个问题,解决方式是在windows右键点开网站根目录文件夹的属性,在安全
选项卡下,添加Everyone
用户,并给与该用户在该路径下的读取、执行、列表之权限。
关于第二个问题,设置SSH Key登录的说明在这里 。
设置好SSH Key登录后,新建.csh
后缀脚本文件,写入下面命令
|
|
并选择默认使用git bash
打开该文件。以后每次更新网站,双击该文件即可。
说明:在上面执行两遍hexo clean
,是因为在windows系统下,如果hexo网站放在dropbox中,某些文件还在同步中的话,执行clean命令会报错,但连续执行两遍却没问题,不知何故。
另外,如果实在不想用SSH Key、坚持使用密码登录方式连接服务器,那么可以这样做:
首先,在网站根目录下的source/_posts/
下面新建windows_update_blog.csh
,在里面写入:
|
|
打开cygwin.bat
,使用bash /cygdrive/d/Dropbox/blog/source/_posts/windows_update_blog.csh
命令运行上面的脚本,即可。
上面的脚本中,我们使用自定义参数的rsync
命令替代了原本的hexo d
命令。关于rsync
的选项,可参见后文此处。
此外,如果发现网站出现403错误,那就是因为文件和目录的权限设置问题,需要去本体的同步文件夹检查一下权限设置。时间紧迫的话,可以直接去云服务器上,将网站的根目录设置成sudo chmod 775 -R
。关于chomd
的用法,在这里有说明。
1.2 Hexo部署
1.2.1 在云服务器上运行网站
首先将网站根目录下_config.yml
文件末尾部署方式改为rsync
。
去云服务器安装Nginx:
|
|
在下文中,我们默认,在hexo的_config.yml
文件中设置的网站上传根目录为/var/www/ming_blog
。
1.2.1.1 没有域名时,直接用ip地址打开
则创建Nginx配置文件 :sudo nano /etc/nginx/sites-available/ming_blog
并写入以下内容:
|
|
启用配置并检查Nginx配置:
|
|
重启Nginx
systemctl restart nginx
在浏览器输入云服务器的ip地址,就能看到网页。如果看到的是Nginx的欢迎页面,则说明,尽管Nginx服务启动了,但默认的网站还需要从欢迎页修改为自己刚建的。
修改方法是,修改Nginx的配置文件sudo nano /etc/nginx/nginx.conf
,
将其中的include /etc/nginx/sites-enabled/*
替换为:
|
|
1.2.1.2 有域名后,添加域名与SSL信息
首先,删除前面创建的(如有)Nginx配置文件 :
|
|
再新建一个配置文件,sudo nano /etc/nginx/sites-available/ming_blog
,并写入以下内容:
|
|
再输入命令
|
|
接下来,配置SSL证书。需要满足以下两个条件:
- 需要在申请域名映射到的服务器上执行。
- 申请证书时需要绑定80端口进行验证,因此先停止服务器上绑定80端口的服务(比如nginx 或者apache 等),另外防火墙要放开80端。
在阿里云服务器中停止nginx: sudo systemctl stop nginx
,
再输入下面命令以获得SSL证书:
|
|
如下图所示,需要先后在域名管理处添加两项TXT解析,按照提示将解析名称与值填入,待解析生效后(阿里云最多10分钟,实测大概2分钟即可,图片中文字末尾给出了检测解析是否生效的连接),便设置完成。
重启Nginx
systemctl restart nginx
或者reboot机器,均可。
注意:如下图所示,通过certbot申请的免费SSL证书有效期只有3个月。到期时还需要重复上面步骤申请新的证书并更新解析设置。
注意:需要去阿里云的云服务器的安全组,将80、443端口放行。
1.2.2 使用github页面运行网站
需先通过ssh-keygen -t ed25519 -C "your_email@example.com"
或ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
命令生成ssh keys,将相应路径下的public key 输入到github对应页面设置中的添加SSH密钥
部分。
首先确认前面已经安装过hexo-deployer-git
,在网站根目录下的_config.yml
文件末尾部署方式改为git。
再将下面的命令写入.bash
文档,mac和linux下设置为使用terminal
运行,windows下设置为使用git bash
运行;即可。
|
|
总的来讲,对我目前的需求来说,第一种方法(dropbox在所有电脑间同步blog文件夹,再通过rsync方式上传到云服务器)要好于第二种方法(使用git部署到github文件夹,再生成page)。
1.3 其他相关设置与更新
1.3.1 (对于较老的设备)安装 hexo-toc与markdown-it
在终端中输入:
|
|
接下来,还要在网站根目录的_configyml
文件中注释掉原有的markdown部分的设置,替换成以下内容(文件放在dropbox同步文件夹中,修改一次即可):
|
|
1.3.2 Hexo添加目录
对于比较长的文章,有必要手动在文章开头安装hexo-toc。
首先安装hexo-toc:
|
|
然后在网站根目录的_config.yml
文件中加入下面设置:
|
|
重新生成网站即可。
2. 其他杂项
2.1 VSC打开.md文件后中文部分显示黄色框
这是因为默认开启了编辑器ascii字符识别。解决办法是:按 Ctrl+Shift+P
,搜索框中输入 settings
, 弹出来的选项中打开 Preferences: Open Settings (UI)
,在打开的设置页面中搜索 ascii
,再将相应选项修改为false
。
2.2 rsync
参数说明
rsync
部分常用参数说明如下:
|
|
2.3 SSHKey免密码登录云服务器
虽然通过termius或者xshell之类的软件登录服务器比较方便,但使用rsync之类的工具传输文件、部署hexo网站时,每次还要输入密码,也有点麻烦。设置SSH Key登录方式即可解决。
首先确认服务器的SSH Key的类型,ubuntu一般都是默认ed25519
,这也可以在首次ssh连接时的服务器信息中得到确认: \
接下来,在个人电脑的终端生成SSH Key:
|
|
命令中的 -C "my_computer_1"
部分可以删去。这是一个标签,方便将来从服务器删除Key的时候,知道是哪台电脑的。
在终端提示的时候,不要输入passphrase(否则就失去了SSH Key登录的意义),不要修改名称和路径,按三次回车后,文件id_ed25519
和id_ed25519.pub
就创立成功了。前者是自己的私钥,保管在自己电脑中;后者是公钥,登录服务器后,在~/.ssh/authorized_keys
文件(如果没有这个文件夹和文件,就新建)中另起一行,加入公钥中的信息即可。
另外,为了使SSH Key登录方式生效,还需要在服务器中修改一下文件
sudo nano /etc/ssh/sshd_config
中的PubkeyAuthentication
、AuthorizedKeysFile
、StrictModes
三部分的设定,如下图所示:
在服务器中重启sshd服务 sudo systemctl restart sshd
,之后就可以免密码登录了。