原文:在CentOS7 开发与部署 asp.net core app笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lihongzhai/article/details/79030097

在 CentOS7 开发与部署 asp.net core app笔记

说明:我用的虚机是qcloud上的,其它云服务商的CentOS可能配置不同,或者网络环境不同。

在QCloud CentOS7 开发与部署 asp.net core app大致有如下几布:
1. 安装dotnet core
2. 开发第一个asp.net core app
3. 安装配置Nginx
4. 配置自启动守护程序

一. 安装dotnet core

0. CentOS上运行dotnet core的依赖项

CentOS 发行版本需要安装以下库:
- libunwind
- lttng 必须
- libcurl
- openssl 库
- libuuid
- krb5 libs
- libicu
- zlib

1. 从系统中删除 .NET Core 的所有旧预览版本。

网上很容易搜索出来的类似安装教程大都是基于dotnet core 1.x 版本的,如果有安装,需要先行删除,下面我们用最新版本2.0。看2.0版本的安装过程,猜测以后更高版本的dotnet core可以直接升级实现。

删除dotnet core sdk

sudo Yum erase libunwind libicu

删除链接

sudo rm -rf /usr/local/bin

2. 注册 Microsoft 签名密钥。

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

3. 添加 Microsoft 产品源。

sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

3. 安装 .NET Core SDK。

安装前首先讲CentOS已经安装的各种包升级一遍,我用新机器测试,需要升级大约300M的东西,大约3分钟时间

sudo yum update

然后依次安装依赖库和dotnet core

sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.0.0

4. 将 dotnet 添加到 PATH

export PATH=$PATH:$HOME/dotnet

5. 测试安装是否成功

运行 dotnet –info命令

dotnet --info


如果出现类似上图的输出结果,就证明安装成功了。


二. 开发第一个asp.net core app

asp.net core app 可以跨平台开发和部署,如果自己的工作机是Windows的,最简单的方法是安装VS。如果希望在远程的CentOS上开发,可以用任何文本编辑器进编辑源代码,用dotnet命令行进行编译。下面的dotnet命令行在IOS,Linux或者Window上都是一样的使用,我是全部在CentOS上测试的。

1. 创建新的 ASP.NET Core 项目

用最快的方式体验asp.net core项目,我们直接新建一个项目

dotnet new razor -o aspnetcoreapp

2. 运行应用

cd aspnetcoreapp
dotnet run server.urls=http://localhost:5000/

出现如下输出,则表示编译成功,并成功运行,可以进行测试了

这里出现了一个Warn,找到解决方案: dotnet run --urls="http://*:5000"

warn: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5000 on the IPv6 loopback interface: ‘Error -99 EADDRNOTAVAIL address not available’.

3. 测试一下页面

curl http://localhost:5000

如果成功返回了页面的源码就代表运行成功了,asp.net core生成的这个页面代码太多,看不清楚,下面找个简单一点的页面试试。

4. 编辑About页面

(我是在WinSCP上直接编辑远程文件的)打开 Pages/About.cshtml 并将页面修改为:

@page
@model AboutModel
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@Model.Message</h3> <p>Hello, world! The time on the server is @DateTime.Now</p>

5. 测试:查看About页面

curl http://localhost:5000/about

这次可以比较容易找到修改的内容了:

后续如果用要发布,或者启动发布后的网站,都用dotnet命令行实现。

dotnet publish

三. 安装配置Nginx

在上面一步完成后如果在公网用浏览器直接访问网站,是访问不到的,因为腾讯云默认是不开放5000端口的,当然也不适合开放这些端口。下面安装Nginx并设置反向代理解决这个问题。

1. 安装Nginx

yum install nginx
systemctl start nginx

2. 测试Nginx

在公网用浏览器直接访问虚机,例如我的,在控制台里找到虚机的IP,然后是直接在本地浏览器里访问http://111.231.146.168/

出现Nginx的朴素的欢迎界面。

3. 设置反向代理

在nginx的配置文件/etc/nginx/nginx.conf中,修改如下内容:

#    location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# } location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

也就是我注释掉了原来关于location的定义,换上了代理的配置。

4. 测试Nginx配置

/usr/sbin/nginx -t

如果提示了错误信息,则可以到/var/log/nginx/error.log 查找错误的详细信息。

5. 重启Nginx

service nginx restart
nginx -s reload

6. 测试配置

在公网用浏览器直接访问虚机,例如我的是访问http://111.231.146.168/,这时出现了asp.net core 网站界面,耶~~~

接着访问http://111.231.146.168/about,可以看到第二步中修改的代码Hello world

四. 配置自启动守护程序

1. 设置nginx 服务开机启动

systemctl enable nginx.service

2.安装Supervisor

yum install python-setuptools
easy_install supervisor

3. 配置Supervisor

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
#指定配置文件
supervisord -c /etc/supervisor/supervisord.conf

指定守护的程序配置,在/etc/supervisor/supervisord.conf中添加:

