由于不想使用一键脚本和宝塔面板,我在搭建该博客时颇费时间,特作此篇为记录。

背景

原先的阿里云香港轻量服务器,虽然价格比较便宜,但带宽捉急,梯子速度颇令人不满,于是在寻得俄罗斯伯力的低价VPS,带宽大、延迟低,最重要的是每月仅需8RMB,因而决心迁移。

又由于最近一年国际局势变幻莫测,科学上网之路愈发坎坷,梯子的安全性和可用性更加重要,如果继续依赖各种“一键脚本”和宝塔面板,不仅存在安全隐患,还不利于提高Linux使用能力。“知其然,知其所以然”,此之谓也。

基础要求

原本是准备使用CentOS7 + Caddy的组合,但是CentOS 装个PHP都费劲(其实不难),Caddy正在大版本更新,Caddy2不成熟,资料过少,而官方又已经放弃了支持Caddy1,所以改用其他方案。

本教程基于 Ubuntu 18.04 LTSPHP 7.2Nginx 1.14.0SQLite, 并默认以root用户登录, 下面将以此为基础安装Typecho 1.1 搭建起一个功能够用的博客,读者应具有一定的Linux使用经验(例如了解 mkdir rm mv ls cp touch vim等指令的最基本用法)。

在开始之前, 确保系统软件在最新版本, 命令如下:

apt update
apt upgrade

安装SQLite

apt install sqlite3

安装PHP

我们需要基础的PHP程序和以下拓展:
php7.2-fpm php7.2-gd php7.2-mbstring php7.2-xml php7.2-sqlite3

apt install php php7.2-fpm php7.2-gd php7.2-mbstring php7.2-xml php7.2-sqlite3

启用并查看状态:

service start php-fpm7.2
service status php-fpm7.2
php -v

如果有以下提示则正常:

Active: active (running)
# 此处略去若干行
PHP 7.2.24-0ubuntu0.18.04.6 (cli) (built: May 26 2020 13:09:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.24-0ubuntu0.18.04.6, Copyright (c) 1999-2018, by Zend Technologies

其他用法:

service {start|stop|status|restart|reload|force-reload} php-fpm7.2

启用、停止、重启、查看状态,按上面的指令选就是了。

设置PHP:

PHP配置文件主要有: php.iniphp-fpm.conf 以及在php-fpm.conf中引入的 php-fpm.d/www.conf 以及该目录下的其他配置文件, 要找到它们只需用上述名称代替下面代码中的XXX即可。

find / -name XXX

这里需要强调几点:

  • /etc/php/7.2/fpm/php.ini中的cgi.fix_pathinfo项取消注释,并确保其值为0. 这样改的目的是防止因用户上传恶意代码造成危害。(鄙人才疏学浅,原理为何请各位参考: 传送门
  • 记住/etc/php/7.2/fpm/pool.d/www.conf中的

    user group listen项,它们可能像这样:

    user = www-data
    group = www-data
    # 此处略去若干行
    listen = /run/php/php7.2-fpm.sock
  • 更改PHP配置后应当按照上面介绍的方法重启服务并验证PHP状态是否正常。

安装Nginx

apt install nginx
nginx -v

出现以下则正常,

nginx version: nginx/1.14.0 (Ubuntu)

Nginx的安装目录默认在/usr/share/nginx/, 配置文件默认位于/etc/nginx/

root@me:/etc/nginx# ls
conf.d          koi-utf     modules-available  proxy_params     sites-enabled  win-utf
fastcgi.conf    koi-win     modules-enabled    scgi_params      snippets
fastcgi_params  mime.types  nginx.conf         sites-available  uwsgi_params

即我们的Nginx目前会调用/conf.d和site-enabled目录下的虚拟主机配置,

现在我们可以直接删除/etc/nginx/sites-enabled/下的那个默认站点。

由于Nginx可能会出现版本更新,所以我们推荐将网站放在不受软件更新影响的目录中,(XXX是你的网站文件夹的名字,可自定,下同)

mkdir /var/www/XXX

然后进入conf.d目录新建我们的虚拟主机配置文件:

cd /etc/nginx/conf.d
vim XXX.conf

填入Typecho官方给出的配置:

    server {
        listen          80;
        server_name     yourdomain.com;
        root            /var/www/XXX;
        index           index.html index.htm index.php;
 
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }
 
        location ~ .*\.php(\/.*)*$ {
            include fastcgi.conf;
            fastcgi_pass  unix:/run/php/php7.2-fpm.sock;
        }
 
        access_log logs/yourdomain.log combined;
    }

注意以下几点:

  • listen 为监听端口,默认HTTP网站应当为 80
  • root 为网站根目录,我们稍后会向这个目录中放入Typecho程序。
  • 把配置中的yourdomain换成你自己的实际域名和实际目录存放地址
  • fastcgi_pass 后的内容应当和上述/etc/php/7.2/fpm/pool.d/www.conflisten一致

    (如果listen后面是xxxxx.sock, 那么绝对路径前应加unix:,如果是127.0.0.1:9000,那么就什么也不加直接写成相同的地址)

关于Nginx的基础知识建议读者自行搜索,在此推荐以下文章,如果搭建网站过程中碰到问题也可参考:

Nginx 虚拟主机配置

Web Server Guides

Getting Started with NGINX - Part 1: Installation and Basic Setup

Serve PHP with PHP-FPM and NGINX

安装Typecho

cd /var/www/XXX
wget http://typecho.org/downloads/1.1-17.10.30-release.tar.gz
tar -xzf 1.1*
rm 1.1*
mv bulid XXX
mv XXX /var/www/

访问你的域名即可看到安装页面了,按提示进行即可。

常见问题

  • Nginx 503 错误:PHP-FPM 和 NGINX 之间没有配置好。

    再次确认/etc/nginx/conf.d/XXX.conf 中的fastcgi_pass 后的内容和/etc/php/7.2/fpm/pool.d/www.conf中的listen项是否一致

  • Typecho 安装好后,除首页外全部显示Access denied :

    /etc/nginx/conf.d/XXX.conflocation一节中加入fastcgi_split_path_info ^(.+?.php)(/.*)$;重启Nginx即可。原因见此

后记

上述教程不过囫囵吞枣,我也不过浅涉而已,不求甚解,只祈能用...

网站建设兹事体大,须得系统阅读其他材料,继续学习吧!