手动部署LAMP环境

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

LAMP环境是常用的Web开发环境之一,其中LAMP分别代表Linux、Apache、MySQL和PHP。LAMP拥有庞大的社区支持和丰富的资源,适合开发、部署和维护各种规模的Web应用,由于其高度灵活性和可定制性,您可以根据项目需求调整每个组件的配置,以达到最佳性能和安全性。

前提条件

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

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

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

部署LAMP环境

Alibaba Cloud Linux 3/CentOS 8

重要

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

  1. 安装Apache服务器。

    1. 更新包管理工具并安装Apache服务器。

      sudo dnf update -y && sudo dnf install -y httpd
    2. 设置Apache服务器守护进程并启动。

      sudo systemctl enable httpd
      sudo systemctl start httpd
  2. 安装MySQL数据库。

    1. 添加MySQL官方源。

      说明

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

      sudo dnf install -y compat-openssl10
      sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm
    2. 安装MySQL服务,同时启动MySQL服务并设置开机自启。

      sudo dnf install -y mysql-server
      sudo systemctl start mysqld
      sudo systemctl enable mysqld
    3. 查看root用户默认初始密码。

      • 如果是Alibaba Cloud Linux 3执行。

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

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

      重要

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

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

    1. 设置remi源并启用php:remi-8.4

      说明

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

      sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-8.rpm  --nodeps
      sudo dnf install -y yum-utils && sudo dnf module enable -y php:remi-8.4
    2. 安装PHP、PHP进程管理器、MySQL扩展模块,同时启动PHP进程管理器服务并设置开机自启。

      sudo dnf install -y php php-fpm php-mysqlnd
      sudo systemctl start php-fpm
      sudo systemctl enable php-fpm
  4. 验证LAMP环境。

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

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

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

    2. 执行命令创建/etc/httpd/conf.d/php-fpm.conf配置文件并添加php-fpm规则。

      重要

      如果php-fpm监听地址为127.0.0.1:9000需要修改规则为proxy:fcgi://127.0.0.1:9000

      sudo touch /etc/httpd/conf.d/php-fpm.conf
      sudo tee /etc/httpd/conf.d/php-fpm.conf > /dev/null <<EOF
      <FilesMatch \.php$>
          SetHandler "proxy:unix:/run/php-fpm/www.sock;"
      </FilesMatch>
      EOF
    3. 重启Apache服务器使配置生效。

      sudo systemctl restart httpd
    4. 执行命令在路径/var/www/html/下新建test.php文件,并添加测试内容(<username>替换为数据库用户名,<password>替换为数据库密码)。

      sudo touch /var/www/html/test.php
      sudo tee /var/www/html/test.php > /dev/null <<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. 安装Apache服务器。

    1. 更新包管理工具并安装Apache服务器。

      sudo yum update -y && sudo yum install -y httpd
    2. 设置Apache服务器守护进程并启动。

      sudo systemctl enable httpd
      sudo systemctl start httpd
  2. 安装MySQL数据库。

    1. 添加MySQL官方源。

      sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm
    2. 安装MySQL服务,同时启动MySQL服务并设置开机自启。

      sudo yum install -y mysql-server
      sudo systemctl start mysqld
      sudo systemctl enable mysqld
    3. 查看root用户默认初始密码。

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

      重要

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

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

    1. 设置remi源并启用remi-php83

      说明

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

      sudo rpm -Uvh https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm  --nodeps
      sudo yum install -y yum-utils && sudo yum-config-manager --enable   remi-php83
    2. 安装PHP、PHP进程管理器、MySQL扩展模块,同时启动PHP进程管理器服务并设置开机自启。

      sudo yum install -y php php-fpm php-mysqlnd
      sudo systemctl start php-fpm
      sudo systemctl enable php-fpm
  4. 验证LAMP环境。

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

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

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

    2. 执行命令创建/etc/httpd/conf.d/php-fpm.conf配置文件并添加php-fpm规则。

      重要

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

      sudo touch /etc/httpd/conf.d/php-fpm.conf
      sudo tee /etc/httpd/conf.d/php-fpm.conf > /dev/null <<EOF
      <FilesMatch \.php$>
          SetHandler "proxy:fcgi://127.0.0.1:9000"
      </FilesMatch>
      EOF
    3. 重启Apache服务器使配置生效。

      sudo systemctl restart httpd
    4. 执行命令在路径/var/www/html/下新建test.php文件,并添加测试内容(<username>替换为数据库用户名,<password>替换为数据库密码)。

      sudo touch /var/www/html/test.php
      sudo tee /var/www/html/test.php > /dev/null <<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. 安装Apache服务器。

    1. 更新包管理工具并安装Apache服务器。

      sudo apt update -y && sudo apt install -y apache2
    2. 设置Apache服务器守护进程并启动。

      sudo systemctl enable apache2
      sudo systemctl start apache2
  2. 安装MySQL数据库并设置密码。

    1. 更新软件包列表并安装MySQL服务器。

      sudo apt update -y && sudo apt install -y mysql-server
    2. 将MySQL的配置文件中监听地址从127.0.0.1(即只监听本地连接)更改为0.0.0.0(即监听所有可用网络接口),从而允许远程连接到MySQL服务器。

      sudo sed -i "s/127.0.0.1/0.0.0.0/" /etc/mysql/mysql.conf.d/mysqld.cnf
    3. 修改数据库root用户主机部分从localhost更改为%以允许从任何地址连接,同时修改root用户的密码和身份认证插件。您需要将命令中<newpwd>替换为您的密码。

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

      • 密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符(通常需要使用反斜杠\来转义这些特殊字符,以避免被解释为命令的一部分),并且密码总长度至少为 8 个字符。

      sudo mysql -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '<newpwd>';" -e "UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';" -e "FLUSH PRIVILEGES;"
    4. 重启MySQL数据库服务使配置生效。

      sudo systemctl restart mysql
  3. 安装PHP。

    1. 更新软件包,安装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
    2. 安装PHP 8.4及相关组件,包括FPM和MySQL扩展。

      说明

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

      sudo apt install -y php8.4 php8.4-fpm php8.4-mysql
  4. 验证LAMP环境。

    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. 执行命令新建/etc/apache2/conf-available/php-fpm.conf文件,在内填写PHP转发规则,<listen>需要替换为您的监听地址。

      sudo touch /etc/apache2/conf-available/php-fpm.conf
      sudo tee /etc/apache2/conf-available/php-fpm.conf > /dev/null <<EOF
      <FilesMatch \.php$>
          SetHandler "proxy:<listen>"
      </FilesMatch>
      EOF
      • 如果是sock文件地址,需要替换<listen>unix:<path>;<path>需要替换为您的sock文件地址。

        重要

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

      • 如果是127.0.0.1:9000,需要替换<listen>fcgi://127.0.0.1:9000

    3. 设置配置文件软连接。

      sudo ln -s /etc/apache2/conf-available/php-fpm.conf /etc/apache2/conf-enabled/
    4. 启用proxy_fcgi和setenvif模块使Apache可以将PHP请求转发到PHP进程管理器,并启用PHP进程管理器的配置文件。

      sudo a2enmod proxy_fcgi setenvif
      sudo a2enconf php8.4-fpm
    5. 重启Apache服务器使配置生效。

      sudo systemctl restart apache2
    6. 执行命令在路径/var/www/html/下新建test.php文件,并添加测试内容(<username>替换为数据库用户名,<password>替换为数据库密码)。

      sudo touch /var/www/html/test.php
      sudo tee /var/www/html/test.php > /dev/null <<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
    7. 在本地物理机上使用浏览器访问http://ECS实例公网IP/test.php,返回success说明PHP代理设置成功并成功连接MySQL数据库。

常见问题

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

可能原因及其解决方案:

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

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

如何设置MySQL远程访问

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