none
好像没什么变化,新网站有何特别之处?新网站各处充斥着的Typecho是什么东西?我在部署Typecho中遇到了哪些问题又是如何解决的?有没有什么常用的实用命令?我们来挨个过一遍。
以及现在是三天整了(悲)
什么是Typecho?
Typecho 读作 /taɪpˌ'ekoʊ/
对于有需要的读者,您大可自己前往Typecho官方网站了解。对于“太长不读”的读者,Typecho是一个博客框架,它可以建立统一管理文章和页面的数据库,并将评论、账号等一并包括在内。感谢Typecho是因为它给我们建站提供了太多便利,至于麻烦事那是下一章才会聊到的。
上一个网站我就不贴在这里了,对我的黑历史感兴趣的可以去我的GitHub主页看一看,如果还能点点Star就更好了,谢谢各位。
这个新网站因为有了后端,各种评论、注册、登录都变得可行;缺点就是需要一直开着一台电脑,节假日出去玩就得停服咯。此外,由于家宽建站一直以来都不受运营商待见,所以为了端口通畅,还要用Cloudflare加一层防护。这导致在国内,网站访问速度变得非常慢,甚至有些地区直接无法访问。但鉴于网站访问量不大,购买云服务器性价比太低,就暂时先这样吧……
同样的,由于Typecho自带了一个后端数据库,所以文件管理似乎更方便了一点。当然了,因为电脑就在我手里,传文件什么的非常简单,所以Typecho自带的文件管理也不那么必要。而且上传文件还要加cid
不是吗?我是不喜欢文章只有3篇,cid
已经飙到15的感觉的……
让我们聊聊部署Typecho遇到的问题吧。
部署Typecho疑难杂症
通用安装
介绍
我使用了一台老MacBook Air作为服务器机器,系统停留在macOS Big Sur,不受Homebrew支持但自带一份PHP 7.3,还没装Docker(懒)。Web服务器使用Nginx,数据库选择SQLite。后续还装了PHP 8.3。
我折腾明白最重要的一点,各种服务器软件安装能用包管理器就用包管理器。各种软件之间相互依赖,路径不对$PATH
没有就报错。
Nginx
Nginx很好装,使用brew install nginx
就能一键安装。开机自启使用brew services start nginx
,重载使用nginx -s reload
,但是停止要用brew services stop nginx
,不能用nginx -s stop
,否则Homebrew那里会有点问题。(2025年1月3日更新:Homebrew用不了,就直接nginx -s stop
吧。)
Nginx的location {}
字段下定义的路径一定要分清是绝对路径还是相对路径。绝对路径不是以配置文件为根目录。
因为Typecho需要使用PHP,记得把类似下面的内容取消注释。
location ~ .*\.php(\/.*)*$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
}
注意,SCRIPT_FILENAME
不是变量,无需调整。$fastcgi_script_name
前需要改写到index.php
所在的目录,比如/usr/local/var/www$fastcgi_script_name
,注意$fastcgi_script_name
前没有/
。
除了PHP,我们还需要配置伪静态。我个人的理解,就是把直接访问的链接,比如/about
重定向到/index.php/about
这样便可以调用PHP解析数据库里的页面,否则Nginx会直接检查网页根目录里的静态页面,找不到就是404。这同时也缩短了链接,可以满足“我想访问/index.php/welcome/9-Welcome
但只想输入/welcome/9-Welcome
”的需求。我的Nginx伪静态配置如下:
在nginx.conf
里,粘贴如下配置。注意自行合并和删除重复内容。
location / {
root /usr/local/var/www/home/test;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$args;
}
[!NOTE]
如果你在配置上面这段代码时出现问题,尝试使用这份旧代码。它们实际作用应该是相同的。
location / {
root /usr/local/var/www/home/www;
index index.html index.htm index.php;
try_files $uri $uri/ @rewrite;
}
location @rewrite {
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php) {
rewrite (.*) $1/index.php;
}
if (!-e $request_filename) {
rewrite (.*) /index.php;
}
}
(现在AI这么发达,有啥不懂的,尽管把代码发给AI解释)
如果真的发生了404,不用担心,有Typecho兜底呢!404页面可以在usr/themes/<主题名>/404.php
修改(如果没有就新建)。
Typecho 与 SQLite
安装Typecho,首先要安装数据库。我原本选择了MySQL,但是Homebrew安装xz的时候脚本有问题,装不下去了,就换成了SQLite。根据用途来说,SQLite更为合适,但我同样需要提醒各位,很多插件只支持MySQL不支持SQLite,如果你有严重的插件依赖,请想办法安装MySQL。据我所知,MySQL很乱也不一定免费。
Typecho下载好之后在根路径下新建一个文件夹,把Typecho扔进去就好了。记得使用php-fpm
启动php FastCGI进行端口监听。随后打开install.php
,按步骤一步一步走就OK了。
十分有用的链接:Typecho官方-常见问题。
如果只有首页能打开,其它页面打不开,那么检查
- Nginx的
location {}
是不是设为了location ~ .*\.php(\/.*)*$
。 php.ini
中cgi.fix_pathinfo = 1
(虽然我测试认为影响不大)。/usr/local/etc/php-fpm.d/www.conf
中security.limit_extensions =
(空值)。(我也认为影响不大)
如果以上都没用,请自行查找/usr/local/var/log/nginx/error.log
以确定自己的错误类型,然后搜索。
在macOS 11 Big Sur上安装PHP 8.3
体验后认为和PHP 7.3没什么区别。但还是用了新版本。
在 https://www.php.net/downloads 上下载最新版本PHP,解压,进入解压后的文件夹然后输入./configure --help
获取完整的可用配置选项。一定要看完、理解、敲好再进行下一步!每次构建的时间都很长,大约在15分钟以上。如果构建完成再想修改,恕我见识短浅,只能重新跑一遍,所以尽量一遍过。如果你已经配置好了,跟随PHP官方安装步骤继续即可。我使用的方案为
./configure --enable-fpm --with-openssl --enable-calendar --enable-exif --enable-ftp --with-imap-ssl --with-iconv=/usr/local/opt/libiconv --enable-mbstring
配置过程中缺啥就用Homebrew下啥,大多数就是直接复制包名然后brew install <包名>
即可,省去brew search
省一些时间。
此外,执行make
后命令行会提示执行make test
进行检查。这完全没问题,但需要多花费5分钟左右的时间。我们可以根据官方文档直接执行make install
,据我测试一般来说都没有问题。
新版本PHP和PHP-FPM位于/usr/local/bin/php
和/usr/local/bin/php-fpm
,旧版本PHP和PHP-FPM位于/usr/bin/php
和/usr/sbin/php-fpm
。新版本php.ini
位于/usr/local/lib/
。其他信息输入php -i
查看。
十分有用的链接:PHP官方文档-Unix 系统下的 Nginx 1.4.x。
Typecho 设置实用命令
我会在这里放一些实用工具。不仅方便我,同时也给所有配置Typecho甚至配置服务器的人一些工具。
查看端口占用
PHP-FPM端口号默认为9000。
lsof -i:<端口号>
启动PHP监听
php-fpm
终止正在运行的PHP监听
kill -s QUIT <进程PID>