根據項目開發需求,要在MEC服務器上部署以下內容:Nginx、Nginx push stream module、Jason CPP、Spawn-fcgi、libfcgi、Redis、Hiredis、Boost、SCTPlib、Asn1c. 記錄下部署過程和遇到的一些坑,以備後用。本文全部包源目錄爲/usr/src.html
1. 安裝Nginx依賴包:node
安裝Nginx須要先安裝openssl、zlib、pcre這幾個依賴包。若未安裝參照以下步驟:python
(1)Openssl:Openssl用於SSL功能。linux
下載openssl包:http://www.openssl.org/source/nginx
(2)zlib:zlib庫用於gzip模塊.git
(3)pcre:pcre庫用於HTTP rewrite模塊.github
安裝pcre-8.38版本,prce2-10.20最新版本後,在後續編譯nginx時會出現找不到pcre.h文件的錯誤。redis
2. 安裝Nginx及其訂閱發佈模塊:json
因爲本項目開發須要訂閱發佈功能,須要NNginx的push stream 模塊支持,因此在創建Nginx時候要將這個模塊加進去一塊兒編譯。bootstrap
nginx-push-stream-module使用http來實現鏈接管道。主要用於訂閱發佈模塊的即時消息的推送。
注:建議在安裝nginx時一塊兒配置push-stream-module.
(1)下載:
a. 下載Nginx源碼包:http://nginx.org/
b. 下載nginx-push-stream-module:
https://github.com/wandenberg/nginx-push-stream-module/releases
(2)解壓:
# tar –zxvf nginx-1.9.9.tar.gz
# tar –zxvf nginx-push-stream-module-0.5.1.tar.gz
(3)配置:
# cd /usr/src/nginx-1.9.9
# ./ configure --with-pcre=/usr/local/pcre8.38 --add-module=/usr/src/nginx-push-stream-module-0.5.1
(4)編譯:# make
(5)安裝:# make install
(6)測試:檢查服務是否安裝成功:正確應返回版本信息。
# /usr/local/nginx/sbin/nginx –v
(7)配置:修改.conf文件。
# netstat –an |grep 80
發現80端口已被佔用,須要修改下。
# cd /usr/local/nginx/conf
# vi nginx.conf
(8) 測試配置:
#/usr/src/nginx/sbin/nginx -c /usr/src/nginx-push-stream-module-0.5.1/misc/nginx.conf -t
若出現錯誤:[emerg] invaild event type "poll" in...../misc/nginx.conf:19 .......test failed時,將push-stream-module/misc目錄下的nginx.conf文件中的poll註釋掉,而後從新測試。
(9)啓動或重啓Nginx服務:
# /usr/local/nginx/sbin/nginx //啓動
# /usr/local/nginx/sbin/nginx -s reload //重啓
(10)打開瀏覽器,輸入nginx服務器的IP:8080,若返回以下"welcome to nginx!" 則表示安裝並運行成功.
3. 安裝JSON CPP:
jsonCPP有兩個系列的版本:
0.y.z:用於舊版本編譯器。
1.y.z:支持 C++11。
系統中gcc版本爲4.8.1,爲支持最新標準庫,此處安裝配置1.6.5版本。
(1)前提條件:
a. 安裝Python:略。
b. 安裝scons:
Scons是一個Python寫的自動化構建工具,相似於GNU make. 也可使用Cmake。
本次使用scons來編譯Json cpp。
# export MYSCONS=/usr/local/scons-2.4.1/ //scons解壓目錄
# export SCONS_LIB_DIR=/usr/local/scons-2.4.1/engine //scons目錄下的engine目錄.
(2)下載json源碼包:
https://github.com/open-source-parsers/jsoncpp/releases
(3)
解壓:
# tar –zxvf jasoncpp-1.6.5.tar.gz
(4)進入 jsoncpp解壓目錄,執行以下命令:
# python $MYSCONS/script/scons platform=linux-gcc
(5)將在以下目錄中生成兩個文件:
# /usr/local/jsoncpp-1.6.5/libs/linux-gcc-4.8.1
libjson_linux-gcc-4.8,1_libmt.a 和libjson_linux-gcc-4.8.1_libmt.so複製到項目目錄中便可。
4. 安裝Spawn-fcgi:
Spawn-fcgi是lighttpd的一部分。
(1)下載lighttpd:http://www.lighttpd.net/download/
# cd /usr/src/lighttpd-1.4.39
# ./configure
# sed -e 's/FOO/lighttpd/g' doc/initscripts/rc.lighttpd.redhat > /etc/init.d/lighttpd
(2)安裝Spawn-fcgi:
# cd /usr/src/spawn-fcgi-1.6.4/
# ./configure
安裝在/usr/local/bin/spawn-fcgi目錄下。
(3)測試:# spawn-fcgi –v
(4)複製spawn-fcgi 文件到/usr/local/nginx/sbin:
# cp spawn-fcgi /usr/local/nginx/sbin/
5. Fastcgi:
(1)下載:http://www.fastcgi.com/drupal/node/5/fcgi.tar.gz
(2)解壓:tar -zxvf fcgi.tar.gz
(3)配置:# cd /usr/src/fcgi/
# ./configure
(4)編譯:# make (5) 安裝:# make install
報錯解決方法:在源碼目錄下/include/fcgio.h文件中加上#include <cstdio> ,再從新編譯。
(4)安裝: # make install
(5)寫一個測試代碼,而後編譯測試生成fcgi程序:
# g++ -o test.cgi te.c -L /usr/local/lib/ -lfcgi
(6)啓動Spawn-fcgi: # spawn-fcgi -a 127.0.0.1 -p 7000 -u www -f
(7)修改配置nginx.conf文件:
添加以下內容:
location ~ \.cgi$
{
fastcgi_pass 127.0.0.1:7000;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
(8)重啓nginx服務:# /usr/local/nginx/sbin/nginx –s reload
6. 安裝libfcgi:
(1)下載:https://github.com/toshic/libfcgi
(2)解壓:# tar –zxvf libfcgi-2.4.0-8.3
(3)配置:# cd /usr/src/libfcgi-2.4.0-8.3
# ./configure
(4)編譯: # make
編譯錯誤解決:在/include/fcgio.h文件中加上 #include <cstdio>
(5)從新配置編譯: # ./configure # make
(5)安裝:# make install
7. Redis:
(1)下載:http://download.redis.io/releases/redis-3.0.6.tar.gz
(2)解壓:# tar –zxvf redis-3.0.6.tar.gz
(3)編譯:# make
# make test
(4)安裝: # make install
(5)運行:
# redis-server 或 src /redis-server //啓動服務端
# redis-cli //啓動客戶端
(6)warning解決:啓動服務後可能會有幾個warning。
Overcommit_memory用於設置內存分配測量。位置/proc/sys/vm/overcommit_memory
可選值:0、一、2 。
0:檢查是否有足夠可用內存給應用進程使用。如有,則容許內存申請;若沒有,內存申請失敗,並返回給應用。
1:容許分配全部物理內存,而無論當前內存狀態。
3:容許分配超過全部物理內存和swap總和的內存。
比較優化的內存分配策略應該設置爲 1(表示內核容許分配全部的物理內存,而無論當前的內存狀態如何。overcommit的策略經過vm.overcommit_memory設置.
解決方法: # echo 「vm.overcommit_memory=1」 > /etc/sysctl.conf
# reboot
解決方法:#echo 511 > /proc/sys/net/core/somaxconn
(7)重啓redis服務端。
(8)檢查是否啓動成功:
# ps –ef |grep redis
(9)修改配置文件(可選):# vi /usr/local/redis-3.0.6/redis.conf
a. 將slavof 部分的masterip 、masterport修改成redis 服務端的IP地址和端口號。
b. 修改redis後臺運行:默認daemonize 爲no,修改成daemonize yes
c. 端口號:默認端口號爲6379.
8. Hiredis:
(1)下載:https://github.com/redis/hiredis/releases
(2)解壓:# tar –zxvf hiredis-0.13.3.tar.gz
(3)編譯:# make
(4)安裝:# make install
將生成的.so文件複製到/usr/local/lib和/usr/local/include目錄。
(5)使用:代碼中include <hiredis/hiredis.h>,在編譯時選項加上 –lhiredis
9. 安裝Boost:
(1)下載源碼包:http://www.boost.org/users/download/
(2)解壓:# tar –zxvf boost_1_60_0.tar.gz
(3)編譯bjam:
# cd /usr/local/boost_1_60_0/
# ./bootstrap.sh
# ./b2
(4)安裝:#./b2 install
(5)更新動態連接庫:# ldconfig
(6)使用:代碼中要include<boost>頭文件
10. 安裝SCTPlib庫:
(1)安裝依賴包:llibffi
下載:https://www.sourceware.org/libffi/
(2)安裝依賴包:glib
# tar –xvf glib-2.47.tar
# cd /glib-2.47.4/
# ./ configure 或 # ./ configure --prefix=/usr
//指定安裝目錄到/usr下,庫文件就會放在/usr/lib中,sctplib就能夠找到glib。
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
(3)下載:sctplib-1.0.15: http://www.sctp.de/sctp-download.html
(4)解壓:# tar –zxvf stcplib-1.0.11
(5)配置:
# cd /usr/local/sctplib-1.0.11/
# ./ configure
(6)出錯:出現錯誤找不到GLIB庫。
配置glib環境變量:
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig //glib-2.0.pc的目錄
# export LD_LIBRARY_PATH=/usr/local/lib //glib-2.0目錄
(7)使用pkg-config --modversion glib-2.0 測試glib版本。
從新配置:#./ configure
(8)編譯:# make
(9)安裝:# make install
11. Asn1c:
(1)下載:http://lionet.info/asn1c/download.html
(2)解壓:# tar –zxvf asn1c-0.9.27.tar.gz
(3)配置,生成Makefile:
# cd /usr/local/asn1c-0.9.27/
# ./configure
(4)編譯:# make
(5)安裝:# make install
(6)測試:# asn1c -v