Centos下使用ngxin+supervisor部署netcore服務(wù)

背景

小白菜最近在騰訊云購買了一臺云主機(jī)雏赦,配置是單核1G劫笙,后來我升級到了單核2G,起初系統(tǒng)使用的Windows Server 2012星岗,開機(jī)一看內(nèi)存填大,我去,500多M沒了俏橘,好吧允华,安裝個(gè)MySql,服務(wù)跑起來,我又去靴寂,Mysql吃了400多M磷蜀,這這這...可憐的配置容不起這個(gè)昂貴的開銷呀,果斷從裝系統(tǒng)百炬,這次擁抱了Centos褐隆,開機(jī)后舒服多了,90多M剖踊,安裝個(gè)Nginx跑restful先妓灌。

既然服務(wù)器選擇了Centos,后端的選擇有Nodejs蜜宪、java虫埂、php...等,當(dāng)然還有net-core圃验,于是乎小白菜也嘗嘗鮮掉伏,在Centos部署個(gè)net-core版本的restful Api玩玩。

環(huán)境準(zhǔn)備

1. 本地環(huán)境

本地依然使用Windows開發(fā)澳窑,環(huán)境清單如下

  • .NET Core 2.1 SDK
  • Visual Studio Code
  • 用于Visual Studio Code的C#

下面是下載地址:

https://www.microsoft.com/net/download/archives
https://code.visualstudio.com/download
https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp

安裝完成之后斧散,測試一下是否安裝成功

dotnet --info

2. 服務(wù)器環(huán)境

登錄我們的云主機(jī),如果沒有云主機(jī)摊聋,也可以在虛擬機(jī)中創(chuàng)建一臺Centos鸡捐,我使用的是putty進(jìn)行管理。

首先安裝rpm

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

再安裝.NET SDK

sudo yum update
sudo yum install dotnet-sdk-2.1

測試一下是否安裝成功

dotnet --info

輸出如下信息麻裁,可以看到版本號


2018-11-26_163953.jpg

接著我們在服務(wù)器做一個(gè)Hello World!的控制臺應(yīng)用

dotnet new console -o myApp
cd myApp
dotnet run

輸出了Hello World!

2018-11-26_164318.jpg

nginx安裝

Nginx (engine x)是C語言開發(fā)的一款輕量級的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器箍镜。

1.編譯ngixn依賴gcc環(huán)境,首先安裝編譯環(huán)境

yum install gcc-c++

2.ngxin需要pcre來解析正則表達(dá)式煎源,pcre-devel 是使用pcre開發(fā)的一個(gè)二次開發(fā)庫

yum install -y pcre pcre-devel

3.安裝zlib提供壓縮和解壓縮的方式色迂,nginx使用 zlibhttp 包的內(nèi)容進(jìn)行 gzip

yum install -y zlib zlib-devel

4.安裝OpenSSL,強(qiáng)大的安全套接字層密碼庫手销,囊括主要的密碼算法歇僧、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,nginx不僅支持 http 協(xié)議锋拖,還支持 https(即在ssl協(xié)議上傳輸http)诈悍,所以需要在 Centos 安裝 OpenSSL庫。

yum install -y openssl openssl-devel

5.下載nginx安裝包

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

6.解壓并進(jìn)入文件夾

tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1

7.配置兽埃,使用默認(rèn)配置

./configure

8.編譯安裝

make
make install

9.查看ngxin安裝路徑

whereis nginx

10.nginx的相關(guān)命令

#進(jìn)入安裝目錄的sbin文件夾
cd /usr/local/nginx/sbin/

./nginx #啟動(dòng)
./nginx -s stop  #停止
./nginx -s quit  #退出
./nginx -s reload  #重新加載侥钳,修改配置文件后

ngxin安裝完畢,啟動(dòng)ngxin后讲仰,瀏覽器輸入ip地址慕趴,可以看到如下畫面證明安裝成功!


2018-11-27_141123.jpg

本地編寫api代碼

首先進(jìn)入到你的工作空間鄙陡,創(chuàng)建空文件夾

mkdir dotnet-core-webapi-test
cd dotnet-core-webapi-test

創(chuàng)建一個(gè)webapi項(xiàng)目冕房,名字就叫TodoApi

dotnet new webapi -o TodoApi

如下圖,創(chuàng)建成功趁矾!


2018-11-26_162002.jpg

然后使用Visual Studio Code打開這個(gè)文件夾耙册,像介樣子

2018-11-26_162235.jpg

在根目錄添加host.json文件,用于配置api啟動(dòng)的端口毫捣,內(nèi)容如下:

{ "url": "http://*:5000" }

修改Program.cs文件详拙,加入配置的url

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            var config = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("host.json").Build();
            var url = config["url"];
            return WebHost.CreateDefaultBuilder(args).UseUrls(url).UseStartup<Startup>();
        }
    }

