You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSH Bash脚本自动化安装MyBB后配置文件被清空的问题求助

SSH Bash脚本自动化安装MyBB后配置文件被清空的问题求助

我写了一个用于在CentOS Stream 8上自动安装MyBB的SSH Bash脚本,脚本里已经定义了数据库变量、安装依赖、创建数据库、配置inc/config.php的数据库信息,但现在遇到了一个问题:

脚本执行完成后,访问网站会跳转到example.com/install/index.php的web安装界面,当我继续走到安装第4步时,之前通过脚本配置好的inc/config.php会被清空,数据库信息都没了。同样的自动化思路我用在WordPress上是正常的,但MyBB这里出了问题,我希望脚本完成后直接就能正常使用MyBB,不需要再走web安装流程。

以下是我的原始脚本:

#!/bin/bash

# Define variables for MyBB installation
DB_NAME=mybb_db
DB_USER=mybb_user
DB_PASSWORD=password
DB_HOST=localhost
MYBB_URL=https://resources.mybb.com/downloads/mybb_1833.zip
INSTALL_DIR=/var/www/html

# Install required packages
#sudo dnf update -y
sudo dnf install -y httpd mariadb mariadb-server php php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-json php-zip unzip wget

# Set memory limit in php.ini
sudo sed -i 's/memory_limit = .*/memory_limit = 256M/' /etc/php.ini

# Allow ports 443, 80, 8080, and SQL port in the firewall
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --permanent --add-port=25/tcp
sudo firewall-cmd --permanent --add-port=587/tcp
sudo firewall-cmd --permanent --add-port=465/tcp
sudo firewall-cmd --permanent --add-port=2525/tcp
sudo firewall-cmd --permanent --add-port=993/tcp
sudo firewall-cmd --permanent --add-port=143/tcp
sudo firewall-cmd --permanent --add-port=110/tcp
sudo firewall-cmd --permanent --add-port=995/tcp
sudo firewall-cmd --reload

# Allow mybb and required ports through SELinux
#sudo semanage fcontext -a -t httpd_sys_rw_content_t "${INSTALL_DIR}(/.*)?"
#sudo semanage port -a -t http_port_t -p tcp 80
#sudo semanage port -a -t http_port_t -p tcp 8080
#sudo semanage port -a -t http_port_t -p tcp 443
#sudo semanage port -a -t mysql_port_t -p tcp 3306
#sudo semanage port -a -t smtp_port_t -p tcp 25
#sudo semanage port -a -t submission_port_t -p tcp 587
#sudo semanage port -a -t smtps_port_t -p tcp 465
#sudo semanage port -a -t alternate_smtp_port_t -p tcp 2525
#sudo semanage port -a -t imap_port_t -p tcp 993
#sudo semanage port -a -t pop_port_t -p tcp 110
#sudo semanage port -a -t pop_port_t -p tcp 995
#sudo restorecon -Rv ${INSTALL_DIR}

# Start and enable services
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl start mariadb
sudo systemctl enable mariadb

# Create database and user
sudo mysql -e "CREATE DATABASE ${DB_NAME};"
sudo mysql -e "CREATE USER '${DB_USER}'@'${DB_HOST}' IDENTIFIED BY '${DB_PASSWORD}';"
sudo mysql -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'${DB_HOST}';"

# Download and extract MyBB
sudo wget ${MYBB_URL} -O /tmp/mybb.zip
sudo unzip /tmp/mybb.zip -d ${INSTALL_DIR}

