本教程适用于以下操作系统版本

  • Debian 12(Bookworm)
  • Debian 11(Bullseye)
  • Debian 9(Stretch)

本页内容

  • 前提条件
  • 步骤 1 - 配置防火墙
  • 步骤 2 - 安装 Nginx
  • 步骤 3 - 安装 PHP 及其扩展
  • 步骤 4 - 配置 PHP-FPM
  • 步骤 5 - 安装 Composer
  • 步骤 6 - 安装并配置 PostgreSQL
  • 步骤 7 - 安装并配置 Redis
  • 步骤 8 - 安装 Craft CMS,使 Redis 与 Craft CMS 协同工作
  • 步骤 9 - 安装 SSL
  • 步骤 10 - 配置 Nginx
  • 步骤 11 - 访问 Craft CMS
  • 步骤 12 - 备份与恢复 Craft CMS
  • 步骤 13 - 更新 Craft CMS
  • 结论
  • 使 Redis 与 Craft CMS 协同工作

Craft CMS 是一款开源的内容管理系统(CMS),可用于创建各种类型的网站。它是一个安全且可扩展的 CMS,拥有庞大的插件生态系统,提供高质量的免费和付费插件。它具备直观、用户友好的控制面板,便于内容创作与管理工作。它基于 Yii PHP 框架构建,其模板系统由 Twig 模板引擎驱动。它可以使用 MySQL 和 PostgreSQL 数据库进行存储,并使用 Redis 数据库进行缓存和会话存储。

在本教程中,你将学习如何在 Debian 12 服务器上安装 Craft CMS。你还将学习如何启用 Redis 与其协同工作,以及如何备份和恢复使用 Craft CMS 创建的站点。

前提条件

  • 一台运行 Debian 12 的服务器,至少配备 1 GB 内存。
  • 一个具有 sudo 权限的非 root 用户。
  • Uncomplicated Firewall(UFW)已启用并正在运行。
  • 一个指向你服务器的完全限定域名(FQDN),例如 craftcms.example.com。
  • 一个电子邮件服务(如 Amazon SES 或 Mailgun)的 SMTP 账户。
  • 所有软件包已更新。$ sudo apt update && sudo apt upgrade
  • 本教程和 Craft CMS 的运行需要一些必要的软件包,其中部分可能已安装在你的服务器上。$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

一台运行 Debian 12 的服务器,至少配备 1 GB 内存。

一个具有 sudo 权限的非 root 用户。

Uncomplicated Firewall(UFW)已启用并正在运行。

一个指向你服务器的完全限定域名(FQDN),例如 craftcms.example.com。

一个电子邮件服务(如 Amazon SES 或 Mailgun)的 SMTP 账户。

所有软件包已更新。

$ sudo apt update && sudo apt upgrade

本教程和 Craft CMS 的运行需要一些必要的软件包,其中部分可能已安装在你的服务器上。

$ sudo apt install curl wget nano software-properties-common dirmngr apt-transport-https ca-certificates lsb-release debian-archive-keyring gnupg2 ufw unzip -y

步骤 1 - 配置防火墙

在安装任何软件包之前,第一步是配置防火墙,以允许 HTTP 和 HTTPS 连接。

检查防火墙的状态。

$ sudo ufw status

你应该会看到类似以下的输出。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

允许 HTTP 和 HTTPS 端口。

$ sudo ufw allow http
$ sudo ufw allow https

再次检查状态以确认。

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

步骤 2 - 安装 Nginx

Debian 12 自带较旧版本的 Nginx。你需要下载官方 Nginx 仓库以安装最新版本。

导入 Nginx 的签名密钥。

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

添加 Nginx 稳定版的仓库。

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

更新系统软件源。

$ sudo apt update

安装 Nginx。

$ sudo apt install nginx

验证安装。在 Debian 系统上,以下命令需要配合 sudo 才能运行。

$ sudo nginx -v
nginx version: nginx/1.24.0

启动 Nginx 服务器。

$ sudo systemctl start nginx

