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}"
关键修改说明
- 导入初始SQL:MyBB的
install/resources/mybb.sql包含了所有必需的表结构和初始数据,导入后数据库就具备了运行基础 - 生成settings.php:这个文件是MyBB存储论坛设置的关键,复制默认模板后可以通过SQL修改基础配置
- 创建管理员账号:直接通过SQL插入管理员用户,避免web安装步骤;注意密码需要用MyBB兼容的BCrypt哈希值,建议自己生成后替换
- 删除install目录:彻底移除web安装入口,防止用户误操作覆盖配置
- 调整权限:将
config.php和settings.php改为只读,避免被篡改
这样修改后,脚本执行完成后就可以直接访问论坛,不需要再走web安装流程,也不会出现config.php被清空的问题了。
备注:内容来源于stack exchange,提问作者Mehul Kumar
相关产品推荐
相关产品推荐

