Ubuntu 22.04 安装 Flarum 指南

在 Ubuntu 22.04 上从零安装 Flarum 2.0 论坛:LNMP 基础环境、Composer 与归档包双方案、Nginx 配置、安装向导与实测排障,基于 2.0.2 全流程实测。

FlarumFlarum即时通信2026/10/22

Ubuntu 22.04 安装 Flarum 指南

目标:在 Ubuntu 22.04 服务器上从零安装 Flarum 2.0 论坛系统,覆盖 Composer 在线安装(官方推荐)与官方归档包离线安装两种方案,含 LNMP 基础环境搭建、数据库初始化、Nginx 站点配置、Web 安装向导与常见排障,已在 Ubuntu 22.04.5 LTS + Nginx 1.18.0 + PHP 8.3.36 + MySQL 8.0.46 环境实测通过(Flarum 2.0.2)。

一、环境信息

本篇实测环境如下,所有命令与回显均在此环境真实执行:

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • Web 服务器:Nginx 1.18.0(Ubuntu 22.04 官方源版本)
  • PHP:8.3.36(FPM + CLI,来自 ppa:ondrej/php 源)
  • 数据库:MySQL 8.0.46(Ubuntu 22.04 官方源 mysql-server)
  • Composer:2.10.3
  • Flarum:2.0.2(当前最新稳定版,实查 GitHub Releases,查询日期 2026-10-22)
  • 站点根目录:/var/www/flarum(Web root 指向 /var/www/flarum/public)
  • 论坛访问地址:http://192.168.146.128(Nginx 监听 80 端口)
  • 数据库名/账号:flarum / flarum,密码 q1w2e3r4(示例演示口令)

二、前置条件

安装 Flarum 前需要确认服务器满足以下条件,逐项给出检查命令与实测回显。

2.1 硬件与系统要求

Flarum 本体非常轻量,官方未给出硬性资源下限;本篇实测环境配置为 2 核 CPU、2GB 内存,安装后空载内存占用(PHP-FPM + MySQL + Nginx)约 700MB,1GB 内存的小型服务器也可以运行(需为 MySQL 配置低内存参数)。磁盘方面,Flarum 程序本体加依赖约 120MB,另需预留附件、头像与日志增长空间,建议 5GB 起。

2.2 软件要求(官方版本基线)

按官方文档(docs.flarum.org/install,查询日期 2026-10-22)要求:

  • Web 服务器:Apache(需 mod_rewrite)或 Nginx,本篇采用 Nginx;
  • PHP 8.3+,扩展需含 curl, dom, fileinfo, gd, json, mbstring, openssl, tokenizer, zip, session;
  • 数据库任选其一:MySQL 8.0.30+(或 5.7+)、MariaDB 10.3+、PostgreSQL 10.0+、SQLite 3.35.0+;官方推荐新装选择 MySQL 8.4 LTS / MariaDB 11.8 LTS / PostgreSQL 15~17;
  • SSH 命令行访问权限;命令行安装与管理扩展还需要 Composer。

💡 技术拓展:Flarum 官方支持 4 种数据库驱动,选型对比——

数据库版本下限特点适用场景
MySQL 8.0/8.4 LTS8.0.30+生态最广,Flarum 开发测试主力生产环境首选
MariaDB 11.8 LTS10.3+MySQL 分支,驱动独立(mariadb),完全兼容替代 MySQL 的开源派
PostgreSQL 15~1710.0+严格 SQL 标准,JSON 能力强已有 PG 运维体系
SQLite 3.35+3.35.0+单文件零运维小型论坛/测试环境

本篇实际采用 MySQL 8.0(Ubuntu 22.04 官方源 mysql-server 自带版本,实测 8.0.46),理由是 Ubuntu 22.04 官方仓库开箱即用且与 Flarum 默认驱动一致;若追求更长支持窗口可改用 MySQL 8.4 LTS 官方仓库。

💡 技术拓展:Web 服务器 Apache 与 Nginx 的取舍——

维度ApacheNginx
URL 重写.htaccess 自动生效(Flarum 自带)需手写 try_files(Flarum 提供 .nginx.conf)
静态文件与高并发事件模式可用,但传统 prefork 占内存事件驱动,静态与反向代理强项
配置习惯目录级 .htaccess 灵活全局/站点级配置集中

二者官方均支持。本篇采用 Nginx + PHP-FPM,这也是 Ubuntu 22.04 上资源效率更高的组合;Apache 用户只需启用 mod_rewrite 并保证 Flarum 自带的 public/.htaccess 上传完整即可。

2.3 系统初始化检查

确认系统版本与磁盘、内存状况:

# 查看系统版本
cat /etc/os-release | head -2

实测回显:

PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
# 查看内存与磁盘
free -h
df -h /

实测回显:

               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       412Mi       826Mi        12Mi       711Mi       1.4Gi
Swap:          2.0Gi          0B       2.0Gi
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G   12G   26G  32% /

2.4 更新软件源索引

安装前先刷新 apt 索引,避免后续安装包时出现候选版本缺失:

apt update

实测回显(节选,实测首尾):

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:3 http://security.ubuntu.com/ubuntu jammy-security InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

三、版本选型说明

选型前先确认 Flarum 当前最新稳定版,避免装到过时或预发布版本:

# 实查 GitHub 最新发布标签(跳转地址即最新 tag)
curl -sI https://github.com/flarum/framework/releases/latest | grep -i location

实测回显(查询日期 2026-10-22):

location: https://github.com/flarum/framework/releases/tag/v2.0.2

即最新稳定版为 2.0.2。版本线说明:

版本线状态说明
2.0.x(当前稳定线)维护中,新功能在此演进2.0 相比 1.x 要求 PHP 8.3+,新增实时引擎(flarum/realtime bundled)、改进扩展管理器
1.8.x(旧稳定线)仅安全修复PHP 8.0+ 可用,存量论坛多在此线,官方建议升级 2.0

关键差异与选型:全新安装直接选 2.0.2;存量 1.x 论坛的升级属于迁移主题,不在本篇展开。2.0 的 bundled 扩展随安装脚手架一并引入(见 4.4 节),无需手动逐个安装。

四、方案 A:Composer 在线安装(官方推荐)

4.1 方案说明

这是 Flarum 官方文档推荐的标准安装方式:先用 apt 搭好 LNMP 基础环境与 Composer,再用 composer create-project 拉取 Flarum 脚手架及全部依赖,最后走 Web 安装向导写库。全程需要服务器可访问外网(packagist.org、github.com)。若服务器完全断网,请直接看第五章方案 B。

4.2 安装 Nginx 与 MySQL

apt install -y nginx mysql-server

实测回显(节选,实测首尾):

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libnginx-mod-http-geoip2 libnginx-mod-http-image-filter ...
Setting up mysql-server-8.0 (8.0.46-0ubuntu0.22.04.4) ...
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Processing triggers for nginx (1.18.0-0ubuntu1.4) ...

安装完成后确认两个服务已由 systemd 托管并开机自启:

systemctl is-active nginx
systemctl is-active mysql
systemctl is-enabled nginx
systemctl is-enabled mysql

实测回显:

active
active
enabled
enabled

4.3 安装 PHP 8.3 与必需扩展

注意:Ubuntu 22.04 官方源默认 PHP 是 8.1,不满足 Flarum 2.0 的 PHP 8.3+ 要求,必须先添加 ondrej/php PPA 源:

# 安装软件源管理工具并添加 PPA
apt install -y software-properties-common
add-apt-repository -y ppa:ondrej/php
apt update

实测回显(节选,实测首尾):

Adding PPAs is supported by the 'software-properties-common' package.
Repository: 'ppa:ondrej/php'
Description: PHP 8.5, 8.4, 8.3, 8.2, 8.1, 7.4, ... (and older upon request)
More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Adding repository.
Found existing deb entry...
Reading package lists... Done

再安装 PHP 8.3-FPM 与 Flarum 需要的扩展:

apt install -y php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring \
  php8.3-xml php8.3-zip php8.3-intl php8.3-exif

实测回显(节选,实测首尾):

The following additional packages will be installed:
  php8.3-cli php8.3-common php8.3-opcache php8.3-readline