检查服务状态。

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-12-01 09:46:46 UTC; 18s ago
       Docs: https://nginx.org/en/docs/
    Process: 39483 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 39484 (nginx)
      Tasks: 2 (limit: 2315)
     Memory: 1.7M
        CPU: 6ms
     CGroup: /system.slice/nginx.service
             ??39484 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??39485 "nginx: worker process"

步骤 3 - 安装 PHP 及其扩展

Debian 12 默认自带 PHP 8.2。你可以运行以下命令安装它以及 Craft CMS 所需的扩展。

$ sudo apt install php php-cli php-common php-json php-gmp php-fpm php-xmlrpc php-bcmath php-imagick php-curl php-zip php-gd php-mysql php-xml php-mbstring php-xmlrpc php-intl php-pgsql

如果想始终使用最新版本的 PHP,或需要安装多个版本的 PHP,可以添加 Ondrej 的 PHP 仓库。

首先,导入 Sury 的 PHP 仓库 GPG 密钥。

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

添加 Ondrej Sury 的 PHP 仓库。

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

更新你的系统软件源列表。

$ sudo apt update

你可能会收到有关待升级软件包的信息,执行这些升级。

$ sudo apt upgrade

安装 PHP 及其扩展。

$ sudo apt install php8.2 php8.2-cli php8.2-common php8.2-gmp php8.2-fpm php8.2-xmlrpc php8.2-bcmath php8.2-imagick php8.2-curl php8.2-zip php8.2-gd php8.2-mysql php8.2-xml php8.2-mbstring php8.2-xmlrpc php8.2-intl php8.2-pgsql

检查已安装的 PHP 版本。

$ php --version
PHP 8.2.13 (cli) (built: Nov 24 2023 13:10:42) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies

检查 PHP 服务的状态。

$ sudo systemctl status php8.2-fpm
? php8.2-fpm.service - The PHP 8.2 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php8.2-fpm.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-12-01 10:29:53 UTC; 34min ago
       Docs: man:php-fpm8.2(8)
    Process: 65825 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.2/fpm/pool.d/www.conf 82 (code=exited, status=0/SUCCESS)
   Main PID: 65821 (php-fpm8.2)
     Status: "Processes active: 0, idle: 3, Requests: 208, slow: 0, Traffic: 0.2req/sec"
      Tasks: 4 (limit: 2315)
     Memory: 83.4M
        CPU: 6.456s
     CGroup: /system.slice/php8.2-fpm.service
             ??65821 "php-fpm: master process (/etc/php/8.2/fpm/php-fpm.conf)"
             ??65823 "php-fpm: pool www"
             ??65824 "php-fpm: pool www"
             ??65843 "php-fpm: pool www"

步骤 4 - 配置 PHP-FPM

打开 php.ini 进行编辑。

$ sudo nano /etc/php/8.2/fpm/php.ini

要设置文件上传大小,请修改 upload_max_filesize 和 post_max_size 变量的值。该值决定了你可以上传到 Craft CMS 的文件大小。在本教程中,我们将其设置为 128 MB,你可以根据自己的需要进行设置。

$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 128M/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 128M/' /etc/php/8.2/fpm/php.ini

根据你的服务器资源与需求配置 PHP 的内存限制(memory_limit)。

$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini

打开文件 /etc/php/8.2/fpm/pool.d/www.conf。

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

我们需要将 PHP 进程的 Unix 用户/组设置为 nginx。在文件中找到 user=www-data 和 group=www-data 这两行,并将其修改为 nginx。

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

此外,在文件中找到 listen.owner=www-data 和 listen.group=www-data 这两行,并将其修改为 nginx。

listen.owner = nginx
listen.group = nginx

按 Ctrl + X 并在提示时输入 Y 保存文件。

重启 PHP-FPM 进程。在重启 PHP 服务之前,请确保已安装 Nginx,否则重启将失败,因为它无法找到 nginx 组。

$ sudo systemctl restart php8.2-fpm

步骤 5 - 安装 Composer

