源码编译搭建LNMP平台

好久没有搭建LNMP环境了,最近用一台闲置的服务器用目前最新的版本搭建了一下比较基础LNMP环境,在此记录一下。

软件版本:NGINX-1.16.0,
MySQL-8.0.17,
PHP-7.3.8

NGINX

1
2
3
4
5
6
7
wget wget http://nginx.org/download/nginx-1.16.0.tar.gz
tar -zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0
useradd -s /usr/sbin/nologin nginx
./configure --user=nginx --group=nginx --with-http_ssl_module
// 这里我并没有指定路径,不过还好,默认的路径就是/usr/local/下
make && make install

在我做这些的时候并没有抱任何错误,这里提醒一下,我用的是阿里的云主机,默认开启http服务,要启动NGINX需要关闭httpd服务。

1
2
3
4
5
6
systemctl stop httpd
ln -s /usr/local/nginx/sbin/nginx nginx
//此处是做了一个软连接
/nginx //启动服务 //-s reload 重新加载配置文件 // -s stop 关闭服务 //-V 查看版本信息
netstat -anptu grep nginx //看到80端口上运行的是nginx
curl http://127.0.0.1 //可以看到nginx默认界面

到此nginx暂时告一段落

MySQL

MySQL我下载的是所有rpm包的那个压缩包。

1
2
3
4
5
6
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.17-1.el7.x86_64.rpm-bundle.tar
tar -xf mysql-8.0.17-1.el7.x86_64.rpm-bundle.tar
yum -y install mysql-community-*
systemctl start mysqld
cat /var/log/mysqld.log //找到root@localhost这个字段后面就是密码
mysql -uroot -p'上面找到的密码'

此处说一下,启动完mysql,登录的时候会发现需要输入密码,它的密码实在日志文件里。

还要说的一点是由于mysql密码认证的问题,需要把mysql的配置文件中default-authentication-plugin=mysql_native_password这个字段前面#去掉,否则的话在后面测试PHP连接MySQL会报一个关于密码认证的错误。像下面这样:

1
mysqli::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] 
1
2
3
4
5
6
7
systemctl restart mysqld
mysql -uroot -p'上面找到的密码'
set global validate_password.length=8; //设置密码的长度
set global validate_password.policy=0;
alter user root@'localhost' identified with mysql_native_password by '新密码';
flush privileges;
quit

到此mysql就算是基本完成了。

PHP

PHP这个版本已经集成了php-fpm这个模块了,编译安装的时候把这个模块加载上就可以了。不过这里需要安装一个依赖包。还有就是加载一下mysqli这个模块,后面测试连接mysql会用到。

1
2
3
4
5
6
7
8
9
10
yum -y install libxml2-devel
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc/ --enable-fpm --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
make && make install
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
cp -f /packages/php-7.3.8/php.ini-production /usr/local/php/etc/php.ini //这里php.ini-production是在源码包里
/usr/local/php/sbin/php-fpm //启动php-fpm
yum -y install php-mysql

测试

  • 修改nginx的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
}
//加入 index.php
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
// 取消前面的注释,修改include
wq //保存退出
/nginx -s reload // 重新加载一下配置文件
vim /usr/local/nginx/html/index.php //先测试一下PHP页面是否正常解析
<?php
phpinfo();
?>
wq //保存退出
用浏览器访问一下看一下页面信息,我的是阿里云主机,所以需要在阿里控制台的安全规则下开放下80端口。 接下来测试一下PHP连接MySQL数据库执行一下sql查询。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
vim /usr/local/nginx/html/mysql.php
<?php
$mysqli = new mysqli('127.0.0.1','root','密码','mysql');
if (mysqli_connect_error()){
die('Unable to connect !'). mysql_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
printf("Host:%s",$row[0]);
printf("</br>");
printf("Name:%s",$row[1]);
printf("</br>");
}
?>
wq //保存退出
用浏览器访问一下mysql.php出现下面这些值证明连接成功:
Host:localhost
Name:mysql.infoschema
Host:localhost
Name:mysql.session
Host:localhost
Name:mysql.sys
Host:localhost
Name:root

测试完成之后基本LNMP环境就算是搭建完成了,接下来就是优化了。