关于我把服务器迁移到Typecho+LNMP的过程及踩坑的二三事

因为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。就像这样:

cgi.fix_pathinfo

重启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

新建数据库1

新建数据库2

至此,准备工作全部完成。

0x04 Typecho配置

到这就很简单了。把Typecho解压到网站的根目录(我这里是/var/www/html/),直接用域名访问博客,进入配置向导,填入信息。在继续的时候可能会提示无法创建config.inc.php,用vim创建在网站根目录,将给的内容粘贴进去就可以了。之后就能看到博客页面啦,里面有一篇Hello world文章。用https://域名/admin访问管理面板,就可以进行个性化设置。

在打开永久链接的时候,可能会提示未检测到配置,直接开就完事了(等发现打不开文章再关也不急)


参考链接:

  1. Ubuntu搭建Typecho博客 - 简书
  2. Can't log into phpMyAdmin: mysqli_real_connect(): (HY000/1698): Access denied for user 'root'@'localhost' | DevAnswers.co
  3. 服务器环境设置 - Typecho Docs

本文链接:

https://www.direcore.xyz/archives/13/
1 + 2 =
快来做第一个评论的人吧~