zoukankan      html  css  js  c++  java
  • .net core2.0+nginx+Ubuntu14.04【一个小白的初次尝试】

      新的业务来了,需要使用linux环境部署web服务,作为一个C#的懒惰程序员,就这么上了车【狗脸】,废话不多说,跟我一样的小白请看,大神请绕路。

      站点暂时没有使用Docker部署,为什么呢,因为我还没搞清楚哇,摊手~

       


     

    目标  

      VS2017+Core2.0+bootstrap+vue+ubuntu14.04+nginx半天完成一个新网站的搭建和部署。

    GO

       首先下载VS2017,安装的时候,注意请务必勾选如下:

        

      确认本地Windows和linux环境下都已经安装.net core

      检测方法如下:windows 打开cmd  输入dotnet

             linux 下打开temernal  输入dotnet亦然,

      具体安装方法请参考微软官网,window:https://www.microsoft.com/net/download/windows/build

                    linux:https://www.microsoft.com/net/download/linux/build

     

    新建解决方案:

        

    此处先说说拙见:Program.cs和Startup.cs文件同为项目启动文件,但是实际上项目由main作为唯一入口startup中主要含有一些项目的配置,比如IOC组件注入、MVC配置,具体请百度。

    开发就到此为止。

     

    window下部署:本地运行CMD控制台,切换到程序运行目录:cd E:QMXqmxwebQMX.CoreWebQMX.CoreWeb  

    运行命令:dotnet restore   拉取项目所需引用以及幻云nuget包准备运行

    运行命令:dotnet run   这个命令完成了本地的程序运行,结果如下:

      

     

    此时使用浏览器打开localhost:8080/# 完成本地的站点运行。

     

    以上仅仅完成了程序的运行,并没有完成部署,若想使用8080端口部署该应用,操作如下:

    在运行目录下,执行命令:dotnet publish

        

     此时即完成了站点发布产物的生成  那么我们怎么将这个产物进行部署到指定端口呢?

    上图中最后一行指出了发布产物的位置,切换到此目录下:cd E:QMXqmxwebQMX.CoreWebQMX.CoreWebinDebug etcoreapp2.0publish 

    执行发布命令:dotnet QMX.CoreWeb.dll  此时即完成了站点的发布,并会报告出该应用程序监听端口,如下:

      

     

    至此已经完成window下core站点的发布。

     

    linux下部署:

    准备:

      1)安装nginx 此处不再赘述  具体请参考https://www.cnblogs.com/jimisun/p/8057156.html

      2)安装.netcore组件

      3)下载winscap 地址 https://www.winpcap.org/install/default.htm

      4)下载putty 地址https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

    GO:

      1)使用nginx监听8080端口  具体操作就是在nginx的安装目录下配置站点对应域名映射本机8080端口。

      2)使用winscap连接本机的window环境和服务器linux环境

      

    在此工具帮助下在linux下建立文件夹  从window下找到coreweb对应的发布产物,拷贝到对应的linux环境下。

      3)使用putty连接上远程机器之后,切换到对应的发布产物  默认:【应用程序名称】.ll所在目录下,执行

      dotnet  [YourAppName].dll

    此时可以看到shell提示系统已经监听了8080端口,此时linux内部访问8080端口已经可以直接访问该应用,配合上nginx则实现了域名直接访问内部8080端口的过程。

     

    那么,是不是到此结束了呢??答案是:否

     

      当你辛辛苦苦撸完代码部署完毕之后,你随后关掉了shell,却发现原先能访问的站点不能访问了,这是为什么呢?

     

      因为该程序依赖shell的持续执行,如若不想干等,只有重新搞一个守护进程持续帮我们执行dotnet运行app的命令。

     

    守护进程

      执行命令:sudo apt-get install supervisor   安装完毕守护进程

      但是我们要进行守护进程的配置:本人安装的守护进程默认安装路径在/etc/supervisor/之下,ls我们看到有一个conf.d的文件夹和supervisor.conf,显然后者就是我们要的配置文件了!

    vim打开之后,大失所望,原因,包含的文件是*.conf  吗,去读取的守护配置文件,自己在写一个吧。

      

    切换到conf,d文件夹下,打开vim [AppName].conf   编写如下文件

      [program:qmxCoreService]
      command=dotnet QMX.CoreWeb.dll; 运行程序的命令
      directory=/root/QMX.Web/ ; 命令执行的目录
      autostart=true ; 程序意是否自动启动
      autorestart=true; 程序意外退出是否自动重启
      stderr_logfile=/var/log/QMX.CoreWeb.err.log ; 错误日志文件
      stdout_logfile=/var/log/QMX.CoreWeb.out.log ; 输出日志文件
      user=root; 进程执行的用户身份
      stopsignal=INT

     以上配置完毕之后,:wq退出vim之后  执行命令:supervisord -c /etc/supervisor/supervisord.conf   

    执行之后,正常情况下啥都不发生,如果发生了以下错误,如:

    Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
    For help, use /usr/bin/supervisord -h

    不要紧张,两步即可轻松解决:

    1)find / -name supervisor.sock   得到该路径  path1

    2)unlink  path1

     再次读取supervisord -c /etc/supervisor/supervisord.conf   

    此时 ps -ef | grep  [APPName***]  如果出现两个进程,一个是守护进程,一个是dotnet [app].dll则说明完成守护了呢。

    到此为止  coreweb在linux下的部署就ok了。

     

     

     

     

  • 相关阅读:
    Java泛型【转】
    沉着
    selenium 自动化测试面试题及答案
    50道JAVA基础编程练习题
    50道JAVA基础编程练习题
    Kibana+Logstash+Elasticsearch 日志查询系统
    Java中this和super的用法总结
    Tensorflow官方文档中文版——第二章(瞎奖杯写)
    LATEX ——WinEdt 破解
    超参数优化
  • 原文地址:https://www.cnblogs.com/parvin-zhang/p/9031720.html
Copyright © 2011-2022 走看看