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

實驗demo現在需要發佈到生產環境,發現在發佈的時候要考慮到不一致的幾個地方。

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

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

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

appsettings.json

開發:appsettings.Development.json

線上:appsettings.Production.json

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

project.json add

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章