騰訊雲-ASP.NET Core+Mysql+Jexus+CDN上雲實踐.md
請先開通雲伺服器
知識點:
- 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@[email protected]
格式
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
檔案夾
.png)
配置網站端口
由于用于測試,是以隻使用 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,并且配置了郵箱系統 [email protected],那麼你将無法使用 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,通路,發現跳轉到
使用指令進行測試:
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。