前幾天一朋友讓幫忙搭建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
參考: