====== Flarum 搭建教程 ====== ===== 一些其它的参考教程 ===== * [[https://mrx.moe/li-gong/flarum-beta13-installation|Flarum|从零开始的同人女赛博营地盖房指南・一日千秋]] ===== Flarum 是什么? ===== Flarum 是一个基于 PHP 的论坛软件。因为是基于 PHP ,所以它对搭建环境的要求比较低。而与其它的基于 PHP 的论坛相比,它的一个优点是比较好看。 {{ :php:flarum:flarum-mobile-view.png?nolink |Flarum的移动端界面}} 另外一个优点是它的插件系统极其丰富,站长可以通过现有的插件很方便地定制自己论坛的功能。 但是,Flarum 现在还是 beta 版本(本文写作时是 beta.15 版本),会有不稳定的情况。而不时的版本升级也使得非官方插件不一定能够兼容。 ===== Flarum-beta.15 安装 ===== 本文假定您已经配置好了 [[:linux:sudo|sudo]] 权限,并安装好了 [[:install#php-fpm|PHP-fpm]]、[[:install#mysql|MySQL]]、[[:install#nginx|Nginx]]。若没有,请点进相应的条目查看安装方式。 ==== 配置数据库 ==== Flarum 需要使用数据库。使用如下命令进入 MySQL 数据库的控制命令行: sudo mysql 例如,我想要为我们的论坛准备一个叫做 flarumdb 的数据库,让论坛作为名叫 flarum 的用户访问数据库,则可以在控制命令行输入以下命令:(密码还需要您自行决定) CREATE DATABASE flarumdb; CREATE USER 'flarum'@'localhost' IDENTIFIED BY '一个新的密码'; GRANT ALL PRIVILEGES ON flarumdb.* TO 'flarum'@'localhost'; FLUSH PRIVILEGES; quit 分别创建一个新的 MySQL 数据库、创建一个新的 MySQL 用户、授权新的用户可以自由使用新的数据库。最后的 quit 退出数据库的命令行。 如果您想要其它的名称,也可以相应地: CREATE DATABASE 您想要的数据库名称; CREATE USER '您想要的数据库用户名'@'localhost' IDENTIFIED BY '一个新的密码'; GRANT ALL PRIVILEGES ON 您想要的数据库名称.* TO '您想要的数据库用户名'@'localhost'; FLUSH PRIVILEGES; quit ==== 下载 Flarum ==== === 查看 php-fpm 用户权限 === 开启 php-fpm: sudo systemctl start php7.4-fpm.service 查看 php-fpm 使用的 Linux 用户: ps aux | grep php 您应该会在看见类似的输出: root 558 0.0 1.1 274 24 ? Ss Jan04 1:20 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf) www-data 611 0.0 4.9 357 998 ? S Jan07 2:29 php-fpm: pool www www-data 611 0.0 4.9 358 101 ? S Jan07 2:28 php-fpm: pool www www-data 611 0.0 4.2 356 86 ? S Jan07 2:29 php-fpm: pool www user 700 0.0 0.0 629 608 pts/0 S+ 12:54 0:00 grep --color=auto php 您会找到 ''www-data'' (见上述输出),但也可能不是 ''www-data'' 而是其它的用户名。如果是其它的用户名,请把这个用户名记下,并用于替换下面**所有**的 ''www-data''。 === 下载 Flarum === == 安装 Composer == 先安装 composer :(参见 [[https://getcomposer.org/download/|Composer 官网]]) php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" sudo php composer-setup.php --install-dir=/usr/bin --filename=composer php -r "unlink('composer-setup.php');" == 安装 Flarum == 创建目录,并把授权给 ''www-data'': sudo mkdir -p /var/www/flarum sudo chown -R www-data /var/www/flarum 安装: cd /var/www/flarum sudo -u www-data composer create-project flarum/flarum . --stability=beta ==== 配置 Nginx 连接至 Flarum ==== === 域名配置 === 其实不使用域名也是很容易实现的。但为简单起见,请配置一个 [[:net:domain|域名]] :让域名的 ''A'' 记录指向您的服务器的 ''IP''。 === Nginx 配置 === 我们这里假设您的 [[:conf:nginx|Nginx 配置]] 是 ''/etc/nginx/sites-available/'' 整理的,您可以用以下命令验证: if [ -e /etc/nginx/sites-available/ ]; then echo 'YES'; else echo 'NO'; fi 若输出是 ''YES'' 则您可以按下述方法进行,如果输出为 ''NO'' 您可以直接联系本站负责人责令其更新教程将flarum.conf存放到/etc/nginx/conf.d目录下。 输入以下命令使用 [[:edit:nano|nano]] 编辑器编辑 Nginx 配置文件: sudo nano /etc/nginx/sites-available/flarum.conf 输入以下内容:(请将 ''example.com'' 替换为您先前配置的域名) server { listen 80; server_name example.com; # Hide nginx version server_tokens off; # Various content security headers add_header Referrer-Policy "same-origin"; add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "DENY"; add_header X-XSS-Protection "1; mode=block"; root /var/www/flarum/public/; index index.htm index.html index.php; # frontend location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } include /var/www/flarum/.nginx.conf; } ''Ctrl+S'' 保存,''Ctrl+X'' 退出 nano。以下命令配置并重启 Nginx: '' sudo ln -s /etc/nginx/sites-available/flarum.conf /etc/nginx/sites-enabled/flarum.conf sudo systemctl restart nginx '' 这时您应该已经能够在您的域名看到 Flarum 的安装界面了。 如果您使用 Cloudflare ,此时可能会有报错,请继续下面的配置 HTTPS,配置了 HTTPS 后应该会消除错误。 === 配置 HTTPS === 如果是使用 Cloudflare 的,请跟随 [[https://certbot-dns-cloudflare.readthedocs.io/en/stable/#welcome-to-certbot-dns-cloudflare-s-documentation|Certbot-cloudflare]] 进行 HTTPS 配置。 如果不是,您应可以使用普通的 [[https://certbot.eff.org/|Certbot]] 完成配置。 === 安装 Flarum === 在 Flarum 的网页安装界面上: {{ :php:flarum:flarum-webins.png?nolink |Flarum 网页版安装界面}} ^ 栏位 ^ 您应填写的 ^ | Forum Title | 您的网站标题 | | MySQL Database | 您先前创建的数据库名,我们的例子中是 ''flarumdb'' | | MySQL Username | 您先前创建的数据库用户名,我们的例子中是 ''flarum'' | | MySQL Password | 您先前创建的数据库用户的密码,我们的例子中是您自己选的 | | Table Prefix | 可以比较随意,如:''flarum_'' | | Admin Username | 管理员用户名,这是您后续登录论坛的管理员账户 | | Admin Email | 管理员邮件 | | Admin Password | 管理员账户密码 | | Confirm Password | 确认管理员账户密码 | 点击 ''Install Flarum'' 稍加等待后即可看到 Flarum 的界面。 {{ :php:flarum:flarum-interface.png?nolink&400 | Flarum 界面}} ===== 配置 ===== ==== 中文全文搜索 ==== 这里的配置不行。您可以考虑使用 [[https://mroonga.org/|Mroonga]] 实现中文搜索。但是这里的教程暂时并不能真正实现中文搜索。 === 可以期待的配置 === 请见 [[https://github.com/jjandxa/flarum-ext-chinese-search/|jjandxa/flarum-ext-chinese-search]] ,但现在似乎没有支持 beta.15。 === 勉强可以用的配置 === 这个方法不适用于比较大的站点,因为比较耗资源。教程编写时 Flarum 版本为 beta.15 。 直接更改代码:进入 Flarum 安装目录 ''/var/www/flarum'',编辑 ''vendor/flarum/core/src/Discussion/Search/Gambit/FulltextGambit.php'' 文件: 找到含有这些东西的部分: $subquery = Post::whereVisibleTo($search->getActor()) ->select('posts.discussion_id') ->selectRaw('SUM(MATCH('.$grammar->wrap('posts.content').') AGAINST (?)) as score', [$bit]) ->selectRaw('SUBSTRING_INDEX(GROUP_CONCAT('.$grammar->wrap('posts.id').' ORDER BY MATCH('.$grammar->wrap('posts.content').') AGAINST (?) DESC, '.$grammar->wrap('posts.number').'), \',\', 1) as most_relevant_post_id', [$bit]) ->where('posts.type', 'comment') ->whereRaw('MATCH('.$grammar->wrap('posts.content').') AGAINST (? IN BOOLEAN MODE)', [$bit]) ->groupBy('posts.discussion_id'); (您可以使用一些关键词来搜索代码,加快寻找速度。)看到 ''whereRaw'' 的一行吗?在这一行前加上 // ,并新建一行加上 ->where('content', 'LIKE', '%'.$bit.'%'),修改完后: $subquery = Post::whereVisibleTo($search->getActor()) ->select('posts.discussion_id') ->selectRaw('SUM(MATCH('.$grammar->wrap('posts.content').') AGAINST (?)) as score', [$bit]) ->selectRaw('SUBSTRING_INDEX(GROUP_CONCAT('.$grammar->wrap('posts.id').' ORDER BY MATCH('.$grammar->wrap('posts.content').') AGAINST (?) DESC, '.$grammar->wrap('posts.number').'), \',\', 1) as most_relevant_post_id', [$bit]) ->where('posts.type', 'comment') //->whereRaw('MATCH('.$grammar->wrap('posts.content').') AGAINST (? IN BOOLEAN MODE)', [$bit]) ->where('content', 'LIKE', '%'.$bit.'%') ->groupBy('posts.discussion_id'); 这个时候保存退出应该就可以进行中文搜索了。但是对于文本内容较多的站点,这种搜索可能比较慢。 === 完全用不了的配置 === **(请不要用这里下方的配置,因为完全没有用。)** 我们这里假定您用的是 MariaDB。 MariaDB 的配置文件可能会比较难找,可能会有: /etc/my.cnf.d/server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf 一般来说,请善用 ''Tab'' 自动补全功能,输入 ''ls /etc/my'' 之后双击 ''Tab'' 键,然后可以慢慢跟随提示找到类似上述的含有 ''server.cnf'' 字样的配置文件。或者您也可以根据自己的 Linux 发行版类型以及 MariaDB 安装来源上网自行查找。 请在 MariaDB 的配置文件中,找到: [mysqld] 这一部分。在这一部分添加一行 ''innodb_ft_min_token_size = 1'',变成这样子: [mysqld] innodb_ft_min_token_size = 1 保存退出。 在终端使用如下命令建立中文检索:(这里的 ''flarumdb'' 请对应您的数据库名称) sudo mysqlcheck -o flarumdb 这时您应该就还是不可以在 Flarum 里正常地中文检索。