OctoberCMS是一个基于Laravel框架的开源内容管理系统(CMS),以其优雅的后端界面和灵活的内容管理功能而闻名。本教程将指导你在Debian 12服务器上使用LEMP技术栈(Nginx、MariaDB、PHP-FPM)安装和配置OctoberCMS。
前提条件
在开始之前,请确保准备以下条件:
一台Debian 12服务器。
一个具有管理员权限的非root用户。
一个已指向服务器IP地址的域名。
安装依赖
在本教程中,你将在Debian服务器上使用LEMP技术栈(Nginx、MySQL/MariaDB和PHP-FPM)安装October CMS。因此,首先要安装LEMP技术栈以及其他依赖项,如UFW(简易防火墙)和Certbot。
使用以下命令更新Debian软件包仓库。
sudo apt update
然后使用以下命令安装LEMP技术栈、UFW和Certbot软件包。
sudo apt install nginx mariadb-server php composer php-cli php-common php-imap php-redis php-snmp php-xml php-zip php-mbstring php-curl php-mysqli php-intl php-bcmath php-gd php-fpm ufw certbot python3-certbot-nginx
输入Y并按ENTER键确认安装。

安装完成后,验证LEMP技术栈服务,确保每个服务都在Debian服务器上运行并已启用。
如果服务正在运行,你应该看到输出“active (running)”。当服务已启用时,表示该服务将在系统启动时自动运行。
使用以下命令检查Nginx服务。
sudo systemctl is-enabled nginx
sudo systemctl status nginx

使用以下命令检查PHP-FPM服务。在本例中,你从Debian仓库安装了PHP-FPM 8.2。
sudo systemctl is-enabled php8.2-fpm
sudo systemctl status php8.2-fpm

最后使用以下命令检查MariaDB服务器。
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

配置UFW防火墙
在本教程中,你将使用UFW(简易防火墙)来保护Debian服务器。因此,你需要为SSH、HTTP和HTTPS协议开放端口。
运行以下ufw命令,在UFW上启用“OpenSSH”和“Nginx Full”配置文件。OpenSSH配置文件将打开默认SSH端口22,而“Nginx Full”配置文件将为HTTP和HTTPS协议打开端口80和443。
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
现在运行以下命令启动并启用UFW。输入y并按ENTER键继续。
sudo ufw enable
UFW启动后,你应该会看到输出“Firewall is active and enabled on system startup”。

现在运行以下命令验证UFW上已启用的配置文件列表。
sudo ufw status
确保OpenSSH和“Nginx Full”配置文件都已启用。

配置MariaDB服务器
配置完UFW后,你将通过mariadb-secure-installation工具来设置MariaDB服务器,然后通过mariadb客户端为October CMS创建新的数据库和用户。
执行以下命令来保护你的MariaDB服务器安装。
sudo mariadb-secure-installation
在此过程中,系统会提示你输入一些MariaDB服务器的安全建议。输入Y来应用建议,或输入n来拒绝。
默认的MariaDB安装没有密码,当提示输入密码时按ENTER键。
输入Y来设置MariaDB root密码。然后输入新的MariaDB密码并再次确认。
输入Y从你的MariaDB安装中移除匿名用户。
当提示禁用MariaDB root用户的远程登录时,再次输入Y。
输入Y从你的MariaDB中移除默认测试数据库。
最后输入Y重新加载表权限并应用新更改。
配置完MariaDB服务器后,使用以下命令登录MariaDB服务器并为October CMS创建新的数据库和用户。当询问时输入你的MariaDB root密码。
sudo mariadb -u root -p
运行以下查询语句来创建新的数据库和用户octobercms,密码设为“password”。请务必将密码更改为一个强密码。
CREATE USER 'octobercms'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE octobercms;
GRANT ALL PRIVILEGES ON octobercms.* TO 'octobercms'@'localhost';
FLUSH PRIVILEGES;

接下来运行以下查询语句来验证用户octobercms的权限。
SHOW GRANTS FOR 'octobercms'@'localhost';
确保用户octobercms可以访问数据库octobercms,如下所示。

