源碼編譯安裝休弃,搭建LNMP環(huán)境(Linux+Nginx+MySQL+PHP)

前幾天一朋友讓幫忙搭建LNMP環(huán)境吞歼,常用服務(wù)Nginx, MySQL, PHP, 個(gè)人不習(xí)慣用一鍵LNMP工具塔猾。一鍵安裝會(huì)給自己裝一些根本用不到的服務(wù)篙骡。還是自己需要什么服務(wù),編譯什么更好丈甸。

個(gè)人習(xí)慣的目錄結(jié)構(gòu):

/home/xiaowujun/softs/ #存放常用服務(wù)或工具安裝包 .tar

/data/apps/ #服務(wù)的安裝目錄, 如: /data/apps/mysql, /data/apps/nginx, /data/apps/php 
/data/webs/ #不同項(xiàng)目目錄糯俗,如: /data/webs/www.xiaowujun.com, /data/webs/blog.xiaowujun.com

這樣,常用服務(wù)很容易找到睦擂,而且目錄結(jié)構(gòu)更清晰得湘。


Google,baidu 也沒有找到一份完整的搭建LNMP環(huán)境教程顿仇,因?yàn)楹镁脹]有源碼編譯安裝淘正,現(xiàn)在只能自己一點(diǎn)一點(diǎn)重新摸索。

下面整理一份搭建步驟和簡(jiǎn)單的注意事項(xiàng)臼闻。
(下面文檔根據(jù)印象整理鸿吆,有什么不對(duì)的地方或者疑問望指出來,一起探討修正)

機(jī)器性能述呐,配置(最基本的)

  • 阿里云主機(jī)
  • 內(nèi)存: 1G內(nèi)存
  • CPU: 1核
  • 帶寬: 1Mbps

服務(wù)及版本

  • Nginx-1.8.1
  • MySQL-5.6.26
  • PHP-5.6.31

(開發(fā)者具體使用什么版本的服務(wù)惩淳,到官網(wǎng)下載相應(yīng)的版本即可)


安裝 Nginx

安裝 Nginx 所依賴的基本服務(wù):

yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
  • gcc 編譯器,只能編譯c代碼(不確定是否準(zhǔn)確具體請(qǐng)Google)
  • gcc-c++ 編譯器乓搬,為gcc提供c++語言特性支持(不確定是否準(zhǔn)確具體請(qǐng)Google)
  • make 編譯源代碼包思犁,是用來執(zhí)行Makefile的
  • zlib 壓縮庫,支持讀寫 gzip 壓縮
  • pcre 正則
  • openssl HTTPS 服務(wù)

進(jìn)入Nginx官網(wǎng)缤谎,下載Nginx包抒倚,nginx-1.8.1版本:

cd /home/xiaowujun/softs/
wget https://nginx.org/download/nginx-1.8.1.tar.gz

解壓,配置:

tar -zxf nginx-1.8.1.tar.gz

cd nginx-1.8.1

./configure --prefix=/data/apps/nginx-1.8.1 --with-http_ssl_module --with-pcre --without-http_scgi_module --without-http_fastcgi_module --with-http_gzip_static_module

編譯坷澡,安裝:

make && make install

啟動(dòng) Nginx:

/data/apps/nginx-1.8.1/sbin/nginx

參考:


安裝 MySQL

安裝 MySQL 所依賴的服務(wù):

yum install ncurses-devel
yum install cmake
  • ncurses 一個(gè)程序庫托呕,它提供了API,可以允許程序員編寫?yīng)毩⒂诮K端的基于文本的用戶界面频敛。
  • cmake 跨平臺(tái)項(xiàng)目管理工具项郊,是抽象層次更高的項(xiàng)目管理工具,cmake命令執(zhí)行的CMakeLists.txt文件

進(jìn)入 MySQL官網(wǎng)斟赚,下載資源包着降,mysql-5.6.26:

cd /home/xiaowujun/softs/

wget https://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.26.tar.gz

解壓,編譯拗军,安裝:

tar -zxf mysql-5.6.26.tar.gz

cd mysql-5.6.26

cmake -DCMAKE_INSTALL_PREFIX=/data/apps/mysql-5.6.26 -DMYSQL_DATADIR=/data/apps/mysql-5.6.26/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./

