跳转到主要内容

概述

LNMP就是在Linux系统环境下将Nginx,MySQL/MariaDB,PHP-FPM各种独立的开源软件搭配起来,用于开发或者生产服务器部署。自己手动配置可以确保软件处于最新的状态,了解其中的关系之后,可以随时做配置修改。而集成方案通常升级比较慢,而且出问题的时候,处理问题也相对更加棘手。

Nginx即engine-x的简写,是一个免费开源的高性能HTTP服务器和反向代理服务器,目前在全球得到了广泛的使用,国内的Tengine也是Nginx的一个变种。

PHP-FPM(FastCGI流程管理器)是PHP FastCGI的替代实现,对于访问量非常大的网站系统,PHP-FPM的作用尤为明显。

MySQL是一个被广泛使用的开源高性能关系数据库系统,无论是java,还是php或者python,MySQL几乎都是最受欢迎的数据库系统,当然还有他的分支MariaDB也是非常受欢迎。

本教程的方法适合ubuntu16.04,ubuntu18.04,ubuntu20.04以及中间的短期维护版本,还有相应版本内核的linuxmint。

准备

国内安装完ubuntu后的第一件事通常都是换仓库源,不然会比较慢,但是ppa没办法换源

#备份默认仓库
cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑sources.list
sudo vim sources.list
# 编辑内容如下
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security multiverse

如果当前系统有安装过旧Apache和MySQL,可以先卸载清理

# 移除软件
sudo apt purge apache2* php7.0* mysql* phpmyadmin*
sudo apt autoremove
sudo apt autoclean
# 查找并清除apache配置
whereis apache2
sudo rm -Rf /etc/apache2
# 移除MySQL的配置文件
sudo rm -Rf /var/lib/mysql/
sudo rm -Rf /etc/mysql/
# 最后再查看apache2是否还有残留
dpkg -l | grep apache2*

 

安装

安装nginx

#安装仓库中默认的nginx
sudo apt install nginx

仓库默认版本已经非常新,但是通常还是建议自己安装nginx的mainline分支,这一步请通过链接查看具体文章。nginx的配置目录在/etc/nginx路径中,主配置文件nginx.conf, 而vhost的配置在/etc/nginx/conf.d目录中。

# 启动服务,后面.service通常可忽略
sudo systemctl start nginx.service
# 重载服务
sudo systemctl reload nginx.service
# 设置为自启动
sudo systemctl enable nginx.service
# 查看状态
sudo systemctl status nginx.service
# 查看版本
nginx -v

需要注意的是nginx.conf中的user和group和后面配置的PHP-FPM的user要保持一致

# 请和PHP-FPM保持一致
user www-data;
# 设置nginx可用的CPU的核心数
worker_processes auto;

 

安装MySQL

ubuntu20.04仓库默认已经是mysql8.0, 这个版本速度有很大的提升,安装很简单,配置要注意

sudo apt install mysql-server

安装完成,并且已经自动启动。但是默认安装是使用auth_socket来对本地登录进行验证,要使用密码登录,我们需要对mysql进行安全设置

sudo mysql_secure_installation

运行以上命令将进入密码验证组件的设置,如图,根据自己的情况选择强度并一路yes即可,过程中会要求设置root密码,注意密码强度和验证规则保持一致。

图像
ubuntu20.04 安装配置mysql8.0

完成以上步骤后,其实还是无法通过密码来登录root,我们就可以通过auth_socket使用root登录并重新设置登录方式和密码

# 使用auth_socket登录root
sudo mysql

# 更改登录方式和密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Cybersir.com';

设置的密码注意要和前面设置的安全规则一致,否则失败。

当然使用root作为网站数据库的用户并不是一个好的实践,限制root密码登录其实还是比较安全的,那就意味着访问者需要有sudo的权限才能本地使用root用户登录。我们可以为自己的数据库创建独立的用户和密码

# 创建数据库
CREATE DATABASE  `cybersir_com` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 为数据库创建全权用户并设置密码
GRANT ALL PRIVILEGES ON cybersir_com.* TO 'cybersir'@'localhost' IDENTIFIED BY 'cybersir_strong_password';

 

安装PHP-FPM

在ubuntu20.04的默认仓库中其实已经有非常新的php版本,当前是7.4。如果想安装更新的版本,可以通过PPA仓库安装

# 如果默认安装则忽略此行
sudo add-apt-repository ppa:ondrej/php
# 更新仓库源
sudo apt update
# 安装php及模块
sudo apt install php7.4 -y
sudo apt install php7.4-{common,curl,xsl,iconv,bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm,cli,soap,redis} -y

需要其他模块也是可以单独手动安装。确保/etc/php/7.4/fpm/pool.d路径下的www.conf中user和nginx保持一致,这里是www-data, 否则php网站会出现异常,这个www-data也可以是其他用户,比如nobody, 为了安全起见,分配给nginx和php的用户不应该分配shell终端权限,也就是/etc/passwd中相应用户应该以/user/sbin/nologin结尾。

user = www-data 
group = www-data

通过以上的安装和配置,一个基本的LNMP环境就完成了。我们可以简单为nginx配置一个php站点来测试效果

server {
    listen 80;
    server_name cybersir.dev;
        index index.html index.htm index.php;
        root  /var/www/drupal9;#目录所有者www-data

        location /
        {
        try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$
        {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        include snippets/fastcgi-php.conf;
        fastcgi_read_timeout 300s;
        }
}

 

分类