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

  • 相关阅读:
    关于webapi post 使用多个参数的间接用法
    Web Api 中Get 和 Post 请求的多种情况分析
    Juery On事件的 事件触发流程
    构建ASP.NET网站十大必备工具(1)
    了解 XSS 攻击原理
    c#访问Oracle问题及解决方法
    C#连接数据库的四种方法
    OracleClient卸载
    oracle的默认表空间
    oracle Service Name和SID的区别
  • 原文地址:https://www.cnblogs.com/calvinK/p/5628298.html
Copyright © 2020-2023  润新知