.Net Core Linux centos7行—发布程序到生产环境
实验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行—发布程序到生产环境的更多相关文章
- .Net Core Linux centos7行—vscode开发,linux部署运行
前面搭建好啦linux运行环境,下面搭建windows下的开发环境.并完成调试 参考地址:https://www.microsoft.com/net/core#windows. 按照步骤来就好.安装. ...
- .Net Core Linux centos7行—hyper-v安装linux系统和.net core sdk
下载linux系统,选择安装centos7 下载地址:https://www.centos.org/download/ 安装centos7 hyper-v选择新建虚拟机 根据向导一路next,虚拟机代 ...
- .Net Core Linux centos7行—IOC模块
.net core中可以说是用了全新的IOC模板,定义在Microsoft.Extensions.DependencyInjection下.提供了一套标准的接口.并提供了默认实现.并且大范围使用着,处 ...
- .Net Core Linux centos7行—.net core json 配置文件
.net core 对配置系统做出了大幅度更新,不在局限于之前的*.xml配置方式.现在支持json,xml,ini,in memory,环境变量等等.毫无疑问的是,现在的json配置文件是.net ...
- .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 ...
- .Net Core Linux centos7行—安装nginx,运行静态网站
使用编译安装方式安装nginx Nginx下载地址:http://nginx.org/en/download.html.下载Stable version(稳定版就好).当前稳定版:http://ngi ...
- 极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布
感谢Linux Story的投递 Tiny Core Linux 是一个极度简约但是也高度可扩展的 GNU/Linux 发行版,其之精简甚至可以小到只有 10MB 大小,昨天 5月23日刚刚发布的 T ...
- Centos7 HyperLedger Fabric 1.4 生产环境部署
Kafka生产环境部署案例采用三个排序(orderer)服务.四个kafka.三个zookeeper和四个节点(peer)组成,共准备八台服务器,每台服务器对应的服务如下所示: kafka案例网络拓扑 ...
- linux iptables常用命令之配置生产环境iptables及优化
在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...
随机推荐
- IL初步了解
一.概述: 近来也是在看AOP方面的东西,了解到Emit可以实现.之前对Emit的了解也就是停留在Reflector针对方法反编译出来的部分指令.就用这次机会学习下Emit也用这篇随笔记录下学习的过程 ...
- [Asp.net 5] Caching-缓存架构与源码分析
首先奉献caching的开源地址[微软源码] 1.工程架构 为了提高程序效率,我们经常将一些不频繁修改,但是使用了还很大的数据进行缓存.尤其是互联网产品,缓存可以说是提升效率优化第一利器.微软为我们实 ...
- 【C#进阶系列】27 I/O限制的异步操作
上一章讲到了用线程池,任务,并行类的函数,PLINQ等各种方式进行基于线程池的计算限制异步操作. 而本章讲的是如何异步执行I/O限制操作,允许将任务交给硬件设备来处理,期间完全不占用线程和CPU资源. ...
- Java判断字符串是否是数值
判断一个字符串是否是数值,可以用正则表达式来判断.更简单的方法是把字符串转换成Float或者Double,然后捕捉NumberFormatException错误,如果有错误,就说明不是一个数值,如果没 ...
- CSS3 border-radius 圆角属性
使用 CSS3 border-radius 属性,你可以给任何元素制作 "圆角". 浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本号. -webkit- 或 -moz- ...
- JSONP实现
使用jsonp实现跨域获取数据. js部分(旧): (function(window, document) { 'use strict'; var jsonp = function(url, data ...
- React Native APP结构探索
APP结构探索 我在Github上找到了一个有登陆界面,能从网上获取新闻信息的开源APP,想来研究一下APP的结构. 附上原网址:我的第一个React Native App 具体来讲,就是研究一个复杂 ...
- js动态添加事件-事件委托
作者:白狼 出处:http://www.manks.top/javascript-dynamic-event.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- CAS Client集群环境的Session问题及解决方案
[原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源] 之前写过一篇文章,介绍单点登录的基本原理.这篇文章重点介绍开源单点登录系统CAS的登录和注销的实现方法.并结合实际工作中碰到的问题,探讨 ...
- MapReduce工作流多种实现方式
学习 hadoop,必不可少的就是编写 MapReduce 程序.当然,对于简单的分析程序,我们只需一个 MapReduce 任务就能搞定,然而对于比较复杂的分析程序,我们可能需要多个Job或者多个M ...