F5運(yùn)行調(diào)試

2018-11-26_170704.jpg

輸入地址http://localhost:5000/api/values在瀏覽器中查看,輸出了默認(rèn)的值蔓同,暫時(shí)不做任何修改饶辙,我們本篇的目的是把它部署到生產(chǎn)環(huán)境Centos上。

2018-11-27_165136.jpg

到目前為止斑粱,api項(xiàng)目已經(jīng)跑起來了弃揽,我們接下來編譯發(fā)布它。
在vscode中選擇 Terminal > New Terminal打開一個(gè)終端窗口则北,在底部矿微,默認(rèn)地址是我們的項(xiàng)目文件夾地址。

2018-11-26_171739.jpg

輸入dotnet publish發(fā)布該項(xiàng)目尚揣,發(fā)布到哪里去了涌矢,在bin\Debug\netcoreapp2.1\publish下面,就是需要部署到服務(wù)器的內(nèi)所有文件快骗。我們使用psftp將文件上傳到服務(wù)器的/home/wwwroot目錄下娜庇,命令如下

#使用密鑰登錄 ppk是密鑰文件
D:\putty\psftp -i D:\putty\opfree.ppk 
#輸入賬號和密鑰密碼,這里我使用root用戶登錄
login as: root
Passphrase for key "imported-openssh-key":
#使用put -r “本地目錄” “服務(wù)器目錄”命令方篮,將文件夾上傳到云主機(jī)上
put -r E:\WorkSpace.2018\dotnet-core-webapi-test\TodoApi\bin\Debug\netcoreapp2.1\publish /home/wwwroot

效果如下:

2018-11-27_144742.jpg

這時(shí)候思灌,文件已經(jīng)上傳至服務(wù)器,我們?nèi)シ?wù)器進(jìn)行部署恭取。

服務(wù)器部署

修改nginx配置文件

#找到nginx的配置文件泰偿,在根目錄搜索
cd /
find -name nginx.conf

如下圖:

2018-11-27_152044.jpg

打開該文件,進(jìn)行修改:

#編輯文件
vi /usr/local/nginx/conf/nginx.conf
#按i鍵進(jìn)入修改模式
#修改完畢按ESC退出蜈垮,按:進(jìn)入底行模式耗跛,輸入wq保存退出

修改內(nèi)容如下,使得80端口的默認(rèn)路徑指向本機(jī)的5000端口

2018-11-27_141744.jpg

保存成功后攒发,重啟nginx

cd /usr/local/nginx/sbin
./nginx -s quit  #退出
./nginx #啟動(dòng)

現(xiàn)在訪問http://45.40.193.247/api/values是會(huì)報(bào)錯(cuò)的调塌,因?yàn)?000端口沒有任何東西

2018-11-27_154256.jpg

啟動(dòng)webapi項(xiàng)目

dotnet /home/wwwroot/TodoApi.dll

此時(shí)再訪問http://45.40.193.247/api/values就得到了api返回值了。

2018-11-27_141459.jpg

在chorme中查看Headers信息惠猿,發(fā)現(xiàn)果然是nginx

2018-11-27_154821.jpg

進(jìn)程守護(hù)

如果我們此時(shí)羔砾,將dotnet /home/wwwroot/TodoApi.dll這個(gè)shell關(guān)掉的話,那么對應(yīng)的api服務(wù)也就關(guān)掉了,部署一個(gè)網(wǎng)站姜凄,總不能打shell吧政溃,所以我們需要它在后臺進(jìn)行運(yùn)行,并且在服務(wù)器掛機(jī)态秧、重啟之后可以自動(dòng)啟動(dòng)董虱。

ngxin開機(jī)啟動(dòng)

在rc.local增加啟動(dòng)代碼就可以了。

#編輯文件
vi /etc/rc.local
#最底部增加代碼
/usr/local/nginx/sbin/nginx
#設(shè)置執(zhí)行權(quán)限
chmod 755 /etc/rc.local
dotnet項(xiàng)目守護(hù)和開機(jī)啟動(dòng)

supervisor是用Python開發(fā)的一個(gè)client/server服務(wù),是Linux/Unix系統(tǒng)下的一個(gè)進(jìn)程管理工具申鱼,我們使用supervisor來守護(hù)我們的todoapi

1.安裝

yum install python-setuptools
easy_install supervisor

2.配置

