2020-11-26 ubuntu nodejs、npm串述、nginx执解、vsftpd安裝配置

接著昨天的進度,繼續(xù)梳理思路剖煌。運維工作對我而言是陌生領域材鹦,涉及太多的配置工作,除了按手冊進行配置耕姊,還要把每個配置的意義搞清楚桶唐,如果做不到了然于胸,運維就要冒很大風險茉兰,不知道哪里埋的坑將來會突然蹦出來尤泽,到時候就更難解決。所以每天梳理進度時规脸,發(fā)現(xiàn)如果按探明的路線來走坯约,也就幾分鐘的事情,但探索出這條路卻要走很多彎路莫鸭。

昨天已經(jīng)完成了django的uwsgi托管闹丐,今天是探索vue的nginx托管。這其中會涉及一些ubuntu的常用指令被因、全局變量配置卿拴、nginx服務器的配置衫仑、nodejs的安裝和配置、FTP服務器的安裝和配置堕花、nginx反向代理的實現(xiàn)文狱。

昨天安裝了nginx,今天重啟電腦后發(fā)現(xiàn)nginx已經(jīng)默認隨系統(tǒng)啟動缘挽,由于需要修改nginx的端口分配瞄崇,修改后重啟nginx才能生效,想到的最粗暴方式就是查看nginx當前占用的端口進程壕曼,sudo lsof -i:9999苏研,這個9999端口是我昨天配置的,查出來占用這個端口的進程PID窝稿,通過sudo kill -9 PID殺掉楣富。這里有兩個需要注意的地方,lsof查看端口進程時伴榔,由于nginx是隨系統(tǒng)啟動的守護進程纹蝴,需要在root權限下才可查看到,當前用戶權限是查不出結果的踪少。第二個需要記住的就是這個kill指令塘安,以后應該會常用。kill指令不加-9參數(shù)時援奢,默認是-15兼犯,屬于正常關閉,被通知關閉的進程會自行做一些善后處理集漾;但對于系統(tǒng)的后臺進程切黔、守護進程,這樣的柔性關閉是會被忽略的具篇,通過添加-9參數(shù)纬霞,可以強制關閉,被關閉的進程沒有善后余地驱显,類似于windows任務管理器中的結束進程诗芜。當然,除了這么粗暴的方式埃疫,肯定有更優(yōu)雅的方式伏恐。nigix程序接受以下四種常用參數(shù)。不附加任何參數(shù)栓霜,則是啟動服務器翠桦。

sudo nginx -s reload #重啟

sudo nginx -s stop #關停

sudo nginx -t #測試配置文件語法

sudo nginx -v #查看nginx版本號

安裝vue需要先安裝npm,安裝npm需要先安裝nodejs胳蛮,npm是nodejs的package manager秤掌,類似于ubuntu的apt愁铺、python的pip,這些都是好東西啊闻鉴。通過apt安裝的nodejs版本比較低,若想通過apt安裝高版本的nodejs茂洒,需要手工修改apt源孟岛,很劃不來的感覺。那就直接到nodejs的官網(wǎng)下載最新的LST版本督勺。為什么對nodejs版本有要求呢渠羞?因為10.0之前的版本都沒有自帶npm,安裝nodejs后還需要手工再安裝配置npm智哀,10.0之后的版本都自帶了npm次询。打開下載頁https://nodejs.org/en,網(wǎng)站自動檢測到我的操作系統(tǒng)型號瓷叫,直接推給我適合的程序包屯吊。下載解壓后,將文件夾移動到/usr/local/node目錄下摹菠,因為既要移動又要修改文件夾名盒卸,ubuntu的圖形化操作不如windows方便,那就用終端的mv指令吧次氨,在下載目錄中右擊打開終端蔽介,sudo mv nodejs14.x.x /usr/local/node,移動和改名一次性完成煮寡。接下來的問題是如何讓這個node可以被全局調用呢虹蓄?跟windows一樣,需要配置環(huán)境變量幸撕。我們只需要配置用戶環(huán)境變量就可以薇组,沒必要配置系統(tǒng)環(huán)境變量。用戶環(huán)境變量在~/.bashrc文件中杈帐,波浪線~表示用戶目錄体箕,相當于windows系統(tǒng)里的my document,在終端中輸入echo ~可以看到是/home/xx挑童。關于這個波浪線累铅,得補充一句,這個只是bash shell(也就是現(xiàn)在用的這個終端)簡寫用戶目錄的符號站叼,在其他配置文件中可不能使用娃兽,比如在nginx配置文件中,如果使用這個波浪線來指定網(wǎng)站目錄尽楔,nginx不能理解投储,這也是理所當然的第练,nginx發(fā)布的網(wǎng)站總不能因為登錄用戶的不同而改變網(wǎng)站目錄吧÷贶瘢回到配置環(huán)境變量娇掏,打開~/.bashrc,這是個只讀文件勋眯,需要動用root權限婴梧,那就在終端中sudo gedit ~/.bashrc,輸入密碼客蹋,以可編輯方式打開了塞蹭。在文末添加如下兩句:

