前言:
? ? 1992年的夏天,當(dāng)java語(yǔ)言面試(又名oka)新思,1996年1月窖梁,Sun公司發(fā)布了Java的第一個(gè)開(kāi)發(fā)工具包(JDK 1.0)在1995年時(shí),由Netscape公司的Brendan Eich夹囚,在網(wǎng)景導(dǎo)航者瀏覽器上首次設(shè)計(jì)實(shí)現(xiàn)而成纵刘。因?yàn)?a target="_blank" rel="nofollow">Netscape與Sun合作,Netscape管理層希望它外觀看起來(lái)像Java荸哟,因此取名為JavaScript假哎。但實(shí)際上它的語(yǔ)法風(fēng)格與Self及Scheme較為接近。?2009年5月nodejs問(wèn)世鞍历,由Ryan Dahl開(kāi)發(fā)舵抹,Node 是一個(gè)JavaScript 運(yùn)行在服務(wù)端的開(kāi)發(fā)平臺(tái),它讓 JavaScript 成為與PHP堰燎、Python掏父、Perl、Ruby?等服務(wù)端語(yǔ)言平起平坐的腳本語(yǔ)言秆剪。?實(shí)質(zhì)是對(duì)Chrome V8引擎進(jìn)行了封裝赊淑。距今nodejs已經(jīng)10歲了爵政,LTS版本目前最新已經(jīng)到10.15.3,最新版12.0.0陶缺。js語(yǔ)法在各個(gè)領(lǐng)域封裝都可以說(shuō)是當(dāng)之無(wú)愧的版本帝(react 到 16.8.6? vue到 2.6.10钾挟, angular到7.2.14),大神門玩的不亦樂(lè)乎饱岸,前端開(kāi)發(fā)玩的痛不欲生(16年為了用 angular 和 cto 還沒(méi)撕完就升到2掺出,一轉(zhuǎn)眼就升到4,17年為了用剛學(xué)會(huì)的vue對(duì)老板各種黑react苫费,18年被react玩的要死要活)汤锨,也許對(duì)大神們來(lái)說(shuō)向下兼容從來(lái)都只是存在評(píng)論區(qū)。當(dāng)然多次的迭代首先還是立足于js語(yǔ)法無(wú)處不在前提百框。js曾是被吐槽最多的語(yǔ)言闲礼,但現(xiàn)在他一直在變好。
動(dòng)手實(shí)踐:
首先我們需要一臺(tái)服務(wù)器铐维,現(xiàn)在云服務(wù)這么好柬泽,當(dāng)然還是找臺(tái)云服務(wù)器好啦,首選當(dāng)然是阿里云穩(wěn)定高效嫁蛇,但是我沒(méi)有(笑哭)感覺(jué)會(huì)被老板打死锨并,租了華為的機(jī)器,至于為啥當(dāng)然是因?yàn)槊赓M(fèi)啦睬棚,申請(qǐng)完賬號(hào)之后我們通過(guò)ssh登錄到服務(wù)器
? Janos git:(master) ? ssh root@114.116.104.94
root@114.116.104.94's password:
Last login: Fri Apr 26 19:01:54 2019 from 42.120.73.160
Welcome to Huawei Cloud Service
登錄操作系統(tǒng)之后我們第一步是干什么呢第煮,當(dāng)然是裝插件拉怎么看自己的需要的的插件有沒(méi)有裝呢,我個(gè)人喜歡用which命令
[root@ecs-b80b ~]# which nginx /usr/sbin/nginx [root@ecs-b80b ~]#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? which node /root/.nvm/versions/node/v12.0.0/bin/node
?[root@ecs-b80b ~]# which yum /usr/bin/yum [root@ecs-b80b ~]# which nvm? ? ? ? ? ? ? ?
/usr/bin/which: no nvm in(/root/.nvm/versions/node/v12.0.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [root@ecs-b80b ~]#
當(dāng)然這些是沒(méi)有的要自己裝 推薦先裝個(gè) yum 再裝個(gè) nvm抑党,前者可以下載現(xiàn)在的多數(shù)應(yīng)用包空盼,后者是主要是管理node應(yīng)用(誰(shuí)讓我們node更新快呢 ,yum上安裝node 只能到6.x版本)新荤,然后我們要做的就是一個(gè)應(yīng)用并把他發(fā)布到遠(yuǎn)端倉(cāng)庫(kù)揽趾,我用的github,主要是方便不過(guò)國(guó)內(nèi)自己的應(yīng)用還是托管到國(guó)內(nèi)的倉(cāng)庫(kù)(原因很簡(jiǎn)單不喜歡)苛骨,web框架 egg(原因就是因?yàn)槭欤┤缓蟀阉l(fā)布到git就好啦篱瞎!
目錄結(jié)構(gòu)
home
-------- admin
-----------------bin
----------------- start.sh stop.sh env.sh
[root@ecs-b80b admin]# cd bin
?[root@ecs-b80b bin]# ls
env.sh Janos logs ops package-lock.json start.sh stop.sh
在這里我們創(chuàng)建三個(gè)文件 start.sh stop.sh env.sh, 作用分別是啟動(dòng)應(yīng)用,停止應(yīng)用痒芝,以及設(shè)置環(huán)境變量
#!bash
#所有的啟動(dòng)腳本的環(huán)境變量
# env.shexport APP_NAME="Janos" export APP_PORT="7001"
export APP_DIR="$PWD/${APP_NAME}/"
export GIT_REPOSITORY="代碼倉(cāng)庫(kù)是你自己node應(yīng)用的倉(cāng)庫(kù)"
#!bash
#啟動(dòng)應(yīng)用
#start.sh??source ./env.sh
?echo "hello world"
?p = "${pwd}"check_app() {
? ?if [ -e "${APP_DIR}" ]; then
? ? ?echo "目錄已存在${APP_DIR}"
? else
? ? ?mkdir "${APP_NAME}"
? fi
}pull_app() {
? ? if [-e "${APP_DIR}package.json"]; then
? ? ? ?git pull "$GIT_REPOSITORY"
? ? ? ?print "git pull ${GIT_REPOSITORY}"
? ? else git clone "$GIT_REPOSITORY"
? ? fi
? ? ? ?cd "./${APP_NAME}"
? ? ? ?npm install
}start() {
? ?check_app
? ?pull_app
? ?npm run start
? ?cd "../"
}
?start
#|bash
kill_app() {
? ?pid=$(netstat -anp|grep ${APP_PORT}|awk '{printf $7}'|cut -d/ -f1)
? ?if [ $APP_PORT ] ; then
? ? ? if [ pid ] ; then
? ? ? ? ?kill "${pid}"
? ? ?else echo "沒(méi)有找到進(jìn)程"
? ? ?fi? ?else
? ? ?echo "沒(méi)有設(shè)置端口號(hào)"
? ?fi
}
kill_app
source start.sh
這幾端代碼我臨時(shí)寫的 其實(shí)如果為了跟安全的更健全的腳本其實(shí)還可以對(duì)依賴檢測(cè)安裝此時(shí)我們?nèi)匀徊荒芡ㄟ^(guò)外網(wǎng)來(lái)訪問(wèn)我們的應(yīng)用 雖然我們的應(yīng)用已經(jīng)啟動(dòng)
curl "localhost:7001"
這個(gè)時(shí)候就到了我們要配置我們ng的時(shí)候了俐筋,linux 應(yīng)用程序的配置文件一般都放在/etc 目錄下,ng也不例外,ng 配置有很多但我們要做的只有一件严衬,配置 server配置里的 location 配置澄者,server 默認(rèn)的配置監(jiān)聽(tīng)了 80端口 和 443 接口,
location / { proxy_pass http://127.0.0.1:7001/; }
nginx -s reload
此時(shí) 我們的應(yīng)用就可以通過(guò)外網(wǎng)訪問(wèn)了
window? 和 mac 更改的hosts 文件的目錄不稍有不同 mac系統(tǒng)和 linux 類型 雷同 在 /etc 目錄下 修改hosts,文件粱挡,window系統(tǒng)的 /etc 目錄在? 系統(tǒng)啟動(dòng)目錄:/window/System32/driver/etc
文末彩蛋:
? ?在學(xué)習(xí)啊shell編程的過(guò)程中一度被 if 中的條件判斷搞的略蒙 尤其是 -e -f 這種命令有所不同之后才明白這個(gè)這是 test 命令的簡(jiǎn)寫
test 模塊命令集
? ? ?-e 判斷對(duì)象是否存在
? ? -d 判斷對(duì)象是否存在赠幕,并且為目錄
? ? -f 判斷對(duì)象是否存在,并且為常規(guī)文件
? ? -L 判斷對(duì)象是否存在询筏,并且為符號(hào)鏈接
? ? -h 判斷對(duì)象是否存在榕堰,并且為軟鏈接
? ? -s 判斷對(duì)象是否存在,并且長(zhǎng)度不為0
? ? -r 判斷對(duì)象是否存在嫌套,并且可讀-w 判斷對(duì)象是否存在逆屡,并且可寫
? ? -x 判斷對(duì)象是否存在,并且可執(zhí)行
? ? -O 判斷對(duì)象是否存在踱讨,并且屬于當(dāng)前用戶
? ? -G 判斷對(duì)象是否存在魏蔗,并且屬于當(dāng)前用戶組
? ? -nt 判斷file1是否比f(wàn)ile2新? [?"/data/file1"-nt?"/data/file2"]-ot 判斷file1是否比f(wàn)ile2舊? [?"/data/file1"-ot?"/data/file2"]