实验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服务为随开机启动。

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都随机启动并保证服务因意外中断也能自动重启。

.Net Core Linux centos7行—发布程序到生产环境的更多相关文章

  1. .Net Core Linux centos7行—vscode开发,linux部署运行

    前面搭建好啦linux运行环境,下面搭建windows下的开发环境.并完成调试 参考地址:https://www.microsoft.com/net/core#windows. 按照步骤来就好.安装. ...

  2. .Net Core Linux centos7行—hyper-v安装linux系统和.net core sdk

    下载linux系统,选择安装centos7 下载地址:https://www.centos.org/download/ 安装centos7 hyper-v选择新建虚拟机 根据向导一路next,虚拟机代 ...

  3. .Net Core Linux centos7行—IOC模块

    .net core中可以说是用了全新的IOC模板,定义在Microsoft.Extensions.DependencyInjection下.提供了一套标准的接口.并提供了默认实现.并且大范围使用着,处 ...

  4. .Net Core Linux centos7行—.net core json 配置文件

    .net core 对配置系统做出了大幅度更新,不在局限于之前的*.xml配置方式.现在支持json,xml,ini,in memory,环境变量等等.毫无疑问的是,现在的json配置文件是.net ...

  5. .Net Core Linux centos7行—jenkins linux 构建.net core web app

    1.安装jdk.jenkins 是一个java web程序.所以必然需要jdk. yum install java 或者 yum install java-1.8.0-openjdk 2.下载jenk ...

  6. .Net Core Linux centos7行—安装nginx,运行静态网站

    使用编译安装方式安装nginx Nginx下载地址:http://nginx.org/en/download.html.下载Stable version(稳定版就好).当前稳定版:http://ngi ...

  7. 极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布

    感谢Linux Story的投递 Tiny Core Linux 是一个极度简约但是也高度可扩展的 GNU/Linux 发行版,其之精简甚至可以小到只有 10MB 大小,昨天 5月23日刚刚发布的 T ...

  8. Centos7 HyperLedger Fabric 1.4 生产环境部署

    Kafka生产环境部署案例采用三个排序(orderer)服务.四个kafka.三个zookeeper和四个节点(peer)组成,共准备八台服务器,每台服务器对应的服务如下所示: kafka案例网络拓扑 ...

  9. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

随机推荐

  1. 在Application_Error事件中获取当前的Action和Control

    ASP.NET MVC程序处理异常时,方法有很多,网上也有列举了6种,下面是使用全局处理在Global.asax文件的Application_Error事件中实现.既然是ASP.NET MVC,我需要 ...

  2. svn 提交代码报错

    svn 提交代码报错 最近新安装了TortoiseSvn 1.92,在上传代码,其中有新增加的文件,出现如下错误: 解决方法: 1.用vs生成patch文件 2.生成的patch文件中讲nonexis ...

  3. 《c# 从入门经典》 (第6版) - 变量和表达式

    1,程序就是对一系列数据的操作:数据最终是存储在内存中的0和1数据流:我们在桌面上的任何操作都会改变内存中的数据. 2,变量存储在计算机中占用着一定的内存空间 bit: 位,计算机的最小存储单位,存储 ...

  4. GJM : Unity3D HIAR -【 快速入门 】 五、导出 Android 工程、应用

    导出 Android 工程.应用 在开始之前,请务必先保存您的工程,同时确认您已经安装 Android SDK 和 JDK.安装操作请参考以下链接: 搭建开发环境 Step 1. 设置 Android ...

  5. 使用 jQuery Ajax 在页面滚动时从服务器加载数据

    简介 文本将演示怎么在滚动滚动条时从服务器端下载数据.用AJAX技术从服务器端加载数据有助于改善任何web应用的性能表现,因为在打开页面时,只有一屏的数据从服务器端加载了,需要更多的数据时,可以随着用 ...

  6. Dynamics CRM 之ADFS 使用 SQL Server 的联合服务器场

    此拓扑用于 Active Directory 联合身份验证服务 (AD FS) 不同于使用 Windows 内部数据库 (WID) 部署拓扑,因为不会将数据复制到每台联合服务器场中的联合身份验证服务器 ...

  7. Undefined symbols for architecture arm64:

    1. 没有往项目中导入静态库(.a 文件)需要的 framework. 2.拖到项目中的静态库不支持arm64(或其他)指令集  这种情况没遇到过 一般都是第一种情况.

  8. 后记:IT软件人员学习的书籍 - IT软件人员书籍系列文章

    1年了,软件人员学习书籍系列总算是写完了.虽然文字篇幅不多,主要对各个角色的一些基本内容做了介绍,但是更重要的是能够提供相关的人员学习书籍进行下载,让更多的人能够从中学习到更多的知识. 这个系列,从项 ...

  9. 重写ValidateEntity虚方法实现可控的上下文验证和自定义验证

    上篇文章介绍了ValidationAttribute和IValidatableObject.Validate验证,但是这种验证还是稍微简单了,对于复杂的实体,例如:继承过来的实体.实现某接口的实体等等 ...

  10. 0040 Java学习笔记-多线程-线程run()方法中的异常

    run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...