温馨提示×

如何使用LNMP部署网站

小樊
43
2025-12-29 18:33:57
栏目: 云计算

使用 LNMP 部署网站的实操指南

一 准备与规划

  • 选择系统:优先使用 Ubuntu 20.04/22.04 LTSCentOS 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.0MariaDB 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.sock127.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.comhttp://服务器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_passSCRIPT_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_connectionsPHP-FPM pm.max_children 等参数
      以上测试与排错命令、以及安全与备份建议可显著提升上线成功率与可维护性。

0