腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践
腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md
开通腾讯云服务器和Mysql
知识点:
- ASP.NET Core和 Entity Framework Core的使用
- Linux 下 安装和配置 Mysql 数据库
- 通过实体生成数据库
- 简单 Linux 命令和 Shell 工具的使用
- 反向代理
- 腾讯云CDN的使用、配置服务器 SSL 证书
一,创建 CVM 服务器
云服务器 CVM 简介
云服务器(Cloud Virtual Machine,CVM)为您提供安全可靠的弹性计算服务。 只需几分钟,您就可以在云端获取和启用 CVM,来实现您的计算需求。随着业务需求的变化,您可以实时扩展或缩减计算资源。 CVM 支持按实际使用的资源计费,可以为您节约计算成本。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
云数据库 MySQL 简介
腾讯云数据库 MySQL(TencentDB for MySQL)让用户可以轻松在云端部署、使用 MySQL 数据库。MySQL 是世界上最流行的开源关系数据库,通过云数据库 MySQL,您在几分钟内即可部署可扩展的 MySQL 数据库实例。不仅经济实惠,而且可以弹性调整硬件容量的大小而无需停机。云数据库 MySQL 提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,为您简化 IT 运维工作,让您能更加专注于业务发展。
在教程开始之前,你需要创建一台腾讯云CVM服务器,并到安全组开发全部端口(或者只增加开发3306端口)。
请选择 Ubuntu 18.04 或 Centos 7.5。
Ubuntu 比较适合初学者,建议服务器安装 Ubuntu。
Shell 工具:
免费正版的 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
。
二,服务器安装 Mysql
由于云数据库只能在内网访问,如需公网访问需要购买弹性公网IP,同时为了学习在 Linux 下安装 Mysql ,这里先不使用云数据库,而是手动搭建一个 Mysql数据库。
1,安装、配置、使用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 的工具,请自行搜索。
三,创建用于测试的ASP.NET Core应用
请在 Visual Studio 2017/2019 上创建一个 ASP.NET Core 应用,选择 MVC(模型视图控制器)。
1,添加 Nuget 包
依次搜索并安装以下 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; }
}
2,创建数据库访问上下文
在 Models
目录创建一个 DatabaseContext.cs
public class DatabaseContext : DbContext
{
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options)
{
}
public DbSet<Users> Users { get; set; }
}
数据库上下文用于访问数据库、依赖注入。
3,配置服务
在 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"));
请修改上面的连接字符串,改成自己的。
4,添加修改数据库表的控制器
使用自带的代码生成器,生成页面和数据库操作代码。
右键点击项目的 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。
四,服务器搭建环境
1,安装.NET Core SDK
全版本的 .NET Core SDK 下载地址
https://dotnet.microsoft.com/download
直接下载 ubuntu 版本的:
https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current
根据页面提示复制命令到服务器执行即可。
2,安装lrzsz
为了方便上传文件,安装 lrzsz
apt install lrzsz
然后就可以直接拖文件上传到 Linux 了。
这里我们在临时目录存放网站。
mkdir /tmp/www
cd /tmp/www
然后把网站压缩包上传到此目录。
解压文件
unzip publish.zip
cd publish
3,安装 jexus
这里使用 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 应用。
4,重启 Jexus、启动网站
cd /usr/jexus/
./jws restart
5,打开网站、体验数据库操作
如果你需要使用 Nginx 配置反向代理请参考笔者的另一篇文章
https://www.cnblogs.com/whuanle/p/10228893.html
五,腾讯云 CDN 和 网站 SSL 配置
这里就不进行实际代码操作,大概演示一下思路。
你可以在 https://console.cloud.tencent.com/ssl 为你的网站申请免费的 SSL 证书。
在 https://console.cloud.tencent.com/cdn 为你的网站配置加速功能。
将你的域名使用 CNAME 解析到腾讯云 CDN 加速域名上吗,即可配置加速、缓存功能。
配置网站SSL的思路和解决方案
配置网站 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。
腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践的更多相关文章
- ASP.NET Core Docker jexus nginx部署-CentOS实践版
本文用图文的方式记录了我自己搭建centos+asp.net core + docker + jexus + nginx的整个过程,希望对有同样需求的朋友有一定的参考作用. 本文主要内容如下: cen ...
- asp.net core + mysql + ef core + linux
asp.net core + mysql + ef core + linux 以前开发网站是针对windows平台,在iis上部署.由于这次需求的目标服务器是linux系统,就尝试用跨平台的.NET ...
- ASP.NET Core MVC 在linux上的创建及发布
前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...
- ASP.NET Core 中的文件上传
ASP.NET Core上传文件 ASP.NET Core使用IFormFile来读取上传的文件内容,然后将数据写入到磁盘或其它存储空间. 添加FileUpload模型,用来接收上传的文件内容. pu ...
- 2019 GNTC 阿里云参会分享:云原生SDWAN网络2.0 一站式上云服务
本次10/22-24 南京2019 GNTC大会上,阿里云网络云原生SDWAN网络2.0 由于独特的云原生定位.创新的解决方案,及成熟的应用案例.行业用户,获得行业媒体C114中国通信网.产业专家高度 ...
- ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx
一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...
- 解决 ASP.NET Core MySql varchar 字符串截取(长度 255)
ASP.NET Core 中使用 MySql,如果字段类型为varchar,不管设置多少长度,插入或更新数据的时候,会自动截断(截取 255 长度的字符). 出现问题的原因,就是使用了MySql.Da ...
- asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
asp.net core程序部署在centos7(下面的解决方案,其他系统都能使用,这里只是我自己部署在centos7),使用服务器jexus进行部署,AppHost模式. 因为请求是由jexus进行 ...
随机推荐
- JavaWeb之servlet(1)
servlet servlet:就是一个Java程序,运行在web服务器中,用于接收和响应客户端的http请求.更多是配合动态资源使用.当然静态资源也要使用servlet,只不过Tomcat里面已经定 ...
- Python之Beautiful Soup 4使用实例
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航.查找.修改文档的方式.Beautiful Soup 4 官方文档: ...
- python函数修饰符@的使用
python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回一个新函数 ...
- 微信小程序如何使用 Git 实现版本管理和协作开发
前言 在微信小程序开发的过程中,代码版本管理往往需要使用第三方工具进行管理.虽然微信Web开发工具提供了对Git文件版本状态的提示,但实际的使用体验依然不尽人意. 随着微信Web开发工具的更新,最新的 ...
- MYSQL第一课
rm-rf /* 不能用 完全删除 数据库不能直接存储数据 table 表 DB 数据库 DBMS 数据库操作系统 SQL 结构化查询语言 语句不区分大小写,但字符串常量区区分大小写.建议命令大写. ...
- RAW数据格式解析
RAM数据格式解析 Raw格式是sensor的输出格式,是未经处理过的数据,表示sensor接受 到的各种光的强度. Raw数据在输出的时候是有一定的顺序的,一般为以下四种: 00: GR/BG 01 ...
- Java面试之synchronized 和 static synchronized
面试题: 答案: 不能 不能 不能 不能 能 正文 概述 通过分析这两个用法的分析,我们可以理解java中锁的概念.一个是实例锁(锁在某一个实例对象上,如果该类是单例,那么该锁也具有全局锁的概念), ...
- Excel中的一列数据变成文本的一行数据
Excel中的一列数据变成文本的一行数据 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
- Html学习之十五(盒模型)
Web页面中的每一个元素都是一个盒模型,CSS中使用盒模型来描述一个元素.CSS盒子模型又称框模型,它包含四个边界,分别是外边距边界(Margin).边框边界(border).内边距边界(paddin ...
- 第七周第二次Scrum会议
工作: 根据上个周对前端的布置学习,布置大家开发了相应的界面.(界面开发成果写在测试报告) 地点: 二餐二 会议照片: 忘记拍了... 核心问题: 如何编写统一风格的前端界面. 解决: 将相应资源打包 ...