背景
本文将会介绍如何基于 flarum1.7 搭建个人论坛。flarum 是个免费开源项目,界面简洁,高度可定制,如果你也想拥有个人论坛,falrum 是个不错的选择。
我的服务器是 Linux Debian,不同的系统安装流程可能会有差异
部署环境
Flarum 环境要求:docs.flarum.org/install
- 安装 Nginx
sudo apt update
sudo apt install nginx
- 安装 PHP 7.3 及必要的扩展
sudo apt install php7.3 php7.3-fpm php7.3-curl php7.3-xml php7.3-gd php7.3-json php7.3-mbstring php7.3-mysql php7.3-zip
- 安装 MySQL
sudo apt install mysql-server
# 如果上面命令报错:Package mysql-server is not available
# 尝试用下面的命令
# 因为在某些 Debian 发行版中,mysql-server 软件包可能已被替换为 default-mysql-server
sudo apt install default-mysql-server
- 安装 Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
- 使用 Composer 安装 Flarum
# 1. 创建存放 flarum 的目录
mkdir ~/flarum
cd ~/flarum
# 2. 创建 flarum
composer create-project flarum/flarum . --stability=beta
配置 nginx
- 创建一个 Nginx 配置文件,例如 flarum.conf,并将其放置在 /etc/nginx/sites-available 目录下。可以使用以下命令创建并打开该文件:
sudo nano /etc/nginx/sites-available/flarum.conf
- 将以下内容粘贴到刚刚创建的 flarum.conf 文件中。请确保将 /path/to/your/flarum/public 替换为安装 Flarum 的实际目录,例如 /home/your_username/flarum/public。
server {
listen 80;
server_name example.com; # 将此处的 example.com 替换为您的域名或服务器 IP 地址
root /path/to/your/flarum/public; # 将此路径替换为您的 Flarum public 目录的实际路径
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; # 确保此处的 PHP 版本与您安装的一致
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 创建一个符号链接,将 Nginx 配置文件链接到 sites-enabled 目录:
# 当 Nginx 启动时,它会扫描 /etc/nginx/sites-enabled 目录中的所有文件,并将它们用作虚拟主机配置。
sudo ln -s /etc/nginx/sites-available/flarum.conf /etc/nginx/sites-enabled/
- 启动 nginx
sudo systemctl start nginx
sudo systemctl enable nginx
- 有些文件操作可能没权限,简单(不安全)起见,我们把 flarum 目录的权限完全放开
sudo chmod -R 777 /path/to/your/flarum
数据库账户
创建一个账户,用来操作数据库
- 登录到 MySQL:
sudo mysql
- 创建一个新的数据库,例如 db1:
CREATE DATABASE db1;
- 创建一个新的数据库用户并设置密码。将 user1 和 your_password 替换为你的用户名和密码:
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'your_password';
- 授权新用户访问新创建的数据库:
GRANT ALL PRIVILEGES ON flarum.* TO 'user1'@'localhost';
- 刷新权限并退出 MySQL:
FLUSH PRIVILEGES;
EXIT;
安装 flarum
浏览器首次打开 ip:80,会进入安装界面,按照上一步的数据库信息填写 MySQL 部分
提交后,就进入到你的论坛了:
创建扩展
Flarum 支持完全定制,通过扩展你可以做任何想做的事情,比如修改页面的任何部分。
下面我们通过扩展来修改页面头部。
-
安装脚手架 flarum-cli:github.com/flarum/cli#…
-
创建扩展
cd /path/to/your/flarum
# 创建一个扩展目录
mkdir extensions
# 创建 custom-header 目录
cd extensions
mkdir custom-header
# 生成自定义扩展
flarum-cli init
# 根据 cli 的提示选择即可,其中我们的扩展包名为:lim/custom-header,下面会用到
- 支持 tsx
安装依赖
cd ./extensions/custom-header/js/src
npm install --save-dev typescript ts-loader react react-dom @types/react @types/react-dom
修改 webpack.config.js 为如下内容:
module.exports = require('flarum-webpack-config')({
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx'],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: [
{
loader: 'ts-loader',
},
],
},
],
},
});
- 增加自定义 Header 的逻辑
cd ./extensions/custom-header/js/src/forum
# 将 index.ts 改为 index.tsx
mv index.ts index.tsx
我们希望在 Header 上增加三个按钮,index.tsx 的代码如下:
import app from 'flarum/forum/app';
import { extend } from 'flarum/common/extend';
import HeaderSecondary from 'flarum/components/HeaderSecondary';
app.initializers.add('lim/custom-header', () => {
extend(HeaderSecondary.prototype, 'items', function (items) {
items.add(
'nav-button-1',
<a href="your_link_1" className="Button Button--link">
Button 1
</a>
);
items.add(
'nav-button-2',
<a href="your_link_2" className="Button Button--link">
Button 2
</a>
);
items.add(
'nav-button-3',
<a href="your_link_3" className="Button Button--link">
Button 3
</a>
);
});
});
- 编译扩展
cd ./extensions/custom-header/js
npm run build
安装扩展
这里用的是手动添加扩展到
- 修改 Flarum 安装目录下的 composer.json 文件:
"require": {
...
"lim/custom-header": "0.1.0"
...
}
确保版本号与 custom-header 扩展的 composer.json 文件中设置的版本号相匹配。
- 安装扩展:
在 Flarum 安装目录下打开命令行,运行以下命令:
composer update lim/custom-header --prefer-source
- 清除缓存:
在 Flarum 安装目录下,运行以下命令清除缓存:
php flarum cache:clear
启用扩展
- 进入到管理员界面:
- 启用扩展
- 刷新页面,出现了自定义的按钮
总结
如果在部署的时候遇到问题,可以根据日志定位,其中 nginx 日志位于 /var/log/nginx/error.log,flarum 日志位于 /path/to/your/flarum/storage/logs。
如有疑问,欢迎评论交流。