Composer 是 PHP 的依赖管理器。它也是 Laravel PHP 框架(Craft CMS 正是基于该框架构建)的依赖管理器。

下载 Composer 安装脚本。

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

验证下载的安装程序。

$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

你将收到如下输出。

Installer verified

运行安装脚本以下载最新版本的 Composer。

$ php composer-setup.php

删除安装脚本。

$ php -r "unlink('composer-setup.php');"

将下载的二进制文件移动到 /usr/local/bin 目录。

$ sudo mv composer.phar /usr/local/bin/composer

确认安装结果。

$ composer --version
Composer version 2.6.5 2023-10-06 10:11:52

步骤 6 - 安装并配置 PostgreSQL

Debian 12 默认自带 PostgreSQL 15。我们将改用 PostgreSQL 16。

运行以下命令添加 PostgreSQL 的 GPG 密钥。

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

将 APT 仓库添加到你的软件源列表中。

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

更新系统软件源。

$ sudo apt update

现在,你可以使用以下命令安装 PostgreSQL。

$ sudo apt install postgresql postgresql-contrib

postgresql-contrib 软件包包含一些额外的工具。

验证版本。

$ psql --version
psql (PostgreSQL) 16.1 (Debian 16.1-1.pgdg120+1)

检查 PostgreSQL 服务的状态。

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Wed 2023-11-29 05:54:03 UTC; 11s ago
   Main PID: 20170 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Nov 29 05:54:03 craftcms systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Nov 29 05:54:03 craftcms systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

你可以看到该服务默认已启用并正在运行。

启动 PostgreSQL 命令行(shell)。

$ sudo -i -u postgres psql

创建 Craft CMS 数据库。

postgres=# CREATE DATABASE craftcms;

创建 Craft CMS 用户,并设置一个强密码。

postgres-# CREATE USER craftuser WITH PASSWORD 'Your_Password';

将数据库的所有者更改为 Craft CMS 用户。

postgres-# ALTER DATABASE craftcms OWNER TO craftuser;

将数据库的所有权限授予 Craft CMS 用户。

postgres-# GRANT ALL PRIVILEGES ON DATABASE craftcms TO craftuser;

退出 shell。

postgres-# \q

验证你的凭据是否有效。

