因为Windows Server资源占用实在有些严重,决定把服务器迁移到Linux。之前也觉得Hexo虽然轻量、静态,图片渲染实在有些拉跨。所以决定一并换掉。
服务器是阿里云学生机,迁移目标系统是Ubuntu 20.04
。参考文章是这篇:Ubuntu搭建Typecho博客。因为这篇文章咕了太久有些细节已经开始忘记了,写多少算多少吧
配置
0x00 组件安装
在Ubuntu上,安装LNMP组件很方便:
首先sudo apt-get update
,之后
nginx:sudo apt-get install nginx
mysql:sudo apt-get install mysql
php:sudo apt-get install php7.4-fpm php7.4-mysql
php的包名是带版本号的,敲完php之后直接tab看包名,我这里是7.4
。
为了方便管理,把phpmyadmin
也装一下。
sudo apt-get install phpmyadmin
安装phpmyadmin
的过程中会出现一些选项,直接选最前面那个了()然后还需要设定root密码。之后要用。
至于Typecho,我是在官网下载之后直接scp
过去的。备用。
0x01 php配置
这块的配置比较简单)先
sudo vim /etc/php/7.4/fpm/php.ini
打开php配置文件。用vim
的/
搜索cgi.fix_pathinfo=
,去掉这行前边的;
,然后把值改成0
。就像这样:
重启php:
sudo service php7.4-fpm restart
0x02 nginx配置
首先,打开nginx配置文件:
sudo vim /etc/nginx/sites-available/default
先记住root
后边的目录,一会Typecho就放到里边。我这里是root /var/www/html/;
。
再找到index
,加上index.php
,像这样:
# Add index.php to the list if you are using PHP
index index.html index.htm index.php index.nginx-debian.html;
Typecho文档中提到index.php
server_name
改成自己的域名:
server_name direcore.xyz;
为了确保之后伪静态功能正常,加上:
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
接下来是location{}
部分。我的完整配置如下:
location ~ .*\.php(\/.*)*$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
首先把location ~ .\.php$
改为location ~ .*\.php(\/.*)*$
,然后去除fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
这句前面的#
。之后,加上这么一段:
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
这些是为了防止不能登录后台的情况出现。
重启nginx:
sudo service nginx restart
这样,就能够通过nginx访问Typecho了。但如果想通过HTTPS访问,还需要配置443端口。大致就是把80端口的配置复制一下,再加上ssl相关内容,这里不再赘述。
0x03 MySQL配置(phpMyAdmin)
首先将phpMyAdmin链接到网站的根目录下:
sudo ln -s /usr/share/phpmyadmin /var/www/html
然后,用http://域名/phpmyadmin
进入phpMyAdmin面板。
我到这一步死活进不去,然后发现我给链接到/phpmyadmin/phpmyadmin/了。参考文章写错了,我被坑了,有什么好说的
这时按理说通过用户名root+安装时设定的密码,就可以登进管理面板了。但是不行!报错信息:
#1698 -Access denied for user 'root'@'localhost'
mysqli_real_connect(): (HY000/1698): Access denied for user ‘root’@’localhost’
Google了一波,原来是MySQL 5.7/8+禁止root用户登phpMyAdmin。(顺便百度真菜,Google最前面就是结果,百度啥也没搜到) 原文(English)给出了几种解决方案,我这里提其中一种,如果对别的方案感兴趣,也可以去看,我这里就不搬运了。思路是建一个新的管理员账户给phpMyAdmin用。首先,登入MySQL:
sudo mysql -p -u root
建立一个新用户。(以用户名direwolf
,密码password
为例)
CREATE USER 'direwolf'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
之后给这个用户权限:
GRANT ALL PRIVILEGES ON *.* TO 'direwolf'@'localhost';
用这个新建的用户就可以登入phpMyAdmin面板了。然后,新建一个名为typecho
的数据库,编码默认utf8mb4_0900_ai_ci
。
至此,准备工作全部完成。
0x04 Typecho配置
到这就很简单了。把Typecho解压到网站的根目录(我这里是/var/www/html/
),直接用域名访问博客,进入配置向导,填入信息。在继续的时候可能会提示无法创建config.inc.php
,用vim
创建在网站根目录,将给的内容粘贴进去就可以了。之后就能看到博客页面啦,里面有一篇Hello world文章。用https://域名/admin
访问管理面板,就可以进行个性化设置。
在打开永久链接的时候,可能会提示未检测到配置,直接开就完事了(等发现打不开文章再关也不急)
参考链接: