搜索
首页后端开发php教程超级详细!用源码方式搭建LNMP环境

本篇文章给大家带来了关于php的相关知识,其中主要介绍了怎么用源码方式搭建LNMP环境,非常详细哦,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

超级详细!用源码方式搭建LNMP环境

源码方式搭建LNMP环境

1、安装 RedHat8

Centos8,或其他都可。虚拟机是 VMware ,网上有安装教程,这里就不啰嗦了。

2、配置本地的软件仓库

// 把系统镜像挂载到/media/cdrom目录。
mkdir -p /media/cdrom
mount /dev/cdrom /media/cdrom
// mount: /media/cdrom: WARNING: device write-protected, mounted read-only.


// 创建软件仓库的配置文件
 ~]# vi /etc/yum.repos.d/rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0

测试安装一下 vim, wget

dnf install vim wget -y

3、安装编译需要的工具

dnf -y install apr* autoconf automake numactl bison bzip2-devel cpp curl-devel fontconfig-devel freetype-devel gcc gcc-c++ gd-devel gettext-devel kernel-headers keyutils-libs-devel krb5-devel libcom_err-devel  libpng-devel  libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libxml2-devel libXpm* libxml* libXaw-devel libXmu-devel libtiff* make openssl-devel patch pcre-devel perl php-common php-gd telnet zlib-devel libtirpc-devel gtk* ntpstat na* bison* lrzsz cmake ncurses-devel libzip-devel libxslt-devel gdbm-devel readline-devel gmp-devel

4、下载所需软件源码包

统一放到 /lnmp 目录下保存。

mkdir /lnmp
cd /lnmp

wget https://www.linuxprobe.com/Software/rpcsvc-proto-1.4.tar.gz

wget https://www.linuxprobe.com/Software/nginx-1.16.0.tar.gz

wget https://www.linuxprobe.com/Software/mysql-8.0.18.tar.xz

wget https://www.linuxprobe.com/Software/php-7.3.5.tar.gz

wget https://www.linuxprobe.com/Software/wordpress.tar.gz

5、安装 rpcsvc-proto

rpcsvc-proto 是一款包含 rcpsvc 协议文件支持的软件包名称,rcpsvc 协议在后续 Nginx 与 MySQL 服务程序的部署过程中都需要被调用到。

tar xzvf rpcsvc-proto-1.4.tar.gz
cd rpcsvc-proto-1.4/
./configure
make
make install
cd ..

6、安装 Nginx

为 Nginx 的运行创建一个账号

程序是由一个用户运行的,为了安全性,当然不能是 root 了。

并且它也不需要家目录,不需要登录,仅是拿来运行 Nginx。

useradd nginx -M -s /sbin/nologin // -M 不创建家目录,-s 指定 shell
id nginx // 查询是否创建成功了
uid=1000(nginx) gid=1000(nginx) 组=1000(nginx)

安装 Nginx

lnmp]# tar zxvf nginx-1.16.0.tar.gz
lnmp]# cd nginx-1.16.0/
nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module  // --prefix指定安装目录, --with-开启http_ssl_module模块
nginx-1.16.0]# make
nginx-1.16.0]# make install
nginx-1.16.0]# cd ..

配置 Nginx

使用 prefix 参数指定了安装路径,那么 Nginx 配置文件在 /usr/local/nginx 下。

提供程序运行的 user 属主,group 属组

vim /usr/local/nginx/conf/nginx.conf
// 打开文件后,我们在英文模式下,按下 shift + 冒号,输入2,回车,定位到第2行。
// 连按两次 ESC,取消当前使用模式
// 再次 shift + 冒号,输入 set nu,回车,我们可以显示行号

1 
2 user  nginx nginx; // 第二行,修改为这样

在第 45 行,index 配置(可以做默认首页的文件)里加入 index.php。

 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;
 46         }

删除第 65~71 行前面的注释符#,来启用虚拟主机功能,然后将第 69 行后面对应的网站根目录修改为 /usr/local/nginx/html,其中的 fastcgi_script_name 参数用于指代脚本名称,也就是用户请求的 URL。只有信息填写正确了,才能使 Nginx 正确解析用户请求,否则访问的页面会提示 “404 Not Found” 的错误。

63         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 64         #
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69             fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
 70             include        fastcgi_params;
 71         }