输入quit退出MariaDB服务器。
安装OctoberCMS源代码
October CMS可以通过多种方式安装,包括zip包或通过Composer。在本例中,你将通过Composer安装October CMS。
进入/var/www/目录,使用以下wget命令下载October CMS源代码。下载完成后,你将看到文件v3.5.0.zip。
cd /var/www/
wget https://github.com/octobercms/october/archive/refs/tags/v3.5.0.zip
使用unzip命令将v3.5.0.zip解压到octobercms目录。这意味着你的October CMS网站根目录将位于/var/www/octobercms。
unzip v3.5.0.zip
sudo mv october-* octobercms
接下来运行以下命令,将/var/www/octobercms的所有权更改为用户www-data和组www-data。同时将目录权限设置为0755,文件权限设置为0644。
sudo chown -R www-data:www-data octobercms
find /var/www/octobercms -type d -exec chmod 755 {} \;
find /var/www/octobercms -type f -exec chmod 644 {} \;
现在运行以下composer命令来安装October CMS的PHP依赖项。
sudo -u www-data composer install

使用以下命令开始October CMS安装。
sudo -u www-data php artisan october:install
在此过程中,系统会提示你进行以下操作:
选择默认语言为en或English。
输入你的October CMS安装的域名,例如 http://howtoforge.local/。
输入October CMS的后端URL或管理路径,在本例中使用octoberadmin。
输入数字1选择数据库引擎为MySQL。
输入你的数据库详细信息。
输入yes安装演示数据和主题。
输入October CMS免费许可证以继续。
以下是October CMS安装过程的截图。



October CMS安装完成后,你将看到以下输出。

最后运行以下命令来迁移数据库。
sudo -u www-data php artisan october:migrate

配置Nginx服务器块
下载October CMS并配置好网站根目录后,你将创建一个新的Nginx服务器块配置来运行October CMS。请确保你的域名已准备好。
运行以下nano编辑器命令来创建新文件/etc/nginx/sites-available/octobercms.conf。
sudo nano /etc/nginx/sites-available/octobercms.conf
插入以下配置,并确保将域名howtoforge.local替换为你的域名。
server {
listen 80;
server_name howtoforge.local;
index index.php index.html;
root /var/www/octobercms;
location / {
# Let October CMS handle everything by default.
# The path not resolved by the October CMS router will return October CMS's 404 page.
# Everything that does not match with the allowlist below will fall into this.
rewrite ^/.*$ /index.php last;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_read_timeout 120s;
}
# Allowlist
location ~ ^/favicon\.ico { try_files $uri /index.php; }
location ~ ^/sitemap\.xml { try_files $uri /index.php; }
location ~ ^/robots\.txt { try_files $uri /index.php; }
location ~ ^/humans\.txt { try_files $uri /index.php; }
# Block all .dotfiles except well-known
location ~ /\.(?!well-known).* { deny all; }
## Let nginx return 404 if static file not exists
location ~ ^/storage/app/uploads/public { try_files $uri 404; }
location ~ ^/storage/app/media { try_files $uri 404; }
location ~ ^/storage/app/resources { try_files $uri 404; }
location ~ ^/storage/temp/public { try_files $uri 404; }
location ~ ^/modules/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/themes/.*/assets { try_files $uri 404; }
location ~ ^/themes/.*/resources { try_files $uri 404; }
}
完成后保存并关闭文件。
接下来运行以下命令来激活服务器块文件octobercms.conf并验证Nginx语法。
sudo ln -s /etc/nginx/sites-available/octobercms.conf /etc/nginx/sites-enabled/
sudo nginx -t
如果语法正确,你应该看到输出“syntax is ok - test is successful”。

最后通过以下命令重启Nginx服务来应用更改。
sudo systemctl restart nginx
使用SSL/TLS证书保护OctoberCMS
此时你的October CMS已经运行并可以访问。但为了确保安装的安全,你将通过Let’s Encrypt生成SSL/TLS证书来实施HTTPS。
执行以下命令为你的October CMS安装生成SSL/TLS证书。请确保将电子邮件地址和域名替换为你的信息。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d howtoforge.local
此过程完成后,你的域名将自动配置HTTPS。你的SSL/TLS证书将保存在/etc/letsencrypt/live/yourdomain.com目录中。
访问OctoberCMS
使用你喜欢的网页浏览器访问你的October CMS安装域名,例如 https://howtoforge.local/。
如果安装成功,你应该能看到OctoberCMS的默认主页,如下所示。
点击“Backend Area”按钮来访问October CMS管理页面。

输入新管理用户的详细信息,包括姓名、电子邮件地址和密码。点击“Create Account”进行确认。

完成后,你将看到如下的October CMS管理员仪表板。

总结
恭喜!你已经完成了在Debian 12服务器上安装October CMS。你使用LEMP技术栈(Nginx、MariaDB和PHP-FPM)安装了October CMS,还通过UFW(简易防火墙)和Let’s Encrypt的SSL/TLS证书来保护你的安装。