跳过正文
  1. posts/

[已过时] 从零开始实现hexo博客的在线编辑

·3168 字·7 分钟
教程 博客
高玩梁
作者
高玩梁
一个对所有事物保持好奇心的人
目录

⚠ 本教程需要服务器(VPS),Serverless 版本正在探索,请大家耐心等待

前言
#

我今年五月参加的微信小程序开发赛获得了全国三等奖,微信赠了我 1k 的优惠券

不过这个优惠券只能购买没有优惠过的服务器,所以 1k 优惠券也是了了,最后在我的精打细算下,买了一年零三个月的服务器。买来不能闲置着不用啊,于是我准备构建一个在线写 hexo 的平台,这样就可以摆脱平台的束缚,在任意环境下都可以进行写作了。由于这个服务器是新购置的,所以我从零开始写一下相关的内容。

配置相关环境
#

Nignx(Nginx 比较麻烦,下面更新 caddy 的)
#

配置 Nignx 是关键,虽然很俗,但是这个活不能不干。其实也可以有很多选择,比如 Caddy,Apache(这年头个人搭建网站还有人用 Apache 吗,配置巨麻烦)

Debian apt 自带的 Nginx 太老,可以通过更新源的方式来解决

echo deb http://nginx.org/packages/debian/ stretch nginx | sudo tee /etc/apt/sources.list.d/nginx.list
wget http://nginx.org/keys/nginx_signing.key && sudo apt-key add nginx_signing.key
sudo apt update && apt install nginx -y

到这一部分就完成了最新稳定版的 Nginx 的安装。需要注意的是,这一步安装的 Nginx 和系统自带的 Nginx 的配置目录略有区别,可以用一下几个简单的命令修正:

