缘起

一直以来都使用Hexo框架来发表静态博客,但是随着生活的变迁,欲要行文的思路逐渐多起来惹,Hexo使用文件的管理方式并且每次发布都需要手动编译着实加大了写博客的门槛,所以想要更换一个新的博客形式的想法愈发的强烈。

但是由于个人对于博客有着特殊的情怀,于是决定自己着手编写一个博客网站,可是我对于前端不能说毫无了解,只能说是一窍不通,于是在咨询如何自己编写并搭建一个博客时,好友@21Hertz提到了typecho。

经过简单的了解,我发现Typecho在某种意义上已经非常贴合我的诉求,同时代码上似乎非常简单,于是怀着学习和借鉴的Typecho并在想要未来自己写一个博客框架的心情,开始着手Typecho的部署,这时的我还不知道在前方等待我的是什么样的部署地狱……

地狱

Typecho是使用PHP编写的,这意味着我需要部署LNMP(Linux + Nginx + Mysql + PHP)环境。首先自然而然的想法自然是上网去寻找教程,在搜索框中输入「Typecho 搭建」,很快啊,全都是速通教程,见此状,我心中顿时觉得轻松。

满怀欣喜,点开第一个。简单介绍……嗯,注册域名、购买VPS……这太零基础了,安装宝塔面膜……。心中的惬意在此嘎然而止,作为某种意义上的原教旨主义者(大雾,我不喜欢使用宝塔面板这种一揽子的便利神器(咳嗯,我就是要手动组建LNMP!

于是,痛苦的部署地狱就正式开始了…… TAT

环境安装

神说要先有Web服务器,于是Nginx自然是第一个被考虑的。好在我使用的系统的Ubuntu20.04,apt的源还是非常强劲的,直接就给我装了最新版的Nginx,不像某cento(咳咳,还需要添加源或者自己编译安装。最新版的Nginx一般都自动的开启了很多现代网站需要使用的功能,比如SSL支持,这大大方便我后续为网站添加HTTPS支持的流程。

接下来是Mysql,老熟人了直接摆烂的进行apt,然后折腾下修改个root密码就可以用了。然后是PHP,说实话,以前从来没折腾过PHP,只知道「它是世界上最好的语言」,直接apt搜一搜,有欸,这个好,虽然不是很对,但我直接进行一个in的stall,将双手塞到双腿下,坐在凳子上荡着腿,看着眼前朴素的进度条在快速的填满,心中想着这LNMP的最后一块拼图也即将要完成,感到非常的喜悦。

Done!将手伸出来,怀着试试看的输入php --version,行欸,扫过下面的版本7.4.x(记不得了。我整个人突然意识到有什么不妙的地方,搜索Typecho需要的PHP版本,日志中所写进入7.2时代,并对PHP8有更好的支持,搜索PHP最新版本,8.1.x,嘶~。秉着涉足一个新领域能用新不用旧的个人原则,我直接将php7.4进行一个un的install。

编译安装PHP……搜索,官网文档……打开,轻车熟路的准备好需要的资料(不要问我为什么这么熟练Orz。wget下载源码、解压、复制粘贴configure参数,秉着贪心算法的原则,直接复制最长的。然后直接进行一个make,啊很快啊,然后就是make install > install.log,别问为什么要输出日志到log文件,我可不想被教程背刺然后无法删除干净编译安装的程序。但好在一切顺利,成功的将PHP8.1.x安装上了。此时已经过去近一个半小时惹……(´。_。`)

环境配置

现在需要做的是将所有的碎片组合起来,将Typecho的开发版部署到/var/www/下,然后……然后就傻眼了,这PHP该怎么运行起来(@^@)?。搜索啊搜索,在阅读了大量冗余的教程之后,我理解了Nginx和PHP联动的原理,也看到了很多贴出的配置文件,但是!但是你们这些都没用啊kora。

最后,我着实无奈,只能一个个的查看整个联动过程中的日志,最后发现自己的Nginx根本没和php-fpm沟通上,再看看php-fpm,好家伙,根本没启动,这是否有些……

仔细的配置好php-fpm,并加入到systemd的管理下,设置好端口(不知道为什么socket不行,复制好Nginx的配置,我直接进行一个访问,然后我成功的将php源码文件给下载到了本地,懵了,仔细查看日志,没有异常,于是我只好继续翻阅教程,试图从各种冗余的信息中提炼出一丝丝解决问题的方法,最终我看到了这篇《如何正确配置 Nginx+PHP》,发现自己的伪静态规则设置的不合理,最后在经过4个小时的折腾之后,这个问题最终解决了,这里贴出我的Nginx相关部分的配置。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
	## 省略其他信息

        root /var/www/{your_dir}; # 填写你自己的typecho文件夹的位置
        index index.php index.html index.htm;

        if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php$1 last;
        }

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php(.*)$ {
                include fastcgi.conf;
                fastcgi_pass   localhost:9000;
                fastcgi_index  index.php;
                fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
                fastcgi_param  SCRIPT_NAME $fastcgi_script_name;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

博客部署

在前面的重重阻碍和浏览器缓存的制约之后,我终于打开了install页面,但接下来我所经历的,便是众多人苦恼的「无法连接数据库」。这个问题可以说是堪称一绝,因为没有任何的日志信息可以参考,Typecho并不会给出无法连接的原因,这一点着实让我感到苦恼。

为此我进行了反复的检查和测试,创建数据库新用户、修改mysql8的密码加密方式、修改host约束、事先创建数据库。一个个的进行排列组合的尝试,都没有结果,但世界永远喜欢逗你玩,我满身疮痍的反复查看宝塔面板的流程,发现好像宝塔面板会事先创建好database,早尝试过创建数据库的我心中一堆的问号,于是我在选择pdo,满足mysql密码加密为native,host约束为%,创建了符合数据库名称的数据库后,轻轻点击下一步,它喵喵的竟然连接上了╰(‵□′)╯。真是可喜可贺,可口……(咳咳

新生

总之在经历长达6小时的重重险阻之后,最终Typecho成功的跑起来了,我也找了个顺眼的主题,装了一些必要的插件,将博客装点了起来。这一段艰辛,总的来说也不是没有收获,至少加深了我对于LNMP的理解。

以前Hexo博客上的文章无法直接迁移到Typecho上来,只能未来进行手动迁移,这也算是对于过去发的博客的一次回顾和筛选了。

最后很难想象这段过程最后竟然是美好的结局,事实上很多时候其他事也是如此能绝境逢生罢。事实上,这次博客搬家也意味着我的人生进入了新的阶段,需要更加合适的方式来记录心中的所想。

在结尾期望:「WILL,美好世界」