使用 Emlog 搭建一款多用户博客系统

个人博客早就玩得有点腻了, 独乐乐不如众乐乐,自己也写了一个多用户博客,但是集成在一个比较大的系统里面,一直想把它分拆出来进行,但是一直没有时间和精力去做,考虑到更加没有时间去做推广。花费时间意义又不太大,本着想吃鱼不必去养鱼的想法,一直在寻找一款开源的解决方案。之前试用过 wordpress 的多用户博客,体验下来不太理想。其他的比如 Astro, Strapi 加自定义前端一个比较耗时,体验也不是很好。
今天偶然间发现 emlog,我理想中的功能都有,而且还超过了我的预期。所以花了一点点时间把它安装了一下。官方教程写得不够详细,主要在数据库连接方面写得不够详细,花费了一些时间,最终选择了通用安装方式,从我的角度看比较理想。当然在此教程的基础上修改为 docker 或 docker compose 安装方案也比较容易。这里将安装过程记录下来,以便对有同样需求的人有所帮助。

Emlog全称为“Every Memory Log”,即“点滴记忆”,很贴合个人博客的使用场景。Emlog的运行基于PHP和MySQL,采用轻量化模式设计,能够以各种插件和模板的应用,为emolog带来更多功能和外观,让使用者能有更灵活的选择。并且,emlog也能在宝塔面板的一键部署中找到,这无疑节省了很多麻烦。

1. Emlog 的主要功能

  • Markdown 支持
  • 多用户角色管理
  • 灵活的标签和分类
  • 多媒体资源管理
  • 全面支持 SEO
  • 内置 API 接口
  • 丰富的模板主题
  • 插件化扩展生态
  • 原生支持 AI 功能

2. 选择一台 vps

这是使用的是一台hostinger vps,申请过程参考这篇文章 快速注册 Hostinger 账号以及创建 Hostinger VPS

配置:4 vCore 16 GB RAM

本教教程使用的操作系统为: Almalinux 9

3. 基础环境安装

3.1. 安装防火墙

很多操作系统默认没有安装防火墙,或者防火墙没有开启,建议安装防火墙并开启,毕竟将重要端口暴露在公网会导致服务器被莫名地攻击。

1
2
3
4
5
6
7
8
9
10

sudo dnf install -y firewalld

systemctl enable firewalld --now

# 如果开启, 需放行8080端口, 后面需要用到
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload


4. 安装 mariaDB

在 AlmaLinux 9 上安装 mariaDB 可以参考在 Linux(AlmaLinux 9)上安装 MariaDB | 鹏叔的技术博客

安装完成后创建 emlog 数据库

要登录 MariaDB shell,请运行以下命令。然后系统将提示您输入 MariaDB root 密码:

1
sudo mysql -u root -p

要创建数据库和数据库用户,请运行以下命令。记得将 DB_password 替换为强大而安全的密码:

1
2
CREATE DATABASE emlog;
CREATE USER 'emlog'@'localhost' IDENTIFIED BY 'emlog';

然后,运行以下命令授予并刷新数据库用户所有权限:

1
2
GRANT ALL ON emlog.* TO 'emlog'@'localhost';
FLUSH PRIVILEGES;

您可以用您的数据库详细信息替换 db_name: emlog 和 db_user: emlog 。

要退出 MySQL 命令提示符,请运行以下命令:

1
exit

完整操作过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

[user@server]# sudo mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.5.27-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE emlog;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> CREATE USER 'emlog'@'localhost' IDENTIFIED BY 'emlog';
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> GRANT ALL ON emlog.* TO 'emlog'@'localhost';
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> exit
Bye

数据库用户名,密码后续要用到。

5. 安装 PHP 和 PHP 扩展

安装 PHP 和其他支持包,请运行以下命令:

1
2
3

sudo dnf install -y php php-curl php-bcmath php-gd php-soap php-zip php-mbstring php-mysqlnd php-xml php-intl

验证 php 是否安装成功, 要验证已安装的 PHP 版本,请运行以下命令:

1
2
3

php -v

输出如下:

1
2
3
4
5
6

PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies

6. 配置 php-fpm

由于我们将使用 nginx 作为 web 服务器,而 php-fpm 默认的是 apache 服务器,

所以需要将 php-fpm 的默认用户和组修改为 nginx

修改 run-as 用户为 nginx 与 nginx web server 保持一致避免后面 upload 文件出现权限问题.

sudo vi /etc/php-fpm.d/www.conf

1
2
3
4
5
6
7
8
9

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

设置开机启动并运行 php-fpm 服务

1
2
3

sudo systemctl enable --now php-fpm

安装 nginx

参考 Linux( Almalinux 9)上 nginx 安装教程

7. 安装 emlog

通用安装方式

1
2
3

sudo dnf install -y unzip nginx

1
2
3

wget -O /tmp/emlog.zip https://www.emlog.net/download/zip

解压缩

1
2
3

sudo unzip -d /var/www/emlog /tmp/emlog.zip

并将/var/www/emlog 的 owner 修改为 nginx

1
sudo chown -R nginx:nginx /var/www/emlog

修改 emlog 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

[user@server]$ sudo vi /var/www/emlog/config.php
<?php
header("location: ./install.php");
exit;
//MySQL database host
const DB_HOST = 'localhost';
//MySQL database username
const DB_USER = 'emlog';
//MySQL database user password
const DB_PASSWD = 'emlog';
//Database name
const DB_NAME = 'emlog';
//Database table prefix
const DB_PREFIX = 'emlog_';
//Auth key
const AUTH_KEY = 'emlog-key';
//Cookie name
const AUTH_COOKIE_NAME = 'emlog-cookie';

8. 配置 nginx

修改 /etc/nginx/conf.d/emlog.conf, 新建一个 server 或在已有 server 基础上修改如下

1
2
3

sudo vi /etc/nginx/conf.d/emlog.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

upstream phpupstream {

server unix:/run/php-fpm/www.sock fail_timeout=5s max_fails=5;

}

server {
listen 8080;
server_name _;
root /var/www/emlog;
index index.php index.html index.htm;
client_max_body_size 2048M;

location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php last;
}
}

location ~ \.php$ {
fastcgi_pass phpupstream;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

官方安装方式是代码放在/app/emlog, 而我是放在/var/www/emlog,和官方稍有不同。
官方教程是使用 9000/tcp 端口通信,我这里是使用 socks 连接 nginx 和 php-fpm

启动nginx

重启nginx

1
2
3

sudo systemctl restart nginx

浏览器打开 https://your_server_ip:8080 访问emlog, 首次访问需要初始化数据库。

9. 参考文档

emlog readme file

使用 Emlog 搭建一款多用户博客系统

https://pengtech.net/sites/emlog_install.html

作者

鹏叔

发布于

2025-04-30

更新于

2025-05-28

许可协议

评论