sudo mkdir /etc/nginx/{sites-available,sites-enabled}
sudo mv /etc/nginx/conf.d/* /etc/nginx/sites-available
sudo rmdir -f /etc/nginx/conf.d/
sudo perl -pi -e 's/conf.d/sites-enabled/g' /etc/nginx/nginx.conf

当然这个没必要,我就没弄

最后出现这个就是成功了

Caddy
#

Caddy是一个极简的HTTP服务器,支持HTTP/2静态网页服务器,安装也很快,在很多方面都可以不用安装时间很长的lnmplamp环境了,配置文件也很简单,同时还有一些有趣的扩展,可以非常方便的搭建一个HTTP服务器。

可以直接用下面的脚本进行安装,国内主机安装较慢,耐心等一下就好了

系统要求:CentOS 6+/Debian 6+/Ubuntu 14.04 +

本脚本只是一个一键安装+运行控制的脚本,没有其他管理虚拟主机等功能。

执行下面的代码安装Caddy,如果想要安装其他扩展可以把名字加到命令后面(bash caddy_install.sh install xxx,xxx,xxx,扩展列表点击查看)。

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
#备用地址
wget -N --no-check-certificate https://gwliang.com/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh

使用说明
#

启动:/etc/init.d/caddy start
停止:/etc/init.d/caddy stop
重启:/etc/init.d/caddy restart
查看状态:/etc/init.d/caddy status
查看Caddy启动日志:tail -f /tmp/caddy.log
安装目录:/usr/local/caddy
Caddy配置文件位置:/usr/local/caddy/Caddyfile
Caddy自动申请SSL证书位置:/.caddy/acme/acme-v01.api.letsencrypt.org/sites/xxx.xxx(域名)/

等会会教大家如何配置

NodeJS
#

NodeJS 是最重要的,没有 Nginx 也得有 NodeJS,这是我们写博客的关键,Debian 自带的 NodeJS 还是比较老的,推荐用 nvm 安装

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash

然后关闭再打开终端,就可以用了

我目前 NodeJS 最新版是 12.13.0,输入

nvm install 12.13.0

就安装了 NodeJS 12.13.0 版本

git
#

git 直接用 apt 安装就行了,这个不再赘述。

apt install git

工作区配置
#

把你的博客源文件上传 Github
#

为了多端同步,也为了防止服务器不好上传你的文件,这个时候就需要将你的博客的源文件文件上传到 GitHub,由于 Hexo 会吃掉你博客的 master 分支,这个时候就需要先创建一个分支。在你博客源文件的文件夹下打开 Git bash,输入下面的命令

git checkout -b inside

这样就创建了一个 inside 分支,因为我这个博客的主题就是 inside。然后git push到 GitHub 上,本地这边的工作就完成了。

在服务器上把你的源代码 clone 下来
#

由于服务器是全新的,我就按全新的来说,首先输入下面命令:

git config --global user.name "你GitHub的用户名"

git config --global user.email "你GitHub注册时用的邮箱"

ssh-keygen -t rsa -C "你GitHub注册时用的邮箱"

默认回车即可,然后输入cat /root/.ssh/id_rsa.pub,然后把输出的东西整个复制出来

打开github,在头像下面点击settings,再点击SSH and GPG keys,新建一个 SSH,Title 随便。

把刚才输出的一串复制到 key 里即可

输入ssh -T [email protected],问 Are you sure you want to continue connecting (yes/no)?时输入 yes,如果出现你的用户名,那就成功了。

然后在服务器上 clone 一下你新建的分支,通过-b选择分支,例如

git clone -b inside https://github.com/gaowanliang/gaowanliang.github.io.git

(要按照自己的实际情况来)

安装 Code-server
#

众所周知,Visual Studio Code 是基于 Electron 的,而 Electron 又是一个“双头怪”——基于 Web 技术的桌面应用平台。但在最近,Coder 的开发者最近做了有趣的尝试,让我们可以把整个 VSCode 放到浏览器中去运行。而 VSCode 写 markdown 的体验也是很舒服的,为了不用自己写一个网页来搞一些复杂的配置,直接用浏览器版的 Vscode 就很舒服,而且还能应急改其他代码,那我们就简单配置一下。

首先在下列网址下载最新版 code-server

https://github.com/cdr/code-server/releases

下载好后上传到你的服务器,或者直接用 wget 下载。之后 cd 到下载目录,执行下面的代码

tar -C /opt -xzvf code-server-xxx.tar.gz  // 根据具体的名字来解压
cd /opt
mv code-server*4 code-server
cd code-server
./code-server

然后就会出现这样的场景,证明你的服务器可以用,但是不能保证正确运行,还得测试一下

按下 Ctrl+C 停止服务,接着执行下面的命令

./code-server --host 0.0.0.0 --port 9900

之后打开你的 IP:9900,如果出现需要你输入密码的界面,说明没啥问题,密码如果你没配置过,会显示在服务器控制台里。(如果是部分服务商,需要在后台开放端口)

输入密码,进入界面,第一次进入要等很久

和 VSCode 几乎一模一样,有内味了。由于这个 code-server 是完全独立于系统的,所以你需要重新安装一下 nodejs。当然在安装之前,要先安装一下中文汉化包。由于这个自带的插件商店是残废版,很多插件都没有,需要你自己去下载离线版.vsix 安装,安装之前,需要看一下 VSCode 的版本,点击左上角的三个横杠-Help-About,可以看到 version 显示的版本,我这里是 1.42.0,然后去商店下载离线汉化包,进入 https://marketplace.visualstudio.com/ ,搜索 Chinese,然后会出来 Chinese (Simplified) Language Pack for Visual Studio Code 这个,点进去,找到右边的 Download Extension,点一下,获取一下下载连接,我获取到的下载链接是 https://marketplace.visualstudio.com/_apis/public/gallery/publishers/MS-CEINTL/vsextensions/vscode-language-pack-zh-hans/1.43.9/vspackage 可以看到最新版本已经是 1.43.9 了,我们把下载链接里的那个版本号改成适用于你 VSCode 的版本号,比如我就是 1.42.0,所以下载链接就改成 https://marketplace.visualstudio.com/_apis/public/gallery/publishers/MS-CEINTL/vsextensions/vscode-language-pack-zh-hans/1.42.0/vspackage 。下载好后,传到服务器里

回到网页,打开插件列表,选 Install VSIX

找到上传的地址,安装即可 之后点一下右下角的 YES 即可,之后等待刷新完成,就是中文了

8cKAYR.png

按下 Ctrl+J,打开终端,第一次打开要选一下默认终端的类型,按照图中的方法操作,最后在弹出的框中选择 Bash 即可。

8cKHc6.png

之后按照上面的操作,在这个终端里安装一下 nodejs 和导入一下 GitHub 的信息,只不过不用再生成 SSH 密钥了(ssh-keygencat这两个命令不用了,也不用导入密钥了),但是 git config 命令要改成这样

git config --system user.name "你GitHub的用户名"

git config --system user.email "你GitHub注册时用的邮箱"

之后选择左上角三个横杠-文件-打开文件夹,打开你 clone 的博客的目录

之后要在终端里 npm install,由于我是国内服务器,就用 cnpm install 了(要使用 cnpm 的话,要执行一下npm install -g cnpm

之后执行一下npm install -g hexo-cli,就可以愉快的使用hexo g && hexo d

配置 systemctl
#

先在服务器终端按下 Ctrl+C 停止服务,然后执行下面的命令

cat > /etc/systemd/system/code.service <<EOF
[Unit]
Description=Code Server NO.1
After=network.target

[Service]
Type=simple
EnvironmentFile=/opt/code-server/.envfile
WorkingDirectory=/opt/code-server/
Restart=on-failure
RestartSec=10

ExecStart=/opt/code-server/code-server --host 0.0.0.0 --port 9900
StandardOutput=file:/opt/code-server/output/output.log
StandardError=file:/opt/code-server/error/error.log

[Install]
WantedBy=multi-user.target
EOF

之后要配置一下默认密码,也是执行下面的命令(将 gaowanliang 改成你自己的密码)

PASSWORD=gaowanliang
echo "PASSWORD=\"${PASSWORD}\"" > /opt/code-server/.envfile

之后执行下面两条命令,实现后台运行和开机自启

systemctl enable code
systemctl start code

现在可以直接打开你的 IP:9900,输入你自己设置的密码,这样关闭服务器终端也不会停止了

配置域名(可选)
#

如果你有自己的域名,可以绑上一个域名,就不用每次都输 IP 和端口了,执行下面的命令(将所有 code.gwliang.com 改成你自己的域名) 这里使用的是Caddy

// 下面两个二者选其一
// 不需要HTTPS
echo "http://code.gwliang.com {
  gzip
  proxy / 127.0.0.1:9900
}" > /usr/local/caddy/Caddyfile

//需要HTTPS,其中 [email protected] 改成你自己的邮箱
echo "code.gwliang.com {
  gzip
  tls [email protected]
  proxy / 127.0.0.1:9900
}" > /usr/local/caddy/Caddyfile

/etc/init.d/caddy start

打开你自己的域名,就可以正常使用了。

后记
#

图片的话不太好上传,直接用在线图床即可,推荐两个

路过图床 https://imgchr.com/

sm.ms https://sm.ms/

用 qq 自带的截图,截好之后直接 Ctrl+V 可以直接上传到网页上,然后下面都会给出 Markdown 的引用方式,直接引用即可