奥秘 發表於 2020-12-13 20:46:00

.NET Core +Angular 项目 部署到CentOS

<h3>前言:</h3>
<p> 最近公司需要开发项目能在Linux系统上运行,示例开发项目采用.Net Core + Angular开发;理论上完全支持跨平台。</p>
<p> 但是实践才是检验真理的唯一标准;那么还是动手来验证实现下;过程中万一出现什么问题也算是积累经验。</p>
<h3>一、环境准备</h3>
<p> 由于本次主要验证项目部署Linux环境,也不想去重新搭建一个虚拟机环境;就使用Win10中Linux子系统(WSL什么?)</p>
<p> <strong>1、WSL启用步骤:</strong></p>
<ul>
<li>进入【启用或关闭Windows功能】中启用WSL,如下图</li>
</ul>
<p style="margin-left: 30px"><img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213161406608-750201807.png"></p>
<ul>
<li>进入Microsoft store 选择相应版本,本机安装的是CentOS</li>
</ul>
<p>  <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213162058273-858395666.png"></p>
<ul>
<li>&nbsp;安装完成后启动时(出现问题)</li>
</ul>
<p>  <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213162257863-2023036945.png"></p>
<p>  最终确定问题原因:需要更新Linux内核包(更新包下载地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)</p>
<p>  下载安装后,CentOS系统环境准备好了。</p>
<h4> 2、.NET Core 环境安装:</h4>
<ul>
<li>更新下系统基础软件版本(可不执行)  </li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>sudo yum update</pre>
</div>
<ul>
<li>注册微软签名秘钥:</li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>sudo rpm -Uvh https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm</span></pre>
</div>
<ul>
<li>安装.NET Core SDK,示例程序采用3.1版本开发  </li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>sudo yum install dotnet-sdk-<span style="color: rgba(128, 0, 128, 1)">3.1</span></pre>
</div>
<ul>
<li>查看是安装成功,如图则表示已经安装成功</li>
</ul>
<p>  <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213163923904-782218291.png"></p>
<p> <strong>3、Nginx环境安装:(部署web项目)</strong><strong>  </strong></p>
<ul>
<li>
<h4><strong>依赖环境安装</strong></h4>
</li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>yum install gcc-c++<span style="color: rgba(0, 0, 0, 1)">
yum install pcre pcre</span>-<span style="color: rgba(0, 0, 0, 1)">devel
yum install zlib zlib</span>-<span style="color: rgba(0, 0, 0, 1)">devel
yum install openssl openssl</span>--devel</pre>
</div>
<ul>
<li>
<h4>添加Nginx的yum库</h4>
</li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>sudo rpm -Uvh http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm</span></pre>
</div>
<ul>
<li>
<h4>安装Nginx</h4>
</li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>sudo yum install nginx</pre>
</div>
<ul>
<li>
<h4>Nginx基本信息</h4>
</li>
</ul>
<p>  <strong> 目录结构:</strong></p>
<table style="height: 112px; width: 495px" border="0"><caption><strong>Nginx目录</strong></caption>
<tbody>
<tr>
<td>配置路径</td>
<td>/etc/nginx/</td>
</tr>
<tr>
<td>错误日志</td>
<td>/var/log/nginx/error.log</td>
</tr>
<tr>
<td>访问日志</td>
<td>/var/log/nginx/access.log</td>
</tr>
<tr>
<td>默认站点目录</td>
<td>/usr/share/nginx/html</td>
</tr>
</tbody>
</table>
<p>  <strong> 基本命令:</strong></p>
<ul>
<li style="list-style-type: none">
<ul>
<li>nginx       //启动nginx</li>
<li>nginx -s quit    //停止nginx</li>
<li>nginx -s reload  &nbsp; &nbsp;//重新载入配置文件</li>
</ul>
</li>
</ul>
<h3>二、项目部署</h3>
<p> 部署项目到CentOS有多种方式:直接运行、Docker部署(前面学习文章已多次使用),本次就采用直接运行方式来部署应用。由于项目采用前后端分离实现,需要分别部署</p>
<ul>
<li><strong>&nbsp;服务端部署</strong></li>
</ul>
<p><strong> </strong>  1、将服务端项目文件拷贝到CentOS目录中:本次部署路径为:/home/www/publish</p>
<p>    <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213175234200-485720722.png"></p>
<p>   2、修改配置文件:需要使用vim命令(需要单独安装)</p>
<p>    通过命令进入配置文件编辑:</p>
<div class="cnblogs_code" style="margin-left: 60px">
<pre> vim appsettings.json</pre>
</div>
<p>    编辑完成后采用以下命令退出</p>
<div class="cnblogs_code" style="margin-left: 60px">
<pre><span style="color: rgba(0, 0, 0, 1)"><strong>vim命令</strong>
:w 保存但不退出
:wq 保存并退出
:q 退出
:q</span>!<span style="color: rgba(0, 0, 0, 1)"> 强制退出,不保存
:e</span>! 放弃所有修改,从上次保存文件开始再编辑命令历史</pre>
</div>
<p>    <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213184532992-271508707.png">  </p>
<p>&nbsp;  3、启动服务</p>
<p>   进入项目目录执行命令:   </p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre># cd /home/www/<span style="color: rgba(0, 0, 0, 1)">publish
# dotnet ZLSoft.UnifiedDS.Web.Host.dll </span>--urls http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">*:8220</span></pre>
</div>
<p>   <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213184813386-1086823548.png"></p>
<ul>
<li><strong>前端项目部署</strong></li>
</ul>
<p><strong>  </strong>1、将web项目拷贝到:<span style="color: rgba(255, 0, 0, 1)"><strong>/home/www/web</strong></span></p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>  </strong><span style="color: rgba(0, 0, 0, 1)">2、在Nginx配置文件目录中添加配置文件web.conf</span></span></p>
<div class="cnblogs_code" style="margin-left: 60px">
<pre><span style="color: rgba(0, 0, 0, 1)">server {
    listen       </span><span style="color: rgba(128, 0, 128, 1)">8221</span><span style="color: rgba(0, 0, 0, 1)">;
    server_name</span><span style="color: rgba(128, 0, 128, 1)">192.168</span>.<span style="color: rgba(128, 0, 128, 1)">243.86</span>:<span style="color: rgba(128, 0, 128, 1)">8220</span><span style="color: rgba(0, 0, 0, 1)">;

    #charset koi8</span>-<span style="color: rgba(0, 0, 0, 1)">r;
    #access_log</span>/<span style="color: rgba(0, 0, 255, 1)">var</span>/log/nginx/<span style="color: rgba(0, 0, 0, 1)">host.access.logmain;

    location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
      root   </span>/home/www/<span style="color: rgba(0, 0, 0, 1)">web;
      indexindex.html index.htm;
       <span style="color: rgba(255, 0, 0, 1); background-color: rgba(255, 204, 153, 1)"><strong> try_files $uri $uri</strong></span></span><span style="color: rgba(255, 0, 0, 1); background-color: rgba(255, 204, 153, 1)"><strong>/ /index.html?</strong></span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1); background-color: rgba(255, 204, 153, 1)"><strong>$query_string;</strong></span>
    }

    #error_page</span><span style="color: rgba(128, 0, 128, 1)">404</span>            /<span style="color: rgba(128, 0, 128, 1)">404</span><span style="color: rgba(0, 0, 0, 1)">.html;

    # redirect server error pages to the </span><span style="color: rgba(0, 0, 255, 1)">static</span> page /<span style="color: rgba(0, 0, 0, 1)">50x.html
    #
    error_page   </span><span style="color: rgba(128, 0, 128, 1)">500</span> <span style="color: rgba(128, 0, 128, 1)">502</span> <span style="color: rgba(128, 0, 128, 1)">503</span> <span style="color: rgba(128, 0, 128, 1)">504</span>/<span style="color: rgba(0, 0, 0, 1)">50x.html;
    location </span>= /<span style="color: rgba(0, 0, 0, 1)">50x.html {
      root   </span>/usr/share/nginx/<span style="color: rgba(0, 0, 0, 1)">html;
    }
}</span></pre>
</div>
<p>&nbsp;</p>
<p><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">     <strong>注意: 由于Angular项目中使用了路由重定向,则需要使用标记内容</strong></span></span><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)"><strong><br></strong></span></span></p>
<p><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)"><strong>  </strong>3、更新Nginx配置文件:</span></span><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">    </span></span></p>
<div class="cnblogs_code" style="margin-left: 60px">
<pre>/usr/sbin/nginx -s reload</pre>
</div>
<h3>三、运行示例</h3>
<p> 服务端运行:</p>
<p>  <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213170941183-1598782235.png"></p>
<p> Web项目运行效果:</p>
<p>  <img src="https://img2020.cnblogs.com/blog/374428/202012/374428-20201213170506587-1854628457.png"></p>
<p>  到此项目已成功运行,但是当我把CentOS命令结束运行,则web服务端停止运行,那么需要把创建服务实现守护进程</p>
<h3>四、守护进程创建-supervisor</h3>
<p>  1、安装supervisor</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">#安装python的扩展
yum install python</span>-<span style="color: rgba(0, 0, 0, 1)">setuptools
#通过python的扩展安装supervisor
easy_install supervisor

