Markdown 博客
Apr 02, 2022以前看到别人的花花绿绿的炫酷博客网站,好羡慕。
在看了一些 html 和 css 后,感觉想做一个符合我预期的博客网站,或许并没有那么的难。
完事开头难,我要求不高,纯展示静态展示网页就行。在了解了网页的开发后,大致想法是纯手写 html,再寻一份心仪的 css 样式。请教过一些做 Web 前端的朋友,他们说虽然我的做法可以,但是这样太呆太浪费时间了,可以找现成的 WorldPress 框架,再稍微配置个服务器,直接可以写博客就完事了。
心想也是,一次两次手写 html 感觉还好,但是天天这么搞着实浪费时间。
但是我真的不想靠现有的框架搭博客,我想尝试下。
平时有写 Markdown 做笔记的习惯,尝试 github 搜了下 markdown 转 html,不出所料发现好东西 ShowDown,也有 CLI。
如此一来,我的大致思路就是继续写 markdown 笔记上传 github,租云服务器拉去最新的 .md 笔记,并用工具生成 html 即可。
于是创建了 MDWebsite。
基本需求
- 网页不需要交互
- 更新流程要自动化
- 需要有所有笔记目录(写 markdown 笔记没有写整体目录的习惯)
- 需要嵌入 css,基本审美还是要有的
- 超链接要能正确跳转 (html 转换工具并不会转换链接)
进阶需求
- 增加构建配置
- 结构整理容易后期变更博客布局
- 代码高亮
- 数学公式显示
- 整点 banner
基本需求都是比较容易实现的,需要尽快实现,把网站先搭了,基本的浏览不能有问题。进阶需求则是美化和一些结构设计上对自己的要求了。
工具、环境
- C++ 别问,问就是这个不熟而且不好掌握,干就完事了。
- WebServer: Nginx
- 云服务: 腾讯云
- Json: RapidJSON
- CMake, gcc
- Node, npm
- MarkDown to Html: ShowDown
- System: Linux_Ubuntu (CentOS gcc 版本低,不好解决,换了)
- Css: github-markdown-css
初版
开发环境问题
开始还是太低估开发环境带来的问题了。
原以为在 window 编写测试完毕后,在放进 linux 中编译就完了。然而 clone 进 linux 虚拟机测试了一遍,编译不过,硬着头皮处理,问题越来越多,操作也烦杂并且无法调试。win 版的测试结果完全不能作为 linux 下的保证。一不做二不休,于是开发环境改用 Vscode + CMake + WSL,出问题直接排查,踩坑完毕后再放到云。
编译环境问题
gcc 版本是个烦人的问题。CentOS 的 gcc 版本奇低,只有 4.x。在处理 filesystem 问题时这里卡了很久,原计划是升级 gcc 但是过于麻烦且对系统影响很大,升级做法有待商榷。为了尽快完成上线,改为 ubuntu 调试。
不同系统头文件路径很可能是不一样的,并且个别库是来自 Window SDK,如 direct.h,linux 不存在,就替换成了 dirent.h。对于头文件路径不一致,可以用改 include 路径解决或者通过相对路径引入头文件。
// window
#include <io.h>
// linux 具体路径可以使用 gcc -v 查看版本和路径
#include <sys/io.h>
个别库需要注意 C++ 版本,例如 filesystem 库
// 在 C++17 标准下 filesystem 属于标准库,可以直接使用,如下
#include <filesystem>
using namespace std::filesystem;
// 然而在 C++17 以下都属于 experimental,如下
#include <experimental/filesystem>
using namespace std::experimental::filesystem;
// 并且需要在编译时外链接库 stdC++fs
Node 问题
在安装 node 时,完整来说要先生成调用指令 package.json。否则在某些发行版是无法安装软件的。
同样的,某些发行版安装软件是,默认就是全局安装的,实际环境可能不是。有两种方式
# 软件前加 npm
npm softwareName
# 或者安装时改用 -g,显式全局安装
npm install -g software
# 再 run 即可
software
但是仍然可能失败,这就可能是 node 的软件安装路径没有包含在 path 中
Nginx 问题
通过修改 nginx.conf 文件增加 server 段和 index 指向后无效。观察其中的 http 段中的 include 时,该配置又在其他路径中引入配置,此时我的引用路劲为 /etc/nginx/site-enable/default。发现 default 中就包含 server 段和 index。修改后重启 nginx 后生效。
中文乱码需要在 default 的 server 段加入 charset utf-8
修改后 index 后有可能出现 404 或 403 。有两种情况,一种是新的 index.html 不存在,又或者 nginx 访问网页文件的权限不足。
# 若新的网页文件夹为 web
# 对于网页的访问需要 r 和 x 权限
chmod -R 755 web/
# 或修改 nginx.conf 的启动用户
# origin
user www-data
# new, 但不建议
user root
云服务器
腾讯云的网站需要备案,大致需要 2 天时间,未备份的网站无法访问,及时能访问也可能出现获取不了 css 文件的各种情况。此时调试可以直接用 ip 访问。
Comments