.Net Core Linux centos7行—發佈程序到生產環境

實驗demo如今須要發佈到生產環境,發如今發佈的時候要考慮到不一致的幾個地方。 html

1.各種配置文件線下,線上不一致。python

2.綁定的url不一致,多是域名不一致,也多是schema不一致(http,https)linux

   

配置文件的不一致問題,可使用環境配置來解決。系統默認定義了3個:Development, Staging, Productionnginx

appsettings.jsonweb

開發:appsettings.Development.jsonjson

線上:appsettings.Production.jsonbootstrap

   

綁定url的問題在rc1還好解決。vim

project.json addcentos

"commands": { 服務器

"web": "Microsoft.AspNetCore.Server.Kestrel --server.urls http://unix:/var/aspnet/HelloMVC/kestrel.sock",

},

可是到rc2以後,這個也取消了。google了一圈,找到有2種解決方案。

其一:http://benfoster.io/blog/how-to-configure-kestrel-urls-in-aspnet-core-rc2

使用配置文件的方式,由於沒有環境參數因此很差兼容到線上線下環境。暫時不考慮

   

   

其二:https://www.billboga.com/posts/setting-host-uri-in-aspnet-core-rc2

使用啓動參數來設置。暫時考慮使用這個,考慮到假如線上分佈式部署,包括系統的安裝,腳本等都是統一管理。因此仍是可行的

   

   

發佈到linux線上環境:

運行環境。nginx反向代理由kestrel運行.net core程序

   

第一步:搭建網站,本地能正常運行:http://www.cnblogs.com/calvinK/p/5604577.html

修改Main入口,使咱們的程序綁定的url來自啓動參數

發佈到本地,而後上傳到linux服務器。進入服務器,cd 到上傳的目錄,

dotnet NetCoreWebApp.dll --server.urls="http://localhost:6000;http://localhost:6001"//已";"分割.能夠綁定多個 url。

啓動完成,使用 curl http://localhost:6000 測試是否能正常訪問。

   

第二步:配置nginx反向代理。nginx安裝:http://www.cnblogs.com/calvinK/p/5604036.html

修改配置nginx.conf

   

location / {

#設置主機頭和客戶端真實地址,以便服務器獲取客戶端真實IP

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#須要代理的地址。upstream 配置負責均衡

proxy_pass http://localhost:6000;

}

修改完成 使用nginx -t -c nginx.conf 驗證配置是否修改有誤問題,測試木有問題就能夠restart後,經過nginx代理訪問到咱們綁定在http://localhost:6000.net core demo程序啦。

   

   

固然,咱們的服務器存在重啓或者down掉等問題,不可能出了問題咱們手動重啓等

1.nginx 開機自動啓動。新建服務

# vim /usr/lib/systemd/system/nginx.service

[Unit]

Description=nginx - high performance web server

Documentation=http://nginx.org/en/docs/

After=network.target remote-fs.target nss-lookup.target

   

[Service]

Type=forking

PIDFile=/nginxInstall/sbin/logs/nginx.pid

ExecStartPre=/nginxInstall/sbin/nginx -t -c /nginxInstall/conf/nginx.conf

ExecStart=/nginxInstall/sbin/nginx -c /nginxInstall/conf/nginx.conf

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

   

[Install]

WantedBy=multi-user.target

編輯完成 使用命令 systemctl enable nginx.service 配置nginx服務爲隨開機啓動。

> 須要注意的地方是:PIDFile=/nginxInstall/sbin/logs/nginx.pid 和 nginx.conf 中的 pid /nginxInstall/sbin/logs/nginx.pid 必定要一致

2.配置web app的監控程序。使用官方推薦的 supervisor

2.1.第一步安裝 setuptools

# wget https://bootstrap.pypa.io/ez_setup.py -O - | python

若是提示木有python,那就安裝一個ypthon就好。視網絡狀況而定,多是漫長的下載等待。

固然也能夠下載安裝:https://pypi.python.org/pypi/setuptools

下載.gz壓縮包,上傳到centos,

解壓:[root@localhost opt]# tar -xzvf setuptools-23.1.0.tar.gz

編譯:[root@localhost setuptools-23.1.0]# sudo python setup.py build

安裝:[root@localhost setuptools-23.1.0]# sudo python setup.py install

能夠看到安裝到/usr/bin下面啦。固然咱們也可使用configure 指定安裝目錄。

若是按照在本身的指定目錄,可使用

# sudo ln -s [your install path] /bin/easy_install

建立一個軟鏈接,方便咱們使用。

2.2.安裝supervisor

# easy_install supervisor

配置supervisor: 參考:http://www.cnblogs.com/hamu/p/5587220.html

在/etc/supervisor目錄下新建配置文件supervisord.conf,固然在這些目錄下也是能夠的 default paths (/usr/etc/supervisord.conf, /usr/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf, /etc/supervisor/supervisord.conf);

#vim /etc/supervisor/supervisord.conf

supervisord配置文件寫入:

[supervisord]

logfile = /tmp/supervisord.log

logfile_maxbytes = 50MB 

logfile_backups=10 

loglevel = info 

pidfile = /tmp/supervisord.pid 

nodaemon = false 

minfds = 1024 

minprocs = 200 

umask = 022 

user = root 

identifier = supervisor 

directory = /tmp 

nocleanup = true 

childlogdir = /tmp 

strip_ansi = false

配置supervisor做爲服務運行

#vim /usr/lib/systemd/system/supervisord.service

[Unit] 

Description=Supervisor daemon 

   

[Service]

Type=forking

ExecStart=/usr/bin/supervisord

ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown

ExecReload=/usr/bin/supervisorctl $OPTIONS reload

KillMode=process

Restart=on-failure

RestartSec=42s [Install]

WantedBy=multi-user.target

增長監控

編輯咱們上面建立的supervisord.conf,加入

   

[program:NetCoreWebAppFirst]

#啓動命令

command=dotnet NetCoreWebApp.dll --server.urls=http://localhost:6000

#啓動前要cd到的位置

directory=/saleSystem/NetCoreWebApp/

#是否自動啓動

autorestart=true

#是否重定向程序的錯誤輸出到標準輸出

redirect_stderr=true

#延時啓動時間

startsecs=10

#啓動超時時間

stopwaitsecs=30

#日誌

stdout_logfile=/var/log/netcorewebapp/error.log

stdout_logfile_maxbytes=50MB

#是否隨supervisor一塊兒啓動

autostart=true

   

#管理頁面

[inet_http_server]

port=9100

username=mon

password=mon

   

配置完成後,stop,在start服務

訪問管理頁面就能看到

   

   

 固然不忘記讓咱們增長的服務自動開機啓動

systemctl enable nginx.servicve

systemctl enable supervisord.service

   

如此這樣,咱們作到了nginx和supervisord都隨機啓動並保證服務因意外中斷也能自動重啓。

相關文章
相關標籤/搜索