LAMP 和 LNMP 环境搭建

本文介绍如何在 Ubuntu 下安装 LAMP 和 LNMP 环境

简介

LAMP:即 Liunx 下 Apache,MySQL,PHP 环境
LNMP:即 Linux 下 Nginx,MySQL,PHP 环境

搭建环境:Ubuntu 20.04 LTS

若无特殊说明,请使用 root 身份来运行本文中的命令,本文只介绍基本的环境搭建,不包括网站的搭建和管理

准备工作

第一步:换源

备份源

1
cp /etc/apt/sources.list /etc/apt/sources.list.bak

更换源

1
vim /etc/apt/sources.list

内容更换为(内容与 Ubuntu 版本有关,详见文末参考链接)

1
2
3
4
5
6
7
8
9
10
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

第二步:更新软件(列表)

1
2
3
4
# 更新软件列表信息
sudo apt-get update
# 更新软件(可选)
sudo apt-get upgrade

LNMP 的搭建

软件:Nginx 的安装

执行下面的命令来安装

1
apt install nginx

安装完后访问 IP(服务器 IP 或 127.0.0.1) 即可见效(开盒即食,真好用)

Nginx 默认页面

相关命令:

1
2
3
4
5
6
7
8
9
10
service nginx status 
# 查看 nginx 是否开启
service nginx stop
# 关闭 nginx 服务
service nginx start
# 打开 nginx 服务
service nginx restart
# 重启 nginx 服务
systemctl status nginx
# 查看 nginx 服务的状态

相关文件

内容

  • /var/www/html默认的 Web 页面,默认打开可以看到 Nginx 页面
  • /var/www/html实际的 Web 内容,默认下只有 Nginx 自己的原生页面,我们可以通过更改 Nginx 配置来更改

服务器配置

  • /etc/nginxNginx 配置目录。所有 Nginx 的配置文件都在这里
  • /etc/nginx/nginx.confNginx 的配置文件,大多数全局配置可以通过这个文件来修改
  • /etc/nginx/sites-available/sites-enabled用来存储服务器下每个站点服务器块的目录, 默认情况下 Nginx 不会直接使用目录下的配置文件,需要我们更改配置来告诉 Nginx 来去读
  • /etc/nginx/sites-enabled/sites-available这里是存储已经启用站点服务器块的目录
  • /etc/nginx/snippets这个目录包含一些 Nginx 的配置文件,可打开详细查看这些配置文件到文档进行学习

服务器日志

  • /var/log/nginx/access.log这里是 Nginx 到日志文件,对 Web 服务器的每个请求都会记录在这个日志中
  • /var/log/nginx/error.log记录 Nginx 运行过程中发生的错误日志

软件:PHP 的安装

执行下面的命令来安装

1
apt install php7.4-fpm

验证安装

1
php -v

配置 Nginx 设置(两种方法比较见文末链接)

  1. 第一种方法(php-fpm):

    1
    vim /etc/nginx/sites-available/default

    内容修改为

    Nginx 的配置文件

    然后重启 Nginx

    1
    service nginx restart
  2. 第二种方法(php-cgi):

    1
    vim /etc/nginx/sites-available/default

    修改内容为

    Nginx 的配置文件

    1
    vim /etc/php/7.4/fpm/pool.d/www.conf

    在 37 行添加

    1
    listen = 127.0.0.1:9000

    安装 php-cgi

    1
    apt install php7.4-cgi

    重启服务器或者虚拟机即可

验证 PHP Nginx 配置

  1. 进入/var/www/html删除原有的.html文件

  2. 创建index.htmlphpinfo.php内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>hello world</title>
    </head>
    <body>
    <h1>Hello world</h1>
    <h3><a href="phpinfo.php">Check phpinfo</a></h3>
    </body>
    </html>

    phpinfo.php内容如下

    1
    2
    3
    <?php
    phpinfo();
    ?>
  3. 访问 IP 或 127.0.0.1 查看主页面和 phpinfo

    主页面

    phpinfo

软件:MySQL 的安装

执行下面的命令来安装

1
apt install mysql-server

相关命令:

1
2
3
4
5
6
7
8
service mysql status
# 查看 Mysql 状态
service mysql start
# 启用 MySQL
service mysql stop
# 停用 MySQL
service mysql restart
# 重启 MySQL

修改密码

1
2
3
4
5
# 输入下面的命令两次回车即可登录(密码为空)
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
flush privileges;
exit

再次登录就需要密码了

让我们再来验证一下安装,首先安装php-mysql(没有它 php 就使用不了 MySQL)

1
apt install php7.4-mysql

/var/www/html创建mysql.php,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// 连接 MySQL 的函数
$con = mysqli_connect('127.0.0.1', 'root', '你设置的密码', 'mysql');
if ($con){
// 连接成功
echo "Connected sucessfully!";
}
else{
// 连接失败
printf("Can't connect to MySQL. Errorcode: ".mysqli_connect_error());
exit();
}
// 关闭连接
mysqli_close($con);
?>

访问服务器 IP + /mysql.php127.0.0.1/mysql.php如果看到下图,那就成功了(基于上文安装的 Nginx,PHP)

MySQL 成功地被连接了

LAMP 的搭建

软件:Apache 的安装

请先使用上文的命令停止 Nginx

执行下面的命令来安装

1
apt install apache2

相关命令

1
2
3
4
5
6
7
8
9
10
service apache2 status 
# 查看 apache 是否开启
service apache2 stop
# 关闭 apache 服务
service apache2 start
# 打开 apache 服务
service apache2 restart
# 重启 apache 服务
systemctl status apache2
# 查看 apache 服务的状态

检验,访问服务器 IP 或 127.0.0.1,出现下图则成功

Apache 默认页面

相关文件

内容

  • /var/www/html等包括网页内容,可以在 Apache 配置文件中更改此设置

服务器配置

  • /etc/apache2全部 Apache 配置文件住这里

  • /etc/apache2/apache2.conf关于 Apache 主配置文件

  • /etc/apache2/ports.conf此文件指定 Apache 将 监听的端口

  • /etc/apache2/sites-available/每个站点可以在其中存储虚拟主机的目录。 除非将配置文件链接到启用站点的目录,否则 Apache 将不会使用在此目录中找到的配置文件, 通常,所有服务器锁定设置都在此目录中完成

  • /etc/apache2/启用了站点/存储启用了站点的虚拟主机的目录。 这些通常是通过使用 a2ensite 链接到可用站点目录中的配置文件来创建的。 Apache 在启动或重新加载以编译完整配置时会读取此目录中的配置文件和链接

  • /etc/apache2/conf可用 //etc/apache2/conf启用/这些目录与目录可用站点和已启用站点的关系相同,但是 用于存储不属于虚拟主机的配置片段

  • /etc/apache2/mods可用//etc/apache2/mods启用/这些目录 包含可用和启用的模块 分别 服务器日志

  • /var/log/apache2/access.log对 Web 服务器的每个请求都记录在此日志文件中 除非另有说明

  • /var/log/apache2/Error.log默认情况下, 所有错误都记录在此文件中

软件:PHP 的搭建

执行下面的命令来安装

1
apt install php7.4

检验

1
php -v

安装组件和扩展

1
apt install php7.4-curl php7.4-cgi php7.4-json php-pear libapache2-mod-php php7.4-mysql

重启 Apache

1
service apache2 restart

对安装进行验证

  1. 进入/var/www/html删除原有的.html文件

  2. 创建index.htmlphpinfo.php内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>hello world</title>
    </head>
    <body>
    <h1>Hello world</h1>
    <h3><a href="phpinfo.php">Check phpinfo</a></h3>
    </body>
    </html>

    phpinfo.php内容如下

    1
    2
    3
    <?php
    phpinfo();
    ?>
  3. 访问 IP 或 127.0.0.1 查看主页面和 phpinfo

    主页面

    phpinfo

软件:安装 MySQL

和配置 LNMP 时的操作类似,请读者自行安装验证 ~


本文参考链接:

LNMP环境搭建成功篇)

基础篇——ubuntu系统换源

LAMP 和 LNMP 环境搭建的艰辛历程

如何在 Ubuntu 20.04 中安装和配置 Nginx

Apache Web服务器,在Ubuntu 20.04上安装

使用php-fpm还是php-cgi?使用tcp还是socket?