$ psql --username craftuser --password --host localhost craftcms
Password:
psql (16.1 (Debian 16.1-1.pgdg120+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

craftcms=>

输入 \q 退出 shell。

步骤 7 - 安装并配置 Redis

Debian 12 默认自带 Redis 7.0,我们将使用该版本。安装 Redis。

$ sudo apt install redis

验证版本。

$ redis-server --version
Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=c4e7f6bf175a885b

不过,如果你想安装最新版本,可以使用 Redis 的官方仓库,执行以下命令进行安装。

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
$ sudo apt update
$ sudo apt install redis

下一步是为 Redis 服务器添加身份验证。自 Redis v6.0 起,添加身份验证的最佳方式是使用 ACL(访问控制列表)。打开 /etc/redis/redis.conf 文件进行编辑。

$ sudo nano /etc/redis/redis.conf

找到 # aclfile /etc/redis/users.acl 这一行,去掉前面的井号(#)取消注释。

aclfile /etc/redis/users.acl

按 Ctrl + X 并在提示时输入 Y 保存文件。

接下来,创建并打开 /etc/redis/users.acl 文件进行编辑。

$ sudo nano /etc/redis/users.acl

在其中添加以下行。

user navjot on +@all ~* >yourpassword

按 Ctrl + X 并在提示时输入 Y 保存文件。

重启 Redis 服务器以使更改生效。

$ sudo systemctl restart redis

打开 Redis shell。

$ redis-cli

使用 PING 命令,它会返回身份验证错误。

127.0.0.1:6379> PING
(error) NOAUTH Authentication required.

使用 AUTH 命令登录。

127.0.0.1:6379> AUTH navjot yourpassword
OK

再次使用 PING 命令。

127.0.0.1:6379> PING
OK

退出 shell。

127.0.0.1:6379> exit

你还需要安装 PHP 的 Redis 扩展。

$ sudo apt install php-redis

步骤 8 - 安装 Craft CMS

在安装 Craft CMS 之前,你可以使用以下命令检查是否满足其运行所需的全部服务器要求。

$ curl -Lsf https://raw.githubusercontent.com/craftcms/server-check/HEAD/check.sh | bash

你将看到如下输出。

Running Craft Server Check…

Craft CMS Requirement Checker

This script checks if your web server configuration meets the requirements for running a Craft CMS installation.
It checks if the server is running the right version of PHP, if appropriate PHP extensions have been loaded,
and if php.ini file settings are correct.


Results:
--------

PHP 8.2+: OK

BCMath extension: OK

ctype extension: OK

cURL extension: OK

DOM extension: OK

Fileinfo extension: OK

GD extension or ImageMagick extension: OK

iconv extension: OK

Intl extension: OK

JSON extension: OK

Multibyte String extension (with Function Overloading disabled): OK

OPcache extension (with save_comments): OK

OpenSSL extension: OK

PCRE extension (with UTF-8 support): OK

PDO extension: OK

Reflection extension: OK

SPL extension: OK

Zip extension: OK

ignore_user_abort(): OK

password_hash(): OK

proc_close(): OK

proc_get_status(): OK

proc_open(): OK

proc_terminate(): OK

allow_url_fopen: OK

ini_set calls: OK

Memory Limit: OK

------------------------------------------
Errors: 0   Warnings: 0   Total checks: 27

一切检查无误后,即可继续。创建网站根目录。

$ sudo mkdir /var/www/html/craftcms -p

将当前登录的用户设置为该目录的所有者。

$ sudo chown -R $USER:$USER /var/www/html/craftcms

切换到该目录。

$ cd /var/www/html/craftcms

使用 Composer 下载并安装 Craft CMS。命令末尾的点(.)表示在当前目录中执行安装。

$ composer create-project craftcms/craft .

在安装过程中,系统会询问你关于数据库、管理员账户、站点 URL 及其语言等多项信息,如下所示。

> @php craft setup/welcome

   ______ .______          ___       _______ .___________.
  /      ||   _  \        /   \     |   ____||           |
 |  ,----'|  |_)  |      /  ^  \    |  |__   `---|  |----`
 |  |     |      /      /  /_\  \   |   __|      |  |
 |  `----.|  |\  \----./  _____  \  |  |         |  |
  \______|| _| `._____/__/     \__\ |__|         |__|

     A       N   E   W       I   N   S   T   A   L   L
               ______ .___  ___.      _______.
              /      ||   \/   |     /       |
             |  ,----'|  \  /  |    |   (----`
             |  |     |  |\/|  |     \   \
             |  `----.|  |  |  | .----)   |
              \______||__|  |__| |_______/


Generating an application ID ... done (CraftCMS--923f03f1-9bea-4c3d-a7ca-1466645ce75d)
Generating a security key ... done (iMdcUi6wQyf9MshEda__vZcCwILbclxz)


Welcome to Craft CMS!

Are you ready to begin the setup? (yes|no) [no]:yes
Which database driver are you using? (mysql or pgsql) [mysql] pgsql
Database server name or IP address: [127.0.0.1]
Database port: [5432]
Database username: [root] craftuser
Database password:
Database name: craftcms
Database table prefix:
Testing database credentials ... success!
Using default schema "public".
Saving database credentials to your .env file ... done

Install Craft now? (yes|no) [yes]:yes

Username: [admin] navjot
Email: 
[email protected]

Password:
Confirm:
Site name: Howtoforge Tutorials
Site URL: https://craftcms.example.com
Site language: [en-US]
*** installing Craft

使 Redis 与 Craft CMS 协同工作

安装 yiisoft/yii2-redis 软件包。

$ composer require --prefer-dist yiisoft/yii2-redis:"~2.0.0"

打开 /var/www/html/craftcms/config/app.php 文件进行编辑。

$ nano config/app.php

你将看到其中的以下内容。

use craft\helpers\App;

return [
    'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS',
];

将其修改为如下所示。

use craft\helpers\App;

return [
    'id' => App::env('CRAFT_APP_ID') ?: 'CraftCMS',
    'components' => [
        'cache' => function() {
            $config = [
                'class' => yii\redis\Cache::class,
                'keyPrefix' => Craft::$app->id,
                'defaultDuration' => Craft::$app->config->general->cacheDuration,

                // Full Redis connection details:
                'redis' => [
                    'hostname' => App::env('REDIS_HOSTNAME') ?: 'localhost',
                    'port' => 6379,
                    'username' => App::env('REDIS_USERNAME') ?: null,
                    'password' => App::env('REDIS_PASSWORD') ?: null,
                ],
            ];

            return Craft::createObject($config);
        },
    ],
];

按 Ctrl + X 并在提示时输入 Y 保存文件。这将使 Redis 作为 Craft CMS 的缓存存储。你也可以将 Redis 用于存放 PHP 会话数据、任务队列,以及作为互斥锁(mutex)驱动。相关配置可参阅 Craft CMS 的官方文档。

你还需要将 Redis 配置添加到 .env 文件中。

$ nano .env

在文件末尾添加以下代码。

REDIS_HOSTNAME=localhost
REDIS_USERNAME=navjot
REDIS_PASSWORD=yourpassword

按照上述选项进行选择。完成后,将该目录的组更改为 nginx。这样,当前登录的用户和 Nginx 都将能够访问 Craft CMS。

$ sudo chgrp -R nginx /var/www/html/craftcms

赋予 nginx 组对该目录的写入权限。

$ sudo chmod -R g+w /var/www/html/craftcms

自此以后,你无需再更改权限,即可在不使用 root 权限的情况下完成所有操作。

步骤 9 - 安装 SSL

我们需要安装 Certbot 来生成 SSL 证书。你可以使用 Debian 的仓库安装 Certbot,也可以通过 Snapd 工具获取最新版本。我们将使用 Snapd 版本。

Debian 12 默认未安装 Snapd,安装 Snapd 软件包。

$ sudo apt install snapd

运行以下命令,确保你的 Snapd 版本是最新的。

$ sudo snap install core && sudo snap refresh core

安装 Certbot。

$ sudo snap install --classic certbot

使用以下命令创建指向 /usr/bin 目录的符号链接,以确保可以运行 Certbot 命令。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

验证 Certbot 是否正常工作。

$ certbot --version
certbot 2.7.4

运行以下命令生成 SSL 证书。

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m 
[email protected]
 -d craftcms.example.com

上述命令会将证书下载到服务器上的 /etc/letsencrypt/live/craftcms.example.com 目录。

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

检查 Certbot 续期调度服务。

$ sudo systemctl list-timers

你会发现 snap.certbot.renew.service 是计划运行的服务之一。

NEXT                        LEFT         LAST                        PASSED     UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Fri 2023-12-01 10:39:00 UTC 12min left   Fri 2023-12-01 10:09:01 UTC 17min ago  phpsessionclean.timer    phpsessionclean.service
Fri 2023-12-01 17:01:47 UTC 6h left      Thu 2023-11-30 17:01:47 UTC 17h ago    systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Fri 2023-12-01 18:34:00 UTC 8h left      -                           -          snap.certbot.renew.timer snap.certbot.renew.service

对该过程进行一次试运行(dry run),检查 SSL 续期是否正常工作。

$ sudo certbot renew --dry-run

如果没有看到错误,说明一切就绪,你的证书将自动续期。

步骤 10 - 配置 Nginx

打开文件 /etc/nginx/nginx.conf 进行编辑。

$ sudo nano /etc/nginx/nginx.conf

在 include /etc/nginx/conf.d/*.conf; 这一行之前添加以下内容。

server_names_hash_bucket_size 64;

按 Ctrl + X 并在提示时输入 Y 保存文件。

创建并打开文件 /etc/nginx/conf.d/craftcms.conf 进行编辑。

$ sudo nano /etc/nginx/conf.d/craftcms.conf

在其中粘贴以下代码。将 craftcms.example.com 替换为你的域名。请确保 client_max_body_size 的值设置为 128MB,这与我们之前在配置 PHP 时为 Craft CMS 设置的值一致。

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name craftcms.example.com;
    root /var/www/html/craftcms/web;

    index index.php;
    client_max_body_size 128M;

    access_log  /var/log/nginx/craftcms.access.log;
    error_log   /var/log/nginx/craftcms.error.log;

    ssl_certificate      /etc/letsencrypt/live/craftcms.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/craftcms.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/craftcms.example.com/chain.pem;

    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        try_files $uri/index.html $uri $uri/ /index.php?$query_string;
    }

    location ~ [^/]\.php(/|$) {
        try_files $uri $uri/ /index.php?$query_string;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_keep_conn on;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTP_PROXY "";
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  craftcms.example.com;
    return 301   https://$host$request_uri;
}

按 Ctrl + X 并在提示时输入 Y 保存文件。

验证你的 Nginx 配置。

$ sudo nginx -t

重启 Nginx 服务器。

$ sudo systemctl restart nginx

步骤 11 - 访问 Craft CMS

在浏览器中打开 URL https://craftcms.example.com,你将进入如下页面。

在 Debian 12 上安装 Craft CMS 并配置 Redis 缓存

要访问管理页面,请访问 URL https://craftcms.example.com/admin,你将进入登录页面。

在 Debian 12 上安装 Craft CMS 并配置 Redis 缓存

输入你的管理员凭据,点击 Sign in(登录)按钮进行登录。你将进入如下仪表盘。

在 Debian 12 上安装 Craft CMS 并配置 Redis 缓存

现在你可以开始使用 Craft CMS 来构建你的网站了。

步骤 12 - 备份与恢复 Craft CMS

你可以在管理面板中,通过 管理仪表盘 >> 实用工具 >> 数据库备份 来备份 Craft CMS 的数据库。

在 Debian 12 上安装 Craft CMS 并配置 Redis 缓存

点击 Backup(备份)按钮即可下载数据库备份。你也可以使用终端创建备份,运行以下命令创建备份,系统提示时输入你的密码。

$ mysqldump -u craftcmsuser -p craftcms > ~/craftcms.database.sql

你也可以使用 Craft CMS 的命令行工具创建数据库备份。该工具的优势在于你无需传入数据库凭据。有关 Craft CMS 命令行工具的更多信息,请点击此处。

$ cd /var/www/html/craftcms
$ php craft db/backup ~/
Backing up the database ... done
Backup file: /home/navjot/howtoforge-tutorials--2023-12-03-065138--v4.5.11.1.sql (200.019 KB)

如果在上述命令中不指定任何路径,备份文件将写入 /var/www/html/craftcms/storage/backups 目录。

要备份文件,只需复制并保存整个 /var/www/html/craftcms 文件夹。

$ cd /var/www/html
$ tar -zcf ~/craftcms.tar.gz craftcms

要在新服务器上恢复,请将文件解压到 /var/www/html 文件夹。

$ tar -xzf craftcms.tar.gz -C /var/www/html/

在新服务器上创建使用相同凭据的数据库,并使用以下命令恢复数据库,系统提示时输入你的密码。

$ mysqlimport -u craftcmsuser -p craftcms craftcms.database.sql

步骤 13 - 更新 Craft CMS

更新 Craft CMS 有两种方式。一种是在管理面板中进行。当有可用更新时,你会收到一条通知,点击该通知即可升级。Craft CMS 会在执行更新前自动备份数据库。

你也可以通过终端进行更新。

要查看所有可用更新,请运行以下命令。

$ cd /var/www/html/craftcms/
$ php craft update

如果有可用更新,请运行以下命令进行应用。

$ php craft update all

结论

本教程到此结束,你已学会如何在 Debian 12 服务器上安装 Craft CMS。如果你有任何疑问,请在下方评论区留言。