手动部署LNMP环境

更新时间:
一键部署
我的部署

本文介绍如何在ECS实例上手动部署LNMP环境。

前提条件

  • 实例已分配固定公网IP地址或绑定弹性公网IP(EIP)。如您不清楚如何开通公网,请参见开通公网

  • ECS实例的安全组入方向规则已放行22、80端口。具体操作,请参见添加安全组规则

  • ECS实例内存大于等于4 GiB。

部署LNMP环境

Alibaba Cloud Linux 3/CentOS 8

重要

CentOS 8的源地址http://mirror.centos.org/centos/8/内容已移除,当您在阿里云上继续使用默认配置的CentOS 8的源会发生报错。具体操作,请参见CentOS 8 EOL如何切换源?

  1. 使用Nginx官方源安装Nginx。

    说明

    默认安装最新稳定版本Nginx,如果对版本有要求可以使用sudo dnf search nginx --showduplicates搜索支持的Nginx版本并将安装命令替换为具体版本(例:安装1.24.0版本,修改命令为sudo dnf -y install nginx-1.24.0)。

    #添加Nginx官方源到系统中
    sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/8/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    #安装Nginx
    sudo dnf -y install nginx
    #启动Nginx服务并设置为开机自启
    sudo systemctl start nginx
    sudo systemctl enable nginx
  2. 安装MySQL数据库。

    说明

    Alibaba Cloud Linux 3您需要安装compat-openssl10与旧版本OpenSSL库兼容。

    sudo yum install -y compat-openssl10
    #添加MySQL官方源
    sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
    #安装MySQL服务
    sudo dnf install -y mysql-server
    #启动MySQL服务并设置开机自启
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    1. 查看root用户默认初始密码。

      • 如果是Alibaba Cloud Linux 3执行。

        echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
      • 如果是CentOS 8安装后默认无密码。

    2. MySQL服务root用户设置密码,您需要将命令中<oldpwd>替换为初始密码,<newpwd>替换为您的新密码(如果是CentOS 8<oldpwd>替换为空,命令提示输入密码输入回车跳过)。

      重要

      密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,并且密码总长度至少为 8 个字符。

      sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
  3. 安装PHP。

    说明

    本文默认使用了PHP8.4,如果对版本有要求需要将模块名称修改成对应版本(例:安装PHP8.1需要将模块名称修改为php:remi-8.1)。

    #设置remi源并启用php:remi-8.4
    sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-8.rpm  --nodeps
    sudo dnf install -y yum-utils && sudo dnf module enable -y php:remi-8.4
    #安装PHP、PHP进程管理器、MySQL扩展模块
    sudo dnf install -y php php-fpm php-mysqlnd
    #启动PHP进程管理器服务并设置开机自启
    sudo systemctl start php-fpm
    sudo systemctl enable php-fpm
  4. 验证LNMP环境。

    1. 查询php-fpm配置文件默认监听地址。

      sudo grep '^listen =' /etc/php-fpm.d/www.conf
      • 如果返回sock文件地址说明默认监听sock文件。

      • 如果返回127.0.0.1:9000说明默认监听本地9000端口。

    2. 使用tee命令编辑/etc/nginx/conf.d/default.conf文件添加PHP转发规则。

      重要

      如果php-fpm监听地址为127.0.0.1:9000需要修改规则fastcgi_pass字段为127.0.0.1:9000

      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
          index index.php index.html index.htm;
          }
          location ~ .php$ {
              root /usr/share/nginx/html;
              fastcgi_pass unix:/run/php-fpm/www.sock;
              fastcgi_index index.php;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 重启Nginx服务使修改后的配置文件生效。

       sudo systemctl restart nginx
    4. 使用tee命令在路径/usr/share/nginx/html下新建test.php 的 PHP 文件,并添加用于测试数据库连接的代码。(<username>替换为数据库用户名,<password>替换为数据库密码)。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. 在本地物理机上使用浏览器访问http://ECS实例公网IP/test.php,返回success说明PHP代理设置成功并成功连接MySQL数据库。

Alibaba Cloud Linux 2/CentOS 7

  1. 使用Nginx官方源安装Nginx。

    说明

    默认安装最新稳定版本Nginx,如果对版本有要求可以使用sudo yum search nginx --showduplicates搜索支持的Nginx版本并将安装命令替换为具体版本(例:安装1.24.0版本,修改命令为sudo yum -y install nginx-1.24.0)。

    #添加Nginx官方源到系统中
    sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF'
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    EOF
    #安装Nginx
    sudo yum -y install nginx
    #启动Nginx服务并设置为开机自启
    sudo systemctl start nginx
    sudo systemctl enable nginx
  2. 安装MySQL数据库。

    #添加MySQL官方源
    sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm
    #安装MySQL服务
    sudo yum install -y mysql-server
    #启动MySQL服务并设置开机自启
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    1. 查看root用户默认初始密码。

      echo $(PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log); PASSWORD=${PASSWORD##* }; echo $PASSWORD)
    2. MySQL服务root用户设置密码,您需要将命令中<oldpwd>替换为初始密码,<newpwd>替换为您的新密码。

      重要

      密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,并且密码总长度至少为 8 个字符。

      sudo mysqladmin -uroot -p'<oldpwd>' password '<newpwd>'
  3. 安装PHP。

    #设置remi源并启用remi-php83
    sudo rpm -Uvh http://mirrors.cloud.aliyuncs.com/remi/enterprise/remi-release-7.rpm  --nodeps
    sudo yum install -y yum-utils && sudo yum-config-manager --enable   remi-php83
    #安装PHP、PHP进程管理器、MySQL扩展模块
    sudo yum install -y php php-fpm php-mysqlnd
    #启动PHP进程管理器服务并设置开机自启
    sudo systemctl start php-fpm
    sudo systemctl enable php-fpm
  4. 验证LNMP环境。

    1. 查询php-fpm配置文件默认监听地址。

      sudo grep '^listen =' /etc/php-fpm.d/www.conf
      • 如果返回sock文件地址说明默认监听sock文件。

      • 如果返回127.0.0.1:9000说明默认监听本地9000端口。

    2. 使用tee命令编辑/etc/nginx/conf.d/default.conf文件添加PHP转发规则。

      重要

      如果php-fpm监听地址为sock文件地址,需要修改规则127.0.0.1:9000unix:<path>,<path>需要替换为您的sock文件地址。

      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
                  index index.php index.html index.htm;
          }
          location ~ .php$ {
                  root /usr/share/nginx/html;
                  fastcgi_pass 127.0.0.1:9000;
                  fastcgi_index index.php;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 重启Nginx服务使修改后的配置文件生效。

       sudo systemctl restart nginx
    4. 使用tee命令在路径/usr/share/nginx/html下新建test.php 的 PHP 文件,并添加用于测试数据库连接的代码。(<username>替换为数据库用户名,<password>替换为数据库密码)。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. 在本地物理机上使用浏览器访问http://ECS实例公网IP/test.php,返回success说明PHP代理设置成功并成功连接MySQL数据库。

Ubuntu20.04及以上

  1. 使用Nginx官方源安装Nginx。

    #更新系统已安装软件并更新包管理工具
    sudo apt update -y
    #Nginx安装前必要环境
    sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
    #导入官方Nginx签名密钥
    curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
    #设置apt仓库
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    #安装nginx
    sudo apt install -y nginx
  2. 更新软件包列表并安装MySQL服务器。

    sudo apt update -y && sudo apt install -y mysql-server
  3. 修改MySQL服务器root用户的密码和身份认证插件。您需要将命令中<newpwd>替换为您的密码。

    重要

    由于本地root用户的默认身份认证插件是auth_socket,命令执行后提示输入密码,请直接按回车跳过。

    sudo mysql -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<newpwd>';" -e "FLUSH PRIVILEGES;"
  4. 安装PHP。

    说明

    您可以通过sudo apt search php查看所有支持安装的PHP版本,安装其他版本需要修改命令中对应版本号(例如:安装PHP8.1需修改命令sudo apt install -y php8.1 php8.1-fpm php8.1-mysql)。

    #安装software-properties-common包,并添加PPA仓库ppa:ondrej/php
    sudo apt update && sudo apt install -y software-properties-common && sudo add-apt-repository -y ppa:ondrej/php
    #安装PHP 8.4及相关组件,包括FPMMySQL扩展
    sudo apt install -y php8.4 php8.4-fpm php8.4-mysql
  5. 验证LNMP环境。

    1. 查询php-fpm配置文件默认监听地址,<version>需要替换为您的PHP版本(例:PHP 8.4需要将<version>替换为8.4)。

      sudo grep '^listen =' /etc/php/<version>/fpm/pool.d/www.conf
      • 如果返回sock文件地址说明默认监听sock文件。

      • 如果返回127.0.0.1:9000说明默认监听本地9000端口。

    2. 使用tee命令编辑/etc/nginx/conf.d/default.conf文件添加PHP转发规则,<listen>需要替换为您的监听地址(如果是sock文件需要在地址前方增加unix:)。

      重要

      如果监听的sock文件,需要sock文件的权限设置为允许读写,您可以使用以下命令来更改权限sudo chmod 666 <path>,<path>更改为您的sock文件地址。

      #移除默认站点配置
      sudo rm -f /etc/nginx/sites-enabled/*
      #写入配置文件
      sudo tee /etc/nginx/conf.d/default.conf <<-'EOF'
      server {
          listen       80;
          server_name  localhost;
          root /usr/share/nginx/html;
          location / {
                  index index.php index.html index.htm;
          }
          location ~ .php$ {
                  root /usr/share/nginx/html;
                  fastcgi_pass <listen>;
                  fastcgi_index index.php;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  include fastcgi_params;
          }
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      }
      EOF
    3. 重启Nginx服务使修改后的配置文件生效。

       sudo systemctl restart nginx
    4. 使用tee命令在路径/usr/share/nginx/html下新建test.php 的 PHP 文件,并添加用于测试数据库连接的代码。(<username>替换为数据库用户名,<password>替换为数据库密码)。

      sudo tee /usr/share/nginx/html/test.php <<-'EOF'
      <?php
      $servername = "localhost";
      $username = "<username>";
      $password = "<password>";
      $conn = new mysqli($servername, $username, $password);
      if ($conn->connect_error) {
      die("fail: " . $conn->connect_error);
      }
      echo "success\n";
      ?>
      EOF
    5. 在本地物理机上使用浏览器访问http://ECS实例公网IP/test.php,返回success说明PHP代理设置成功并成功连接MySQL数据库。

常见问题

无法通过公网IP访问test.php页面

可能原因及其解决方案:

安全组未放开80端口、系统防火墙开启、80端口被占用。

具体排查方法,请参见无法访问ECS实例中的服务的排查方法

如何设置MySQL远程访问

创建非root用户远程登录MySQL的账号,并允许远程主机使用该账号访问MySQL。具体操作,请参见远程访问MySQL数据库

Nginx配置文件、日志文件在什么位置

  • Nginx的日志文件默认存放在/var/log/nginx/

  • Nginx的主配置文件默认/etc/nginx/nginx.conf

  • Nginx默认读取/etc/nginx/conf.d目录下所有以.conf为后缀的附加配置文件。