Abp aspnet-core專案部署到Centos7.2全流程攻略
前言
鑑於跨平臺趨勢潮流,小試一把微軟東家的跨平臺體驗。 期間坑多多,依次記錄,與君共勉。
流程簡單記錄
- 在官方aspnetboilerplate生成專案架構
- 還原專案並修改配置新增資料庫支援
- 本地生成並且打包成檔案
- linux系統選擇的Centos7.2測試,其他版本請相應修改,環境以及服務的搭建
- 打包檔案部署到伺服器並部署除錯
- 安裝supervisor守護程式守護專案
具體步驟
1 前期準備
1. 在官方下載專案模板
版本選擇ASPNET Core版本 至於前端展示取決於業務需求。反正我用的是前後端分離,所以這塊是用不到的。2. 下載的專案結構如圖所示
具體工程的功能請自尋解釋在此不再展開。 修改XXX.Migrator 和XXX.Web.Host下appsetings.json的連結字串,此處由於我用的是mysql資料庫。關於如何修改配置 請參考部落格園此篇文章。3. 檔案打包
vs2017換了新打包皮膚
選擇打包到資料夾位置指定。最終在/bin/debug/netcoreapp2.0/publish下會生成打包好的檔案。本地除錯dotnet xxx.Web.Host.dll
可以看到是成功的
至此打包準備工序完成。4. linux環境準備
- 安裝.Net Core SDK 2.0 首先安裝依賴包
yum install libunwind libicu
獲取dotnet-sdk最新版本
https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.0-download.md
wget https://download.microsoft.com/download/1/B/4/1B4DE605-8378-47A5-B01B-2C79D6C55519/dotnet-sdk-2.0.0-linux-x64.tar.gz
解壓到制定目錄
mkdir -p /usr/local/dotnet
tar zxf dotnet-sdk-2.0.0-linux-x64.tar.gz -C /usr/local/dotnet
新增連結檔案。
ln -s /usr/local/dotnet/dotnet /usr/local/bin
-
考慮到部署服務的情況 此處可以先將nginx安裝好.
下載對應當前系統版本的nginx包(package), 具體版本根據自己情況 nginx在此選擇
wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
建立nginx的yum倉庫
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
下載並安裝nginx
yum install nginx
啟動nginx服務
systemctl start nginx
service nginx start
可以通過命令whereis 或find查詢nginx的配置檔案 並加以修改
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#如果是多站點配置,需要啟用這個配置,然後在conf.d資料夾下,建立多個配置檔案即可。比如www.a.com.conf、www.b.com.conf
#include /etc/nginx/conf.d/*.conf;
server {
listen 80;
#root /usr/share/nginx/html;
#index index.html index.htm;
# Make site accessible from http://localhost/
server_name hwapp.netcore.cn;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
複製程式碼
5. 將打包好的檔案拷貝到伺服器指定目錄
可以使用WinScp.exe 和putty.exe 操作centos
6. 安裝supersivor守護程式
yum install supersivor
配置supervisor
在etc下建立目錄,並賦許可權
mkdir -m 700 -p /etc/supervisor
在目錄“ /etc/supervisor”下建立配置檔案
echo_supervisord_conf > /etc/supervisor/supervisord.conf
修改配置檔案
vim /etc/supervisor/supervisord.conf
在檔案末尾新增,注意首尾需無空格,需頂格
[include]
files=/etc/supervisor/conf.d/*.conf
複製程式碼
在目錄“/etc/supervisor”下建立dotnet core 程式配置檔案存放目錄“conf.d”
mkdir -m 700 /etc/supervisor/conf.d
建立程式配置檔案
vim /etc/supervisor/conf.d/MyDotNetName.conf
"MyDotNetName"可以為dotnet core 入口dll檔名字 ,插入內容,注意首尾需無空格,需頂格:
[program:MyDotNetName]
command=/bin/bash -c "dotnet MyDotNetName.dll"
directory=/usr/PublishOutput/
stderr_logfile=/var/log/MyDotNetName.error.log
stdout_logfile=/var/log/MyDotNetName.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
複製程式碼
[program:MyDotNetName] ;顯示名稱
command=/bin/bash -c "dotnet MyDotNetName.dll" ;執行命令,啟動dotnet程式
directory=/usr/PublishOutput/ ;MyDotNetName目錄
stderr_logfile=/var/log/MyDotNetName.error.log ;錯誤日誌檔案
stdout_logfile=/var/log/MyDotNetName.stdout.log ;日誌檔案
environment=ASPNETCORE_ENVIRONMENT=Production ;程式環境變數
user=root ;程式執行使用者
autostart=true;自動啟動
autorestart=true ;是否自動重啟
startsecs=3 ;自動重啟間隔時間
複製程式碼
建立supervisor 自啟動服務
vim /etc/systemd/system/supervisor.service
貼入配置
[Unit]
Description=supervisor
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
複製程式碼
使配置生效
systemctl daemon-reload
設定服務開機啟動,即設定enable
systemctl enable supervisor.service
啟動服務
systemctl start supervisor.service
驗證dotnet程式是否啟動
使用命令“ps -ef | grep dotnet”檢視dotnet 是否執行
[root@machine ~]# ps -ef | grep dotnet
root 2281 2280 0 15:27 ? 00:00:00 dotnet MyDotNetName.dll
root 2302 2217 0 15:30 pts/0 00:00:00 grep --color=auto dotnet
複製程式碼
最終可以通過http://ip 訪問到部署的服務