首頁 > 後端開發 > php教程 > 超詳細!用源碼方式搭建LNMP環境

超詳細!用源碼方式搭建LNMP環境

藏色散人
發布: 2023-04-11 14:00:02
轉載
3059 人瀏覽過

這篇文章為大家帶來了關於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 网站的首页面。

超詳細!用源碼方式搭建LNMP環境

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

以上是超詳細!用源碼方式搭建LNMP環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板