手动部署LNMP环境(CentOS 8)+phpMyAdmin配置

手动部署LNMP环境(CentOS 8)+phpMyAdmin配置

LNMP是目前主流的网站服务器架构之一,适合运行大型和高并发的网站应用,例如电子商务网站、社交网络、内容管理系统等。LNMP分别代表Linux、Nginx、MySQL和PHP。本文介绍如何在Alibaba Cloud Linux 3/2、CentOS 7/8操作系统的ECS实例上搭建LNMP环境。

LNMP各部分的版本

  • Nginx版本:Nginx 1.20.1
  • MySQL版本:MySQL 8.0.26
  • PHP版本:PHP 7.4.19
  • CentOS 8

前期准备

1、 购买服务器(ECS或轻量化服务器)

2、 操作系统Alibaba Cloud Linux 3/2、CentOS 7/8,三者之一都可

3、 服务器放行22、80、443端口

操作步骤

步骤一:安装Nginx

我使用的是Ngingx 1.20版本

  1. 运行以下命令安装Nginx。
sudo dnf -y install https://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.20.1-1.el8.ngx.x86_64.rpm
  1. 运行以下命令查看Nginx版本。
nginx -v

查看版本结果如下所示。

nginx version: nginx/1.20.1

步骤二:安装MySQL

  1. 运行以下命令,安装MySQL。

    sudo dnf -y install @mysql
    
  2. 运行以下命令,查看MySQL版本。

    mysql -V
    

    查看版本结果如下所示。

    mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)
    

步骤三:安装PHP

  1. 运行以下命令,添加并更新epel源。

    sudo dnf -y install epel-release
    sudo dnf -y update epel-release
    
  2. 运行以下命令,删除缓存的无用软件包并更新软件源。

    sudo dnf clean all
    sudo dnf makecache
    
  3. 启用php:7.4模块。

    说明

    这里我使用php:7.4版本。如果需要使用PHP 8.0PHP 8.2版本,需要使用CentOS Stream操作系统。

    sudo dnf module enable php:7.3
    
  4. 运行以下命令,安装PHP相应的模块。

    sudo dnf -y install php php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium
    
  5. 运行以下命令查看PHP版本。

    php -v
    

    查看版本结果如下所示。

    PHP 7.4.19 (cli) (built: May  4 2021 11:06:37) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies
        with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies
    

步骤四:配置Nginx

  1. 运行以下命令,查看并记录Nginx配置文件的默认路径。

    cat /etc/nginx/nginx.conf
    

    http大括号内,查看include配置项。即配置文件的默认路径。

conf

  1. 在配置文件的默认路径下,备份默认配置文件。

    cd /etc/nginx/conf.d
    sudo cp default.conf default.conf.bak
    
  2. 修改默认配置文件。

    1. 运行以下命令打开默认配置文件。

      sudo vim default.conf
      
    2. i进入编辑模式。

    3. location大括号内,修改以下内容。

      location / {
          #将该路径替换为你的网站根目录。
          root   /usr/share/nginx/html;
          #添加默认首页信息index.php。
          index  index.html index.htm index.php;
      }
      
    4. 去掉被注释的location ~ \.php$大括号内容前的#,并修改大括号的内容。

      修改完成如下所示。

      location ~ \.php$ {
          #将该路径替换为您的网站根目录。
          root           /usr/share/nginx/html;
          #Nginx通过unix套接字与PHP-FPM建立联系,该配置与/etc/php-fpm.d/www.conf文件内的listen配置一致。
          fastcgi_pass   unix:/run/php-fpm/www.sock;
          fastcgi_index  index.php;
          #将/scripts$fastcgi_script_name修改为$document_root$fastcgi_script_name。
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          #Nginx调用fastcgi接口处理PHP请求。
          include        fastcgi_params;
      }
      

      说明

      Nginx与PHP-FPM进程间通信方式有两种。

      • TCP Socket:该方式能够通过网络,可用于跨服务器通信的场景。
      • UNIX Domain Socket:该方式不能通过网络,只能用于同一服务器中通信的场景。
    5. 按下Esc键,并输入:wq保存退出文件。

  3. 运行以下命令,启动Nginx服务。

    sudo systemctl start nginx
    
  4. 运行以下命令,设置Nginx服务开机自启动。

    sudo systemctl enable nginx
    

步骤五:配置MySQL

  1. 运行以下命令启动MySQL,并设置为开机自启动。

    sudo systemctl enable --now mysqld
    
  2. 运行以下命令,查看MySQL是否已启动。

    sudo systemctl status mysqld
    

    查看返回结果中Active: active (running)表示已启动。

  3. 运行以下命令,执行MySQL安全性操作并设置密码。

    sudo mysql_secure_installation
    

    命令运行后,根据命令行提示执行如下操作。

    1. 输入Y并回车开始相关配置。

    2. 选择密码验证策略强度,输入2并回车。

      策略0表示低,1表示中,2表示高。建议您选择高强度的密码验证策略。

    3. 设置MySQL的新密码并确认。

      需要输入两次一样的密码

    4. 输入Y并回车继续使用提供的密码。

    5. 输入Y并回车移除匿名用户。

    6. 设置是否允许远程连接MySQL。

      • 不需要远程连接时,输入Y并回车。
      • 需要远程连接时,输入N或其他任意非Y的按键,并回车。

      我们需要使用到phpMyAdmin,建议选择n

    7. 输入Y并回车删除test库以及对test库的访问权限。

    8. 输入Y并回车重新加载授权表。

步骤六:配置PHP

  1. 修改PHP配置文件。

    1. 运行以下命令,打开配置文件。

      sudo vim /etc/php-fpm.d/www.conf
      
    2. i进入编辑模式。

    3. 找到user = apachegroup = apache,将apache修改为nginx。由于我们使用的是nginx所以要将使用者和所属组改成nginx对象。

      php-fpm conf

    4. 按下Esc键,并输入:wq保存退出文件。

  2. 新建并编辑phpinfo.php文件,用于展示PHP信息。

    1. 运行以下命令,新建phpinfo.php文件。

      sudo vim <网站根目录>/phpinfo.php
      

      <网站根目录>是您在nginx.conf配置文件中location ~ .php$大括号内,配置的root参数值,如下图所示。网站根目录

      本文配置的网站根目录为/usr/share/nginx/html,因此需要运行以下命令新建phpinfo.php文件:

      sudo vim /usr/share/nginx/html/phpinfo.php
      
    2. i进入编辑模式。

    3. 输入下列内容,函数phpinfo()会展示PHP的所有配置信息。

      <?php echo phpinfo(); ?>
      
    4. Esc键后,输入:wq并回车,保存关闭配置文件。

  3. 运行以下命令,启动PHP-FPM

    sudo systemctl start php-fpm
    
  4. 运行以下命令,设置PHP-FPM开机自启动。

    sudo systemctl enable php-fpm
    

步骤七:测试访问LNMP平台

  1. 在本地物理机上打开浏览器。

  2. 在地址栏输入http://<实例公网IP地址>/phpinfo.php

    返回结果如下图所示,表示LNMP环境部署成功。

    image

注意:测试访问LNMP配置信息页面后,建议您运行以下命令将phpinfo.php文件删除,消除数据泄露风险。

sudo rm -rf <网站根目录>/phpinfo.php

其中,<网站根目录>需要替换为您在nginx.conf中配置的网站根目录。

本文配置的网站根目录为/usr/share/nginx/html,因此需要运行以下命令:

sudo rm -rf /usr/share/nginx/html/phpinfo.php

步骤八:安装phpMyAdmin

  1. 下载phpMyAdmin压缩包
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.zip
  1. 安装解压工具
yum install unzip –y
  1. 解压安装包
unzip unzip phpMyAdmin-5.0.1-all-languages.zip

步骤九:配置phpMyAdmin

  1. 重命名phpMyAdmin
mv phpMyAdmin-4.9.5-all-languages phpmyadmin
  1. 将文件移动到Nginx配置文件的默认路径
mv phpmyadmin /usr/share/nginx/html/
  1. 修改配置文件、

    a 复制重命名配置文件

cp config.sample.inc.php config.inc.php

​ b 编辑

vim config.inc.php

​ c 将下列项目修改

$cfg[‘blowfish_secret’] = ‘任意字符串’;

//这里需要填写一个足够复杂的随机字符串。这个字符串将用于加密保存在cookie中的登录信息,以确保安全性。请确保这个字符串在您的环境中是唯一的,并且不要轻易泄露。每次更改这个密钥后,所有用户的登录信息都将失效,他们需要重新登录。之后保存config.inc.php文件并刷新phpMyAdmin页面以应用新的配置。

$cfg['blowfish_secret'] = 'aVeryComplexAndLongStringForEncryption';

c f g [ ′ S e r v e r s ′ ] [ cfg['Servers'][cfg[ ′ Servers ′ ][i][‘host’] = ‘127.0.0.1’;更改nginx的配置文件

这里是为了让phpMyAdmin连接到本地的MySQL服务器(运行在localhost上)。由于我是服务器本机使用,所以我选择的时填写127.0.0.1

cfg[′Servers′][cfg['Servers'][cfg[′Servers′][i][‘host’]=‘127.0.0.1’;

​ d 修改Nginx配置(nginx.conf),添加phpmyadmin的路径

 location /phpmyadmin {
        alias /usr/share/nginx/html/phpmyadmin;
        index index.php;
    }

    location ~ /phpmyadmin/.+\.php$ {
        if ($fastcgi_script_name ~ /phpmyadmin/(.+\.php.*)$) {
            set $valid_fastcgi_script_name $1;
        }
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/phpmyadmin/$valid_fastcgi_script_name;
    }


注意:有的人nginx.conf中没有server部分,而添加的phpmyadmin的路径需要加到server里面,可以参考下面的nginx.conf文件

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       **; # 根据实际情况设置监听端口和协议,如:80或443(https)
        server_name  ***.***.***.***/; # 替换为你的域名或IP地址

        location /phpmyadmin {
            alias /usr/share/nginx/html/phpmyadmin; # 确保路径正确
            index index.php;

            location ~ ^/phpmyadmin/(.+\.php)$ {
                include fastcgi_params;
                fastcgi_pass 127.0.0.1:9000; # 请确保此处的端口与PHP-FPM监听的端口一致
                fastcgi_param SCRIPT_FILENAME $request_filename;
                fastcgi_index index.php;
            }
        }
    }

    include /etc/nginx/conf.d/*.conf;
}
  1. 重启nginx
sudo systemctl restart nginx
  1. 测试phpMyAdmin

访问http://localhost/phpmyadmin/

image-20240320214659380

此时输入你的mysql用户名和密码就可以登陆了

image-20240320215011811

可能会出现的问题

一、 nginx不能正常工作

该问题可能是受SELinux策略的限制,所以我们一般在SELinux关闭的情况下安装nginx

如果SELinux状态参数是Disabled,则SELinux为关闭状态。执行 步骤一,安装nginx

如果SELinux状态参数是Enforcing,则SELinux为开启状态,请执行参考查看SELinux状态并开启或关闭SELinux_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

二、 配置phpMyAdmin后,启动nginx出现错误,无法重启。

image-20240320221932593

这里可能会出现很多的错误可能性,输入下面的代码检查,根据报错解决问题。

sudo systemctl status nginx.service

一般是 配置文件错误,检查更改文件时是否出现粗心导致的输入错误,再去核实一遍。

三、 所要访问的文件权限不够

phpMyAdmin - Error Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)

session_start(): Failed to read session data: files (path: /var/lib/php/session)
  1. 检查session目录权限: 确保web服务器用户(这里我用的是nginx,你们用的不一样的话,就改成自己的)拥有在/var/lib/php/session目录下创建和读写文件的权限。可以使用以下命令更改权限和所有权:

    1sudo chown -R nginx:nginx /var/lib/php/session
    2sudo chmod -R 700 /var/lib/php/session
    
  2. 检查SELinux(如果启用): 如果您的系统启用了SELinux,请确保SELinux策略允许web服务器进程读写session目录。可以尝试运行以下命令(以CentOS/RHEL为例):

    1sudo restorecon -Rv /var/lib/php/session
    
  3. 检查PHP配置: 确保PHP配置文件(php.ini)中的session.save_path指向正确的目录,并且该目录具有正确的权限。打开php.ini文件,找到session.save_path,确保其值为/var/lib/php/session或一个web服务器有权访问的目录。

  4. 检查web服务器配置: 如果您使用的是Nginx或Apache,请确保配置中已正确处理PHP会话文件,特别是在使用FastCGI的情况下,确保PHP-FPM运行的用户有权限访问session目录。

  5. 检查浏览器设置: 虽然错误信息主要是服务器端的问题,但也请确保浏览器已启用cookies,因为会话通常依赖于cookies来跟踪用户状态。

写在最后

LNMP+phpMyAdmin这个搭配相对于LAMP+phpMyAdmin(Linux Apache Mysql PHP)来说配置的难度要大点,纯纯新手还是比较推荐LAMP+phpMyAdmin。

而两者在性能上的区别也主要是nginx和Apache的区别体现。

Nginx优点:

  1. 性能优势:Nginx在高并发请求下表现优秀,因其采用了异步、事件驱动的模型,更适合处理静态文件和大量并发连接,减轻了服务器的压力。
  2. 内存消耗:相对于Apache,Nginx在同等负载下内存占用更低,尤其是在处理静态资源时更加高效。
  3. 灵活配置:Nginx支持更细致的请求路由和反向代理设置,对于大型站点或负载均衡集群有更好的支持。

Apache缺点:

  1. 动态处理:对于PHP动态请求,Nginx通常需要借助FastCGI进程管理器(如PHP-FPM)来处理,配置相对复杂,初次接触可能会觉得不易理解和调试。
  2. 兼容性:尽管主流PHP应用都能良好支持,但在某些情况下,特别是老旧的PHP应用可能需要额外的配置才能在Nginx下正常运行。

LAMP优点:

  1. 易于配置:Apache历史悠久,配套文档丰富,初学者更容易上手,模块化设计使得许多PHP功能如.htaccess支持开箱即用。
  2. 广泛兼容:Apache对各种PHP特性支持较为全面,包括对.htaccess的支持,这对于小型项目和临时修改是非常方便的。
  3. 成熟稳定:Apache生态庞大,开发者社区活跃,对于已存在的PHP应用迁移至LAMP架构更为平滑。

LAMP缺点:

  1. 资源消耗:在高并发场景下,Apache的工作进程模式可能导致资源消耗较高,尤其是内存和CPU使用率。
  2. 性能瓶颈:在处理大量静态资源或高并发请求时,Apache的多进程或多线程模型可能不如Nginx的事件驱动模型高效。

但是两个架构中并无显著优劣之分,只要PHP和MySQL环境配置正确,phpMyAdmin均可正常工作。选择LNMP还是LAMP更多取决于我们的具体需求,如网站规模、并发请求量、硬件资源状况以及团队对技术栈的熟悉程度等。

如何在ECS上部署LAMP环境?_云服务器 ECS(ECS)-阿里云帮助中心 (aliyun.com)

posted @   我的十四行诗在哪里  阅读(191)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示