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

> 需要注意的地方是:PIDFile=/nginxInstall/sbin/logs/nginx.pid 和 nginx.conf 中的 pid /nginxInstall/sbin/logs/nginx.pid 一定要一致

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏布尔

用c#添加Networkservice对文件夹的写权限

      一般的bs程序都会涉及到上传文件,这就要求network service用户有对文件夹的写权限,通常情况下我们都是用打包时调用打包程序的脚本去设置权...

42160
来自专栏玄魂工作室

kali linux Python 黑客编程1 开发环境

初始化 为什么要选择Python? Python作为目前Linux系统下最流行的编程语言之一,对于安全工作者的作用可以和C++相提并论。Python提供了丰富的...

82260
来自专栏公众号_薛勤的博客

IDEA搭建本地服务器解决无法连接https://start.spring.io

75530
来自专栏猿天地

Spring Cloud Ribbon 重试机制

前言 在集群环境中,多个节点来提供服务,难免会有某个节点故障 用Nginx做负载均衡的时候,如果你的应用是无状态的,是可以滚动发布的,也就是一台台去重启应用 这...

42860
来自专栏乐沙弥的世界

Linux 文件目录特殊权限设定(SUID,SGID,SBIT)

Linux文件及目录的权限设定,除了我们孰知的读写执行(rwx)之外,还有一些特殊的权限设定用来满足特定的目录。这些特殊权限的设定主要是SUID,SGID以及S...

16920
来自专栏nice_每一天

理解 IntelliJ IDEA 的项目配置和Web部署

IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行。最近公司正好也是用之前自己比较熟悉的IDEA...

67320
来自专栏蓝天

ZooKeeper-3.4.6分布式安装指南

介绍ZooKeeper-3.4.6版本的分布式安装,力求细致,提供精确的安装指导。本文的安装环境是64位的SuSE 10.1 Linux,也适用于ZooKe...

18310
来自专栏黑泽君的专栏

安装最新版本的Oracle公司的虚拟机软件 VirtualBox + 安装虚拟机 Windows XP 系统 + 安装 Oracle 11g 软件 + 出现 ERROR: ORA-12541: TNS

  VirtualBox的下载链接:https://www.virtualbox.org/wiki/Downloads

29710
来自专栏pangguoming

kafka 主要内容介绍

根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能:

15050
来自专栏算法修养

把Asp.Net Core 2.0部署在Linux上,使用Nginx代理服务器,并且用Systemctl命令以服务的方式监听项目

在Linux上部署.net core 2.0程序: 第一步:配置Nginx代理 在/etc/nginx/sites-available/default 中添加 ...

42860

扫码关注云+社区

领取腾讯云代金券