如何使用LNMP部署网站
小樊
43
2025-12-29 18:33:57
使用 LNMP 部署网站的实操指南
一 准备与规划
- 选择系统:优先使用 Ubuntu 20.04/22.04 LTS 或 CentOS 7/8(或兼容的 Rocky/AlmaLinux)。
- 规划目录与域名:网站根目录建议 /var/www/your_domain;准备解析到服务器的域名(如 example.com),并开放 80/443 端口。
- 基础安全:更新系统、创建非 root 运维用户、配置防火墙放行 Nginx(UFW 或 firewalld)。
- 版本建议:Nginx ≥ 1.20,PHP ≥ 7.4(或 8.x),数据库用 MySQL 8.0 或 MariaDB 10.5+。
二 安装与配置 LNMP 组件
- Ubuntu/Debian
- 更新与基础工具
- sudo apt update && sudo apt upgrade -y
- sudo apt install -y curl wget unzip
- 安装与启动 Nginx
- sudo apt install -y nginx
- sudo systemctl start nginx && sudo systemctl enable nginx
- 安装与启动数据库(二选一)
- MySQL:sudo apt install -y mysql-server && sudo systemctl start mysql && sudo systemctl enable mysql
- MariaDB:sudo apt install -y mariadb-server && sudo systemctl start mariadb && sudo systemctl enable mariadb
- 安装与启动 PHP(以 PHP 8.1 为例)
- sudo apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
- sudo systemctl start php8.1-fpm && sudo systemctl enable php8.1-fpm
- CentOS 7/8(或兼容发行版)
- 安装与启动 Nginx
- sudo yum install -y epel-release && sudo yum install -y nginx
- sudo systemctl start nginx && sudo systemctl enable nginx
- 安装与启动数据库(二选一)
- MariaDB:sudo yum install -y mariadb-server && sudo systemctl start mariadb && sudo systemctl enable mariadb
- MySQL(官方仓库):按官方指引添加仓库后安装并启动
- 安装与启动 PHP(以 PHP 8.1 为例)
- sudo yum install -y php php-fpm php-mysqlnd
- sudo systemctl start php-fpm && sudo systemctl enable php-fpm
- 防火墙放行
- Ubuntu:sudo ufw allow ‘Nginx Full’
- CentOS:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
以上安装与启停命令适用于常见发行版,具体软件包名与版本以系统仓库为准。
三 配置 Nginx 与 PHP-FPM
- 站点目录与权限
- sudo mkdir -p /var/www/example.com
- sudo chown -R www-data:www-data /var/www/example.com(Ubuntu/Debian 常用 www-data;CentOS 可用 nginx)
- 虚拟主机配置
- Ubuntu/Debian(推荐 sites-available/sites-enabled)
- sudo nano /etc/nginx/sites-available/example.com
- 写入示例(按需调整 root、server_name、fastcgi_pass 路径):
- server {
- listen 80;
- server_name example.com www.example.com;
- root /var/www/example.com/public;
- index index.php index.html;
- location / { try_files $uri $uri/ /index.php?$args; }
- location ~ .php$ {
- include snippets/fastcgi-php.conf;
- fastcgi_pass unix:/run/php/php8.1-fpm.sock;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
- location ~ /.ht { deny all; }
- }
- 启用站点:sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
- CentOS(conf.d)
- sudo nano /etc/nginx/conf.d/example.com.conf(内容同上,fastcgi_pass 可用 127.0.0.1:9000 或套接字)
- 检查并重载
- sudo nginx -t && sudo systemctl reload nginx
- PHP-FPM 关键点
- 确认监听方式与 Nginx 一致(如 /run/php/php8.1-fpm.sock 或 127.0.0.1:9000),并确保运行用户与网站目录属主匹配。
以上虚拟主机与 PHP 联动配置为生产常用做法,包含套接字与 TCP 两种方式。
四 部署网站与数据库
- 部署代码
- 方式 A:git clone 或上传解压到 /var/www/example.com/public
- 方式 B:rsync/scp 同步到站点目录
- 创建数据库与用户
- mysql -u root -p
- CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘app_user’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
- GRANT ALL PRIVILEGES ON app_db.* TO ‘app_user’@‘localhost’;
- FLUSH PRIVILEGES;
- EXIT;
- 导入数据(如有)
- mysql -u app_user -p app_db < backup.sql
- 配置应用
- 在应用配置中填写数据库信息(DB_HOST=localhost,DB_NAME,DB_USER,DB_PASS)
- 设置 .env 或等效配置文件权限:chmod 600 /var/www/example.com/.env
- 文件权限与所有者
- sudo find /var/www/example.com -type d -exec chmod 755 {} ;
- sudo find /var/www/example.com -type f -exec chmod 644 {} ;
- sudo chown -R www-data:www-data /var/www/example.com(或 nginx:nginx)
以上数据库创建、授权与导入流程适用于常见 PHP 应用(如 WordPress、Laravel 等)。
五 测试上线与运维要点
- 基础验证
- 访问 http://example.com 与 http://服务器IP 检查首页
- 创建测试文件:echo “” | sudo tee /var/www/example.com/public/info.php
- 访问 http://example.com/info.php 确认 PHP 解析正常(验证后删除该文件)
- 常见问题排查
- Nginx 启动失败:执行 sudo nginx -t 检查语法;查看 /var/log/nginx/error.log
- PHP 不解析:核对 fastcgi_pass 与 SCRIPT_FILENAME;确认 php-fpm 运行且监听方式一致
- 数据库连接失败:核对数据库名、用户名、密码与主机;确保数据库服务运行
- 安全与优化
- 数据库安全:运行 mysql_secure_installation(设置 root 强密码、移除匿名用户、禁止远程 root 等)
- 禁用危险函数:在 php.ini 中视情况禁用 exec、shell_exec、passthru 等
- 备份策略:定期 mysqldump 与代码/配置备份;例如:mysqldump -u app_user -p app_db > backup_$(date +%F).sql
- 性能基础:按服务器内存调整 Nginx worker_processes/worker_connections 与 PHP-FPM pm.max_children 等参数
以上测试与排错命令、以及安全与备份建议可显著提升上线成功率与可维护性。