2018-12-08 19:41:42 coderK2014 阅读数 837

1、asp.net core控制台程序

static void Main(string[] args)
        {
            int times=10;
            while(times>=0)
            {
                Console.WriteLine("Hello World!");
                times--;
                Thread.Sleep(1000);
            }
        }

2、发布

发布前,修改test2.csproj文件(项目名称为test2)

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>    
    <RuntimeIdentifier>centos.7-x64</RuntimeIdentifier> 
  </PropertyGroup>

</Project>

 

主要添加 <RuntimeIdentifier>centos.7-x64</RuntimeIdentifier> 这句。

如果把centos.7-x64改为win10-x64,则发布为exe程序,运行在windows上。

会发布在test2\bin\Debug\netcoreapp2.1\centos.7-x64目录下,如下图:

把所有文件上传到linux服务器(我的linux上放代码目录为/var/wwwroot/netconsole)

切到publish下(即/var/wwwroot/netconsole/publish),输入命令“dotnet test2.dll”,如下图:

 

3、创建服务

新建自定义服务:vim /etc/systemd/system/mydotnetconsole.service,服务代码内容如下:

复制代码

[Unit]
Description=dotnet console demo running on linux

[Service]
WorkingDirectory=/var/wwwroot/netconsole
ExecStart=/usr/bin/dotnet /var/wwwroot/netconsole/test2.dll
Restart=always
RestartSec= 10
SyslogIdentifier=dotnet core console
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production 

[Install]
WantedBy=multi-user.target

复制代码

启动服务 systemctl start mydotnetconsole.service

查看 systemctl status netconsole -l     如下图:

 

2018-11-16 11:31:00 weixin_30408739 阅读数 142

Image result for linux .net core

运行环境

照例,先亮底

centos:7.2
cpu:1核 2G内存 1M带宽

辅助工具:xshell xftp

搭建.net core运行环境

.net core 的运行环境我单独写了一篇,请看我的这篇文章[linux(centos)搭建.net core 运行环境]

准备你的.net core web 程序

我这里新建一个空的.net core web程序用以演示,实际部署时是你的项目

创建web项目(我自己使用vs2017 ,如使用vscode的需要自己安装windows的SDK和使用dotnet命令)

1539874500349

首先确保你的项目能在windows上运行

1539874615825

ok,接下来发布

我发布到默认的 bin\Release\netcoreapp2.1\publish 下面,你们可以自定义目录

1539874647886

发布完成后可看到如下文件结构

1539874735884

ok,web程序已经准备好。

上传应用程序到linux

我这里使用xftp工具上传,上传目录是 /home/website/WebApplication3

1539875022573

启动web站点

去程序所在目录

cd /home/website/WebApplication3

启动站点

dotnet WebApplication3.dll

1539876880136

显示上示信息代表启动成功。现在打开 http://你的服务器ip:5000

看到运行正常的web页面(5000端口打不开请检查你的服务器防火墙,网络配置等);

配置守护进程(Supervisor)

从上面的运行结果来看,.net core 程序是以服务的方式前台运行(类似windows控制台),那么如果:

1、服务器突然死机重启了;

2、异常导致站点服务挂掉了;

3、运行的shell被运维人员或什么人不知道,关掉了;

等等原因,不管什么原因,服务异常关闭在生产环境都是不可接受的,那么我能不能有什么办法保证,我的服务时刻要处于运行状态,一旦挂掉,我立刻重启它呢?

有,这就是Supervisor干的事;

(其实还有其他的进程守护工具的,有机会我们再单独聊聊)

1、安装Supervisor

yum install python-setuptools
easy_install supervisor

2、配置Supervisor

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf

将supervisord.conf文件的最底下的,改成这样

1539917139050