export NODE=/usr/local/node

export PATH=$NODE/bin:$PATH

保存后,在終端中輸入source ~/.bashrc讶坯,加載修改后的環(huán)境變量番电。你可以在終端中輸入echo $PATH看一下輸出結果,是不是node的bin地址已經(jīng)被加載到環(huán)境變量中了辆琅。注意是大寫字母PATH漱办,大小寫敏感。其實我們打開/usr/local/node/bin目錄看一下涎跨,里面有node程序文件洼冻,還有指向npm的link,所以配置了這個bin目錄到環(huán)境變量隅很,就可以到處npm了撞牢,爽不爽?還不是很爽叔营,因為npm用的是境外源屋彪,跨海光纖加GFW(長城防火墻)速度很慢連接也不穩(wěn)定。那就換用國內的唄绒尊,國內的叫cnpm畜挥,npm此生唯一用途就是來裝一個自己的替代品npm install -g cnpm。怕慢婴谱,那就在后面再加個參數(shù)蟹但,--registry=https://registry.npm.taoboa.org,這個是淘寶源谭羔,速度如飛华糖。這里稍微展開一下npm的幾個參數(shù),-g是全局安裝的意思瘟裸,其不在具體項目的node_modules目錄中保存模塊客叉,模塊依賴關系也不寫入項目的package.json中的dependencies屬性中。當換成--save開關參數(shù)時,模塊會安裝在項目的node_modules目錄中兼搏,且會在dependencies中添加依賴關系卵慰,將來build項目時,會與項目一同打包發(fā)布佛呻。還有一種是--save-dev開關參數(shù)裳朋,因為有些依賴包僅僅在開發(fā)時會使用,比如gulp用于壓縮css吓著、js模塊再扭,正式部署時不需要,通過這個開關參數(shù)安裝的包會出現(xiàn)在項目的node_modules目錄中夜矗,但不會添加項目依賴項,在npm install -production時不會打包到發(fā)布文件中让虐。記住一個原則就很簡單紊撕,項目發(fā)布后要用的包,用--save赡突,僅項目開發(fā)過程中需要用的包对扶,用--save-dev,不是某個項目使用惭缰,而是全局調用的(如腳手架工具)浪南,那就-g。

有了cnpm漱受,一切就變得容易络凿。首先安裝vue的腳手架工具cnmp install -g vue-cli,為什么cnpm也能全局使用呢昂羡?好奇的你可以打開/usr/local/node/bin目錄看一下絮记,是不是cnpm的link赫然在列,驚不驚喜意不意外虐先。當然這個腳手架也需要全局使用怨愤,所以也是-g開關。安裝好了vue-cli蛹批,再到剛才那個目錄看一下撰洗,是不是又驚喜地發(fā)現(xiàn)指向vue的link也在安裝腳手架時自動創(chuàng)建好了,這意味著vue也可以全局調用了腐芍。誰說linux不人性化差导,越用越覺得體貼。在終端里大膽地輸入vue -V甸赃,可以看到vue的版本號了吧柿汛,不僅要大膽,V還要記得大寫。

切換到想要創(chuàng)建vue項目的目錄络断,終端里輸入vue init webpack vuetest裁替,vue腳手架工具幫我們自動創(chuàng)建了一個叫vuetest的初始項目目錄結構,cd進入vuetest貌笨,cnpm install弱判,安裝項目以來的模塊,這個helloword項目就可以測試運行锥惋。輸入npm run dev昌腰,通過瀏覽器訪問localhost:8080就可以看到vue的歡迎頁。如果想通過IP地址訪問膀跌,需要修改config/index.js文件中的host:"0.0.0.0"遭商,重新npm run dev,試試IP地址訪問捅伤。

unbunt中安裝免費的webstrom需要申請學生或者教師許可(其他方法我真的不懂)劫流,那就用微軟的vscode吧,配合vuter插件對vue開發(fā)也很友好丛忆。vscode在ubuntu的程序商店中就有祠汇,免費的,安裝也很快熄诡。安裝好后可很,打開剛才那個vuetest目錄,作為一個vscode項目凰浮,點擊左側Extension按鈕我抠,搜索Vuter,安裝這個插件导坟,vue的語法就能被vscode識別和智能補齊了屿良。當然,和webstrom一樣惫周,vscode也可以在底部調試窗口旁邊打開一個terminal終端尘惧,很多工作在這個終端中一樣完成,沒必要勞師動眾打開系統(tǒng)終端了递递。

vue能使用npm運行了喷橙,那怎么托管到nginx上呢?在vscode剛才介紹的那個terminal中登舞,輸入npm run build贰逾,npm就開始對vue項目進行打包發(fā)布,發(fā)布后的文件在dist文件夾中(這里用npm和cnpm是一樣的菠秒,因為不需要用網(wǎng)絡去下載模塊)疙剑。接下來只需要修改nginx配置文件氯迂,將這個dist目錄作為網(wǎng)站目錄即可。

nginx的配置文件在/etc/nginx/目錄下言缤,主配置文件叫nginx.conf嚼蚀,這個文件會加載sites-enabled目錄下的default配置文件。管理端口管挟、代理轉發(fā)轿曙、虛擬目錄等都是在這個default文件中配置。內容如下僻孝,其中有幾點一解釋就很清楚明了导帝。首先要理解一點,同一個端口穿铆,可以開多個server您单,通過域名來定向server。比如我申請了www.a.com荞雏,www.b.com睹限,www.c.com三個域名,都指向我服務器的IP:80端口讯檐,而不同的域名將會處理不同的業(yè)務,就可以通過配置文件中的server_name進行區(qū)分染服。但偏偏有人不通過域名别洪,而通過ip地址或者其他還未綁定業(yè)務的域名(域名指向了我的IP,但我還沒為這個域名配置server)柳刮,那所有這類訪問會被nginx泛解析挖垛,如果不配置default_server,則會用第一個server處理這類請求秉颗。當然痢毒,如果存在多個類似default這樣的配置文件時,運維可能也搞不清楚到底哪個server會被第一個加載蚕甥,這時就可以通過添加default_server這個參數(shù)來指定處理這類泛解析的請求哪替,

如下面第一個server,顯式指定了default_server菇怀。有人看到[::]:80這個可能會有疑問凭舶,這個是IPv6的表示而已。這第一個server配置的server_name為_爱沟,只是表示與業(yè)務域名無關的名字帅霜,隨便取一個,大家都用_那就用_呼伸,沒有什么神秘之處身冀。

