GitHub 和 GitHub pages 的访问越来越慢,前阵子国内还出现了中间人攻击,所以决定把博客搬到 VPS 上,不过毕竟是海外服务器,国内访问估计也够慢,希望能够苟住不被墙掉。
至于为什么选择 Typecho,可能只是单纯想折腾。如果 Typecho 不够好用,未来也可能换至 WordPress。
因为对 PHP 相关完全不熟,第一次不用别人的一键脚本、自己部署有点心累...不像 Java 直接 java -jar
就好,在这里做点 PHP 部署相关的记录,方便日后查阅。说到底我又在写二手知识了。
Typecho 稳定版虽说很久没更新,但主题和插件还是蛮多的。这次决定放飞自我整个二次元主题 xD。
Update: 好吧还是没整二次元主题,VOID 这个主题的衬线字体很对我胃口。
安装
- 安装 php5.6
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt install php5.6 php5.6-fpm php5.6-cgi php5.6-cli php5.6-pgsql php5.6-mysql php5.6-sqlite3 php5.6-xml php5.6-mbstring
- 安装 Nginx
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt install nginx
- 安装 MySQL
sudo apt install mysql-server
sudo mysql_secure_installation
MySQL 用户相关的配置可以见我这篇博文:Ubuntu 安装的一些记录
- 安装 Typecho
mkdir ~/typecho
wget https://typecho.org/downloads/1.1-17.10.30-release.tar.gz
tar xvf 1.1-17.10.30-release.tar.gz
mv build app # typecho path: /home/username/typecho/app
这里就不执行 sudo chown -R www-data.www-data
了,我 nginx user 就是 bolitao 这个账户
配置
配置 Nginx
sudo nano /etc/nginx/sites-enabled/typecho
配置文件内容:
server {
listen 10086;
listen [::]:10086;
server_name bolitao.xyz;
root /home/bolitao/typecho/app;
index index.html index.htm index.php;
location ~ .*\.php(\/.*)*$ {
include fastcgi.conf;
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
}
}
测试 Nginx
➜ app sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
无误后重启 nginx:
sudo systemctl restart nginx
通过 IP:端口
访问 typecho 进行安装。安装过程中如果不能自动创数据库那么就手动创一个 typecho 数据库:
CREATE DATABASE typecho
站点配置步骤完成后可能会要在站点根目录手动创建 config.inc.php
文件,vim ~/typecho/config.inc.php
并添加前端给出的内容即可。
证书
certbot 一把梭。
问题解决
502 错误
查看 nginx error.log
2020/04/02 09:46:37 [crit] 15494#15494: *34 connect() to unix:/run/php/php5.6-fpm.sock failed (13: Permission denied)
发现是权限相关错误,修改 fpm 相关配置:
sudo vim /etc/php/5.6/fpm/pool.d/www.conf
listen.owner =
和 listen.group =
修改成自己的用户名和组
重启 fpm:
sudo systemctl restart php5.6-fpm.service
连接数据库时无数据库适配器可选
(我没来得及截图,借用一张 segmentfault 的图) https://image-static.segmentfault.com/989/349/9893498-574cf6032e3a8 php - Typecho 数据库适配器无法选择 - SegmentFault 思否
安装 php5.6-mysql
:
sudo apt install php5.6-mysql
安装后会自动启用该拓展
Typecho 提示无法连接/无法创建数据库
手动创建一个叫 typecho
的数据库,mysql -u username -p
:
CREATE DATABASE typecho
文章和后台 404
-
nginx 的站点配置:
location ~ .*\.php$
修改为location ~ .*\.php(\/.*)*$
-
cgi.fix_pathinfo
设置为enable
:修改 php 配置:sudo vim /etc/php/5.6/fpm/php.ini
,将cgi.fix_pathinfo = 1
取消注释
500 错误
查看 nginx error 日志,发现错误:PHP Fatal error: Call to undefined function utf8_decode()
,解决:安装 php-xml:
sudo apt install php5.6-xml
emoji 支持
在发表带有 emoji 表情的文章时,前端会提示错误:Database Query Error
。后端错误:
"PHP message: Incorrect string value: '\xF0\x9F\x90\x8B A...' for column 'text' at row 1" while reading response header from upstream
原因是数据库或 PHP 程序 charset 是 utf-8,我们要换成 utf8mb4。解决办法如下:
-
修改数据库编码
ALTER DATABASE typecho CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-
修改表编码
USE typecho; alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table typecho_options convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table typecho_users convert to character set utf8mb4 collate utf8mb4_unicode_ci;
-
修改 PHP 程序连接参数
vim config.inc.php
,修改charset
为utf8mb4
:'charset' => 'utf8mb4',
设置证书后无法加载 CSS 和 JavaScript
进入后台,把站点地址从 ip:port
修改为自己的域名。
升级 PHP 至 7.4
添加 PPA 然后 APT 安装相应模块即可。
升级后注意修改 Nginx 配置文件中 fastcgi_pass
的路径,以及 /etc/php/7.4/fpm/pool.d/www.conf
这个文件内的相关权限。
在升级 Typecho 后可能会无法访问数据库,这是因为高版本 MySQL 驱动换了,修改 config.inc.php
文件中 Typecho_Db
的第一个参数如下:
$db = new Typecho_Db('Pdo_Mysql', 'typecho_');