Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之部署到Linux

  1. 尝试新的开发组合:Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS
  2. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之配置IdentityServer
  3. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之数据迁移
  4. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之添加实体
  5. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之显示登录视图
  6. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之验证码
  7. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之登录、权限、菜单和登出
  8. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之文章管理
  9. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之文件上传
  10. 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.com
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ErrorLog /var/log/httpd/cms-error.log
    CustomLog /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.com
    DocumentRoot /var/www/home
    <Directory /var/www/home>
        Options +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

这里要注意的是设置客户端的根目录。

媒体访问: media.conf
<VirtualHost *:80>
    ServerName media.a.com
    DocumentRoot /var/www/mediae
    <Directory /var/www/mediae>
        Options +FollowSymLinks
        AllowOverride None
        Require 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里的数据库连接和ServerRootAddressClientRootAddressCorsOrigins的设置。

文件上传后,在/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来执行最终的调试和发布,看看效果如何。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值