第二個server,同樣監(jiān)聽80端口,但server_name就是IP地址了搂根,所以只有通過IP地址的方式訪問80端口珍促,才會打開配置在這個server上的網(wǎng)站(根目錄設置為vue剛才生成的dist目錄,這樣vue就發(fā)布到nginx上了)兄墅。location參數(shù)里寫了三個:try_files $uri $uri/=404踢星,這表示首先以文件形式處理請求,如果不存在這個文件隙咸,則以url的方式處理沐悦,如果url也解析不到,那就返回404頁面五督。

第三個server就是昨天日志里所說的多做的一半無用功藏否,用nginx代理轉發(fā)8080端口的請求到uwsgi所在的8888端口。其實配置vue的ajax跨域代理轉發(fā)跟這個方法類似充包,都是在location中添加映射副签,只不過是對vue所在server下的某個alias進行端口映射,具體以后再說基矮。補充一點淆储,如果這里開啟了這個代理轉發(fā),那uwsgi配置文件中就不能用http監(jiān)聽家浇,而應該改為socket監(jiān)聽本砰,否則瀏覽器訪問8080端口時會出現(xiàn)gateway錯誤。

今天最后還配置了ubuntu的vsftpd钢悲,方便與windows下的開發(fā)環(huán)境同步項目点额。跨過下面這段配置文件再看莺琳。

server{

listen 80 default_server;?

listen [::]:80 default_server;

server_name _;

return 403;

}

server{

listen 80;

server_name 192.168.31.111;

root /home/wu/VSCodeProjects/vuetest/dist;

index index.html;

location / {

try_files $uri $uri/ =404;

}

}

server{

listen 8080;

server_name 127.0.0.1;

charset UTF-8;

access_log /var/log/nginx/django_access.log;

error_log /var/log/nginx/django_error.log;

client_max_body_size 75M;

location / {

include uwsgi_params;

uwsgi_pass 127.0.0.1:8888;

uwsgi_read_timeout 2;

}

location /static {

expires 30d;

autoindex on;

add_header Cache-Control private;

alias /home/wu/PycharmProjects/testweb/static;

}

}

linux下的ftp服務器軟件vsftpd算比較常見还棱,此外還有proftpd+gadmin-proftpd的組合套件,可以圖形化的配置ftp惭等,但這么小的一個東西珍手,沒必要搞組合套件,直接vsftpd吧辞做。

sudo apt install vsftpd珠十,安裝好后打開它的配置文件,又要摸索一番配置方法凭豪。配置文件在/etc/vsftpd.config中焙蹭。是不是經(jīng)常看到etc這個目錄嫂伞,etc就是英文其他的縮寫孔厉,Unix時代本來是用來存放一些雜七雜八的其他的東西拯钻,現(xiàn)在發(fā)展為存放各種配置文件。因為這個ftp是給開發(fā)使用撰豺,不需要配置匿名用戶粪般,也不需要配置其他用戶,直接用可以登錄ubuntu系統(tǒng)的本地用戶就可以污桦。所以在配置文件第一行就將匿名用戶關閉亩歹。其他都有詳細注釋,一看就懂凡橱,唯一是加粗傾斜的三個參數(shù)需要解釋一下:allow_writeable_chroot小作、chroot_list_enable、chroot_list_file稼钩。

allow_writeabl_chroot=YES時顾稀,將用戶在ftp登錄時的根路徑鎖定到用戶在ubuntu中的~目錄(還記得波浪線~的意思不,回第一段復習)坝撑。這樣可以避免ftp能操作到ubuntu系統(tǒng)的root目錄静秆。后面兩個參數(shù)時配合這個參數(shù)一起使用的,chroot_list_enable表示是否有例外的用戶巡李,比如ubuntu有好幾個用戶抚笔,其中有一個超級用戶需要通過ftp訪問到~目錄以上的目錄,那就可以給他配置一個例外侨拦,將chroot_list_enable=YES塔沃,nginx就會加載chroot_list_file指定的文件,這個文件中寫上這個超級用戶的用戶名就可以了阳谍。如果chroot_list_enable=YES開啟后,chroot_list_file指定的文件并不存在螃概,那nginx會在啟動時就報錯無法啟動矫夯。既然是例外,那聰明的小伙伴可能已經(jīng)想到吊洼,如果allow_writeabl_chroot=NO训貌,即不把用戶限制到~目錄,所有用戶都能通過ftp訪問到~以上的所有目錄冒窍,那這個例外是不是又指其他意思了递沪。對的,其實就是一個取反的作用综液,所有人都有權限時款慨,可以通過這個chroot_list_enable=YES,加載chroot_list_file谬莹,這個file中指定的用戶就只能訪問~以下的目錄檩奠。細品就能理解了桩了。

anonymous_enable=NO????#接受匿名用戶

local_enable=YES????????????#接受本地用戶

write_enable=YES

local_umask=022????????????#本地用戶上傳文件的umask(umask是文件權限,022是最高權限)

xferlog_enable=YES????????#使用上傳/下載日志,日志文件默認為/var/log/vsftpd.log,可以通過xferlog_file選項修改

xferlog_std_format=YES????#日志使用標準xferlog格式

ftpd_banner=Welcome to my FTP.????#login時的歡迎信息

#local_root=/home/wu????????#本地用戶login后所在目錄,若沒有設置此項,則本地用戶login后將在他的home目錄中

chroot_local_user=YES????????#用戶被限制home目錄

allow_writeable_chroot=YES????#vsftpd增強了安全檢查埠戳,用戶被限定在主目錄井誉,則默認主目錄不能具有寫權限.如果檢查發(fā)現(xiàn)還有寫權限,就會報錯誤,整胃。

chroot_list_enable=NO????#chroot_list_file生效,且存放限制home目錄訪問的用戶(為空會報錯)

#chroot_list_file=/etc/vsftpd/chroot_list????#若設置為YES則記錄在userlist_file選項指定文件(默認是/etc/vsftpd.user_list)中的用戶將無法login,并且將檢察下面的userlist_deny選項

listen=YES????#服務器以standalong模式運行,這樣可以進行下面的控制

local_max_rate=512000????#本地用戶的傳輸比率(b/s)

max_clients=100????#可接受的最大client數(shù)目

max_per_ip=10????#每個ip的最大client數(shù)目

connect_from_port_20=YES

tcp_wrappers=YES

pam_service_name=vsftpd

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末颗圣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屁使,更是在濱河造成了極大的恐慌在岂,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屋灌,死亡現(xiàn)場離奇詭異洁段,居然都是意外死亡,警方通過查閱死者的電腦和手機共郭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門祠丝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人除嘹,你說我怎么就攤上這事写半。” “怎么了尉咕?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵叠蝇,是天一觀的道長。 經(jīng)常有香客問我年缎,道長悔捶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任单芜,我火速辦了婚禮蜕该,結果婚禮上,老公的妹妹穿的比我還像新娘洲鸠。我一直安慰自己堂淡,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布扒腕。 她就那樣靜靜地躺著绢淀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘾腰。 梳的紋絲不亂的頭發(fā)上皆的,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音蹋盆,去河邊找鬼祭务。 笑死内狗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的义锥。 我是一名探鬼主播柳沙,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拌倍!你這毒婦竟也來了赂鲤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤柱恤,失蹤者是張志新(化名)和其女友劉穎数初,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梗顺,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泡孩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寺谤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仑鸥。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖变屁,靈堂內的尸體忽然破棺而出眼俊,到底是詐尸還是另有隱情,我是刑警寧澤粟关,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布疮胖,位于F島的核電站,受9級特大地震影響闷板,放射性物質發(fā)生泄漏澎灸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一遮晚、第九天 我趴在偏房一處隱蔽的房頂上張望性昭。 院中可真熱鬧,春花似錦鹏漆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鞠抑,卻和暖如春饭聚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搁拙。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工秒梳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留法绵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓酪碘,卻偏偏與公主長得像朋譬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兴垦,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容