實驗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都隨機啓動並保證服務因意外中斷也能自動重啓。