使用到的軟件和硬件html
1. centos7.3服務器一臺python
2. xshell、xftplinux
3. vs2017nginx
4. .NET Coregit
1. 安裝 libicu 依賴github
[root@jdu4e00u53f7 ~]# yum install libunwind libicushell
2.下載.NET Core2.0json
https://www.microsoft.com/net/download/linuxsegmentfault
下載對應操做系統的Runtime版本windows
使用xftp5將下載的文件上傳到opt目錄下
[root@jdu4e00u53f7 opt]# mkdir -p /opt/dotnet && tar zxf dotnet-runtime-2.0.0-linux-x64.tar.gz -C /opt/dotnet
3.建立鏈接(環境配置)
[root@jdu4e00u53f7 dotnet]# ln -s /opt/dotnet/dotnet /usr/local/bin
4.測試環境是否成功
[root@jdu4e00u53f7 dotnet]# dotnet --info
2、3、4也可參考官網給的操做,安裝sdk版也能夠。
https://www.microsoft.com/net/download/linux
5.項目發佈
.net core項目在不制定具體端口的狀況下,會默認使用5000端口
Program.cs添加.UseUrls("http://*:80")
使用xftp將發佈程序上傳到服務器
[root@jdu4e00u53f7 aspnetcoreapp]# dotnet aspnetcoreapp.dll
至此,就是下圖的原理。
若是隻是測試服務器上是否能跑起來程序,到此結束了。若是要正式線上運行還須要下面的操做。Nginx不識別http://*:80這樣的設置。
使用nginx+ supervisor後的原理。Nginx也可使用jexus(開發者:宇內流雲)
6.安裝守護進程
所在目錄(/etc/supervisor/conf.d)
[root@jdu4e00u53f7 aspnetcoreapp]# yum install python-setuptools
[root@jdu4e00u53f7 aspnetcoreapp]# easy_install supervisor
#配置supervisor
[root@jdu4e00u53f7 aspnetcoreapp]# mkdir /etc/supervisor
[root@jdu4e00u53f7 aspnetcoreapp]# echo_supervisord_conf > /etc/supervisor/supervisord.conf
[root@jdu4e00u53f7 aspnetcoreapp]# cd /etc/supervisor
[root@jdu4e00u53f7 supervisor]# ls
supervisord.conf
#修改配置文件
[root@jdu4e00u53f7 supervisor]# vi supervisord.conf
#將文件最後的內容修改成
建立目錄conf.d,在目錄下建立文件aspnetcoreapp.conf,編輯vi aspnetcoreapp.conf
[program:aspnetcoreapp]
command=dotnet aspnetcoreapp.dll
directory=/var/www/html/aspnetcoreapp
autostart=true
autorestart=true
stderr_logfile=/var/log/aspnetcoreapp.err.log
stdout_logfile=/var/log/aspnetcoreapp.out.log
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
運行supervisord並查看進程是否生效
[root@jdu4e00u53f7 conf.d]# supervisord -c /etc/supervisor/supervisord.conf
[root@jdu4e00u53f7 conf.d]# ps -ef | grep aspnetcoreapp
重啓supervisord
[root@jdu4e00u53f7 conf.d]# supervisorctl reload
關閉
[root@jdu4e00u53f7 bin]# supervisorctl shutdown
Shut down
開啓
[root@jdu4e00u53f7 bin]# supervisord -c /etc/supervisor/supervisord.conf
禁用開機啓動命令:systemctl disable supervisord
查看是否開機自啓動:systemctl is-enabled supervisord
開啓管理界面
[root@jdu4e00u53f7 supervisor]# vi /etc/supervisor/supervisord.conf
7.安裝nginx
http://dl.fedoraproject.org/pub/epel/
下載
[root@jdu4e00u53f7 opt]# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
安裝epel
[root@jdu4e00u53f7 opt]# rpm -ivh epel-release-7-10.noarch.rpm
安裝nginx
[root@jdu4e00u53f7 opt]# yum install nginx
啓動nginx
[root@jdu4e00u53f7 opt]# systemctl start nginx
將nginx添加至SELinux的白名單,不然會報502錯誤
[root@jdu4e00u53f7 opt]# yum install policycoreutils-python
semodule -i mynginx.pp
測試nginx是否正常
curl http://127.0.0.1
因爲京東雲上面已經安裝了nginx,上面的步驟也就沒執行。
8.配置nginx
修改配置文件/etc/nginx/nginx.conf中server部分爲如下內容,配置Nginx偵聽以前的網站
nginx -s reload :修改配置後從新加載生效
nginx -s stop :快速中止nginx
小知識
防火牆設置
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含義:
--zone #做用域
--add-port=80/tcp #添加端口,格式爲:端口/通信協議
--permanent #永久生效,沒有此參數重啓後失效
重啓防火牆
firewall-cmd –reload
經過systemctl status firewalld查看firewalld狀態,發現當前是dead狀態,即防火牆未開啓。
經過systemctl start firewalld開啓防火牆,沒有任何提示即開啓成功。
再次經過systemctl status firewalld查看firewalld狀態,顯示running即已開啓了。
若是要關閉防火牆設置,可能經過systemctl stop firewalld這條指令來關閉該功能。
再次執行執行firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示success,表示設置成功,這樣就能夠繼續後面的設置了。
參考資料:
1. UseUrls的使用
https://q.cnblogs.com/q/80263/
2. 官方下載安裝說明
https://www.microsoft.com/net/download/linux
3. kestrel介紹
http://www.cnblogs.com/Wddpct/p/6123653.html
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
4. self-contained(自宿主)部署方式,不推薦
http://www.cnblogs.com/dudu/p/5638172.html
https://docs.microsoft.com/zh-cn/dotnet/core/deploying/index
https://docs.microsoft.com/zh-cn/dotnet/core/deploying/deploy-with-vs
https://github.com/dotnet/corefx/blob/master/pkg/Microsoft.NETCore.Platforms/runtime.json
5.asp.net core遷移博客
http://www.cnblogs.com/mantgh/p/5658398.html
6.asp.net core發佈到linux上
http://www.cnblogs.com/smileberry/p/6878421.html
7.另外一篇部署
http://www.cnblogs.com/ants/p/5732337.html
8.asp.net core啓動流程
http://www.cnblogs.com/sheng-jie/p/7640163.html
9.仍是一篇部署
http://www.javashuo.com/article/p-wixhffzg-bs.html
http://www.cnblogs.com/yuangang/p/5787122.html
10.守護進程
http://www.cnblogs.com/savorboard/p/dotnetcore-supervisor.html
11..NET文檔
https://docs.microsoft.com/zh-cn/dotnet/
https://www.microsoft.com/net/core#windowscmd
總結
1. 在Program.cs裏設置.UseUrls("http://*:8080"),發佈後使用dotnet XXXX.dll後,不使用ctrl+C退出則能夠公網訪問。可是,一旦退出(關閉遠程鏈接)則沒法訪問,須要使用守護進程+nginx,Program.cs則要設置.UseUrls("http://127.0.0.1:8080")。
Jexus
1.安裝
curl https://jexus.org/release/x64/install.sh|sh
2.開啓與關閉
[root@jdu4e00u53f7 jexus-5.8.2]# cd /usr/jexus
[root@jdu4e00u53f7 jexus]# ./jws start
Starting ... OK
[root@jdu4e00u53f7 jexus]# ./jws stop
Stopping ... ... OK.
2.配置
先關閉nginx、Supervisor
[root@jdu4e00u53f7 siteconf]# pkill -9 nginx
[root@jdu4e00u53f7 siteconf]# supervisorctl shutdown
[root@jdu4e00u53f7 siteconf]# vi default
port=80
root=/ /var/www/html/aspnetcoreapp
hosts=* #OR your.com,*.your.com
# addr=0.0.0.0
# CheckQuery=false
NoLog=trueAppHost={CmdLine=dotnet /var/www/html/aspnetcoreapp/aspnetcoreapp.dll;AppRoot=/var/www/html/aspnetcoreapp;Port=8080}
# NoFile=/index.aspx
Keep_Alive=false
UseGZIP=false
OutLog=/tmp/out.txt;
ErrorLog=/tmp/err.txt;
[root@jdu4e00u53f7 siteconf]# cd ..
[root@jdu4e00u53f7 jexus]# ./jws start
2.設置自啓動
Jexus包括以下操做命令(首先 cd /usr/jexus):
啓動:sudo ./jws start
中止:sudo ./jws stop
重啓:sudo ./jws restart
如何部署多個網站?(jexus的版本必須是5.8.2及以上)
1.去除Program.cs裏的UseUrls
2. siteconf下新建每一個網站的配置文件,一個網站一個配置文件
3.配置裏Port設置爲0
我這邊配置了2個網站core.uoolo.com和netcore.uoolo.com 2個站點
參考:
http://blog.csdn.net/u010584641/article/details/73611223
http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html