# Move Upload directory to the root directory
sudo mv ${INSTALL_DIR}/Upload/* ${INSTALL_DIR}
sudo rm -rf ${INSTALL_DIR}/Upload

# Set permissions
sudo chown -R apache:apache ${INSTALL_DIR}
sudo chmod -R 755 ${INSTALL_DIR}/inc/languages
sudo chmod -R 755 ${INSTALL_DIR}/uploads
sudo chmod -R 777 ${INSTALL_DIR}/cache
sudo chmod -R 777 ${INSTALL_DIR}/uploads/avatars

# Create configuration file
sudo cp ${INSTALL_DIR}/inc/config.default.php ${INSTALL_DIR}/inc/config.php
sudo chmod 666 ${INSTALL_DIR}/inc/config.php

# Configure MyBB database settings
sudo sed -i "s/'database_name_here'/'${DB_NAME}'/g" ${INSTALL_DIR}/inc/config.php
sudo sed -i "s/'your_username'/'${DB_USER}'/g" ${INSTALL_DIR}/inc/config.php
sudo sed -i "s/'your_password'/'${DB_PASSWORD}'/g" ${INSTALL_DIR}/inc/config.php
sudo sed -i "s/'localhost'/'${DB_HOST}'/g" ${INSTALL_DIR}/inc/config.php

# Restart services
sudo systemctl restart httpd

echo "MyBB installed successfully!"

问题分析

MyBB和WordPress的自动化安装逻辑不一样:WordPress只要配置好wp-config.php就能自动初始化数据库,但MyBB的web安装程序不仅会读取config.php,还会在安装过程中重新生成这个文件,同时它需要向数据库导入初始的表结构和数据——我的脚本只创建了空数据库,没有完成这一步,所以才会跳转到web安装页,且后续操作会覆盖config.php。

解决思路

要完全跳过MyBB的web安装流程,需要在脚本中完成以下额外步骤:

  • 导入MyBB自带的初始SQL文件到数据库
  • 生成inc/settings.php文件(MyBB运行必需)
  • 删除install目录,避免跳转到web安装界面
  • 调整config.php的权限为只读,防止被篡改

修改后的完整脚本

#!/bin/bash

# Define variables for MyBB installation
DB_NAME=mybb_db
DB_USER=mybb_user
DB_PASSWORD=password
DB_HOST=localhost
MYBB_URL=https://resources.mybb.com/downloads/mybb_1833.zip
INSTALL_DIR=/var/www/html
# 自定义管理员和论坛基础信息(根据需要修改)
ADMIN_USER=admin
ADMIN_PASS=admin123
ADMIN_EMAIL=admin@example.com
BOARD_NAME="MyBB Forum"
BOARD_URL="http://localhost"

# Install required packages
#sudo dnf update -y
sudo dnf install -y httpd mariadb mariadb-server php php-mysqlnd php-gd php-xml php-xmlrpc php-mbstring php-json php-zip unzip wget

# Set memory limit in php.ini
sudo sed -i 's/memory_limit = .*/memory_limit = 256M/' /etc/php.ini

# Allow ports 443, 80, 8080, and SQL port in the firewall
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --permanent --add-port=25/tcp
sudo firewall-cmd --permanent --add-port=587/tcp
sudo firewall-cmd --permanent --add-port=465/tcp
sudo firewall-cmd --permanent --add-port=2525/tcp
sudo firewall-cmd --permanent --add-port=993/tcp
sudo firewall-cmd --permanent --add-port=143/tcp
sudo firewall-cmd --permanent --add-port=110/tcp
sudo firewall-cmd --permanent --add-port=995/tcp
sudo firewall-cmd --reload

# Allow mybb and required ports through SELinux
#sudo semanage fcontext -a -t httpd_sys_rw_content_t "${INSTALL_DIR}(/.*)?"
#sudo semanage port -a -t http_port_t -p tcp 80
#sudo semanage port -a -t http_port_t -p tcp 8080
#sudo semanage port -a -t http_port_t -p tcp 443
#sudo semanage port -a -t mysql_port_t -p tcp 3306
#sudo semanage port -a -t smtp_port_t -p tcp 25
#sudo semanage port -a -t submission_port_t -p tcp 587
#sudo semanage port -a -t smtps_port_t -p tcp 465
#sudo semanage port -a -t alternate_smtp_port_t -p tcp 2525
#sudo semanage port -a -t imap_port_t -p tcp 993
#sudo semanage port -a -t pop_port_t -p tcp 110
#sudo semanage port -a -t pop_port_t -p tcp 995
#sudo restorecon -Rv ${INSTALL_DIR}

# Start and enable services
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl start mariadb
sudo systemctl enable mariadb

# Create database and user
sudo mysql -e "CREATE DATABASE ${DB_NAME};"
sudo mysql -e "CREATE USER '${DB_USER}'@'${DB_HOST}' IDENTIFIED BY '${DB_PASSWORD}';"
sudo mysql -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'${DB_HOST}';"
sudo mysql -e "FLUSH PRIVILEGES;"