源码编译安装的软件,默认不能被 systemctl 所管理,我们可以直接用其自身的 /usr/local/nginx/sbin/nginx 管理。建议将 /usr/local/nginx/sbin 路径加入到 PATH 环境变量中,我们就可以直接输入 nginx,不用加路径了。

然后用 source 命令,让此修改立即生效。

lnmp]# vim ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin // 这里加上 Nginx 的 sbin 路径

export PATH

lnmp]# source ~/.bash_profile // 让修改立即生效
lnmp]# nginx // 启动 nginx 服务

打开浏览器访问,192.168.89.128 (我的虚拟机地址),访问失败

关闭防火墙

systemctl status firewalld.service // 查看是否在运行
systemctl stop firewalld.service // 临时停止
systemctl disable firewalld.service // 永久关闭

再次访问,发现可以了。

7、安装 MySQL

创建一个 mysql 用户,负责运行 MySQL 数据库。同样该用户也是不需要登录的。

lnmp]# useradd mysql -M -s /sbin/nologin

安装

// 解压MySQL安装软件包
lnmp]# tar xvf mysql-8.0.18.tar.xz

// 将解压出的程序目录改名并移动到/usr/local目录下
lnmp]# mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql
lnmp]# mv mysql /usr/local

/usr/local/mysql 是保存 MySQL 程序文件的路径,/usr/local/mysql/data 是存储数据的地方,每个数据库就是它下面的一个目录。我们还需要手动创建它。

lnmp]# cd /usr/local/mysql
mysql]# mkdir data

初始化 MySQL,对目录授权,保证数据能被 mysql 用户访问,初始化之前,要先用 mysqld 命令确认管理 MySQL 服务的用户名,数据存放目录,编码信息,信息无误后,开始初始化。初始化后,系统会给用户分配一个初始的临时密码。要记得保存一下。

下面示例中分配的密码是 qfroRs,Ei4Ls。

[root@linuxprobe mysql]# chown -R mysql:mysql /usr/local/mysql
[root@linuxprobe mysql]# cd bin
[root@linuxprobe bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2021-05-06T07:07:06.243270Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.18) initializing of server in progress as process 7606
2021-05-06T07:07:08.116268Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: qfroRs,Ei4Ls

和 nginx 差不多,MySQL 的一些二进制可执行命令,存放在自身程序目录的 /usr/local/mysql/bin 中,我们也可以加入到 PATH 环境变量中,方便访问。

[root@linuxprobe bin]# vim ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin

export PATH
[root@linuxprobe bin]# source ~/.bash_profile

将启动脚本 mysql.server 放入到 /etc/init.d 中,让服务器每次重启后,都能自动启动数据库。并给予可执行权限。

libtinfo.so.5 文件是 MySQL 8.0 版本后新添加的重要的函数库文件,但默认不存在,需要将 libtinfo.so.6.1 文件复制过来或者作为链接文件才能正常启动:

[root@linuxprobe bin]# cd /usr/local/mysql
[root@linuxprobe mysql]# cp -a support-files/mysql.server /etc/init.d/
[root@linuxprobe mysql]# chmod a+x /etc/init.d/mysql.server
[root@linuxprobe mysql]# ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

执行 MySQL 数据库服务启动文件,并进行初始化工作。为了安全着想,MySQL 自 8.0 版本起不再允许用户使用临时密码来管理数据库内容,也不能进行远程控制,用户必须修改初始化密码后才能使用 MySQL 数据库。数据库作为系统重要的组成服务,密码位数不建议少于 20 位。例如,下面将密码修改为 “PObejCBeDzTRCncXwgBy”。

[root@linuxprobe mysql]# /etc/init.d/mysql.server start 
Starting MySQL.Logging to '/usr/local/mysql/data/linuxprobe.com.err'.
. SUCCESS! 
[root@linuxprobe mysql]# mysql -u root -p
Enter password: 输入初始化时给的原始密码
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.18

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> alter user 'root'@'localhost' identified by 'PObejCBeDzTRCncXwgBy'; 
Query OK, 0 rows affected (0.01 sec)

mysql>