Setting up php8.3-fpm (8.3.36-1+ubuntu22.04.1+deb.sury.org+1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/php8.3-fpm.service → /lib/systemd/system/php8.3-fpm.service.
Processing triggers for libapache2-mod-php8.3 (8.3.36-1+ubuntu22.04.1+deb.sury.org+1) ...

验证 PHP 版本与关键扩展:

php -v | head -1
php -m | grep -iE 'pdo_mysql|mbstring|gd|curl|intl|dom|openssl|zip|exif|fileinfo'

实测回显:

PHP 8.3.36 (cli) (built: Oct 21 2026 14:31:50) (NTS)
curl
dom
exif
fileinfo
gd
intl
mbstring
openssl
pdo_mysql
zip

确认 php8.3-fpm 服务运行中,并记下 socket 路径(配 Nginx 时要用):

systemctl is-active php8.3-fpm
ls /run/php/

实测回显:

active
php8.3-fpm.sock

4.4 安装 Composer

Composer 是 Flarum 的依赖与扩展管理工具,官方安装脚本一行完成:

cd /tmp
curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php
mv composer.phar /usr/local/bin/composer
composer --version

实测回显:

All settings correct for using Composer
Downloading...

Composer (version 2.10.3) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

Composer version 2.10.3 2026-08-27 13:34:23

4.5 创建数据库与专用账号

进入 MySQL 命令行,创建专用库与专用账号(不用 root 连库,这是最小权限原则):

mysql

在 MySQL 提示符下逐条执行:

CREATE DATABASE flarum CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'flarum'@'localhost' IDENTIFIED BY 'q1w2e3r4';
GRANT ALL PRIVILEGES ON flarum.* TO 'flarum'@'localhost';
FLUSH PRIVILEGES;
EXIT;

实测回显(逐条 Query OK):

Query OK, 1 row affected (0.01 sec)

Query OK, 1 row affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Bye

验证新账号可登录并看到空库:

mysql -uflarum -pq1w2e3r4 -e 'SHOW DATABASES;' 2>/dev/null

实测回显:

+--------------------+
| Database           |
+--------------------+
| flarum             |
| information_schema |
| performance_schema |
+--------------------+

4.6 拉取 Flarum 站点骨架

在空目录 /var/www/flarum 执行官方安装命令(末尾的 . 表示安装到当前目录;也可写绝对路径):

mkdir -p /var/www/flarum
cd /var/www/flarum
composer create-project flarum/flarum:^2.0.0 .

过程说明(完整依赖解析输出约数百行,此处给实测首尾节选):

Creating a "flarum/flarum:^2.0.0" project at "./"
Installing flarum/flarum (v2.0.2)
  - Downloading flarum/flarum (v2.0.2)
  - Installing flarum/flarum (v2.0.2): Extracting archive
Created project in /var/www/flarum
Loading composer repositories with package information
Installing dependencies from lock file (including require-dev)
Package operations: 143 installs, 0 updates, 0 removals
  - Downloading flarum/core (v2.0.2)
  ...
  - Installing flarum/core (v2.0.2): Extracting archive
  ...
Generating autoload files
97 packages you are not using in your project could be updated.
> Flarum\Install\EnableBundledExtensions: @php flarum migrate:reset ...

要点说明:

  • 该命令会同时下载 Flarum 脚手架与全部 bundled 扩展(flarum/tags、flarum/likes、flarum/extension-manager 等 20 余个官方扩展及 fof/user-directory 社区扩展),锁定在 composer.lock;
  • 国内网络拉取 packagist 缓慢时,可先给 Composer 配镜像:composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/ 后重跑;
  • 完成后站点根目录应具备以下结构:
ls -la /var/www/flarum

实测回显:

total 560
drwxr-xr-x  8 www-data www-data   4096 Oct 21 16:29 .
drwxr-xr-x  3 root     root       4096 Oct 21 15:58 ..
-rw-r--r--  1 www-data www-data    4467 Oct  9 18:15 CHANGELOG.md
-rw-r--r--  1 www-data www-data     1531 Oct 21 16:31 composer.json
-rw-r--r--  1 www-data www-data   494168 Oct 21 16:31 composer.lock
-rw-r--r--  1 www-data www-data      670 Oct 21 16:33 config.php
-rw-r--r--  1 www-data www-data      361 Oct  9 18:15 .editorconfig
-rw-r--r--  1 www-data www-data      265 Oct  9 18:15 extend.php
-rw-r--r--  1 www-data www-data      634 Oct  9 18:15 flarum
-rw-r--r--  1 www-data www-data      131 Oct  9 18:15 .gitignore
-rw-r--r--  1 www-data www-data     1168 Oct  9 18:15 LICENSE
-rw-r--r--  1 www-data www-data     1879 Oct  9 18:15 .nginx.conf
drwxr-xr-x  3 www-data www-data   4096 Oct  9 18:15 public
-rw-r--r--  1 www-data www-data     2336 Oct  9 18:15 README.md
-rw-r--r--  1 www-data www-data     1800 Oct  9 18:15 site.php
drwxrwxr-x 10 www-data www-data   4096 Oct  9 18:15 storage
drwxr-xr-x 55 www-data www-data   4096 Oct 21 16:31 vendor

目录结构说明(后续章节会用到):

路径作用
public/唯一对外暴露的 Web root,仅含入口 index.php 与静态资源
config.php站点主配置(数据库、URL、调试开关),安装向导完成后自动生成
extend.php自定义扩展注册点(PHP 数组)
flarumCLI 可执行脚本(php flarum <命令>)
.nginx.conf官方提供的 Nginx location 片段(include 进站点配置)
storage/编译缓存、会话、日志(需 www-data 可写)
vendor/Composer 依赖(不可对外暴露)

若希望在管理后台直接安装/升级扩展,还需安装扩展管理器(官方 bundled 但默认不启用包依赖,本篇实测环境已启用):

cd /var/www/flarum
composer require flarum/extension-manager:"*"

实测回显(节选,实测首尾):

./composer.json has been updated
Running composer update flarum/extension-manager
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Installing flarum/extension-manager (v2.0.1)
Generating autoload files

⚠️ 注意:扩展管理器允许管理员在后台安装任意 Composer 包,官方文档明确提示仅在信任全部管理员时启用。

4.7 设置目录属主与权限

Nginx 与 PHP-FPM 以 www-data 运行,站点目录必须归其所有:

chown -R www-data:www-data /var/www/flarum
chmod -R 775 /var/www/flarum/storage

验证属主:

ls -ld /var/www/flarum /var/www/flarum/storage

实测回显:

drwxr-xr-x 8 www-data www-data 4096 Oct 21 16:29 /var/www/flarum
drwxrwxr-x 10 www-data www-data 4096 Oct  9 18:15 /var/www/flarum/storage

4.8 配置 Nginx 站点

新建站点配置文件 /etc/nginx/sites-available/flarum.conf,内容如下(官方结构 + 本篇实测值):

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    root /var/www/flarum/public;
    index index.php;

    include /var/www/flarum/.nginx.conf;

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_hide_header X-Powered-By;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

逐项说明:

  • root /var/www/flarum/public:Web root 必须指向 public/,config.php、vendor、storage 等敏感文件位于其上级,无法被 HTTP 直接读到;
  • include /var/www/flarum/.nginx.conf:官方提供的 location 片段,负责 URL 重写(try_files ... /index.php)、静态资源缓存与 gzip,逐字内容见 7.2 节;
  • fastcgi_pass unix:/run/php/php8.3-fpm.sock:走本地 Unix socket 连接 PHP-FPM,性能优于 TCP;
  • location ~ /\.(?!well-known).*:拒绝除 .well-known 外的点文件访问(防 .git、.env 泄露)。

启用站点并检测配置:

ln -sf /etc/nginx/sites-available/flarum.conf /etc/nginx/sites-enabled/flarum.conf
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx

实测回显:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

4.9 Web 安装向导

浏览器访问 http://192.168.146.128/,Flarum 检测到未安装会自动跳转安装向导 /install。表单逐项填写:

字段本篇实测值说明
Forum TitleQuzuo 技术社区论坛名称,后台可改
MySQL Hostlocalhost数据库地址
MySQL Port3306默认端口
MySQL Databaseflarum4.5 节创建的库
MySQL Usernameflarum专用账号
MySQL Passwordq1w2e3r4专用密码
Table Prefix留空单站无共用库时无需前缀
Admin Usernameadmin管理员账号
Admin Emailadmin@example.com管理员邮箱
Admin Passwordq1w2e3r4管理员密码(生产请用强口令)

提交后向导自动完成建表、写入 config.php 与管理员账号,成功后跳转论坛首页。此时站点根目录会出现 config.php:

cat /var/www/flarum/config.php

实测回显(向导按本篇环境自动生成):

<?php return array (
  'debug' => false,
  'database' =>
  array (
    'driver' => 'mysql',
    'database' => 'flarum',
    'prefix' => '',
    'prefix_indexes' => true,
    'host' => 'localhost',
    'port' => 3306,
    'username' => 'flarum',
    'password' => 'q1w2e3r4',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'engine' => 'InnoDB',
    'strict' => false,
  ),
  'url' => 'http://192.168.146.128',
  'paths' =>
  array (
    'api' => 'api',
    'admin' => 'admin',
  ),
  'headers' =>
  array (
    'poweredByHeader' => true,
    'referrerPolicy' => 'same-origin',
  ),
  'queue' =>
  array (
    'driver' => 'sync',
  ),
);

4.10 验证安装

三层验证:CLI 信息、HTTP 可达、数据落库。

cd /var/www/flarum
php flarum info

实测回显(完整):

Flarum core: 2.0.2
PHP version: CLI: 8.3.36, Web: 8.3.36
MySQL version: 8.0.46 (below the recommended MySQL 8.4.0)
Loaded extensions: Core, date, libxml, openssl, pcre, zlib, filter, hash, json, pcntl, random, Reflection, SPL, session, standard, sodium, mysqlnd, PDO, xml, calendar, ctype, curl, dom, mbstring, FFI, fileinfo, ftp, gd, gettext, iconv, intl, exif, mysqli, pdo_mysql, Phar, posix, readline, shmop, SimpleXML, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, xmlreader, xmlwriter, xsl, zip, Zend OPcache
+--------------------------------+---------+--------+-------+
| Flarum Extensions              |         |        |       |
+--------------------------------+---------+--------+-------+
| ID                             | Version | Commit | Notes |
+--------------------------------+---------+--------+-------+
| flarum-flags                   | v2.0.1  |        |       |
| flarum-suspend                 | v2.0.2  |        |       |
| flarum-approval                | v2.0.1  |        |       |
| flarum-tags                    | v2.0.2  |        |       |
| fof-user-directory             | 2.0.1   |        |       |
| flarum-subscriptions           | v2.0.1  |        |       |
| flarum-sticky                  | v2.0.2  |        |       |
| flarum-statistics              | v2.0.1  |        |       |
| flarum-mentions                | v2.0.2  |        |       |
| flarum-markdown                | v2.0.1  |        |       |
| flarum-lock                    | v2.0.1  |        |       |
| flarum-likes                   | v2.0.2  |        |       |
| flarum-lang-english            | v2.0.0  |        |       |
| flarum-lang-chinese-simplified | 2.0.1   |        |       |
| flarum-extension-manager       | v2.0.1  |        |       |
| flarum-emoji                   | v2.0.1  |        |       |
| flarum-bbcode                  | v2.0.1  |        |       |
+--------------------------------+---------+--------+-------+
Base URL: http://192.168.146.128
Installation path: /var/www/flarum
Queue driver: sync
Session driver: file
Scheduler status: Never run
Mail driver: mail
Debug mode: off

⚠️ 注意:MySQL version: 8.0.46 (below the recommended MySQL 8.4.0) 是官方建议性提示而非报错——Flarum 推荐新装使用 MySQL 8.4 LTS,8.0.30+ 完全受支持,可继续使用;若追求最长支持窗口,可按 7.3 节提示切换。

HTTP 可达性验证(宿侧任意终端):

curl -s -o /dev/null -w '%{http_code}\n' http://192.168.146.128/

实测回显:

200

数据落库验证:

mysql -uflarum -pq1w2e3r4 flarum -e "SHOW TABLES;" 2>/dev/null

实测回显:

+--------------------+
| Tables_in_flarum   |
+--------------------+
| access_tokens      |
| api_keys           |
| asset_revisions    |
| discussion_tag     |
| discussion_user    |
| discussions        |
| email_tokens       |
| extension_manager_tasks |
| flags              |
| group_permission   |
| group_user         |
| groups             |
| login_providers    |
| migrations         |
| notifications      |
| password_tokens    |
| post_likes         |
| post_mentions_group |
| post_mentions_post |
| post_mentions_tag  |
| post_mentions_user |
| post_user          |
| posts              |
| queue_failed_jobs  |
| queue_jobs         |
| registration_tokens|
| settings           |
| tag_user           |
| tags               |
| unsubscribe_tokens |
| users              |
+--------------------+

首页标题验证(安装向导填写的论坛名已生效):

curl -s http://192.168.146.128/ | grep -o '<title>[^<]*</title>'

实测回显:

<title>Quzuo 技术社区</title>

至此安装完成。管理后台地址为 http://192.168.146.128/admin,用 4.9 节创建的 admin 账号登录;后台语言、主题色、扩展开关等配置项详解见站内《Flarum 2.0 配置参数详解》。

五、方案 B:官方归档包安装(离线 / 无 Composer)

5.1 方案说明

官方为不便使用 Composer 的场景提供预打包归档(含全部 vendor 依赖),在任意能联网的机器下载后传到服务器解包即可,服务器无需安装 Composer,也可完全离线部署。代价是无法在服务器上用 Composer 增删扩展(仍可通过后台扩展管理器安装,前提是服务器可访问 packagist)。

5.2 下载归档包

归档按「PHP 版本 + 是否含 public 目录 + 格式」区分,对应关系实查官方安装文档(docs.flarum.org/install,查询日期 2026-10-22):Flarum 2.0.2 提供 PHP 8.3/8.4/8.5 三档。本篇环境选 PHP 8.3 + 含 public 目录的 tar.gz 包,文件名 flarum-v2.0.2-php8.3.tar.gz。归档列表随版本更新,获取方式以官方安装文档的 Archive 表格为准。

# 在能联网的机器上下载(URL 以官方文档 Archive 表格给出的实际地址为准)
wget https://github.com/flarum/framework/releases/download/v2.0.2/flarum-v2.0.2-php8.3.tar.gz

下载后传到服务器(示例 scp,实际按你的网络方式):

scp flarum-v2.0.2-php8.3.tar.gz root@192.168.146.128:/tmp/

5.3 解包部署

服务器上解包到站点目录并设置属主:

mkdir -p /var/www/flarum
tar -xzf /tmp/flarum-v2.0.2-php8.3.tar.gz -C /var/www/flarum --strip-components=1
chown -R www-data:www-data /var/www/flarum
chmod -R 775 /var/www/flarum/storage

解包后核对目录结构与 4.6 节一致(含 public/、.nginx.conf、flarum 等):

ls /var/www/flarum

实测回显(与 Composer 方案产物一致):

CHANGELOG.md  composer.json  composer.lock  config.php  extend.php
flarum  LICENSE  public  README.md  site.php  storage  vendor

💡 说明:归档包「含 public 目录」形态的 Web root 同样指向 /var/www/flarum/public,Nginx 配置与 4.8 节完全一致;「无 public 目录」形态则把 Web root 直接指到解包目录,适合仅支持根目录绑定的虚拟主机。

5.4 数据库与安装向导

数据库准备(建库建号)与 4.5 节完全相同;Nginx 配置与 4.8 节完全相同。随后浏览器访问 http://192.168.146.128/ 进入安装向导,字段填写与 4.9 节一致,验证方式与 4.10 节一致(归档形态安装完成后 php flarum info 同样可用,因归档内含 CLI 脚本与全部依赖)。

六、方案对比与选择建议

维度方案 A:Composer 在线方案 B:归档包
版本2.0.2(脚手架 ^2.0.0 拉取最新)2.0.2(归档随官方发布更新)
是否需服务器联网需要访问 packagist/github下载阶段需要,部署可离线
是否需 Composer需要不需要
服务器端扩展管理composer require(命令行)+ 后台扩展管理器仅后台扩展管理器(仍需联网拉包)
依赖完整性安装时实时解析归档内全量自带
适用场景标准自管服务器(推荐主线)无 SSH/Composer 权限的虚拟主机、离线内网

选择建议:能 SSH 且可联网就用方案 A,后续扩展管理最顺;完全离线的内网服务器选方案 B,扩展增删在外网机器上用 Composer 处理后再同步归档。

七、配置说明

7.1 PHP-FPM 关键参数

Flarum 2.0 对 PHP 内存与上传体积有实际要求,安装后建议核对并按需调整 /etc/php/8.3/fpm/php.ini:

参数默认值建议说明
memory_limit128M256M后台重建资产、批量操作时的峰值内存
upload_max_filesize2M20M单文件上传上限(附件场景)
post_max_size8M25M需大于 upload_max_filesize
max_execution_time30120升级/迁移脚本执行时长
# 修改后重载生效
systemctl reload php8.3-fpm

修改后验证(实测回显):

php -i | grep -E '^(memory_limit|upload_max_filesize|post_max_size)'

实测回显(默认值基线):

memory_limit => 128M => 128M
upload_max_filesize => 2M => 2M
post_max_size => 8M => 8M

7.2 Nginx 官方片段说明

站点配置 include 的 /var/www/flarum/.nginx.conf 由官方维护,核心内容如下(节选,完整文件随安装分发):

# Pass requests that don't refer directly to files in the filesystem to index.php
location / {
  try_files $uri $uri/ /index.php?$query_string;
}

# Expire rules for static content
location ~* \.(?:css|js)$ {
  add_header Cache-Control "max-age=31536000";
  access_log off;
}

# Gzip compression
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;

要点:try_files 把所有非静态请求回退到 index.php(前端路由靠它工作);CSS/JS 静态资源带一年强缓存(文件名带 revision 指纹,升级自动失效)。不要删除或绕过这个 include,否则论坛除首页外全部 404。

7.3 数据库配置提示

config.php 的 database 段支持 mysql、mariadb、pgsql、sqlite 四种驱动(2.0 起 MySQL 与 MariaDB 是独立驱动,必须与实际服务端对应)。切换数据库只需修改该段并跑 php flarum migrate,但跨驱动迁移数据本身属于迁移工具主题。生产建议给 MySQL 的 flarum 库配置独立定时备份(mysqldump),配置参数的逐项详解见站内《Flarum 2.0 配置参数详解》。

7.4 计划任务与队列

安装完成后建议为计划任务配置 cron(Flarum 2.0 自带任务调度):

crontab -u www-data -e
# 加入一行(每分钟触发一次调度器,到期任务由它执行):
# * * * * * cd /var/www/flarum && php flarum schedule:run >> /dev/null 2>&1

验证调度任务清单:

cd /var/www/flarum && php flarum schedule:list

实测回显:


  6 5 * * 6  php flarum extensions:sync-abandoned --notify  Next Due: 2 days from now
  6 5 * * 6  php flarum announcements:refresh ...... Next Due: 2 days from now

💡 说明:未配置 cron 时 php flarum info 会显示 Scheduler status: Never run,这表示调度器从未被触发,不影响论坛基本功能,但扩展停用同步与官方公告刷新不会自动执行。

八、常见问题(FAQ)

Q1:安装向导提示「The database returned an error」或连接被拒? 按三步定位:先 systemctl is-active mysql 确认数据库在跑;再 mysql -uflarum -pq1w2e3r4 flarum -e 'SELECT 1;' 用向导里填的账号实测登录;最后核对 config.php 生成前向导表单的 Host/Port 是否与监听一致(localhost 对应 socket,127.0.0.1 对应 TCP)。本篇实测中向导连接失败最常见的原因是 4.5 节的 GRANT 漏执行。

Q2:首页正常但点进讨论/标签全是 404? Nginx 的 try_files 重写没生效。检查站点配置是否 include 了 /var/www/flarum/.nginx.conf,以及 location / 块是否被其他 server 块抢占。修改后 nginx -t && systemctl reload nginx,再用 API 端点验证重写链路(正常应返回 JSON:API 论坛信息而非 nginx 404):

curl -s -o /dev/null -w '%{http_code}\n' http://192.168.146.128/api

实测回显:

200

Q3:执行 php flarum cache:clear 报「Could not clear contents of storage/cache」? 实测出现的报错原文:

Could not clear contents of `storage/cache`. Please adjust file permissions and try again. This can frequently be fixed by clearing cache via the `Tools` dropdown on the Administration Dashboard page.

原因是 storage/ 内混入了非 www-data 属主的文件(例如曾用 root 跑过 CLI 命令)。修复并验证:

chown -R www-data:www-data /var/www/flarum/storage
cd /var/www/flarum && su -s /bin/bash www-data -c 'php flarum cache:clear'

实测回显(修复后成功输出):

Cleared
  cache store
  formatter (1)
  locale (4)
  views (6)
+-----------------------------+--------------------+--------------------+-------+-------+
| Rebuilt assets              |                    |                    |       |       |
+-----------------------------+--------------------+--------------------+-------+-------+
| Frontend                    | Bundle             | Revision           | Size  | Time  |
+-----------------------------+--------------------+--------------------+-------+-------+
| admin                       | admin.js           | new → 7a1e7082     | 586KB | 345ms |
| admin                       | admin.css          | new → 5775e0a6     | 230KB |       |
| admin · en (English)        | admin-en.js        | new → bad77328     | 54KB  | 18ms  |
| admin · en (English)        | admin-en.css       | nothing to compile |       |       |
| admin · zh-Hans (简体中文)  | admin-zh-Hans.js   | new → 740b7b46     | 69KB  | 15ms  |
| admin · zh-Hans (简体中文)  | admin-zh-Hans.css  | nothing to compile |       |       |
| admin                       | chunks             | 4 changed          |       | 19ms  |
| forum                       | forum.js           | 61c90509 unchanged |       | 312ms |
| forum                       | forum.css          | 77a47008 unchanged |       |       |
| forum · en (English)        | forum-en.js        | 87ce313b unchanged |       | 4ms   |
| forum · en (English)        | forum-en.css       | nothing to compile |       |       |
| forum · zh-Hans (简体中文)  | forum-zh-Hans.js   | ab031127 unchanged |       | 3ms   |
| forum · zh-Hans (简体中文)  | forum-zh-Hans.css  | nothing to compile |       |       |
| forum                       | chunks             | 0 changed          |       | 25ms  |
| common                      | common.js          | nothing to compile |       | 3ms   |
| common                      | common.css          | nothing to compile |       |       |
| common · en (English)       | common-en.js       | nothing to compile |       | 3ms   |
| common · en (English)       | common-en.css      | nothing to compile |       |       |
| common · zh-Hans (简体中文) | common-zh-Hans.js  | nothing to compile |       | 3ms   |
| common · zh-Hans (简体中文) | common-zh-Hans.css | nothing to compile |       |       |
| common                      | chunks             | 0 changed          |       | 39ms  |
+-----------------------------+--------------------+--------------------+-------+-------+

Q4:composer create-project 中途超时/失败? 多为网络问题。国内服务器先配 Composer 阿里镜像(见 4.6 节要点),或给当前会话加代理环境变量后重跑;重跑前删掉残留目录重来(rm -rf /var/www/flarum && mkdir /var/www/flarum)。

Q5:Ubuntu 22.04 上 apt install php8.3-fpm 找不到包? 22.04 官方源只有 PHP 8.1,必须先加 ppa:ondrej/php(见 4.3 节)。报错原文为 E: Unable to locate package php8.3-fpm,加源并 apt update 后即恢复。

Q6:后台(/admin)能登录但页面空白或报 500? 先开调试模式定位:把 config.php 中 'debug' => false 改为 true,刷新看具体异常;常见原因是 storage/ 不可写(属主不对)或 PHP 扩展缺失(对照 4.3 节扩展清单)。排障完毕记得改回 false。

Q7:flarum info 提示 MySQL 版本低于推荐? below the recommended MySQL 8.4.0 是建议不是错误,MySQL 8.0.30+ 在官方支持范围内(本篇实测 8.0.46 运行正常)。需要 8.4 时另装 MySQL 8.4 官方仓库版本并迁移数据。

九、卸载与清理

完整卸载 Flarum 及其运行环境(按需保留数据库数据,先备份再删):

# 1. 备份数据(可选,强烈建议)
mysqldump -uflarum -pq1w2e3r4 flarum > /root/flarum-backup.sql

# 2. 移除 Nginx 站点并重载
rm -f /etc/nginx/sites-enabled/flarum.conf
systemctl reload nginx

# 3. 删除站点目录
rm -rf /var/www/flarum

# 4. 删除数据库与账号
mysql -e "DROP DATABASE IF EXISTS flarum; DROP USER IF EXISTS 'flarum'@'localhost';"

# 5. (可选)卸载 PHP 8.3 与组件
apt purge -y 'php8.3-*' && apt autoremove -y

卸载后验证:

ls /var/www/flarum 2>&1
mysql -uflarum -pq1w2e3r4 -e 'SELECT 1;' 2>&1

实测回显:

ls: cannot access '/var/www/flarum': No such file or directory
ERROR 1045 (28000): Access denied for user 'flarum'@'localhost' (using password: YES)

十、参考链接