#建立设置文件夹
mkdir </span>/etc/<span style="color: rgba(0, 0, 0, 1)">supervisor
mkdir </span>/etc/supervisor/<span style="color: rgba(0, 0, 0, 1)">conf.d
#设置文件
echo_supervisord_conf </span>&gt; /etc/supervisor/<span style="color: rgba(0, 0, 0, 1)">supervisord.conf
#修改设置文件<span style="color: rgba(255, 0, 0, 1); background-color: rgba(192, 192, 192, 1)"><strong>(supervisord.d 文件夹下的所有 ini 类型的文件都是配置文件)</strong></span>
#在文件</span>/etc/supervisor/<span style="color: rgba(0, 0, 0, 1)">supervisord.conf末端
</span><span style="color: rgba(255, 0, 0, 1)"><strong>;files </strong><strong>= relative/directory/*</strong><strong>.ini</strong> 改为 <strong>files = conf.d/*.ini</strong></span></pre>
</div>
<p>  2、创建配置文件:在<span style="background-color: rgba(192, 192, 192, 1)"><strong>/etc/supervisor/conf.d</strong></span>目录下创建<span style="color: rgba(128, 0, 0, 1)"><strong><span style="background-color: rgba(192, 192, 192, 1)">publish.conf</span></strong></span></p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">
command</span>=dotnet ZLSoft.UnifiedDS.Web.Host.dll --urls http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">192.168.243.86:8220#运行命令</span>
directory=/home/www/<span style="color: rgba(0, 0, 0, 1)">publish #程序路径
environment</span>=ASPNETCORE__ENVIRONMENT=<span style="color: rgba(0, 0, 0, 1)">Production
user</span>=<span style="color: rgba(0, 0, 0, 1)">root
stopsignal</span>=<span style="color: rgba(0, 0, 0, 1)">INT
autostart</span>=<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)"> #自动启动
autorestart</span>=<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)"> #3秒自动重启
startsecs</span>=<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">
stderr_logfile</span>=/<span style="color: rgba(0, 0, 255, 1)">var</span>/log/<span style="color: rgba(0, 0, 0, 1)">ossoffical.err.log
stdout_logfile</span>=/<span style="color: rgba(0, 0, 255, 1)">var</span>/log/ossoffical.<span style="color: rgba(0, 0, 255, 1)">out</span>.log</pre>
</div>
<p>  3、启动服务</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">#进入supervisor目录
cd </span>/etc/<span style="color: rgba(0, 0, 0, 1)">supervisor
#启动supervisord 服务
supervisord </span>-c supervisord.conf</pre>
</div>
<p>  4、开启守护进程的界面管理功能  </p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>#修改配置文件:<br>vim /etc/supervisord.conf<br><br>#取消注释内容</pre>
<p>  ; inet (TCP) server disabled by default<br> port=*:9001      ; ip_address:port specifier, *:port for all iface<br> username=user            ; default is no username (open server)<br> password=123               ; default is no password (open server)</p>
<p> #重新加载配置文件</p>
<p> supervisorctl reload</p>

</div>
<p>  5、<strong>supervisorctl&nbsp;常用命令</strong></p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">$ sudo service supervisor stop 停止supervisor服务
$ sudo service supervisor start 启动supervisor服务
$ supervisorctl shutdown #关闭所有任务
$ supervisorctl stop</span>|<span style="color: rgba(0, 0, 0, 1)">start program_name #启动或停止服务
$ supervisorctl status #查看所有任务状态</span></pre>
</div>
<h3>五、总结</h3>
<p> 在CentOS系统中运行部署运行项目,主要是Linux相关内容是否熟练:如命令、权限、软件等相关内容,不管什么还是需要孰能生巧,多加练习吧。</p>
<p> 另外WSL中的Linux系统还是不够全面,暂时没有<strong>服务、防火墙</strong>相关功能,所以如果在真实环境中,可以设置服务开机启动、以及防火墙相关处理。</p>
<p> 所以还是需要找个完整环境进行学习练习。  </p>
<p> </p><br><br>
来源:https://www.cnblogs.com/cwsheng/p/14129063.html
頁: [1]
查看完整版本: .NET Core +Angular 项目 部署到CentOS