Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之部署到Linux
- 尝试新的开发组合:Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之配置IdentityServer
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之数据迁移
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之添加实体
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之显示登录视图
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之验证码
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之登录、权限、菜单和登出
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之文章管理
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之文件上传
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之部署到Linux
要将Net Core 2的应用程序要部署到Linux上还是挺简单的,部署方式也很灵活,可以直接部署用nginx或apache做反向代理,也可以通过docker来部署。但部署后出现的小问题也很多。
下面来说说我的部署过程。我重新安装了一台CentOS7的虚拟机,安装好以后,执行以下命令更新系统:
yum -y update && yum –y upgrade
更新后就可安装所需的部件了。
安装Apache
由于是测试用,因而就不编译安装了,直接用yum
来安装。笔者是参照《Host ASP.NET Core on Linux with Apache》一文来安装和设置反向代理的。
笔者在/etc/httpd/conf.modules.d/
文件夹下添加了三个配置文件来设置代理、客户端和媒体域名
反向代理配置:cms.conf
<VirtualHost *:80>ServerName api.a.comProxyPreserveHost OnProxyPass / http://127.0.0.1:5000/ProxyPassReverse / http://127.0.0.1:5000/ErrorLog /var/log/httpd/cms-error.logCustomLog /var/log/httpd/cms-access.log common
</VirtualHost>
为了方便,特意设置了一个域名来访问服务器,为了能通过a.com
访问服务器,记得修改本地机器的Windows\System32\drivers\etc\hosts
文件,代码如下:
192.168.0.254 www.a.com
192.168.0.254 api.a.com
192.168.0.254 media.a.com
客户端:home.conf
<VirtualHost *:80>ServerName www.a.comDocumentRoot /var/www/home<Directory /var/www/home>Options +FollowSymLinksAllowOverride AllRequire all granted</Directory>
</VirtualHost>
这里要注意的是设置客户端的根目录。
媒体访问: media.conf
<VirtualHost *:80>ServerName media.a.comDocumentRoot /var/www/mediae<Directory /var/www/mediae>Options +FollowSymLinksAllowOverride NoneRequire all granted</Directory>
</VirtualHost>
安装MariaDB
这个要使用yum安装复杂点,具体步骤如下。
添加存储
vi /etc/yum.repos.d/MariaDB.repo
在文件中添加以下内容:
# MariaDB 10.2 CentOS repository list - created 2016-12-27 06:10 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos74-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1# MariaDB 10.0 CentOS repository list - created 2015-08-12 10:59 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2.9/centos74-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
如果有新版,许自行修改baseurl中的路径。
文件设置好以后就可执行以下命令安装了:
yum install MariaDB-server MariaDB-client MariaDB-shared MariaDB-devel MariaDB-common MariaDB-compat
下载过程有点慢,需要耐心等待。安装好以后,需要自行添加服务,具体步骤如下:
chkconfig --add mysql
chkconfig mysql on
systemctl start mysql
systemctl enable mysql
服务器启动以后,使用图形化工具以SSH方式连接到数据库修改root的密码。这种方式是专家建议的,因为使用命令行方式会将命令缓存在机器,会有安全风险。
密码修改后,就创建一个数据库,并为数据库设置一个访问用户以备用。
安装.NET Core
这个能否安装成功是很关键的一步,如果安装得不好,就前功尽弃,有得忙了。具体安装步骤要参考《Prerequisites for .NET Core on Linux》的Install .NET Core for CentOS 7.1 (64 bit) & Oracle Linux 7.1 (64 bit)
一节,也就是,先执行以下命令:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
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'sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.4
这里与文中不同的地方就是安装dotnet的版本不同,这里将使用2.1.4版本,而不是文中的2.0.0版,如果不确定最新版本是那个,可以使用以下命令列出所有版本再选择:
yum list | grep dotnet
安装完成后,执行以下命令设置环境变量:
export PATH=$PATH:$HOME/dotnet
最后调用dotnet --version
检查是否已经顺利安装。如果能正确显示版本号,说明已经安装好了。
执行迁移
在Migrator项目上单击鼠标右键选择发布会看到如下图所示的标签页。
在标签页内,可以根据自己需要修改输出文件夹,如果不修改就直接单击Create Profile
按钮,切换到如下图所示的视图。
单击发布等待处理完成后,就可以将SimpleCmsWithAbp\src\SimpleCmsWithAbp.Migrator\bin\Release\PublishOutputMigrator
文件夹内的文件通过SFTP方式传输到服务器上。
文件传输完成后,打开appsettings.json
文件,修改里面的数据库连接后,就可执行dotnet SimpleCmsWithAbp.Migrator.dll
执行迁移了。
发布应用程序
与发布迁移一样,在Web.Host项目执行发布后,将发布文件上传到服务器。文件上传后,修改appsettings.json
里的数据库连接和ServerRootAddress
、ClientRootAddress
和CorsOrigins
的设置。
文件上传后,在/etc/systemd/system/
下添加一个名为kestrel-cms.service
的文件,文件内容如下:
[Unit]
Description=SimpleCMS with ABP[Service]
WorkingDirectory=/var/www/cms
ExecStart=/usr/bin/dotnet /var/www/cms/SimpleCmsWithAbp.Web.Host.dll
Restart=always
# Restart service after 10 seconds if dotnet service crashes
RestartSec=10
SyslogIdentifier=dotnet-example
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Development[Install]
WantedBy=multi-user.target
这里要注意的是User的值,必须为Apache的用户。具体的一些配置还需要深入了解,在这里暂时不深入研究了。
文件编辑好以后,就可启用服务了:
systemctl enable kestrel-cms.service
然后是启动服务并查看状态:
systemctl start kestrel-cms.service
systemctl status kestrel-cms.service
如果要查看日志,可以使用以下命令:
sudo journalctl -fu kestrel-cms.service
开启防火墙端口
CentOS安装好以后默认是没有开发任何端口的,这个需要根据文章描述开启80端口。
至此,应用服务器就可以访问了。
调试
如果碰到以下转发错误:
[error] (13)Permission denied: proxy: AJP: attempt to connect to 10.x.x.x:7009 (virtualhost.virtualdomain.com) failed
需要参考《Apache Mod_proxy ‘[Error] (13)Permission Denied’ Error on RHEL》进行设置。
转发调整好以后,很不幸,在应用程序部署以后就出错了,但发现没有在本机调试时的日志可看,都不知道错误在哪里。然后根据《Debugging ASP Core on Linux with Visual Studio 2017》一文,在vs2017才看到了错误。
要使用vs2017进行远程调试,首先要修改Web.Host的Program.cs
文件,将BuildWebHost
方法修改为以下代码,以便通过ip地址访问应用程序:
public static IWebHost BuildWebHost(string[] args){return WebHost.CreateDefaultBuilder(args).UseUrls("http://*:5000").UseStartup<Startup>().Build();}
经过远程调试后,终于发现是图形库无法工作,创建不了验证码。后来换了个图形库,还是不行,这个问题还是比较棘手的。
后来把验证码去掉后,发现上传文件有错误,最终发现是目录权限问题。最后能上传了,但显示又有问题,这个是因为代理不能将upload转发到wwwroot\upload造成的。看来需要将上传文件夹独立出来设置权限,并设置独立的访问地址比较合适,而这也是微软建议的方式,也就是建立一个独立的媒体服务。这也是为什么在前面需要添加一个域名的原因。
为了更好的做调试,打算尝试一下在CentOS中使用VS Code来执行最终的调试和发布,看看效果如何。
Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之部署到Linux相关推荐
- 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[中篇]:请求响应
<200行代码,7个对象--让你了解ASP.NET Core框架的本质>让很多读者对ASP.NET Core管道有了真实的了解.在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分 ...
- 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[上篇]
<200行代码,7个对象--让你了解ASP.NET Core框架的本质>让很多读者对ASP.NET Core管道有了真实的了解.在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分 ...
- ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用
原文:ASP.NET Core 入门教程 2.使用ASP.NET Core MVC框架构建Web应用 一.前言 1.本文主要内容 使用dotnet cli创建基于解决方案(sln+csproj)的项目 ...
- 《ASP.NET Core 3 框架揭秘(上下册)》送书结果公告
[免费送书].Net5实操后的我一夜未眠,来个大胆预测!的送书抽奖结果已经出来了: 这位中奖的同学尽快填写收货地址,4/2 日还没有完成填写将作废,奖品可是热门的<ASP.NET Core 3 ...
- [ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题.这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期. 一.问题重现 我们通过一个简单的实 ...
- Asp.net core abp 无密码登录
需求是Asp.net core abp 无密码登录 具体是另外一个系统跳转到我这个系统需要做一个无密码登录,免登录的效果. 但它那个是java系统,授权也不一样,无法共用验证. 所以我在本系统增加了 ...
- 《ASP.NET Core 6框架揭秘》实例演示[19]:数据加解密与哈希
数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...
- 《ASP.NET Core 6框架揭秘》实例演示[10]:Options基本编程模式
依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中.除了可以采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对 ...
- 《ASP.NET Core 6框架揭秘》实例演示[32]:错误页面的N种呈现方式
由于ASP.NET是一个同时处理多个请求的Web应用框架,所以在处理某个请求过程中出现异常并不会导致整个应用的中止.出于安全方面的考量,为了避免敏感信息外泄,客户端在默认情况下并不会得到详细的出错信息 ...
最新文章
- Vert.x 发送邮件
- squid 安装、配置、优化
- java 计算移动平均线_基于Java语言开发的个性化股票分析技术:移动平均线(MA)...
- 剑指Offer(Java实现)按之字形顺序打印二叉树
- java.lang.ExceptionInInitializerError的原因
- 小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》
- Spring cloud Loadbalance
- Linux服务器运行环境搭建(二)——Redis数据库安装
- 分布式事务模型--XA Specification
- oracle数据库stuff的用法,sql STUFF用法
- mysql8无法修改端口_mysql8.0.18 修改端口报错 Can't start server: Bind on TCP/IP port: Permission denied...
- python画三维散点图-Python 绘制酷炫的三维图步骤详解
- Python全栈(第一部分)day1
- TBB concurrent_set 没有erase
- 【图像分割】基于matlab粒子群优化T熵图像分割【含Matlab源码 286期】
- linux系统安装gcc依赖包,linux安装gcc需要的依赖包
- 在线搜索全网音乐支持歌曲外链下载等源码[免费开源]
- 英雄联盟自定义局怎么和其他服务器的玩家玩,英雄联盟自定义为什么没有玩家进来...
- 一份来自前端开发工程师的规范简历
- web多媒体技术在视频编辑场景的应用