但这样还是不行,还需要继续切换到 mysql 数据库中,修改 user 表单的密码值。这也是从 MySQL 数据库 8.0 版本之后才有的新安全要求。

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
| …………省略部分输出信息…………  |
+---------------------------+
33 rows in set (0.00 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PObejCBeDzTRCncXwgBy';
Query OK, 0 rows affected (0.01 sec)

// 创建一个数据库
create database linuxcool;

8、安装 PHP

解压 php 源码包,并编译安装

[root@linuxprobe mysql]# cd /lnmp
[root@linuxprobe lnmp]# tar xvf php-7.3.5.tar.gz
[root@linuxprobe lnmp]# cd php-7.3.5/
[root@linuxprobe php-7.3.5]# ./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-curl --with-pdo_mysql --with-pdo_sqlite --enable-mysqlnd --enable-mbstring --with-gd
[root@linuxprobe php-7.3.5]# make
[root@linuxprobe php-7.3.5]# make install

将生成的 php.ini 配置文件复制到安装目录中(/usr/local/php/),让其生效。现在主配置文件有了,接下来还需要 php-fpm 的配置文件,好在 /usr/local/php/etc/ 目录中也已经提供,只需要复制模板即可:

[root@linuxprobe php-7.3.5]# cp php.ini-development /usr/local/php/lib/php.ini
[root@linuxprobe php-7.3.5]# cd /usr/local/php/etc/
[root@linuxprobe etc]# mv php-fpm.conf.default php-fpm.conf

// 复制一个模板文件到php-fpm.d的目录中,用于后续控制网站的连接性能:
[root@linuxprobe etc]# mv php-fpm.d/www.conf.default php-fpm.d/www.conf

把 php 服务加入到启动项中,使其重启后依然生效

[root@linuxprobe etc]# cd /lnmp/php-7.3.5
[root@linuxprobe php-7.3.5]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@linuxprobe php-7.3.5]# chmod 755 /etc/init.d/php-fpm

禁用一些函数

[root@linuxprobe php-7.3.5]# vim /usr/local/php/lib/php.ini
307 ; This directive allows you to disable certain functions for security reasons.
308 ; It receives a comma-delimited list of function names.
309 ; http://php.net/disable-functions
310 disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server

开启 php-fpm 进程

[root@linuxprobe php-7.3.5]# /etc/init.d/php-fpm start
Starting php-fpm done

我们在 /usr/local/nginx/html 下创建一个 index.php 文件测试下

<?php
phpinfo();

浏览器访问地址即可。

9、搭建一个 WordPress

把 Nginx 服务程序根目录的内容清空后,将 WordPress 解压后的网站文件复制进去:

[root@linuxprobe php-7.3.5]# cd ..
[root@linuxprobe lnmp]# rm -f /usr/local/nginx/html/*
[root@linuxprobe lnmp]# tar xzvf wordpress.tar.gz 
[root@linuxprobe lnmp]# mv wordpress/* /usr/local/nginx/html/

为了能够让网站文件被 Nginx 服务程序顺利读取,应设置目录所有权的身份及可读写的权限:

[root@linuxprobe lnmp]# chown -Rf nginx:nginx /usr/local/nginx/html 
[root@linuxprobe lnmp]# chmod -Rf 777 /usr/local/nginx/html

输入虚拟机 IP 地址访问 WordPress 网站的首页面。

569f734b4664823f725b1ebd4e0d759.png

后面按说明一步步操作下去即可。

以上是超级详细!用源码方式搭建LNMP环境的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:learnku。如有侵权,请联系admin@php.cn删除
PHP行动:现实世界中的示例和应用程序PHP行动:现实世界中的示例和应用程序Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:轻松创建交互式Web内容PHP:轻松创建交互式Web内容Apr 14, 2025 am 12:15 AM

PHP可以轻松创建互动网页内容。1)通过嵌入HTML动态生成内容,根据用户输入或数据库数据实时展示。2)处理表单提交并生成动态输出,确保使用htmlspecialchars防XSS。3)结合MySQL创建用户注册系统,使用password_hash和预处理语句增强安全性。掌握这些技巧将提升Web开发效率。

PHP和Python:比较两种流行的编程语言PHP和Python:比较两种流行的编程语言Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP的持久相关性:它还活着吗?PHP的持久相关性:它还活着吗?Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP的当前状态:查看网络开发趋势PHP的当前状态:查看网络开发趋势Apr 13, 2025 am 12:20 AM

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP与其他语言:比较PHP与其他语言:比较Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP与Python:核心功能PHP与Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP:网络开发的关键语言PHP:网络开发的关键语言Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中