feeeei

Ubuntu 使用源安装 LNMP 教程
前言LNMP 是 Linux + Nginx + Mysql + PHP 的简称,因其轻量、高效、全开源等特点,...
扫描右侧二维码阅读全文
07
2018/06

Ubuntu 使用源安装 LNMP 教程

前言

LNMP 是 Linux + Nginx + Mysql + PHP 的简称,因其轻量、高效、全开源等特点,被广大博主所喜爱,也是使用人数最多的博客系统 WordPress 所使用的技术栈。

最常见的 LNMP 环境搭建是使用 LNMP一键包,因为一键包为了通用性选择的是源码编译的方式安装,有很多缺点,比如安装效率低,在单核 VPS 上动辄一两小时的编译安装时间,并且想升级其中的任意一些工具组件都需要重新编译。但是一键包也简化了好多背后步骤,大大降低了使用者的门槛,适合不折腾,Linux、编程功底不深的朋友。

本文的目的就是介绍一下如何从零开始使用源搭建一个 LNMP 环境,这里我们不使用LNMP的一键安装包,而是难度稍微高一点的逐个安装,这样做或许能让你对这个环境的细节有更好的理解,而且对各部分的定制程度可以达到最高,并且可以在日后更自由方便的切换其中的一部分。

安装 Nginx

因 Nginx 官方更新频繁,Ubuntu 默认源又更新慢,所以我们选择使用使用 Ondřej Surý 的 PPA 来安装最新稳定的 Nginx 版本。

首先我们要增加使用 PPA 所必要的组件

sudo apt install -y software-properties-common

然后添加 PPA:

sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo apt update

然后我们安装一些相关必要组件

sudo apt install -y curl vim wget unzip apt-transport-https lsb-release ca-certificates

最后安装 Nginx

sudo apt install -y nginx-extras

这里我们选择 nginx-extras 而不选择原版 nginx 的原因是 nginx-extras 会附带一些比较实用的模块,比如自动生成目录的 autoindex ;使用 lua 脚本扩展 nginx 的 lua-nginx 等。

安装完毕后,在浏览器直接输入 IP 就可以看到最经典的 nginx 欢迎页了。

安装 PHP

这里也是一样,程序员属性作祟,不用最新版浑身难受,我们选择安装 PHP7.2 版本。当然也强烈建议大家早点儿加入 PHP7 的怀抱,我们可以看到在最主流的几款 PHP 工具中,PHP7 相比较 PHP5.6,性能都提升十分明显。
PHP7性能提升参照示例

同样,因为 Ubuntu 官方更新速度慢,我们仍然选择 Ondřej Surý 的 PPA:

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

之后安装一些常见的 PHP 组建以及 php7.2-fpm , 如果是 WordPress ,那么下面的 PHP 包足够满足大部分你需求:

apt install -y php7.2-fpm php7.2-mysql php7.2-curl php7.2-gd php7.2-mbstring php7.2-xml php7.2-xmlrpc php7.2-zip php7.2-opcache

然后重启一下 php7.2-fpm

systemctl restart php7.2-fpm

然后更新 Nginx 配置信息,这里我们假设以域名example.com 举例子
/etc/nginx/conf.d/ 目录下新增一个名为 example.conf 的配置,然后把以下信息填入

server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com;
        index index.php index.html index.htm;

        server_name example.com;

        location / {
            try_files $uri $uri/ =404;
        }
        
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        }
}

记得需要将其中的 example.com 修改为你的域名,然后我们在网站根目录 /var/www/example.com 下新增一个 phpinfo.php 文件,内容如下:

<?php phpinfo(); ?>

最后重启一下 Nginx

sudo nginx -t && sudo service nginx restart

打开浏览器输入 http://example.com/phpinfo.php 如果看到经典的 phpinfo 页面说明安装成功。

安装 Mysql

数据库我们选择稳定为主,所以就不激进的选择最新版了,我们直接使用 Ubuntu 官方源安装

sudo apt install -y mysql-server

然后我们执行一次安全设置

sudo mysql_secure_installation

简要来说,有这么几项

//请输入 y 进行初始安全设置
Press y|Y for Yes, any other key for No:y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

//选择强密码
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
......
//是否修改 root 密码,这里我们可以顺便设置上自己的 root 密码
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
......
//确定密码
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
......
//删除匿名用户,好像没用,删掉
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
......
//是否关闭 root 的远程登录权限,这里我选择 yes,视个人情况而定
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
......
//移除 test 数据库
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :y
......
//重置数据库权限
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y 

完毕之后我们就可以直接登录数据库

sudo mysql -u root -p

输入密码登陆后,创建一个名为 example 的数据库

CREATE DATABASE example DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

之所以编码选择 utf8mb4 而不选择 utf-8 是为了支持 emoji 表情。

接着我们创建一个叫做 example_user 的用户并赋予 example_database 数据库权限

GRANT ALL ON example.* TO 'example_user'@'localhost' IDENTIFIED BY '这里填写 example_user 的Mysql密码';

然后刷新权限

FLUSH PRIVILEGES;

最后退出 Mysql

exit;

我们最后测试一下数据库,在 var/www/example.com 目录下新增一个 mysql-test.php

<?php  
\$dbname = 'example';    //MySQL 数据库名
\$dbuser = 'example_user';   //MySQL 用户名
\$dbpass = 'example_user的密码'; //Mysql 用户密码
\$dbhost = 'localhost';
\$link = mysqli_connect(\$dbhost, \$dbuser, \$dbpass) or die("Unable to Connect to '\$dbhost'");
mysqli_select_db(\$link, \$dbname) or die("Could not open the db '\$dbname'");  
\$test_query = "SHOW TABLES FROM \$dbname";
\$result = mysqli_query(\$link, \$test_query);
\$tblCnt = 0;
while(\$tbl = mysqli_fetch_array(\$result)) {  
  \$tblCnt++;
  #echo \$tbl[0]."&lt;br /&gt;\n";
}
if (!\$tblCnt) {  
  echo "MySQL is working fine. There are no tables.";
} else {
  echo "MySQL is working fine. There are \$tblCnt tables.";
}
?>

创建完毕后访问 http://example.com/mysql-test.php 如果出现 "MySQL is working fine. There are no tables." 则说明 MySQL 工作正常,LNMP 环境搭建完毕。

Last modification:October 24th, 2018 at 12:17 pm
If you think my article is useful to you, please feel free to appreciate

One comment

  1. 学习笔记Blog

    服务器还是喜欢 CentOS 多一些!

Leave a Comment