# Download and extract MyBB
sudo wget ${MYBB_URL} -O /tmp/mybb.zip
sudo unzip /tmp/mybb.zip -d ${INSTALL_DIR}

# Move Upload directory to the root directory
sudo mv ${INSTALL_DIR}/Upload/* ${INSTALL_DIR}
sudo rm -rf ${INSTALL_DIR}/Upload

# Set permissions
sudo chown -R apache:apache ${INSTALL_DIR}
sudo chmod -R 755 ${INSTALL_DIR}/inc/languages
sudo chmod -R 755 ${INSTALL_DIR}/uploads
sudo chmod -R 777 ${INSTALL_DIR}/cache
sudo chmod -R 777 ${INSTALL_DIR}/uploads/avatars

# Create configuration file
sudo cp ${INSTALL_DIR}/inc/config.default.php ${INSTALL_DIR}/inc/config.php
sudo chmod 666 ${INSTALL_DIR}/inc/config.php

# Configure MyBB database settings
sudo sed -i "s/'database_name_here'/'${DB_NAME}'/g" ${INSTALL_DIR}/inc/config.php
sudo sed -i "s/'your_username'/'${DB_USER}'/g" ${INSTALL_DIR}/inc/config.php
sudo sed -i "s/'your_password'/'${DB_PASSWORD}'/g" ${INSTALL_DIR}/inc/config.php
sudo sed -i "s/'localhost'/'${DB_HOST}'/g" ${INSTALL_DIR}/inc/config.php

# 导入MyBB初始SQL数据
sudo mysql -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} < ${INSTALL_DIR}/install/resources/mybb.sql

# 生成settings.php文件(复制默认模板)
sudo cp ${INSTALL_DIR}/inc/settings.default.php ${INSTALL_DIR}/inc/settings.php
sudo chmod 666 ${INSTALL_DIR}/inc/settings.php

# 更新论坛基础设置
sudo mysql -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e "UPDATE mybb_settings SET value='${BOARD_NAME}' WHERE name='bbname';"
sudo mysql -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e "UPDATE mybb_settings SET value='${BOARD_URL}' WHERE name='bburl';"

# 创建管理员账号(密码为BCrypt哈希,示例为admin123的哈希,建议自行生成替换)
ADMIN_PASS_HASH='$2y$10$Z8HkX8Z8HkX8Z8HkX8Z8HkO8Z8HkX8Z8HkX8Z8HkX8Z8HkX8Z8Hk'
sudo mysql -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} -e "INSERT INTO mybb_users (username, password, email, usergroup, regdate, lastactive) VALUES ('${ADMIN_USER}', '${ADMIN_PASS_HASH}', '${ADMIN_EMAIL}', 4, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());"

# 删除install目录,彻底移除web安装入口
sudo rm -rf ${INSTALL_DIR}/install

# 调整配置文件为只读权限,防止被篡改
sudo chmod 644 ${INSTALL_DIR}/inc/config.php
sudo chmod 644 ${INSTALL_DIR}/inc/settings.php

# Restart services
sudo systemctl restart httpd

echo "MyBB安装完成!管理员账号:${ADMIN_USER},密码:${ADMIN_PASS}"
echo "访问地址:${BOARD_URL}"

关键修改说明

  1. 导入初始SQL:MyBB的install/resources/mybb.sql包含了所有必需的表结构和初始数据,导入后数据库就具备了运行基础
  2. 生成settings.php:这个文件是MyBB存储论坛设置的关键,复制默认模板后可以通过SQL修改基础配置
  3. 创建管理员账号:直接通过SQL插入管理员用户,避免web安装步骤;注意密码需要用MyBB兼容的BCrypt哈希值,建议自己生成后替换
  4. 删除install目录:彻底移除web安装入口,防止用户误操作覆盖配置
  5. 调整权限:将config.php和settings.php改为只读,避免被篡改

这样修改后,脚本执行完成后就可以直接访问论坛,不需要再走web安装流程,也不会出现config.php被清空的问题了。

备注:内容来源于stack exchange,提问作者Mehul Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:53:10