CentOS 下运行.net Core程序
<p>系统: 阿里云的默认 CentOS 7.5 镜像</p><p>项目环境:.Net Core 2.2</p>
<h3>一、安装.Net Core的运行环境 </h3>
<p>第一步,如果是一台新的服务器,可以升级一下系统的基础软件。如果没有必要也可以跳过这一步。</p>
<p>执行命令</p>
<div class="cnblogs_code">
<pre>sudo yum update</pre>
</div>
<p> </p>
<p>第二步,注册Microsoft签名密钥,每个机器只要注册一次就可以</p>
<p>注册命令</p>
<div class="cnblogs_code">
<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>
<p>执行结果</p>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190629202638878-1268877764.png"></p>
<p> </p>
<p>第三步:安装.Net Core SDK ,这里根据项目环境,需要安装2.2版的。不同的开发环境选择对应的运行时版本即可</p>
<p>执行命令</p>
<div class="cnblogs_code">
<pre>sudo yum install dotnet-sdk-<span style="color: rgba(128, 0, 128, 1)">2.2</span></pre>
</div>
<p> </p>
<p>完成后,通过命令,可以看出.net core的版本</p>
<div class="cnblogs_code">
<pre>dotnet --version</pre>
</div>
<p> </p>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190629225445910-1983901291.png"></p>
<p> </p>
<p>第四步:上传一个.Net Core的程序,进入到程序包所在目录</p>
<p>执行命令</p>
<div class="cnblogs_code">
<pre>dotnet HelloWrold.dll #项目的dll文件</pre>
</div>
<p> </p>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190629225738040-1128127309.png"></p>
<p> </p>
<p>到这里,就可以通过服务器IP加上程序设定的端口号(一般默认是5000)进行访问了。如果你的服务器是在云端,有安全防护,需要开启对应的端口访问权限</p>
<p> </p>
<h3>二、通过 nginx 进行转发</h3>
<p>第一步、安装nginx</p>
<p>执行命令</p>
<div class="cnblogs_code">
<pre>sudo yum install nginx</pre>
</div>
<p> </p>
<p> </p>
<p>第二步,修改 nginx 的配置文件</p>
<p>执行命令</p>
<div class="cnblogs_code">
<pre>vim /etc/nginx/nginx.conf</pre>
</div>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630204925621-1974457522.png"></p>
<p>修改 location的值,修改的内容如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 传递真实IP到后端
proxy_set_header Host $http_host;
proxy_set_header X</span>-Real-<span style="color: rgba(0, 0, 0, 1)">IP $remote_addr;
proxy_set_header X</span>-Forwarded-<span style="color: rgba(0, 0, 0, 1)">For $proxy_add_x_forwarded_for;
proxy_passhttp:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:5000;</span></pre>
</div>
<p> </p>
<p>这个配置的意思是监听80端口,如果有人访问80端口就把请求转到5000端口,这里的5000端口就是你 .Net Core 程序的端口,默认为5000可以更改,如果有更改换掉即可。</p>
<p>第三步、重启 nginx 的服务。启动 .Net Core 的程序</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#重启 nginx
systemctl restart nginx
#进行dotnet 项目目录
cd </span>/home/www/hello/<span style="color: rgba(0, 0, 0, 1)">
#运行dotnet 项目
dotnet Helloworld.dll</span></pre>
</div>
<p>这个时候,我们就可以通过服务器的80端口,访问我们的 .Net Core 程序了。</p>
<p> </p>
<p>第四步、配置多个.net core的转发</p>
<p>如果你的服务器的nginx需要转发多个正在运行的 .Net Core 项目,可以通过在nginx的 /etc/nginx/conf.d/ 目录下,为每个项目建立一个转发的规则文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># 打开配置文件目录
cd </span>/etc/nginx/conf.d/</pre>
</div>
<p>这里的配置文件目录和文件格式 在 nginx.conf 中有指定。</p>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630210711251-419053467.png"></p>
<p>进入目录后,新建一个文件</p>
<div class="cnblogs_code">
<pre>vim hello.conf #名称没有要求,可以和自己的项目名称一样,方便查找</pre>
</div>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">server {
listen </span>80<span style="color: rgba(0, 0, 0, 1)">;
server_name hello.leodev.cn;
index index.html;
location </span>/<span style="color: rgba(0, 0, 0, 1)"> {
# 传递真实IP到后端
proxy_set_header Host $http_host;
proxy_set_header X</span>-Real-<span style="color: rgba(0, 0, 0, 1)">IP $remote_addr;
proxy_set_header X</span>-Forwarded-<span style="color: rgba(0, 0, 0, 1)">For $proxy_add_x_forwarded_for;
proxy_passhttp:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:5000;</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}</span></pre>
</div>
<p> </p>
<p>可以看到,配置中,和之前nginx.conf的文件基本是一样的。 我们只是为项目绑定了一个域名</p>
<p>然后重启 nginx 服务,这个时候,我们就可以通过 绑定的域名,访问到我们的 .Net Core 程序了。</p>
<p> </p>
<h3>三、使用 supervisor 为程序创建守护进程</h3>
<p>第一步、安装 supervisor</p>
<p>执行命令:</p>
<div class="cnblogs_code">
<pre>yum install supervisor</pre>
</div>
<p> </p>
<p>第二步、修改 supervisor 的配置文件</p>
<div class="cnblogs_code">
<pre>vi /etc/supervisord.conf</pre>
</div>
<p> </p>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630212118176-1359438464.png"></p>
<p> </p>
<p>这里的意思,在 supervisord.d 文件夹下的所有 ini 类型的文件都是配置文件</p>
<p>我们在这个文件夹下为我们的守护程序创建一个配置文件</p>
<div class="cnblogs_code">
<pre>#创建配置文件<br>vim /etc/supervisord.d/hello.ini</pre>
</div>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">
command</span>=<span style="color: rgba(0, 0, 0, 1)">dotnet helloworld.dll #运行命令
directory</span>=/home/www/hello<span style="color: rgba(0, 0, 0, 1)"> #程序路径
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>=3<span style="color: rgba(0, 0, 0, 1)">
stderr_logfile</span>=/var/log/ossoffical.err.log
stdout_logfile=/var/log/ossoffical.out.log</pre>
</div>
<p> </p>
<p> 以上是我的项目的守护配置文件,可以根据自己的配置文件,修改前三行的内容</p>
<p> 第三步、启动服务</p>
<div class="cnblogs_code">
<pre>supervisord -c /etc/<span style="color: rgba(0, 0, 0, 1)">supervisord.conf#启动服务
supervisorctl reload #重新加载配置
#其他相关操作
supervisorctl shutdown #关闭
systemctl enable supervisord #开机启动
systemctl is</span>-enabled supervisord #验证是否开机启动</pre>
</div>
<p> </p>
<p>有时候启动的时候会提示错误:</p>
<p>错误1:端口被占用</p>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630213001258-1768240551.png"></p>
<p>解决方案:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#查询到 supervisord的进程
ps </span>-ef |<span style="color: rgba(0, 0, 0, 1)"> grep supervisord
#将查询的进程的 id,杀掉
kill </span>-9PId</pre>
</div>
<p> </p>
<p>错误二:配置文件有问题</p>
<p><img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630213311837-546590585.png"></p>
<p>提示你执行</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#执行命令,查看服务器启动失败的原因
systemctl status supervisord.service</span></pre>
</div>
<p> </p>
<p> <img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630213549895-1870864617.png"></p>
<p>可以看到提示的错误,不是一个有效的 boolean 值。 或者其他的错误提示。</p>
<p>这个情况,我会把创建的hello.ini 中的注释,都删除掉。这样就没有问题了。</p>
<p>还有人说是配置文件的编码格式问题,这个我没有去研究,发现只要把注释删除就可以正常启动。</p>
<p> </p>
<p>到这里基本就完成了对 .Net Core 程序的进程守护,当 .Net Core 进程意外结束时,会自动启动。</p>
<p> </p>
<p>第四步、配置守护进程的界面管理功能</p>
<p>打开 supervisor 的配置文件</p>
<div class="cnblogs_code">
<pre>vim /etc/supervisord.conf</pre>
</div>
<p> </p>
<p> <img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630214943527-99014255.png"></p>
<p>去掉这里的注释,然后把值根据自己的习惯,修改一下。 记得开启阿里云中端口 9001 的访问权限。</p>
<p>这样,在浏览器,通过IP:port 的形式,就可以通过图形界面管理守护的进程了。非常方便。</p>
<p> <img src="https://img2018.cnblogs.com/blog/1115941/201906/1115941-20190630215224462-1403749398.png"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/leoxuan/p/11108231.html
頁:
[1]