.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,

解压:[[email protected] opt]# tar -xzvf setuptools-23.1.0.tar.gz

编译:[[email protected] setuptools-23.1.0]# sudo python setup.py build

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

时间: 2024-10-14 20:19:58

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

.Net Core Linux centos7行—IOC模块

.net core中可以说是用了全新的IOC模板,定义在Microsoft.Extensions.DependencyInjection下.提供了一套标准的接口.并提供了默认实现.并且大范围使用着,处处都体现着IOC的设计思想. Startup的ConfigureServices方法中,集中对服务进行配置.可以看到默认的.net core mvc默认项目已经为我们注入了不少服务.看注释也就懂了,也没什么特别好解释的(^_^). 最后2行代码是自定义配置的注入.需要Microsoft.Extens

.Net Core Linux centos7行—centos7 pptp vpn connection to windows vpn server

介绍一下centos7 怎么新建vpn并连接到服务器. 本次实现的内容:linux pptp connection to windows vpn server. ? 首先自然是按照pptp拨号组件 yum install ppp pptp pptp-setup 向内核注册模块 modprobe ppp_mppe 新建一个vpn pptpsetup --create vpnname --server vpn服务器地址 --username uid --password pwd --encrypt

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

使用编译安装方式安装nginx Nginx下载地址:http://nginx.org/en/download.html.下载Stable version(稳定版就好).当前稳定版:http://nginx.org/download/nginx-1.10.1.tar.gz 可以下载完成之后,ftp上传到centos.或者使用wget命令下载.wget -p savepath downloadurl. 下载完成,解压.使用命令 tar -xzvf nginx-1.10.1.tar.gz 解压到指定目

手游公司运维之利用Rundeck自动化运维工具和Shell脚本构建测试环境代码发布平台和生产环境代码发布平台

在做手游运维工作之前,我接触的代码发布都是常规的软件发布,有固定的发布周期.之前工作的那个外企有严格的发布周期,一年中的所有发布计划都是由Release Manager来控制,每次发布之前都需要做一些准备工作,如填写发布表单,上传发布需要的资源文件,联系发布过程中的相关人员,如开发和测试.最后在公司内部开发的发布平台上按照指定的时间点击鼠标对一个集群内的几台主机或全部主机进行代码发布.这个发布平台还是基于rsync服务实现的.虽然每个星期都有各种服务的发布,但是整个发布流程是可以控制的,并且发布

最小 Linux 发行版 Tiny Core Linux 7.1 发布

Tiny Core Linux 是一个极度简约但是也高度可扩展的 GNU/Linux 发行版,其之精简甚至可以小到只有 10MB 大小.昨天 5月23日刚刚发布的 Tiny Core Linux 7.1 也仅仅只有区区 11.7 MB 大小而已,体积之小实在令人叹为观止,要知道普通的 Ubuntu 也好,Debian 也好, 动辄就是800MB-4700MB,一张光碟装不下是时常的事儿.今天我们将带你看看最小Linux发行版的神奇魅力! 然而麻雀虽小五脏俱全,“高大强”不代表武功盖世,“矮小瘦”

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

感谢Linux Story的投递 Tiny Core Linux 是一个极度简约但是也高度可扩展的 GNU/Linux 发行版,其之精简甚至可以小到只有 10MB 大小,昨天 5月23日刚刚发布的 Tiny Core Linux 7.1 也仅仅只有区区 11.7 MB 大小而已,体积之小实在令人叹为观止,要知道普通的 Ubuntu 也好,Debian 也好, 动辄就是800MB-4700MB,一张光碟装不下是时常的事儿. 然而麻雀虽小五脏俱全,“高大强”不代表武功盖世,“矮小瘦”不见得水平低劣.

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

在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 第一步:清空当前的所有规则和计数 iptables -F #清空所有的防火墙规则 iptables -X #删除用户自定义的空链 iptables -Z #清空计数 第二步:配置允许ssh端口连接 iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport

Linux命令行上程序执行的那一刹那!

转自:http://www.cppblog.com/cuijixin/archive/2008/03/14/44463.html by falcon<[email protected]>2008-02-15 (这一小节应该是作为<shell编程范例之进程操作>的一些补充性质的内容.) 当我们在Linux下的命令行输入一个命令之后,这背后发生了什么? 1.什么是命令行接口 用户使用计算机有两种常见的方式,一种是图形化的接口(GUI),另外一种则是命令行接口(CLI).对于图形化的接口

在linux centos7 上安装java运行时环境,

第一步,安装mysql, 一.检查系统是否安装老版本,有的话干掉 #yum list installed | grep mysqlmysql-libs.x86_64 5.1.73-5.el6_6 @anaconda-CentOS-201508042137.x86_64/6.7 #yum -y remove mysql-libs.x86_64 二.安装及配置 # wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm