搭建一個適合架構(gòu)師使用的開發(fā)與實現(xiàn)環(huán)境平臺Linux珊肃。同一種語言不同版本有著巨大的變化俐末,代碼存在大量的不兼容,甚至連程序設(shè)計思路都發(fā)生了改變宫仗。所以需要一個全能的開發(fā)/部署和運維環(huán)境贮庞,應(yīng)該輕便示惊,節(jié)省性能急迂,方便管理等
一臺服務(wù)器同時支持多種不同的Web服務(wù)匿值,比如 php, nodejs, ruby on rails, tomcat 同時在一臺服務(wù)器上垄琐,外部訪問80端口時边酒,利用nginx的反向代理實現(xiàn)多個web服務(wù)共享80端口
讓nginx在80端口啟動,完成后再讓其他服務(wù)器在別的端口啟動(先測試一下各個服務(wù)在不同端口工作是否正常)狸窘;
為各個服務(wù)創(chuàng)建虛擬主機墩朦,不同服務(wù)分別綁定不同域名;
在nginx的配置中增加虛擬主機配置翻擒,方便管理氓涣,每個虛擬主機的配置最好是能有一個獨立的文件存放;
虛擬主機反向代理配置:
server { listen 80; server_name test.ydma.cn; location /{ proxy_set_header X-Real_IP $remote_addr; //把http請求頭部信息做相應(yīng)的改寫 proxy_set_header X-Forward-For; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_pass http://127.0.0.1:9001; } }
Ubuntu 文件放到/etc/nginx/sites-available中 陋气,然后通過n -s做一個軟連接放到sites-enabled文件夾中劳吠。(由于nginx.conf配置文件中有定義2行配置)
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/;
server_name test.ydma.cn;
listen 80;
location設(shè)置為proxy_pass http://127.0.0.1:9001
也就是把訪問test.ydma.cn的請求教給127.0.0.1的9001端口處理
把這文件復(fù)制幾份,只需改寫server_name以及proxy_pass后的端口號巩趁,就可以把多個服務(wù)同時共用80端口跑起來痒玩。這樣服務(wù)與服務(wù)間可通過http協(xié)議做Web service調(diào)用了。
各種工具和軟件,通常會有依賴蠢古,比如hadoop 2.x 需要依賴Java jdk7, 而另一個軟件需要Java的函數(shù)式編程燃观, 需要jdk8,
通常做法是同時安裝不同版本到不同路徑下便瑟,如:/opt/java/jdk/1.7.x 安裝Java7, /opt/javajdk/1.8.x 安裝Java8,然后修改Linux配置用戶級別的環(huán)境變量JAVA_HOME(環(huán)境變量寫在文件 ~./bashrc 或者 ~/.bash_profile中番川,然后再修改系統(tǒng)的PATH到涂,指向JAVA_HOME下的bin目錄即可)
同一運行環(huán)境下可能需要多個版本同時支持,如:python颁督,我們?yōu)榱耸褂矛F(xiàn)在社區(qū)中一些新的python工具践啄,必須把python升級到3.x版本,但操作系統(tǒng)中有些操作也需要python沉御,比如當前ubuntu中用的是2.7屿讽,如果我們升級了python,系統(tǒng)的有些功能會無法正常使用吠裆。Ruby也有同樣問題伐谈,可能同時使用3種以上的版本。解決方法如下:
第一種:
需要把語言的各個版本統(tǒng)一管理(所有版本下載并集中存放)试疙;
建立該語言環(huán)境目錄加入到PATH中诵棵,為語言環(huán)境以及Bing中的命令建立替身;所鍵入的命令以及執(zhí)行的腳本都指向替身而不是命令本身祝旷,比如正常情況下如果敲python命令履澳,系統(tǒng)會去path中查找python文件,然后執(zhí)行怀跛,由于通過path找到的python是替身而不是命令本身距贷,我們可以利用替身幫我們做一些事情,我們可以指明某個文件夾必須使用某個版本的python吻谋,這樣替身接到命令調(diào)用時就會先判斷忠蝗,這個文件夾是否有指明版本,如果有指定滨溉,就再去調(diào)用指定版本的python去執(zhí)行命令什湘,當然如果沒有指定文件夾,那么python就判斷晦攒,當前登陸的用戶有沒有指定python版本闽撤,如果沒有指定就再判斷,有沒有指定默認全局python版本脯颜,這樣一來哟旗,我可以精確的去控制每一個文件夾,每一個用戶,以及整個操作系統(tǒng)應(yīng)該是用的python版本闸餐;
用以上原理同樣適合其他編程語言饱亮。當然也有開源項目來幫助我們做這樣的事情,最早管理環(huán)境的是Ruby
第二種:
采用輕型解決方案rbenv舍沙,實現(xiàn)復(fù)雜的環(huán)境管理近上,通過rbenv改造pyenv來改造python,還有phpevn等..