make && make install

?設(shè)置和初始化:

# 創(chuàng)建 mysql 用戶 及 mysql 組
groupadd mysql
useradd -g mysql mysql

cd /data/apps/mysql-5.6.26
chown -R mysql:mysql .
# 初始化 MySQL 自身數(shù)據(jù)庫
# 復(fù)制命令的時(shí)候一定要確保 --user --basedir --datadir 都是兩個(gè) “-”
./scripts/mysql_install_db --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data

# 將mysql的配置文件拷貝到/etc
cp support-files/my-medium.cnf /etc/my.cnf

啟動(dòng) MySQL (使用 mysql 用戶啟動(dòng)):

/data/apps/mysql-5.6.26/bin/mysqld_safe --user=mysql &

# 查看 mysql任洞,看是否成功 3306端口
netstat -tnl|grep 3306

加入到系統(tǒng)服務(wù):

cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 700 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 啟動(dòng)
service mysqld start

# 停止
service mysqld stop

# 重啟
service mysqld restart

設(shè)置 root 密碼(方法很多蓄喇,可以Google下)和 登錄:

# 設(shè)置密碼,命令后交掏,確認(rèn)兩次密碼即可妆偏。
/data/apps/mysql-5.6.26/bin/mysqladmin -u root password '你的密碼'

# 登錄
/data/apps/mysql-5.6.26/bin/mysql -uroot -p

注意:

  • MySQL 的5.6.26以后的版本在編譯安裝時(shí) 至少需要 大于1G的內(nèi)存才能正常編譯。否則會(huì)報(bào)錯(cuò)盅弛,編譯程序會(huì)強(qiáng)制被殺死:
[ 50%] Building CXX object sql/CMakeFiles/sql.dir/item_func.cc.o
[ 51%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc.cc.o
c++: 編譯器內(nèi)部錯(cuò)誤:已殺死(程序 cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] 錯(cuò)誤 4
make[1]: *** [sql/CMakeFiles/sql.dir/all] 錯(cuò)誤 2
make: *** [all] 錯(cuò)誤 2
  • 初始化 MySQL 自身數(shù)據(jù)庫時(shí)钱骂,有的人會(huì)用 ./bin/mysqld --initialize-insecure
./bin/mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data 

報(bào)錯(cuò):

[root@iZ2zedai2pevz7grtqvl0lZ mysql-5.6.26]# ./bin/mysqld --initialize-insecure --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data 
2017-08-30 16:42:54 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-08-30 16:42:54 0 [Note] ./bin/mysqld (mysqld 5.6.26) starting as process 25919 ...
2017-08-30 16:42:54 25919 [Note] Plugin 'FEDERATED' is disabled.
./bin/mysqld: Table 'mysql.plugin' doesn't exist
2017-08-30 16:42:54 25919 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2017-08-30 16:42:54 25919 [Note] InnoDB: Using atomics to ref count buffer pool pages
2017-08-30 16:42:54 25919 [Note] InnoDB: The InnoDB memory heap is disabled
2017-08-30 16:42:54 25919 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2017-08-30 16:42:54 25919 [Note] InnoDB: Memory barrier is not used
2017-08-30 16:42:54 25919 [Note] InnoDB: Compressed tables use zlib 1.2.3
...
...

可以嘗試:

./scripts/mysql_install_db --user=mysql --basedir=/data/apps/mysql-5.6.26 --datadir=/data/apps/mysql-5.6.26/data

參考:
單獨(dú)安裝php的mysql和mysqli擴(kuò)展
Linux為已編譯好PHP添加 Mysql(PHP編譯好后添加Mysql擴(kuò)展)


安裝 PHP

安裝PHP依賴庫,PHP依賴庫挺多的挪鹏,根據(jù)自己需要安裝對(duì)應(yīng)的即可见秽,簡(jiǎn)單安裝幾個(gè)常用的。

yum install -y libjpeg libjpeg-devel libpng libpng-devel curl curl-devel

訪問 PHP官網(wǎng)讨盒,下載源碼包解取,php-5.6.31 :

cd /home/xiaowujun/softs/

wget https://secure.php.net/distributions/php-5.6.31.tar.gz

解壓, 配置催植,編譯肮蛹,安裝:

tar -zxf php-5.6.31.tar.gz

cd php-5.6.31

./configure --prefix=/data/apps/php-5.6.31 --with-config-file-path=/data/apps/php-5.6.31/etc --with-php-config=/data/apps/php-5.6.31/bin/php-config --with-mysqli=/data/apps/mysql-5.6.26/bin/mysql_config --enable-mbstring --with-mhash --with-mysql=/data/apps/mysql-5.6.26 --enable-fpm --with-openssl --with-zlib

make && make install

配置 PHP:

# 配置文件
cp php.ini-development /data/apps/php-5.6.31/etc/php.ini

# php-fpm 服務(wù)
cp /data/apps/php-5.6.31/etc/php-fpm.conf.default /data/apps/php-5.6.31/etc/php-fpm.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

需要著重提醒的是勺择,如果文件不存在创南,則阻止 Nginx 將請(qǐng)求發(fā)送到后端的 PHP-FPM 模塊, 以避免遭受惡意腳本注入的攻擊 :

vi /data/apps/php-5.6.31/etc/php.ini

定位到 cgi.fix_pathinfo= 并將其修改為如下所示:

cgi.fix_pathinfo=0

啟動(dòng)PHP:

/data/apps/php-5.6.31/sbin/php-fpm

參考:


設(shè)置開機(jī)啟動(dòng) (重要 *)

Nginx
MySQL
PHP

測(cè)試程序

創(chuàng)建省核,編輯 phpinfo.php 測(cè)試文件:

vi /data/webs/www.xiaowujun.com/phpinfo.php

輸入:

<?php
    phpinfo();
?>

或者:

echo "<?php phpinfo(); ?>" >> /data/webs/www.xiaowujun.com/phpinfo.php

配置nginx.conf文件稿辙,解析域名:

vi /data/apps/nginx-1.8.1/conf/nginx.conf

修改默認(rèn)的 location 塊,使其支持 .php 文件:

listen 80;
server_name www.xiaowujun.com;
location / {
    root   /data/webs/www.xiaowujun.com;
    index  index.php index.html index.htm;
}

下一步配置來保證對(duì)于 .php 文件的請(qǐng)求將被傳送到后端的 PHP-FPM 模塊气忠, 取消默認(rèn)的 PHP 配置塊的注釋邻储,并修改為下面的內(nèi)容:

location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9000;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
}

重新加載 Nginx:

/data/apps/nginx-1.8.1/sbin/nginx -s reload

測(cè)試:
瀏覽器訪問: http://www.xiaowujun.com/phpinfo.php


參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旧噪,隨后出現(xiàn)的幾起案子吨娜,更是在濱河造成了極大的恐慌,老刑警劉巖淘钟,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宦赠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡米母,警方通過查閱死者的電腦和手機(jī)勾扭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铁瞒,“玉大人妙色,你說我怎么就攤上這事』鬯#” “怎么了身辨?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵丐谋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我煌珊,道長(zhǎng)笋鄙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任怪瓶,我火速辦了婚禮萧落,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洗贰。我一直安慰自己找岖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布敛滋。 她就那樣靜靜地躺著许布,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绎晃。 梳的紋絲不亂的頭發(fā)上蜜唾,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音庶艾,去河邊找鬼袁余。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咱揍,可吹牛的內(nèi)容都是我干的颖榜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼煤裙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掩完!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硼砰,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤且蓬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后题翰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恶阴,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年遍愿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了存淫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沼填,死狀恐怖桅咆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坞笙,我是刑警寧澤岩饼,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布荚虚,位于F島的核電站,受9級(jí)特大地震影響籍茧,放射性物質(zhì)發(fā)生泄漏版述。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一寞冯、第九天 我趴在偏房一處隱蔽的房頂上張望渴析。 院中可真熱鬧,春花似錦吮龄、人聲如沸俭茧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽母债。三九已至,卻和暖如春尝抖,著一層夾襖步出監(jiān)牢的瞬間毡们,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工昧辽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衙熔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓奴迅,卻偏偏與公主長(zhǎng)得像青责,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子取具,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容