在平時運維工作中,經常需要用到LNMP應用框架。
以下對LNMP環境部署記錄下:
1)前期準備:為了安裝順利,建議先使用yum安裝依賴庫
[root@opd ~]#yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison libtool-ltdl-devel libiconv libmcrypt mhash mcrypt libmcrypt-devel pcre-devel openssl-devel freetype-devel libcurl-devel
2)安裝nginx
[root@opd ~]#cd /opt/src
[root@src ~]#wget http://nginx.org/download/nginx-1.8.0.tar.gz
[root@src ~]#tar -zxvf nginx-1.8.0.tar.gz
[root@src ~]#cd nginx-1.8.0
新增www使用者,其中-M參數列示不新增使用者家目錄,-s參數列示指定shell型別
[root@nginx-1.8.0 ~]#useradd www -M -s /sbin/nologin
[root@nginx-1.8.0 ~]#vim auto/cc/gcc
將這句註釋掉取消Debug編譯模式 大概在179行
#CFLAGS="$CFLAGS -g"
我們再配置下nginx編譯引數
[root@nginx-1.8.0 ~]#./configure --prefix=/opt/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
[root@nginx-1.8.0 ~]#make
[root@nginx-1.8.0 ~]#make install clean
新增開機自啟動
[root@nginx-1.8.0 ~]#vim /etc/rc.local
在這個檔案裡面新增:/opt/nginx/sbin/nginx
[root@nginx-1.8.0 ~]#/opt/nginx/sbin/nginx
Centos7採用yum方式安裝nginx
centos7系統庫中預設是沒有nginx的rpm包的,所以我們自己需要先更新下rpm依賴庫
1)使用yum安裝nginx需要包括Nginx的庫,安裝Nginx的庫
# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2)使用下面命令安裝nginx
# yum install nginx
3)啟動Nginx
# service nginx start
或
# systemctl start nginx.service
3)安裝PHP
由於PHP需要這些類庫的支撐
先下載PHP
[root@opd ~]#cd /opt/src/
[root@src ~]#wget http://cn2.php.net/distributions/php-5.6.10.tar.gz
[root@src ~]#tar -zxvf php-5.6.10.tar.gz
[root@src ~]#cd php-5.6.10
我們先配置下PHP的編譯引數
[root@php-5.6.10 ~]#./configure --prefix=/opt/php --with-mysql --with-mysqli --with-iconv-dir --with-zlib --with-libxml-dir --enable-xml --with-curl --enable-fpm --enable-mbstring --with-gd --with-openssl --with-mhash --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-libdir=/usr/lib64 --with-jpeg-dir=/usr/lib64 --with-freetype-dir=/usr/lib64 --with-png-dir=/usr/lib64
[root@php-5.6.10 ~]#make
[root@php-5.6.10 ~]#make install clean
複製php.ini
[root@php-5.6.10 ~]#cp php.ini-development /opt/php/lib/php.ini
[root@php-5.6.10 ~]#cd /opt/php/etc/
[root@php-5.6.10 ~]#cp php-fpm.conf.default php-fpm.conf //在php-fpm.conf檔案中可以定義php的服務埠、程式啟動的使用者和組許可權(最好和nginx服務啟動許可權一直)等。
使用PHP-FPM管理指令碼,在編譯包裡面已經配置好了,只需要複製到/etc/init.d/中即可
[root@php-5.6.10 ~]#cd /opt/src/php-5.6.10/sapi/fpm/
[root@php-5.6.10 ~]#cp init.d.php-fpm /etc/init.d/php-fpm
[root@php-5.6.10 ~]#chmod +x /etc/init.d/php-fpm
啟動php-fpm
[root@php-5.6.10 ~]#service php-fpm start
加入開機啟動策略
[root@php-5.6.10 ~]#chkconfig --add php-fpm
[root@php-5.6.10 ~]#chkconfig php-fpm on
4)安裝MySQL (可參考:centos 6x系統下原始碼安裝mysql操作記錄)
MySQL5.7.x以上的版本不支援本安裝新增了boost引擎,後續我會更新……
先下載MySQL
[root@opd ~]#cd /opt/src/
[root@src ~]#wget http://cdn.mysql.com//archives/mysql-5.6/mysql-5.6.21.tar.gz
[root@src ~]#tar -zxvf mysql-5.6.12.tar.gz
[root@src ~]#cd mysql-5.6.12
我們先配置下MySQL的編譯引數 一般我們就配置下安裝路徑就可以了 如你有特殊配置也可以在安裝之後修改引數也可以的
[root@mysql-5.6.12 ~]#cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DCOMPILATION_COMMENT='production environment' -DWITH_READLINE=ON -DSYSCONFDIR=/opt/mysql -DMYSQL_UNIX_ADDR=/opt/mysql/mysql.sock -DMYSQL_DATADIR=/opt/data
-------------------------------------------------------------------------------------------------------------------------------------
注意:mysql5.5以上的編譯就用cmake了,而不是使用./configure了。
cmake編譯的優化引數說明如下:
-------------------------------------
-DCMAKE_INSTALL_PREFIX=dir_name 安裝的主目錄
-DDEFAULT_CHARSET 字符集,預設字符集是latin1
-DDEFAULT_COLLATION=collation_name 服務校對,預設的是latin1_swedish_ci,可以通過SHOW COLLATION語句檢視哪個校對匹配的字符集
-DENABLED_LOCAL_INFILE 是否開啟LOAD DATA INFILE的LOCAL引數
-DWITH_INNOBASE_STORAGE_ENGINE=1 將INNODB儲存引擎編譯進去
-DWITH_FEDERATED_STORAGE_ENGINE=1 將FEDERATED儲存引擎編譯進去
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 將BLACKHOLE儲存引擎編譯進去
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 不編譯EXAMPLE儲存引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 將分割槽儲存引擎編譯進去
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 將Performance Schema(效能檢視)儲存引擎編譯進去
-DCOMPILATION_COMMENT=string 編譯環境描述
-DWITH_READLINE=bool 是否使用readline庫
-DSYSCONFDIR=dir_name my.cnf 引數檔案的路徑
-DMYSQL_UNIX_ADDR=file_name Unix socket 檔案的路徑,socket檔案用於伺服器監聽連線,這個引數必須是絕對路徑
-DENABLED_PROFILING=bool 是否開啟profiling程式碼的查詢(用於SHOW PROFILE and SHOW PROFILES語句)
-DMYSQL_DATADIR=dir_name MySQL 檔案目錄的路徑,這個引數也可以在啟動MySQL的時候帶上--datadir引數進行設定
-DWITH_EXTRA_CHARSETS=name 指定額外的字符集,預設是all,包含所有的字符集。
-DINSTALL_BINDIR=dir_name 安裝使用者程式的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_DOCDIR=dir_name 安裝文件的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/doc
-DINSTALL_INCLUDEDIR=dir_name 安裝標頭檔案的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/include
-DINSTALL_LIBDIR=dir_name 安裝庫檔案的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/lib
-DINSTALL_MANDIR=dir_name 安裝幫助手冊的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/man
-DINSTALL_PLUGINDIR=dir_name 安裝外掛的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/lib/plugin
-DINSTALL_SBINDIR=dir_name 安裝mysqld服務端啟動指令碼的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/bin
-DINSTALL_SCRIPTDIR=dir_name 初始化MySQL資料庫的資料檔案路徑的mysql_install_db指令碼路徑,預設路徑是DCMAKE_INSTALL_PREFIX/scripts
-DINSTALL_SQLBENCHDIR=dir_name 安裝sql-bench的路徑,預設路徑是DCMAKE_INSTALL_PREFIX
-DINSTALL_SUPPORTFILESDIR=dir_name 安裝支援檔案的路徑,預設路徑是DCMAKE_INSTALL_PREFIX/support-files
-DMYSQL_TCP_PORT=port_num 伺服器監聽TCP/IP連線的埠,預設是3306
如若要編譯進其它功能,如SSL等,則可使用類似如下選項來實現編譯時使用某庫或不使用某庫:
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-------------------------------------------------------------------------------------------------------------------------------------
編譯需要較長的時間
[root@mysql-5.6.12 ~]#make
[root@mysql-5.6.12 ~]#make install clean
新增mysql使用者,設定mysql目錄許可權
[root@mysql-5.6.12 ~]# useradd mysql -M -s /sbin/nologin
[root@mysql-5.6.12 ~]# chown -R mysql:mysql /opt/mysql
[root@mysql-5.6.12 ~]# chown -R mysql:mysql /opt/data
安裝資料庫
[root@mysql-5.6.12 ~]# cd /opt/mysql/scripts
[root@scripts ~]#./mysql_install_db --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
[root@scripts ~]#cd /opt/mysql/support-files
複製mysql管理指令碼
[root@support-files ~]#cp mysql.server /etc/rc.d/init.d/mysql
複製mysql配置檔案
[root@support-files ~]#cp my-default.cnf /etc/my.cnf
新增mysql服務
[root@support-files ~]#chkconfig --add mysql
加入開機啟動策略
[root@support-files ~]#chkconfig mysql on
[root@support-files ~]#service mysql start
4)nginx+php配置
server { listen 80; server_name www.wangshibo.com; #charset koi8-r; access_log /Data/logs/nginx/www.wangshibo.com/access.log main; error_log /Data/logs/nginx/www.wangshibo.com/error.log; ## maintence if ($remote_addr !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) { //nginx訪問的白名單限制 rewrite ^.*$ /maintence.php last; } location / { root /var/www/vhosts/www.wangshibo.com/main; try_files $uri $uri/ @router; index index.php; } location /nginx_status { stub_status on; access_log off; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location @router { rewrite ^.*$ /index.php last; } location ~ \.php$ { root /var/www/vhosts/www.wangshibo.com/main; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 30; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; //這一行最好將/scripts換成$document_root,否則可能出現白麵 #include fastcgi_params; include fastcgi.conf; } location ~ ^/(status|ping)$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; } }