Linux部署ASP.net Core及使用Nginx反向代理https详细流程

本文目录如下

  1. 运行环境
  2. 准备工作
  3. MySQL安装及数据导入
  4. 安装Nginx
  5. 安装 .net Core Runtime
  6. 拷贝 .net Core程序尝试运行
  7. 注册Service
  8. Nginx反向代理https

一、运行环境

系统使用Ubuntu 16.04,部署 ASP.net Core 2.1+MySQL.使用Nginx作为反向代理https。
对于其他Linux系统该文章部分步骤可能有差异,但流程是一样的。
其他系统安装 .net Core Runtime的教程可以参考微软的文档
https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install

二、准备工作

工具软件方面需要一个FTP传输软件和远程登录工具。这里选用WinSCP和Putty。建议去官网下载,百度一搜就能找到。
另外还需要一个域名及域名的私钥文件和证书文件,本人使用腾讯云上申请的二级域名证书及私钥。

三、MySQL安装及数据导入

Linux下MySQL的安装和部署在网上可以很容易找到相关教程,这里不详细说明。不使用MySQL的读者可跳过该节。
(1)安装MySQL

sudo su					//转到管理员模式
apt-get install mysql-server		//安装mysql

(2)安装完MySQL之后对MySQL进行配置
一般情况下MySQL的默认编码是latin1,录入中文会出现乱码。
由于项目需要用到数据库的定时事件,所以顺便也把事件调度的开关打开。

cd /etc/mysql/mysql.conf.d/
vi mysqld.cnf

这里有点小坑,windows下MySQL的配置文件只有一个my.ini,而Linux这里的my.cnf是通过引用将多个ini文件组合到一起,所以我们在my.ini中需要对[mysqld]节点进行的修改要对应到mysqld.cnf这个文件中。在[mysqld]节下添加

[mysqld]
character-set-server=utf8		#设置默认编码为utf8
event_scheduler=ON			#打开事件调度支持定时任务

vi的基本使用:光标移动到需要修改的地方按i进入编辑模式,编辑完后按Esc退出编辑模式,按Shift+Q呼出命令行,输入wq+回车即保存退出,w=保存,q=退出,q!不保存退出。
配置文件编辑完成后重启MySQL

service mysql restart		//重启MySQL

(3)导入数据库
用FTP工具将事先导出好的数据库文件传输到服务器中。

mysql -u root -p
输入密码登录后
create database XXX;
use XXX;
set names utf8;
source /home/ubuntu/XXX.sql

XXX为数据库名,source后跟之前传输的数据库文件路径。

四、安装Nginx

apt-get install nginx

安装完成后可使用:dpkg -L nginx 查看安装的位置

五、安装 .net Core runtime

这里的部署模式选择独立部署,所以只安装 .net Core runtime就可以了;如果选择依赖框架部署,则需要安装dotnet-sdk。

这里需要先把微软的apt-get路径设置为信任再用apt-get安装,命令如下(已是root用户的不需要加sudo):

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-runtime-2.0.9

安装完之后使用命令:dotnet where 看到如下信息说明安装成功。在这里插入图片描述
其他系统可以参考微软的文档:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install

六、拷贝 ASP.net Core尝试运行

将发布的 ASP.net Core文件通过FTP上传到服务器,发布选项记得选Linux x64 独立发布,不要选框架依赖。
上传完成后使用命令: dotnet XXX.dll 尝试运行程序,见到如下显示说明运行成功,通过外网用ip+端口尝试访问一下,如果能访问到说明已经接近成功了。
在这里插入图片描述

七、注册Service

现在程序能跑了,也能访问了,但是这样还不够,因为我们不能确定程序每时每刻都在运行,例如因为某些bug导致程序异常退出等。所以我们需要在Linux下的注册一个Service来运行我们的 ASP.net Core。可以理解为告诉系统要一直后台运行这个程序,如果程序意外退出了也要重启它。可以类比一下windows下的服务。
创建service文件,命名为:xxx.service。内容如下

[Unit]
Description=xxxService_config

[Service]
WorkingDirectory=/home/ubuntu/WebApps/PSDReminder
ExecStart=/usr/bin/dotnet /home/ubuntu/WebApps/PSDReminder/PasswordReminder.dll
Restart=always
# Restart service after 30 seconds if the dotnet service crashes:
RestartSec=30
KillSignal=SIGINT
SyslogIdentifier=PasswordReminder
User=ubuntu
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Description填该服务的描述,可随便填
WorkingDirectory填 ASP.net Core程序文件夹的路径
ExecStart填运行你的 ASP.net Core的命令,其实就是第六节中运行dot net程序的命令。
SyslogIdentifier填log标识
User填用户名,最好填权限大一点的用户。

service文件做好后将它复制到以下路径
/etc/systemd/system/xxx.service

执行以下命令启用该service

systemctl enable xxx.service
systemctl start xxx.service

执行成功后使用以下命令即可查看service运行状态

systemctl status xxx

在这里插入图片描述
按q即可退出查看模式

八、使用Nginx反向代理https

反向代理可以理解为将用户的请求转发到另一个地址进行处理。因为 .net Core代码里不能绑定域名,所以这里需要用Nginx将这个域名的https请求转发给我们的 .net Core。
本人设定的 .net Core程序监听的是8888端口,所以需要将https默认端口443的请求转发到8888端口。具体做法如下:
修改 /etc/nginx/nginx.conf 文件,在http{}中添加如下内容

http{
...
...
   server{
      listen 443;
      server_name xxx.xxx.com;#可用域名
      
      ssl on;
      ssl_certificate ca.crt; #证书路径
      ssl_certificate_key privateKey.key; #私钥路径
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
      ssl_prefer_server_ciphers on;
      ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE";
      
      ssl_ecdh_curve secp384r1;
      ssl_session_cache shared:SSL:10m;
      ssl_session_tickets off;
      ssl_stapling on; #ensure your cert is capable
      ssl_stapling_verify on; #ensure your cert is capable
      
      location / {
            proxy_pass http://127.0.0.1:8888;#请求转发地址
            proxy_set_header Host $host;
      }
   }
}

这里需要注意的是,证书路径和私钥路径必须写相对路径,本人的做法是直接吧证书和私钥文件都放在了 /etc/nginx/ 文件夹下。

修改完成后执行命令重启nginx

systemctl restart nginx

如果启动nginx失败则很有可能是conf文件写错了。

大功告成

发布了15 篇原创文章 · 获赞 2 · 访问量 4865

猜你喜欢

转载自blog.csdn.net/weixin_38138153/article/details/85942336