腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.mdhtml
知识点:mysql
云服务器 CVM 简介linux
云服务器(Cloud Virtual Machine,CVM)为您提供安全可靠的弹性计算服务。 只需几分钟,您就能够在云端获取和启用 CVM,来实现您的计算需求。随着业务需求的变化,您能够实时扩展或缩减计算资源。 CVM 支持按实际使用的资源计费,能够为您节约计算成本。使用 CVM 能够极大下降您的软硬件采购成本,简化 IT 运维工做。nginx
云数据库 MySQL 简介sql
腾讯云数据库 MySQL(TencentDB for MySQL)让用户能够轻松在云端部署、使用 MySQL 数据库。MySQL 是世界上最流行的开源关系数据库,经过云数据库 MySQL,您在几分钟内便可部署可扩展的 MySQL 数据库实例。不只经济实惠,并且能够弹性调整硬件容量的大小而无需停机。云数据库 MySQL 提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,为您简化 IT 运维工做,让您能更加专一于业务发展。shell
在教程开始以前,你须要建立一台腾讯云CVM服务器,并到安全组开发所有端口(或者只增长开发3306端口)。数据库
请选择 Ubuntu 18.04 或 Centos 7.5。ubuntu
Ubuntu 比较适合初学者,建议服务器安装 Ubuntu。vim
Shell 工具:c#
免费正版的 XShell 软件下载地址:
https://www.netsarang.com/zh/free-for-home-school/
链接 Linux :
须要注意的是,Ubuntu 默认的帐户名是 ubuntu
。
在 XShell 界面你能够直接使用 Shell 命令链接 Linux:
ssh ubuntu:7t@DfP3Ym3FwDoLM@129.204.104.20
格式 ssh [用户帐号]:[密码]@[主机IP]
登陆后,须要手动添加一个 root 用户:
sudo passwd root
而后按要求输入两次密码便可。
使用 su
命令能够切换用户,例如 su root
。
因为云数据库只能在内网访问,如需公网访问须要购买弹性公网IP,同时为了学习在 Linux 下安装 Mysql ,这里先不使用云数据库,而是手动搭建一个 Mysql数据库。
下面操做须要使用 root 权限,请先切换 root 用户。
安装 Mysql
apt install mysql-server 或 apt-get install mysql-server
apt-get 与 apt 的区别是,apt-get 能够输出详细信息。
若是你的是 Centos 系统,则使用 yum install mysql-server
容许远程登陆 Mysql
vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address
而后按下 i 键,便可修改内容。请修改为
bind-address = 0.0.0.0
0.0.0.0
的意思是容许任何 IP 登陆到此服务器的 Mysql。
修改完毕,按下 Esc 键,输入 :wq!
回车,便可保存并退出。
重启 Mysql 一次
service mysql restart
配置远程登陆权限
mysql -u root -p
而后就会登陆到 Mysql 中。
在 Mysql 数据库中建立一个 root 用户并设置密码为 123456:
RANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY "123456" WITH GRANT OPTION;
建立数据库
create database testmvc;
而后退出 Mysql 管理
exit;
再重启一次
service mysql restart
管理 Mysql
Navicat for MySQL 是一个用于管理 Mysql 数据库的商业软件。
下载地址 https://navicatformysql.en.softonic.com。
网上有不少在线管理 Mysql 的工具,请自行搜索。
请在 Visual Studio 2017/2019 上建立一个 ASP.NET Core 应用,选择 MVC(模型视图控制器)。
依次搜索并安装如下 Nuget 包
Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Tools MySql.Data.EntityFrameworkCore MySql.Data.EntityFrameworkCore.Design
在网站应用的 Models 目录中,新建一个 Users.cs 的类,这个类被成为 模型类
,由于这个类用于经过 EF Core 生成数据库表、映射数据模型, 所以又被称为 实体类
(Entity)。
Users 类的代码:
这将生成一个用户信息的表(你能够随意增长属性)
public class Users { public int Id { get; set; } public string UserName { get; set; } public int YearsOld { get; set; } [Phone] public string PhoneNumber{get;set;} [EmailAddress] public string Email { get; set; } }
在 Models
目录建立一个 DatabaseContext.cs
public class DatabaseContext : DbContext { public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options) { } public DbSet<Users> Users { get; set; } }
数据库上下文用于访问数据库、依赖注入。
在 Startup.cs 文件找到 ConfigureServices
方法,在里面增长
services.AddDbContext<DatabaseContext>(options => options.UseMySQL("server=129.204.104.20;user id=root;password=123456;database=test;charset=utf8;sslMode=None"));
请修改上面的链接字符串,改为本身的。
使用自带的代码生成器,生成页面和数据库操做代码。
右键点击项目的 Controllers
文件夹
因为用于测试,所以只使用 http 访问。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUrls("http://*:5001") .UseStartup<Startup>();
在 Startup.cs 文件删除 app.UseHttpsRedirection();
Entity Framework Core 是一个 ORM 框架,经过 EF Core,咱们能够直接经过代码便可操做数据库,而没必要编写复杂的 SQL 语句。
打开 程序包管理控制台
生成映射:
Add-Migration Migrations
生成数据库表:
Update-Database
而后你会发现数据库多了一个 Users 表。
修改 services.AddDbContext
中的数据库ip,改为 127.0.0.1。由于一旦咱们迁移到服务器,访问数据库就变成了本地访问,不须要填写公网 IP。
发布网站项目,把 publish 的内容打包,直接打包成 publish.zip。
全版本的 .NET Core SDK 下载地址
https://dotnet.microsoft.com/download
直接下载 ubuntu 版本的:
https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current
根据页面提示复制命令到服务器执行便可。
为了方便上传文件,安装 lrzsz
apt install lrzsz
而后就能够直接拖文件上传到 Linux 了。
这里咱们在临时目录存放网站。
mkdir /tmp/www cd /tmp/www
而后把网站压缩包上传到此目录。
解压文件
unzip publish.zip
cd publish
这里使用 jexus 做为Web服务器,托管应用、进行反向代理。
缘由是 Jexus 轻量、简单。固然也能够用 Nginx 等。
安装:
curl https://jexus.org/release/x64/install.sh|sudo sh
配置 jexus
咱们配置 jexus,使得网站可以被外界访问。
/usr/jexus/siteconf
touch testmvc
vim testmvc
复制 如下内容粘贴上去
###################### # Web Site: Default ######################################## port=80 root=/ /tmp/www/publish hosts=129.204.104.20 #OR your.com,*.your.com reproxy= / http://127.0.0.1:5001 # User=www-data # AspNet.Workers=2 # Set the number of asp.net worker processes. Defauit is 1. # addr=0.0.0.0 # CheckQuery=false NoLog=true AppHost={cmd=dotnet /tmp/www/publish/WebApplication2.dll; root=/tmp/www/publish; port=5001}
80
是外界访问网站的端口,
129.204.104.20
是公网 IP,
reproxy= / http://127.0.0.1:5001
是反向代理
AppHost={cmd=dotnet /tmp/www/publish/WebApplication2.dll; root=/tmp/www/publish; port=5001}
,cmd 指要运行的命令,root 是目录位置,port是 网站端口。
配置说明:
经过 Jexus 来托管 ASP.NET Core ,使用 Web 服务器 启动应用。
配置反向代理,使得外界能够访问 ASP.NET Core 应用。
cd /usr/jexus/ ./jws restart
若是你须要使用 Nginx 配置反向代理请参考笔者的另外一篇文章
http://www.javashuo.com/article/p-xwsaqmtf-nb.html
这里就不进行实际代码操做,大概演示一下思路。
你能够在 https://console.cloud.tencent.com/ssl 为你的网站申请免费的 SSL 证书。
在 https://console.cloud.tencent.com/cdn 为你的网站配置加速功能。
将你的域名使用 CNAME 解析到腾讯云 CDN 加速域名上吗,便可配置加速、缓存功能。
配置网站 SSL,有个问题是强制跳转到 https。
用户访问 http 时,如何强制跳转到 https ?
确定不能在网站或服务器上配置,一是配置免费、流量大容易影响性能,二是会下降访问速度。
咱们能够在腾讯云 CDN 里面配置 强制 HTTPS 功能。
这样能够在域名解析后直接强制跳转 https,而没必要对 Web 服务器或 网站作任何修改。
可是hi,这样也带来了问题。
由于使用 CDN 加速和缓存功能,须要使用 CNAME。
大多数域名,会把主域名设置企业邮箱,那么,没法在使用 CNAME 解析,但可使用 A 记录。
所以,假如你有个 域名为 qq.com,而且配置了邮箱系统 xxx@.qq.com,那么你将没法使用 qq.com 去配置 CDN 记录。
通用解决方法:
qq.com 不用了,qq.com 用来配置邮箱。
www.qq.com 以及其它前缀做为网站的域名访问,访问www.qq.com,会强制跳转https。
可是不能浪费 qq.com,咱们能够把任何访问qq.com的客户端,重定向到 www.qq.com。
也就是说, qq.com 不会做为网站域名被访问,访问 qq.com 会被跳转到 www.qq.com。
能够验证。
浏览器输入 qq.com,访问。发现跳转到 https://www.qq.com
再输入 www.qq.com,访问,发现跳转到 https://www.qq.com
使用命令进行测试:
root@VM-14-73-ubuntu:/tmp# curl qq.com <html> <head><title>302 Found</title></head> <body bgcolor="white"> <center><h1>302 Found</h1></center> <hr><center>nginx/1.6.0</center> </body> </html> root@VM-14-73-ubuntu:/tmp# curl www.qq.com <html> <head><title>302 Found</title></head> <body bgcolor="white"> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html>
解释:
访问qq.com和www.qq.com都会进行302重定向。
问题
有个问题是,
你试试访问:https://qq.com
你会发现,访问不了。不信你试试。
腾讯的 qq.com 域名居然不能使用 https:// 访问。。。
固然不清楚 qq.com 的解析是怎么设置的。
我这里只是举例。不少网站访问 xx.com,都会跳转到 www.xx.com。