[include]
files=conf.d/*.conf

4. 配置Supervisor开机启动

新建一个supervisord.service文件:

# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon [Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s [Install]
WantedBy=multi-user.target

将文件拷贝至:/usr/lib/systemd/system/supervisord.service
执行命令:

systemctl enable supervisord

5. 配置守护

新增配置 /etc/supervisor/conf.d/aspnetcoreapp.dll.conf

[program:aspnetcoreapp.dll]
command=/bin/bash -c "dotnet aspnetcoreapp.dll server.urls=http://127.0.0.1:5000/"
directory=/root/aspnetcoreapp/bin/Debug/netcoreapp2.0/publish
autorestart=false
stderr_logfile=/var/log/acore.dll.err.log
stdout_logfile=/var/log/acore.dll.out.log
environment=ASPNETCORE_ENVIRONMENT=Development
user=root
stopsignal=INT

重加载配置

supervisorctl reload
supervisorctl start aspnetcoreapp.dll

6. 查看是否被守护进程拉起

ps -ef|grep dotnet


第二步运行的dotnet run也被查出来了

重启电脑后再次查看系统是否自动启动了dotnet core app.
最后在公网用浏览器直接访问虚机,这时应该出现了asp.net core 网站界面,这样,一个从配置到开发到部署asp.net core app的过程就全部结束了~~~~

五. 参考资料

学习的过程中重点参考了如下资料,如果本文记录的不够清楚的地方,同学们可以看看原始文档。

Linux 上 .NET Core 的先决条件
https://docs.microsoft.com/zh-cn/dotnet/core/linux-prerequisites?tabs=netcore2x

ASP.NET Core 入门
https://docs.microsoft.com/zh-cn/aspnet/core/getting-started

【腾讯云的1001种玩法】centos 7 部署 dotnetcore + Angular2 实践
https://www.qcloud.com/community/article/164816001481011951?fromSource=gwzcw.60009.60009.60009

【腾讯云的1001种玩法】Supervisor 守护 dotnetcore 程序
https://www.qcloud.com/community/article/164816001481011952?fromSource=gwzcw.60004.60004.60004

在CentOS7 开发与部署 asp.net core app笔记的更多相关文章

  1. Windows + IIS 环境部署Asp.Net Core App

    环境:Windows Server 2012, IIS 8, Asp.Net Core 1.1. 不少人第一次在IIS中部署Asp.Net Core App的人都会遇到问题,会发现原来的部署方式无法运 ...

  2. Windows Server 2008 R2 + IIS 环境部署Asp.Net Core App

    Windows + IIS 环境部署Asp.Net Core App   环境:Windows Server 2012, IIS 8, Asp.Net Core 1.1. 不少人第一次在IIS中部署A ...

  3. Asp.Net Core App 部署故障示例 1

    相关阅读:Windows + IIS 环境部署Asp.Net Core App 1.  HTTP Error 502.5 – Process Failure 环境 Windows Server 201 ...

  4. centos 部署 asp.net core Error -99 EADDRNOTAVAIL address not available解决

    centos7.3上部署 asp.net core 错误如下: Hosting environment: Production Content root path: /home/netcore Now ...

  5. Linux+Nginx+Supervisor部署ASP.NET Core实操手册

    一.课程介绍 在上一节课程<ASP.NET Core托管和部署Linux实操演练手册>中我们学过net core的部署方式多样性和灵活性.我们通过远程工具输入dotnet 程序集名称.dl ...

  6. Asp.Net Core App 部署故障示例 2

    相关阅读:Windows + IIS 环境部署Asp.Net Core App 1.  HTTP Error 502.5 – Process Failure 环境 Windows Server 201 ...

  7. CentOS7上部署ASP.Net Core 2.2应用

    前言 在CentOS7上部署ASP.Net Core应用是我的技术路线验证的一部分,下一个产品计划采用ASP.Net Boilerplate Framework开发.因此需要求提前进行一下技术验证,在 ...

  8. 阿里云CentOS7部署ASP.NET Core

    本文主要介绍了阿里云CentOS7下如何成功的发布ASP.Core应用并使用nginx进行代理, 并对所踩的坑加以记录; 环境.工具.准备工作 服务器:阿里云64位CentOS 7.4.1708版本; ...

  9. [原]CentOS7.2最小安装环境部署Asp.NET Core笔记

    转载请注明原作者(think8848)和出处(http://think8848.cnblogs.com) 写在前面的话 不知不觉在cnblogs上注册已经10多年了,看我的园龄就直接暴露了我实际年龄, ...

随机推荐

  1. 目前常见的三种SQL分页方式:

    --top not in方式 select top 条数 * from tablename where Id not in (select top 条数*页数 Id from tablename) - ...

  2. Linux常用截图软件

    1.Gnome-screenshot 是一款 GNOME 截图工具,顾名思义,它是一款用来对整个屏幕.一个特定的窗口或者用户所定义一些其他区域进行捕获的工具.该工具提供了几个其他的功能,包括对所捕获的 ...

  3. 打印机共享 : 客户端 连接服务器打印机时提示"无法连接到打印机“

    1.就是重启一下服务器端的Print Spooler服务就行了,这么简单! 2.修改打印机的共享名 操作无法完成(错误0x00000709).再次检查打印机名称,并确保打印机已连接到网络.(xp系统本 ...

  4. jQuery 判断是否包含在数组中 jQuery.inArray()

    var arr = [ "mysql", "php", "css", "js" ];   $.inArray(" ...

  5. ios-字符串替换-正则表达式-例子

    需求:在html中查找并替换相应的html标签 代码实现 - (NSString *)replaceImageHtml:(NSString *)oldHtml { NSString *regex = ...

  6. mysql查一张表有哪些索引

    可以用这个命令: show index from table_name; 得到输出: +------------------+------------+------------+----------- ...

  7. Python Web框架Tornado的异步处理代码演示样例

    1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口 ...

  8. Timus 1935. Tears of Drowned 具体解释

    Old Captain Jack Sparrow's friend Tia Dalma, the fortuneteller and prophetess, often makes potions. ...

  9. mongo数据库--非关系型数据库

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGFuZ2xpdXFpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  10. 第二天,导出文件sql,查询,视图view,聚合函数,反模式,字符串处理函数

    //把数据库导出到脚本文件mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql CREATE TABLE stud( id INT PRI ...