#在etc下創(chuàng)建目錄supervisor
mkdir /etc/supervisor
#在supervisor下創(chuàng)建目錄conf.d
mkdir /etc/supervisor/conf.d
#拷貝配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
#指定配置文件
supervisord -c /etc/supervisor/supervisord.conf
#打開配置文件編輯
vi /etc/supervisor/supervisord.conf愤诱、
#將最后兩行修改為
[include]
files=./conf.d/*.conf
#進(jìn)入目錄 /ect/supervisor/conf.d
cd /ect/supervisor/conf.d
#創(chuàng)建文件 todoapi.conf
vi todoapi.conf
#輸入以下內(nèi)容
[program:todoapi]
command=dotnet TodoApi.dll #要執(zhí)行的命令
directory=/home/wwwroot #命令執(zhí)行的目錄
environment=ASPNETCORE__ENVIRONMENT=Production #環(huán)境變量
user=root #進(jìn)程執(zhí)行的用戶身份
stopsignal=INT
autostart=true #是否自動(dòng)啟動(dòng)
autorestart=true #是否自動(dòng)重啟
startsecs=1 #自動(dòng)重啟間隔
stderr_logfile=/var/log/common.err.log #標(biāo)準(zhǔn)錯(cuò)誤日志
stdout_logfile=/var/log/common.out.log #標(biāo)準(zhǔn)輸出日志
#保存后重新加載配置
supervisorctl shutdown
supervisord -c /etc/supervisor/supervisord.conf
#Supervisor的常用命令
supervisorctl shutdown #關(guān)閉所有任務(wù)
supervisorctl stop|start program_name #啟動(dòng)任務(wù)
supervisorctl status #查看所有任務(wù)狀態(tài)
ps -ef | grep common #查看進(jìn)程信息

退出shell,重啟計(jì)算機(jī)捐友,依然可以正常訪問地址“http://45.40.193.247/api/values”淫半。

至此,我們將netcore版本的api已經(jīng)部署到了云主機(jī)上匣砖。小伙伴可能會(huì)問撮慨,為什么不使用5000端口直接訪問呢,因?yàn)樵浦鳈C(jī)為了安全期間脆粥,是會(huì)屏蔽一些端口的砌溺,比如web只開放了80、43变隔,linux ssh登錄的22等少量端口规伐,大多數(shù)時(shí)候,一個(gè)服務(wù)器是不可能只有一個(gè)站點(diǎn)的匣缘,所以在最頂層使用nginx進(jìn)行一個(gè)代理猖闪,后續(xù)隨著域名的備案完成,ngxin屆時(shí)需要更多的配置肌厨,我們會(huì)在這臺服務(wù)器使用mysql培慌、nginx域名與二級域名的配置、靜態(tài)資源使用cdn(可能會(huì)牽扯到七牛之類的云服務(wù))當(dāng)然必不可少是一個(gè)前端的管理界面(使用vue進(jìn)行構(gòu)建)柑爸。


小白菜 - 程序猿
塵埃深處吵护,清醒自持

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市表鳍,隨后出現(xiàn)的幾起案子馅而,更是在濱河造成了極大的恐慌,老刑警劉巖譬圣,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓮恭,死亡現(xiàn)場離奇詭異,居然都是意外死亡厘熟,警方通過查閱死者的電腦和手機(jī)屯蹦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門维哈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人登澜,你說我怎么就攤上這事阔挠。” “怎么了帖渠?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竭宰。 經(jīng)常有香客問我空郊,道長,這世上最難降的妖魔是什么切揭? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任狞甚,我火速辦了婚禮,結(jié)果婚禮上廓旬,老公的妹妹穿的比我還像新娘哼审。我一直安慰自己,他們只是感情好孕豹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布涩盾。 她就那樣靜靜地躺著,像睡著了一般励背。 火紅的嫁衣襯著肌膚如雪春霍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天叶眉,我揣著相機(jī)與錄音址儒,去河邊找鬼。 笑死衅疙,一個(gè)胖子當(dāng)著我的面吹牛莲趣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饱溢,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼喧伞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绩郎?” 一聲冷哼從身側(cè)響起絮识,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗽上,沒想到半個(gè)月后次舌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兽愤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年彼念,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挪圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逐沙,死狀恐怖哲思,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吩案,我是刑警寧澤棚赔,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站徘郭,受9級特大地震影響靠益,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜残揉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一胧后、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抱环,春花似錦壳快、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梯啤,卻和暖如春凛驮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背条辟。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工黔夭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羽嫡。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓本姥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杭棵。 傳聞我的和親對象是個(gè)殘疾皇子婚惫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)魂爪,斷路器先舷,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評論 2 89
  • 有一些城市 只因你曾經(jīng)在哪里留下些許的記憶 它會(huì)一直依依停駐在你的血脈里 像紅血球一樣 為你輸送一點(diǎn)浪漫的氧氣 你...
    南歌子吟閱讀 349評論 2 4
  • 我們的目標(biāo)是讓記錄筆記成為一種文化蒋川,無論是用哪種形式,用鍵盤敲打出來也好撩笆,用速錄機(jī)打出來也好捺球,用訊飛輸入法語音轉(zhuǎn)文...
    麥風(fēng)玄閱讀 116評論 0 1