使用到的软件和硬件

1.       centos7.3服务器一台

2.       xshell、xftp

3.       vs2017

4.       .NET Core

 

1. 安装 libicu 依赖

[root@jdu4e00u53f7 ~]# yum install libunwind libicu

2.下载.NET Core2.0

https://www.microsoft.com/net/download/linux

下载对应操作系统的Runtime版本

使用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.还是一篇部署

https://segmentfault.com/a/1190000010763523

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

https://www.jexus.org/

http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html

使用到的软件和硬件

1.       centos7.3服务器一台

2.       xshell、xftp

3.       vs2017

4.       .NET Core

 

1. 安装 libicu 依赖

[root@jdu4e00u53f7 ~]# yum install libunwind libicu

2.下载.NET Core2.0

https://www.microsoft.com/net/download/linux

下载对应操作系统的Runtime版本

使用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.还是一篇部署

https://segmentfault.com/a/1190000010763523

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

https://www.jexus.org/

http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html

asp.net core2.0网站的环境搭建和网站部署的更多相关文章

  1. VS2017创建一个 ASP.NET Core2.0 应用,并搭建 MVC 框架

    https://testerhome.com/topics/11747 1.使用最新版本的VS2017,并安装.NET Core2.0中相关开发工具   2.打开VS2017,点击文件-新建-项目,选 ...

  2. 【翻译】asp.net core2.0中的token认证

    原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...

  3. 在阿里云Windows Server 上部署ASP .NET CORE2.0项目

    近期使用ASP.NET Core2.0对博客进行了重写,在部署到服务器时遇到了一些问题,来记录一下留用. 配置环境 安装 .Net Framework3.5 在IIS管理器上直接开启,这里总是失败,上 ...

  4. asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)

    原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 -- ...

  5. 将asp.net core2.0项目部署在IIS上运行

    原文:将asp.net core2.0项目部署在IIS上运行 前言:  与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是独立运行的.它独立运行在控 ...

  6. 一步一步带你做WebApi迁移ASP.NET Core2.0

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

  7. 通过Mysql连接ASP.Net Core2.0(Code First模式)

    ASP.NET Core2.0连接Mysql,首先新建项目 选择Web应用程序 选择需要身份验证: 通过Nuget安装Mysql驱动,这里推荐>Pomelo.EntityFrameworkCor ...

  8. WebApi迁移ASP.NET Core2.0

    WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0   随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...

  9. .Net Core技术研究-WebApi迁移ASP.NET Core2.0

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

随机推荐

  1. Git与码云(Git@OSC)入门-如何在实验室和宿舍同步你的代码(2)

    4. 处理冲突 4.1 向远程仓库push时无法提交成功,提示在push前应该先pull 如图所示: 有可能是因为远程仓库的版本与本地仓库的版本不一致,所以应先git pull将远程仓库的内容合并到本 ...

  2. Java:参数数量可变的方法

    许多Java新人在看到下面的这段代码的时候,都会问一个问题:dealArray方法里那三个小点点是什么啊? [java] view plaincopy public class TestVarArgu ...

  3. python实例编写(5)--异常处理,截图,用例设计

    一.python的异常处理 异常抛出处理机制: 1.若在运行时发生异常,解释器会查找相应的处理语句(handler) 2.若在当前函数无法找到,就将异常传给上层的调用函数,看是否能处理 3.如果在最外 ...

  4. 关于maven项目的一些报错问题

    本文为自己记录的笔记略显粗糙后续会把遇到的问题追加进来.忘大神多指点 1.父工程红色感叹号 此类问题解决方法,一般打开pom文件查看红色标记处是否有报错,也就是看哪个jar包没有下下来.分为两种情况. ...

  5. Akka(26): Stream:异常处理-Exception handling

    akka-stream是基于Actor模式的,所以也继承了Actor模式的“坚韧性(resilient)”特点,在任何异常情况下都有某种整体统一的异常处理策略和具体实施方式.在akka-stream的 ...

  6. CKEditor与dotnetcore实现图片上传

    CKEditor的使用 1.引入js库 <script src="https://cdn.ckeditor.com/4.6.1/standard-all/ckeditor.js&quo ...

  7. ACM学习之路__HDU 1045

    Fire Net Description : Suppose that we have a square city with straight streets. A map of a city is ...

  8. ngRepeat track by

    刚刚看见一篇文章讲述track by的功能的,大致记录如下: 1. ng-repeat="friend in friends" 一般不使用track by的情况下,每次刷新DOM, ...

  9. 第4章 同步控制 Synchronization ----Interlocked Variables

    同步机制的最简单类型是使用 interlocked 函数,对着标准的 32 位变量进行操作.这些函数并没有提供"等待"机能,它们只是保证对某个特定变量的存取操作是"一个一 ...

  10. Kafka快速上手(2017.9官方翻译)

    为了帮助国人更好了解.上手kafka,特意翻译.修改了个文档.官方Wiki : http://kafka.apache.org/quickstart 快速开始 本教程假定您正在开始新鲜,并且没有现有的 ...