怎样在 CentOS 7 上安装 Bludit

介绍

布鲁迪特 是在 MIT 许可下发布的简单、快速且灵活的内容管理系统 (CMS)。 作为用 PHP 编写的平面文件 CMS,Bludit 将内容存储在 JSON 文件而不是数据库中。 它还支持使用 Markdown 和 HTML 代码进行编辑。

本教程解释了如何在 CentOS 7 上安装 Bludit 并使用免费的 Let’s Encrypt TLS 证书设置 HTTPS。

先决条件

禁用 SELinux 的 CentOS 7 服务器。 按照 Vultr 的最佳实践指南创建 sudo 用户并更新 CentOS 服务器。

本教程假设您拥有一个域名,例如 例子.com,并且您已将其指向服务器 IP 地址。 如果不是,请更换 例子.com 与服务器 IP 地址。

确保更换 例子.com 在带有您的域名或 IP 地址的代码示例中。

1.安装PHP

CentOS 7 在其官方存储库中提供了 PHP 版本 5.4,但 Bludit 支持的最低 PHP 版本为 5.6。 您可以从 Remi 存储库安装 PHP 7.4 版,这是一个长期受社区信任的 CentOS 存储库。

通过 SSH 以非 root sudo 用户身份登录服务器。

由于 Remi 仓库中的一些包依赖于 EPEL 仓库中的包,所以先启用 EPEL 仓库。

$ sudo yum -y install epel-release

启用 Remi 存储库。

$ sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

安装 yum-utils 用于配置存储库的包。

$ sudo yum -y install yum-utils

启用 PHP 7.4 包。

$ sudo yum-config-manager --disable 'remi-php*'
$ sudo yum-config-manager --enable   remi-php74

安装 PHP-FPM 和其他必要的 PHP 扩展。

$ sudo yum -y install php-cli php-fpm php-gd php-json php-mbstring php-xml

启用 PHP-FPM 服务,以便 PHP-FPM 在启动时运行。

$ sudo systemctl enable php-fpm.service

列出您的 CentOS 系统支持的所有时区。 使用 UP / DOWN 键在列表中移动,然后按 Q 退出。

$ timedatectl list-timezones

从列表中选择一个合适的时区,例如, 美国/纽约. 然后使用该时区更新您的 CentOS 系统。

$ sudo timedatectl set-timezone America/New_York

编辑主要的 PHP 配置文件以告诉 PHP 使用新的时区。 本教程使用 nano 作为编辑器,但您可以使用其他编辑器,例如 vim.

$ sudo nano /etc/php.ini

找到线 ;date.timezone = 并将其替换为 date.timezone = America/ New_York.

保存配置文件并退出。

要增强服务器的安全性,请创建一个名为的专用用户 bludit 作为 Bludit 的 PHP-FPM 进程的用户/组。 该用户还拥有 Bludit 源代码文件。

$ sudo adduser bludit

每次要添加、删除或更新源代码文件时,都需要切换到该用户。

从默认配置文件创建 PHP-FPM 配置文件。

$ sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/bludit.conf

重命名默认文件以禁用它并将其保留为备份。

$ sudo mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.default

编辑 PHP-FPM 配置文件。

$ sudo nano /etc/php-fpm.d/bludit.conf

在配置文件中,任何以 ; 是评论。

确保 listen = 127.0.0.1:9000 设置不以 ;. 此设置使 PHP 侦听地址 127.0.0.1 和港口 9000.

搜索以下设置,然后:

代替 [www][bludit]

代替 用户 = 阿帕奇用户 = 混蛋
代替 组 = 阿帕奇组 = 混蛋
代替 /var/log/php-fpm/www-error.log/var/log/fpm-php/bludit/error.log
代替 /var/lib/php/session/var/lib/php/session.bludit

保存配置文件并退出。

为避免弄乱默认文件夹,请创建一个名为的单独文件夹 /var/log/fpm-php/bludit 存储日志消息和名为的文件夹 /var/lib/php/session.bludit 存储 PHP 会话数据。

$ sudo mkdir -p /var/log/fpm-php/bludit
$ sudo mkdir -p /var/lib/php/session.bludit

更新两个文件夹的所有权和权限,以便只有 Bludit 的 PHP-FPM 进程可以写入它们。

$ sudo chown bludit:bludit /var/log/fpm-php/bludit
$ sudo chmod 700 /var/log/fpm-php/bludit
$ sudo chown bludit:bludit /var/lib/php/session.bludit
$ sudo chmod 700 /var/lib/php/session.bludit

检查新配置。

$ sudo php-fpm -t

启动 PHP-FPM 服务。

$ sudo systemctl start php-fpm.service

2. 安装 Bludit

下载 Bludit 源代码存档。

$ cd ~ && wget https://github.com/bludit/bludit/archive/refs/tags/3.13.1.tar.gz

在撰写本文时,Bludit 的最新稳定版本是 3.13.1. 当然,您可以随时访问 Bludit 发布页面 在 Github 上获取最新版本。

提取存档。

$ tar xzf 3.13.1.tar.gz

bludit 作为源代码文件夹的所有者。

$ sudo chown -R bludit:bludit bludit*

将源代码文件夹移动到 /var/www/bludit 因为,传统上,网站的源代码文件夹位于 /var/www 文件夹。

$ sudo mkdir -p /var/www
$ sudo mv bludit* /var/www/bludit

3. 安装 Nginx

使用以下命令安装 Nginx。

$ sudo yum -y install nginx

启用 Nginx 服务,以便 Nginx 在启动时运行。

$ sudo systemctl enable nginx.service

为 Bludit 创建一个新的配置文件。

$ sudo nano /etc/nginx/conf.d/bludit-http.conf

粘贴以下内容并替换 例子.com 使用您服务器的域名或 IP 地址:

server {
  listen 80;
  listen [::]:80;

  server_name example.com;

  root  /var/www/bludit;
  index index.html index.php;

  # All URLs are processed by index.php
  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  # For security, deny direct access to the following folders
  location ^~ /bl-content/databases/ { deny all; }
  location ^~ /bl-content/workspaces/ { deny all; }
  location ^~ /bl-content/pages/ { deny all; }
  location ^~ /bl-content/tmp/ { deny all; }

  # For security, deny direct access to PHP files inside the "bl-kernel" folder
  location ~ ^/bl-kernel/.+.php$ { deny all; }

  # Pass PHP files to the FastCGI server listening on 127.0.0.1:9000
  location ~ .php$ {
    # Mitigate https://httpoxy.org/ vulnerabilities
    fastcgi_param HTTP_PROXY "";

    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

  # Set expiration of assets to MAX for caching
  location ~* .(jpg|jpeg|gif|png|css|js|ico|svg|eot|ttf|woff|woff2|otf)$ {
    expires max;
    log_not_found off;
  }
}

保存配置文件并退出。

检查新配置。

$ sudo nginx -t

启动 Nginx 服务。

$ sudo systemctl start nginx.service

更新防火墙以允许传入的 HTTP 请求。

$ sudo firewall-cmd --permanent --zone=public --add-service=http

重新加载当前的防火墙会话。

$ sudo firewall-cmd --reload

4.(可选)配置HTTPS

如果您拥有有效的域名,则可以免费为您的 Bludit 设置 HTTPS。 使用 Certbot 程序,您可以从证书颁发机构 Let’s Encrypt 获得免费的 TLS 证书。

使用 Snap 安装 Certbot

Snap Store 是一个拥有数百万用户的 Linux 应用程序商店。 它可以轻松获取具有自动证书续订等功能的最新版本的 Certbot。 提供使用 Snap Store 所需的一切的软件包是 快照.

安装 snapd 包。

$ sudo yum -y install snapd

启用 snapd 服务。

$ sudo systemctl enable --now snapd.socket

启用经典快照支持。

$ sudo ln -s /var/lib/snapd/snap /snap

获取最新版本的 snapd 核心。

$ sudo snap install core && sudo snap refresh core

如果出现以下错误,请不要担心。

error: too early for operation, device not yet seeded or device model not acknowledged

snapd 可能需要一些时间来初始化其环境。 请稍等,然后重试。

安装 Certbot。

$ sudo snap install --classic certbot

使 certbot 命令全局可用。

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

获取 Let’s Encrypt 证书

重命名 HTTP 配置文件,使其成为 HTTPS 配置文件的模板。

$ sudo mv /etc/nginx/conf.d/bludit-http.conf /etc/nginx/conf.d/bludit-https.tpl

创建一个新的配置文件来处理 HTTP 请求。

$ sudo nano /etc/nginx/conf.d/bludit-http.conf

粘贴以下内容并替换 例子.com 使用您服务器的域名或 IP 地址:

server {
  listen 80;
  listen [::]:80;

  server_name example.com;

  root /var/www/bludit;

  location / {
      return 301 https://$server_name$request_uri;
  }

  location /.well-known/acme-challenge/ {}
}

此配置使 Nginx 将所有 HTTP 请求(来自 Let’s Encrypt 的请求除外)重定向到相应的 HTTPS 请求。

保存配置文件并退出。

检查 Nginx 配置。

$ sudo nginx -t

应用新配置。

$ sudo systemctl reload nginx.service

运行以下命令以获取 Let’s Encrypt 证书。

$ sudo certbot certonly --webroot -w /var/www/bludit -d example.com -m [email protected] --agree-tos

您可能需要回答有关与电子前沿基金会共享电子邮件的问题。

等结束了, certbot 告诉您证书文件和密钥文件的路径:

/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

位于同一文件夹中的另一个关键文件,也是下一步所需的,是 chain.pem.

使用 Nginx 安装证书

为 DHE 密码生成带有 DH 参数的文件。

$ sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048

2048 是推荐的 DH 参数大小。 此过程可能需要一段时间,请耐心等待。

从上面的模板文件创建 HTTPS 配置文件。

$ sudo mv /etc/nginx/conf.d/bludit-https.tpl /etc/nginx/conf.d/bludit-https.conf

打开 HTTPS 配置文件。

$ sudo nano /etc/nginx/conf.d/bludit-https.conf

找到以下几行:

  listen 80;
  listen [::]:80;

将它们替换为:

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

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

  ssl_session_timeout 1d;
  ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions

  # DH parameters file
  ssl_dhparam /etc/nginx/dhparam.pem;

  # intermediate configuration
  ssl_protocols TLSv1.2;
  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_prefer_server_ciphers off;

  # HSTS (ngx_http_headers_module is required) (63072000 seconds)
  #
  # Uncomment the following line only if your website fully supports HTTPS
  # and you have no intention of going back to HTTP, otherwise, it will
  # break your site.
  #
  # add_header Strict-Transport-Security "max-age=63072000" always;

  # OCSP stapling
  ssl_stapling on;
  ssl_stapling_verify on;

  # verify chain of trust of OCSP response using Root CA and Intermediate certs
  ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

  # Use Cloudflare DNS resolver
  resolver 1.1.1.1;

保存配置文件并退出。

检查 Nginx 配置。

$ sudo nginx -t

应用新配置。

$ sudo systemctl reload nginx.service

更新防火墙以允许传入的 HTTPS 请求。

$ sudo firewall-cmd --permanent --zone=public --add-service=https

重新加载当前的防火墙会话。

$ sudo firewall-cmd –reload

自动续订

Let’s Encrypt 证书的有效期为 90 天,因此您必须至少每三个月更新一次 TLS 证书。 Certbot 安装自动创建了一个 systemd 计时器单元来自动执行此任务。

运行以下命令以验证计时器是否处于活动状态。

$ sudo systemctl list-timers | grep 'certbot|ACTIVATES'

更新证书后,Certbot 不会自动重新加载 Nginx,因此 Nginx 仍然使用旧证书。 你必须在里面写一个脚本 /etc/letsencrypt/renewal-hooks/deploy 文件夹以重新加载 Nginx。

打开你的文本编辑器。

$ sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

粘贴以下内容:

#!/bin/bash

/usr/bin/systemctl reload nginx.service

保存并退出。 然后使脚本可执行。

$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

通过试运行测试更新过程。

$ sudo certbot renew --dry-run

这篇 Vultr 文章更详细地解释了上述所有步骤。 这种 TLS 设置给你一个“A”评级 SSL 实验室测试.

5. 完成 Bludit 设置

重新启动服务器以确保它在之后仍然有效。

$ sudo reboot

等待系统启动,然后在浏览器中打开服务器的 URL。

http://example.com

Bludit 安装程序 屏幕将出现。

选择您的语言,然后单击 下一个 按钮。 为用户输入一个强密码 admin,然后单击 安装 按钮。

完成后,Bludit 会将您重定向到主页。

您的 Bludit 网站现已准备就绪。 您可以登录管理面板, http://example.com/admin/, 开始编写新内容或更新站点设置。

有关更多信息,请阅读 Bludit 文档.

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com