[include]
files = conf.d/*.conf

如果需要启用UI管理的话也是修改这个文件
改这几句

;[inet_http_server]         ; inet (TCP) server disabled by default 
;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)  #监听
;username=user              ; (default is no username (open server)) #用户名
;password=123   #密码

*ps:如果服务已启动,修改配置文件可用“supervisorctl reload”命令来使其生效*

3、添加对WebApplication3.dll的守护

创建一个 WebApplication3.conf文件,内容如下:

;后面的中文是注释,为避免乱码等问题导致supervisor启动失败,可以先删掉注释再放到服务器

[program:WebApplication3]
command=dotnet WebApplication3.dll ; 运行程序的命令
directory=/home/wwwroot/WebApplication3/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/WebApplication3.err.log ; 错误日志文件
stdout_logfile=/var/log/WebApplication3.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT

将文件拷贝至:“/etc/supervisor/conf.d/WebApplication3.conf”下

运行supervisord,查看是否生效

supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep WebApplication3

可以看到,WebApplication3正在运行,那么对WebApplication3站点的进程守护配置完成,下面测试一下;

1539917767557

4、Supervisor配置开机启动

不言而喻,这个很重要了,守护进程是需要开机启动的;

cd /usr/lib/systemd/system/
vim supervisord.service

插入以下内容,保存:

# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[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 enable supervisord

查看是否已激活:

systemctl is-enabled supervisord

5、测试Supervisor对.net core 站点的守护

使用:reboot命令重启后即可,再次访问站点,你会惊喜的发现站点依旧在运行

[参考]

http://www.cnblogs.com/ants/p/5732337.html

至此,.net core 程序普通部署方式完毕,若使用docker方式部署,请看我的 Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署(已发布)

转载于:https://www.cnblogs.com/xiaxiaolu/p/9968351.html

2012-10-31 17:44:02 ituff 阅读数 37501

每次说到ASP.NET就会有人说,这是微软的,不开放的,要收钱的,不能在Linux下部署。当然,我想去反驳他,但是我想要指出的是ASP.NET是可以支持Linux,ASP.NET无法构建大规模的项目很大程度也是受限于Windows Server和IIS(其实ASP.NET完成了很多大项目,比如微软所有的网站、MySpace、京东、当当,这些都是访问量巨大的网站,有些都是排民全球前十的)。

好了,吐槽完,我们言归正传,考试讲解在Linux下部署ASP.NET项目。

一、环境介绍

首先,我们来了认识一下Linux下不是ASP.NET需要用到核心组件Jexus。

Jexus web server for linux 是一款基于.NET兼容环境,运行于Linux/unix操作系统之上,以支持ASP.NET为核心功能的高性能WEB服务器。 
Jexus V5.1有如下功能特点: 
01、支持ASP.NET。这是Jexus的核心功能。无论是稳定性、易用性还是并发承载能力、并行处理速度,Jexus对ASP.NET的支持都是非常优秀的; 
02、支持Fast-CGI。通Fast-CGI,Jexus能支持包括PHP在内的所有拥有Fast-CGI服务功能的WEB应用; 
03、具备基于正则表达式的强大的URL重写功能; 
04、具有强劲的反向代理功能。支持多目标负载均衡,支持本地网站与远程网站无缝整合; 
05、拥有强大的流媒体支持能力,支持FLV/F4V视频文件拖动播放,支持微软平滑流媒体技术; 
06、支持“服务器推送”技术,配备了相应的服务器端、客户端开发接口,是开发现代WEB应用的利器; 
07、具备可控的“ASP.NET前置缓存”,能最大限度地提高ASP.NET网站的承载能力和响应速度; 
08、支持Https,具有SSL加密数据安全传输能力; 
09、具有基础而实用的入侵检测功能,能自动终止已被识别的非法请求; 
10、安装部署非常简便,操作使用极为简单。

二、安装前的准备工作:

1、系统已经安装好mono 2.10.8 或更高版本,至于如何在linux上安装mono,请参考www.linuxdot.net上的相关文章。
2、请确认Linux系统中存在 libc.so.6、libdl.so.2两个库文件,如果需要启用https,系统中还需要具备libssl.so.x.x.x库文件,比如libssl.so.0.9.8,如果没有,请安装OpenSSH。


三、下载并解压Jexus安装包: 
1、下载:
地址:http://www.linuxdot.net/down/jexus-5.1.tar.gz,可以用wget下载,如:wget http://www.linuxdot.net/down/jexus-5.1.tar.gz

2、解压:
tar -zxvf jexus-5.1.tar.gz

3、安装:
Jexus安装非常简单,仅仅就是一个复制、粘帖和注册全局程序集的过程,但要特别注意:需要用root身份进行操作。
A、复制文件,建议把jexus安装到/usr/jexus中:
sudo cp -rf jexus-5.1 /usr/jexus
B、注册全局程序集:
cd /usr/jexus
sudo ./jws.regsvr
C、请查看 jws.start、jws.stop、jws.restart、jws.regsvr这几个脚本文件的权限,确定是否具有可执行权限。


四、运行测试 
    复制完Jexus的文件后,Jexus就可以正常工作了,甚至连进一步的配置也完全不需要。
    强调:如果你服务器安装有其它的WEB服务器,而且该服务正在运行,请停止它,以免造成端口冲突而造成Jexus无法启动。

    如果是最新安装,请首先建立一个默认的网站文件夹:/var/www/default,并在里面放一个首页文件,如index.htm或default.htm
    进入jexus工作文件夹,启动jexus,命令如下:
    cd /usr/jexus
    sudo ./jws.start
    启动后,请尝试访问一下这个网站,看看是否能看到你放的首页或者jexus的欢迎页,网址是:“http://服务器IP地址”或者“http://服务器IP地址/info”。


五、Jexus 系统配置 
Jexus按默认配置就能很好的工作,进一步配置是为了Jexus更适合自己的需要。
Jexus最核心的一个配置文件,固定文件名是jws.conf,这个文件与jexus的其它工作文件在同一个文件夹中。
jws.conf有如果基本配置内容:

SiteLogDir=log    #网站日志以及Jexus系统日志的存放位置,必填项。可以使用基于jws.exe文件的相对路径
SiteConfigDir=siteconf     #网站配置文件存放的位置,是必填项。可以使用绝对路径,也可以使用基于jws.conf文件的相对路径
Runtime=v4.0.30319    #设定Jexus工作进程运行于哪个.NET版本
httpd.processes=1     #工作进程的数量,建议每6-8核CPU用一个进程,最多可设4个进程
httpd.user=www-data     #工作进程以什么用户身份和对应权限工作,默认为root
php-fcgi.set=/usr/bin/php-cgi,6    #如果需要Jexus同时充当PHP FastCGI服务器,这一句就是fast-cgi设置,分两个部分,逗号前为php-cgi这个文件的路径,逗号后是php进程数
CertificateFile=/xxxx/xx.crt    #SSL证书路径(如果需要使用https协议才填)
CertificateKeyFile=/xxxx/xx.key    #SSL密钥文件路径(如果需要使用https协议才填)

注:jws.conf 中,SiteConfigDir 和 SiteLogDir 两项是必填项。


六、网站配置

Jexus支持多站点,可以用不同的端口、域名、虚拟路径设置任意多的网站,配置时,首先要注意如下三个规则:
1)必须把所有网站配置文件放到jws.conf指定的网站配置文件夹内,这个文件夹除了网站配置文件,不能有其它任何文件,因为jexus会认为这儿的任何一个文件都代表着一个不同的网站。
2)每个网站有且只有一个配置文件,配置文件的文件名就是这个网站的名称,比如 www.mysite.cn这个网站,配置文件名可以写成“mysite”,当然也可以写成其它文件名,以便管理员容易记忆和识别,但要特别注意:文件名不能有空格!
3)一个网站可以拥有任意多的域名,不同网站不能有相同的域名,没有域名的网站只能有一个,这个没有域名的网站叫做“默认网站”,而一台服务器最多只能有一个默认网站。


下面以www.mysite.cn为例,说说网站的配置
在网站配置文件夹中建立一个文件,这个文件的名称应该有一些意义(至少要能让服务器管理员了解这个配置文件是属于哪一个网站的)
设这个网站的配置文件的文件名为:mysite

sudo miv mysite

A、网站配置的基本内容:
port=80                          # jexus WEB服务器侦听端口(必填。当然可以是其它端口)
root=/ /var/www/mysite           # 网站URL根路径(虚拟目录)和对应的物理路径,两个路径字串之间必须用空格分开(必填。既使这个网站是一个纯粹的反向代理站,也得填)

#可选项
hosts=mysite.cn,www.mysite.cn    # 网站域名(建议填写),可以用泛域名,比如:*.mysite.cn(不填此项或只填一个“*”号表示这是默认网站,一个端口只能有一个默认站)
indexs=index.aspx,index.htm      # 首页文件名,可以写多个,用英文逗号分开(可以不填。因为JWS系统含有常用首页名)
aspnet_exts=mspx,ttt             # 添加新出现的或自定义的ASP.NET扩展名(不建议填。多个扩展名用英文逗号分开,不加点号。系统含有常用扩展名)


B、最简配置示例
port=80
root=/ /var/www/default

C、网站配置的高级选项
网站配置的高级选项全是可选项,应该根据网站的实际需要选填。
灵活使用高级选项,可以架设出一台与众不同的、功能强大的服务器平台或者服务器群组。

1、使用“URL重写”功能
URL重写是指WEB服务器将访问者的请求URL路径资源按指定的匹配规则解释和匹配为另外的一个真实RUL路径资源。

比如,希望别人访问“.php”类型的文件时,服务器返回 /404.html 这个文件:
rewrite=^/.+?\.(asp|php|cgi)$ /404.html
# 格式:
# “rewrite=”的后面是两部分阻成,两部分之间由一个空格分开。
  空格前是匹配的条件:用正则表达式描述URL的匹配条件。
  空格后是匹配的目标:指的是如果用户访问的路径合乎前面的匹配条件,服务器将以哪个规则回应。

又如:
把“/bbs”解析为“/bbs/index.aspx”,把“/bbs/file-1” 匹配为 “/bbs/show.aspx?id=1”:
rewrite=^/bbs$ /bbs/index.aspx
rewrite=^/bbs/file-([0-9]{1,6})$ /bbs/show.aspx?id=$1
格式解释:rewrite的等号后含有两部分内容,用空隔分开。前半部分是一个正则表达式,用于描述需要URL重写的(用户浏览器中的)url路径样式,后半部分是当用户的URL合乎前面的正则表达式时,JWS应该重写和访问的真实URL路径。

2、禁止某IP或IP段访问本网站
denyfrom=111.222.111.*
denyfrom=101.202.111.*
denyfrom=101.201.1.132

3、禁止访问某文件夹及其子文件夹中的内容
DenyDirs=网站文件夹路径的URL路径,如 “/abcfiles”或 “~/abcfiles”,多个路径,用英文逗号分开

4、是否对请求的URL等进行安全检测
本选项默认是true,即需要检查,除非你的确需要关掉这个选项,否则可以不填,格式如下:
checkquery=false
(关掉本项可以提高服务器速度,但就安全而言,不建议关掉它)

5、NOFILE(无文件)功能
nofile=/mvc/controller.aspx
(注:这是Jexus特有的功能,指的是如果服务器不存在用户要访问的文件,服务器将使用什么文件应答。)
(提示:路由后,原RUL路径会存贮在Jexus特有一个服务器变量“X-Real-Uri”中)
(技巧:用这个功能,或者再加上URL Rewrite功能,你完全可以把URL路径与真实路径隔离开来,达到信息隐藏和简化URL的作用。)

6、NOLOG(无日志)功能
nolog=yes
(注:禁用网站日志功能会提高WEB服务器系统的的处理速度,但不足也是明显的,就是你无法详细了解网站的访问情况了)

7、长连接开关
keep_alive=true
注:V5.1版默认值是true,即默认使用长连接,可以不填。

8、反向代理功能
reproxy= /abc/ http://www.xxxx.com:890/abc/
参数的值由本站RUL根路径和目标网站URL根路径两部分组成,之间用空隔分开。
*技巧:反向代量的目标地址可以有多个,用英文逗号分隔,如:
reproxy=/abc/ http://192.168.0.3/abc/,http://192.168.0.4/abc/
这时,当用户访问/abc/时,jexus就会随机选择一台服务器进行访问,达到负载均衡或服务器集群的效果。

9、接受FAST-CGI提供的服务
对于TCP连接:
fastcgi.add=需要fast-cgi处理的文件扩展名|tcp:fast-cgi服务的IP地址:端口
如:fastcgi.add=php,php3|tcp:127.0.0.1:9000
对于unix sockets:
fastcgi.add=需要fcgi处理的文件扩展名|socket:路径
如:fastcgi.add=php,php3|socket:/tmp/phpsvr

10、启用gzip压缩功能
usegzip=true    #即UseGzip
解释:启用这个功能后,当用户访问“.htm”“.js”等文件时,Jexus会将这些文件进行GZIP压缩后发送给用户浏览器,这样,可以节约更多的网络带宽。

11、启用HTTPS进行SSL安全传输
本功能是对服务器与客户之间的数据进行加密传送,提供数据的保密性。具体方法请访问www.linuxdot.net的专题讲解。


七、Jexus操作:

1、基本的启动命令的格式(仅作例子,不建议使用)
mono /usr/jexus/jws.exe
如:mono /usr/jexus/jws.exe
这个命令运行后,用 Ctrl+c 组合键退出程序

2、以“服务”方式进行后台运行, 只需要基本命令后加一空格再加一“&”号(仅作例子,不建议使用)
mono /usr/jexus/jws.exe &

3、开机自动启动:
在/etc/rc.local 或类试的开机启动脚本中加入下面这一行命令:
mono /usr/jexus/jws.exe >/dev/null 2>&1 &
或者
/usr/jexus/jws.start  #推荐方式


(注意:不同的Linux系统可能有不同的启动方式,用户应根据不同系统的特点灵活定制)
(提示:jws.start是脚本文件,用户可以根据自己系统的特点去适当修改它,以便其启动)

4、使用脚本操作Jexus(推荐使用):
Jexus自带了三个脚本,分别是:jws.start、jws.restart、jws.stop。

功能1,对Jexus服务器操作:
jws.start     #启动JEXUS服务,可以写入rc.local文件中,从而达到开机自启动的目的;
jws.stop      #停止Jexus的运行。
jws.restart   #重启Jexus;

功能2,对某个指定的网站操作:
jws.restart 网站名     #加载/启动/重启一个指定的网站
jws.stop 网站名        #停止一个指定的网站


注意,这些脚本需要具有可执行权限,同时操作者也必须拥有管理员(root)权限。


八、卸载: 
1、在rc.local文件中删除你手工添加的开机自动启动Jexus的命令行(如果本来就没有添加过,这步操作就不必做了)
2、删除jexus文件夹及全部内容(建议只删除*.exe和*.dll,其它的,比如网站配置文件等不必删除,以便将来重新启用)。


九、信息反馈与技术交流: 
网址:www.linuxdot.net


十、重要声明: 
Jexus V5.1 是免费软件,可以自由下载、传播和使用。但Jexus作者、发布者、维护者不对Jexus的用途、作用、效果、技术支持以及其它相关内容作任何明确或暗含的承诺,不负担任何直接或间接的责任。


2018-11-17 13:27:00 weixin_30394981 阅读数 145

Image result for linux .net core docker

运行环境

照例,先亮环境;软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境]

腾讯云

centos:7.2
cpu:1核 2G内存 1M带宽

docker:18.06.1-ce

安装docker

安装其实很简单,就不重复说了,请查看纯洁大神这篇文章

准备你的.net core web 程序

我这里新建一个空的.net core web程序用以演示,实际部署时是你的项目

创建web项目(我自己使用vs2017 ,如使用vscode的需要自己安装windows的SDK和使用dotnet命令)

1539874500349

首先确保你的项目能在windows上运行

1539874615825

修改一下运行绑定的的端口号

1539937202293

添加Dockerfile

填入如下内容

FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "WebApplication3.dll"]

1539939696571

并设置Dockerfile的属性

!1539939714933

ok,接下来发布

我发布到默认的 bin\Release\netcoreapp2.1\publish 下面,你们可以自定义目录

1539939750380

发布完成后可看到如下文件结构

1539939811233

ok,web程序已经准备好。

上传应用程序到linux

我这里使用xftp工具上传,上传目录是 /home/website/WebApplication3

1539939837522

构建镜像

执行:

cd /home/website/WebApplication3
docker build -t webapplication3 .

这里是去到Dockerfile所在的目录,构建一个名字叫做webapplication3的镜像,注意build命令后面的.不可获取,这个.代表的是当前构建镜像的上下文路径;

1539940162401

看到Successfully心情莫名愉悦,这说明镜像构建成功,我使用命令docker images 看看:

1539940240925

启动容器

执行下面命令,启动我们刚刚构建好的webapplication3 容器

docker run --name webapplication3 -d -p 5004:5004 webapplication3

这样表示容器正常启动了1539941046054

我们看看:

docker ps

1539941121568

容器正常运行,浏览器访问 http://你的服务器ip:5004

1539941363867

噢耶,大功告成!

至此,.net core 程序docker部署方式完毕,若使用服务方式部署,请看我的 Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署

转载于:https://www.cnblogs.com/xiaxiaolu/p/9973631.html

2015-03-19 15:45:39 yangzhenping 阅读数 2670

运行Asp.net应用程序在Linux上的3种托管方式

 

想要运行Asp.net应用程序在Linux上,我们有3种选择:


1.使用Apache作为Web服务器,使用mod_mono:http://www.mono-project.com/docs/web/mod_mono/
2.使用Nginx作为Web服务器,使用FastCGI托管:http://www.mono-project.com/docs/web/fastcgi/
3.使用XSP作为Web服务器,这是一个用C#写的轻量级简单的web server

 

线上用1和2选项,学习用3选项

 

具体怎么部署请看下面两篇文章:
http://www.mono-project.com/docs/web/aspnet/
http://www.codeproject.com/Articles/9738/Introduction-to-Mono-ASP-NET-with-XSP-and-Apache