LNMP升级与维护指南
升级前必须备份所有重要数据和配置文件,避免操作失误导致数据丢失。具体包括:
/var/www/html/(或其他网站根目录)下的所有文件;mysqldump(MySQL)或mariadb-dump(MariaDB)导出所有数据库,例如sudo mysqldump -u root -p --all-databases > all-databases.sql;/etc/nginx/)、MySQL(/etc/mysql/或/etc/mariadb/)、PHP(/etc/php/)的配置文件。sudo apt update && sudo apt upgrade -y;sudo yum update -y。sudo apt install nginx -y(Debian/Ubuntu)或sudo yum install nginx -y(CentOS);sudo apt install mariadb-server -y(Debian/Ubuntu,推荐MariaDB)或sudo yum install mariadb-server -y(CentOS);sudo apt install php-fpm php-mysql php-gd php-cli php-curl php-mbstring php-opcache -y(Debian/Ubuntu)或sudo yum install php php-fpm php-mysqlnd php-gd php-cli -y(CentOS)。nginx -v、mysql -V(或mariadb -V)、php -v验证版本是否更新。若使用LNMP一键安装包(如lnmp.org提供的脚本),可通过脚本简化升级流程:
wget http://soft.vpser.net/lnmp/lnmp-install.sh;chmod +x lnmp-install.sh;./upgrade.sh(根据脚本提示选择升级组件,如PHP、MySQL等)。升级完成后,重启相关服务以应用新版本:
sudo systemctl restart nginx # 重启Nginx
sudo systemctl restart mariadb # 重启MariaDB(或mysql)
sudo systemctl restart php-fpm # 重启PHP-FPM
使用systemctl status nginx、systemctl status mariadb等命令检查服务是否正常运行。
sudo passwd root设置复杂root密码);/etc/ssh/sshd_config,设置PermitRootLogin no,然后sudo systemctl restart sshd);sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw allow 22/tcp,再sudo ufw enable开启防火墙。/etc/nginx/nginx.conf,添加server_tokens off;;GET、POST、HEAD,例如limit_except GET POST HEAD { deny all; };autoindex off;(避免敏感目录泄露)。/etc/php/7.x/fpm/php.ini(根据PHP版本调整),设置disable_functions = eval,system,exec,passthru,shell_exec;open_basedir限制PHP脚本访问目录,例如open_basedir = /var/www/html/:/tmp/。validate_password_policy=STRONG(编辑/etc/mysql/mysql.conf.d/mysqld.cnf);GRANT SELECT, INSERT ON database.* TO 'user'@'localhost' IDENTIFIED BY 'StrongPassword';);/etc/mysql/mysql.conf.d/mysqld.cnf,添加ssl-ca=/path/to/ca.pem、ssl-cert=/path/to/server-cert.pem、ssl-key=/path/to/server-key.pem,重启MySQL生效。top(查看CPU/内存占用)、htop(更直观的资源监控)、vmstat 1(查看系统整体状态,每秒刷新)等命令实时监控服务器性能;/var/log/nginx/error.log)、MySQL错误日志(/var/log/mysql/error.log)、PHP错误日志(/var/log/php7.x-fpm.log,路径根据配置调整),使用tail -f /var/log/nginx/error.log实时跟踪错误信息;mysqldump备份所有数据库,例如0 3 * * * /usr/bin/mysqldump -u root -p'YourPassword' --all-databases > /backup/mysql_$(date +\%F).sql(添加到crontab,每日自动执行);0 4 * * 0 /bin/tar -czvf /backup/www_$(date +\%F).tar.gz /var/www/html/;mysql -u root -p database_name < backup_file.sql恢复数据库)。worker_processes:设置为CPU核心数(grep -c processor /proc/cpuinfo);/etc/nginx/nginx.conf,添加gzip on; gzip_types text/plain text/css application/json application/javascript;,减少传输体积;location ~* \.(jpg|jpeg|png|gif|css|js)$ { expires 30d; add_header Cache-Control "public"; }。/etc/php/7.x/fpm/php.ini,设置opcache.enable=1、opcache.memory_consumption=128(缓存大小,根据内存调整),提升PHP脚本执行速度;/etc/php/7.x/fpm/pool.d/www.conf,设置pm.max_children(子进程数,根据内存计算,如内存大小(MB)/单个进程占用(MB))、pm.start_servers(启动时的子进程数)、pm.min_spare_servers(最小空闲子进程数)、pm.max_spare_servers(最大空闲子进程数),避免频繁创建/销毁进程。EXPLAIN分析慢查询(slow_query_log = ON,long_query_time = 2,记录执行时间超过2秒的查询),添加合适的索引;/etc/mysql/mysql.conf.d/mysqld.cnf,设置innodb_buffer_pool_size(InnoDB缓冲池大小,建议为物理内存的50%-70%)、query_cache_size(查询缓存大小,MySQL 8.0及以上版本已移除);OPTIMIZE TABLE table_name;整理碎片,提升查询效率(适用于频繁更新的表)。