lnmp就是 Linux+nginx + mysql + PHP,把Apache替換為Nginx;
這里我用到的Linux環境為為centos,接下來就分步驟來一步步安裝及測試。
一、安裝php
參考鏈接:https://zhuanlan.zhihu.com/p/34422328
在安裝PHP之前需要安裝一些依賴包,執行下面的命令就可以了,如果安裝過請忽略
yum install vim gcc gcc++ wget libxml2-devel wget -y
1.下載php
cd /usr/local/src/ wget http://cn2.php.net/distributions/php-5.6.36.tar.gz
解壓源碼包,創建賬號
tar zxf php-5.6.36.tar.gz useradd -s /sbin/nologin php-fpm
其中php-5.6.36就是我們需要用到的壓縮包,讓我們進入目錄進行安裝
cd php-5.6.34
然后我們編譯PHP文件生成makefile 文件,這里需要普及一個小的知識點,那就是fastcgi;
php本來的請求是,當一個請求出現,PHP會啟動一個進程來完成請求,然后關閉,但是這很耗費系統的資源,不符合我們的要求,我們需要php-fpm,然后可以監聽php請求 ,如果有請求出現,那么開始提供進程來執行,如果業務多的話會創建一個新的,如果沒有多余的請求的時候,php-fpm會釋放掉多余的資源,而fastcgi就是php-fpm使用的前提,編譯安裝的時候必須加上這個參數。所以編譯的時候需要加上--enable-fpm 選項
./configure --prefix=/usr/local/php --enable-fpm
./configure 就是就是編譯makefile文件的工具 --prefix 就是指定安裝PHP到哪個目錄,執行完成之后下面的命令
make && make install
我們執行完成./configure 只是把我們的配置寫入makefile文件,還沒有安裝,make 命令就是安裝,到此我們就安裝完成PHP了;
這時我們可以隨意一個目錄,建個文件index.php執行測試下
touch index.php
寫入內容:
<?php echo "hello world";
然后保存退出,執行
/usr/local/php/bin/php index.php
這個時候輸出hello world就代表文件執行成功,/usr/local/php/bin/php 是PHP文件執行的入口,如果我們要將PHP寫如Linux環境變量,需要加入的目錄為/usr/local/php/bin
(補充)
添加環境變量
vim /etc/profile
export PATH=$PATH:/usr/local/php/bin
關閉shell窗口后都需要再執行一次source /etc/profile
才能生效,這個問題需要在~/.bashrc
文件最后添加source /etc/profile
,這樣問題便得到解決;
二、安裝mysql
參考鏈接:https://www.jianshu.com/p/276d59cbc529
(安裝過程務必保持文件路徑的前后統一,否則可能會導致不可預期的結果)
1、檢查是否已經安裝過mysql,執行命令
rpm -qa | grep mysql
如果有安裝,則會顯示該目錄,刪除即可:
rpm -e –nodeps 該目錄
2、查詢所有Mysql對應的文件夾
whereis mysql
存在就刪除相關目錄文件
rm -rf /usr/lib64/mysql /usr/local/mysql /usr/share/mysql
驗證是否檢查完畢
whereis mysql
find / -name mysql
3.下載mysql安裝包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
也可以直接到mysql官網: https://downloads.mysql.com/archives/community/ 選擇對應版本進行下載
在執行wget命令的目錄下或你的上傳目錄下找到Mysql安裝包:mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
4.執行解壓命令
tar xzvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz ls
解壓完成后,可以看到當前目錄下多了一個解壓文件,移動該文件到/usr/local/下,並將文件夾名稱修改為mysql
mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/ cd /usr/local/ mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql
(
如果/usr/local/下不存在mysql文件夾,直接執行如下命令,也可達到上述效果:
mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/mysql
)
在/usr/local/mysql目錄下創建data目錄
mkdir /usr/local/mysql/data
更改mysql目錄下所有的目錄及文件夾所屬的用戶組和用戶,以及權限
chown -R mysql:mysql /usr/local/mysql chmod -R 755 /usr/local/mysql
5.編譯安裝並初始化mysql,務必記住初始化輸出日志末尾的密碼(數據庫管理員臨時密碼)
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
這里可能會出現這種錯誤
出現該問題首先檢查該鏈接庫文件有沒有安裝使用,命令進行核查
rpm -qa|grep libaio
運行命令后發現系統中無該鏈接庫文件:
yum install libaio-devel.x86_64
安裝成功后,繼續運行數據庫的初始化命令,此時可能會出現如下錯誤:
執行如下命令后:
yum -y install numactl
執行無誤之后,再重新執行第5步初始化命令,無誤之后再進行下一步操作;
運行初始化命令成功后,輸出日志如下:
記錄日志最末尾位置root@localhost:后的字符串,此字符串為mysql管理員臨時登錄密碼;
6、編輯配置文件my.cnf,添加配置如下:
vi /etc/my.cnf [mysqld] datadir=/usr/local/mysql/data port=3306 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES symbolic-links=0 max_connections=600 innodb_file_per_table=1 lower_case_table_names=1 character_set_server=utf8
lower_case_table_names:是否區分大小寫,1表示存儲時表名為小寫,操作時不區分大小寫;0表示區分大小寫;不能動態設置,修改后,必須重啟才能生效:
character_set_server:設置數據庫默認字符集,如果不設置默認為latin1
innodb_file_per_table:是否將每個表的數據單獨存儲,1表示單獨存儲;0表示關閉獨立表空間,可以通過查看數據目錄,查看文件結構的區別;
7、測試啟動mysql服務器
/usr/local/mysql/support-files/mysql.server start
這里報錯,說明沒啟動成功,報錯原因有多種,要根據其原因去解決
因為沒有路徑也沒有權限,所以創建此路徑並授權給mysql用戶:
mkdir /var/log/mariadb touch /var/log/mariadb/mariadb.log chown -R mysql:mysql /var/log/mariadb/
再執行啟動命令:
說明啟動成功;
查看是否存在mysql和mysqld的服務:
ps -ef|grep mysql | grep -v grep
ps -ef|grep mysqld | grep -v grep
8、添加軟連接,並重啟mysql服務:
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql service mysql restart
登錄mysql,修改密碼(密碼為步驟5生成的臨時密碼):
mysql -u root -p
setpassword
forroot@localhost
=password('想改的密碼');
開放遠程連接:
use mysql; update user set user.Host='%' where user.User='root'; flush privileges;
9.設置開機自動啟動
將服務文件拷貝到init
.d下,並重命名為mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 賦予可執行權限 chmod +x /etc/init.d/mysqld 添加服務 chkconfig --add mysqld 顯示服務列表 chkconfig –list
到這mysql安裝完成;
三、安裝nginx
1.安裝nginx之前先安裝一個擴展pcre,這個是正則匹配用到的擴展,官方網址:
http://www.pcre.org/,選擇自己下載的版本
cd ~ wget https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz tar zxvf pcre-8.00.tar.gz cd pcre-8.00 ./configure make & make install
2. 下載nginx
nginx的官方網址:http://nginx.org/,選擇下載自己的版本,這里以最新版為例:
cd ~ wget http://nginx.org/download/nginx-1.19.10.tar.gz tar zxvf nginx-1.19.10.tar.gz cd nginx-1.19.10 ./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.00 make & make install
如果出現該錯誤,重新執行下編譯安裝
./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.00
make & make install
3.然后啟動nginx
/usr/local/nginx/sbin/nginx
4. 查看是否已經啟動
ps aux | grep nginx
5. 然后訪問
127.0.0.1 //如果打印輸出Welcome to nginx! 說明安裝成功
(個人服務器就訪問對應服務器IP)
6. 增加nginx對PHP的支持
假設我設定PHP的目錄為
/home/www
打開nginx的配置文件
vim /usr/local/nginx/conf/nginx.conf
然后將這段代碼改成下面這樣(被#號所注釋)
location ~ \.php$ { root /home/www; //網站目錄 fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
然后wq保存退出
然后重啟php和nginx
/usr/local/nginx/sbin/nginx
(出現這錯誤,端口被綁定,殺死進程繼續啟動
fuser -k 80/tcp
)
/usr/local/php/sbin/php-fpm
(如果出現該錯誤,執行后再執行下重啟php
cd /usr/local/php/etc cp php-fpm.conf.default php-fpm.conf
)
打開瀏覽器,輸入
127.0.0.1/index.php
(個人服務器IP)
(
如果出現
首先可以查看nginx錯誤日志,這里說下配置錯誤日志:
重啟nginx,再訪問,可以去查看該日志
cat logs/error_nginx_php.log
這里可以查看下nginx.conf、php-fpm.conf
中的user
和 group
配置項和nginx.conf
文件中的 user
配置項是否一致
這里有各種錯誤,具體查看錯誤日志提示去解決即可;文件權限不足等,依個排查
如出現這個錯誤
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream,..
檢查nginx.conf下
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
修改為
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
然后重啟即可
)
如果輸出hello world 代表着成功,lnmp環境已經搭建完畢,具體還是需要自己搭建一遍遇到問題依次排查解決,會比較清晰。