騰訊雲-ASP.NET Core+Mysql+Jexus+CDN上雲實踐

騰訊雲-ASP.NET Core+Mysql+Jexus+CDN上雲實踐.mdhtml

開通騰訊雲服務器和Mysql

知識點:mysql

  • ASP.NET Core和 Entity Framework Core的使用
  • Linux 下 安裝和配置 Mysql 數據庫
  • 經過實體生成數據庫
  • 簡單 Linux 命令和 Shell 工具的使用
  • 反向代理
  • 騰訊雲CDN的使用、配置服務器 SSL 證書

一,建立 CVM 服務器

雲服務器 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

二,服務器安裝 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 文件夾

1565250372(1)

1565250455(1)

配置網站端口

因爲用於測試,所以只使用 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,打開網站、體驗數據庫操做

1

若是你須要使用 Nginx 配置反向代理請參考筆者的另外一篇文章

http://www.javashuo.com/article/p-xwsaqmtf-nb.html

五,騰訊雲 CDN 和 網站 SSL 配置

這裏就不進行實際代碼操做,大概演示一下思路。

你能夠在 https://console.cloud.tencent.com/ssl 爲你的網站申請免費的 SSL 證書。

https://console.cloud.tencent.com/cdn 爲你的網站配置加速功能。

1565268177(1)

將你的域名使用 CNAME 解析到騰訊雲 CDN 加速域名上嗎,便可配置加速、緩存功能。

1565268272(1)

配置網站SSL的思路和解決方案

配置網站 SSL,有個問題是強制跳轉到 https。

用戶訪問 http 時,如何強制跳轉到 https ?

確定不能在網站或服務器上配置,一是配置免費、流量大容易影響性能,二是會下降訪問速度。

咱們能夠在騰訊雲 CDN 裏面配置 強制 HTTPS 功能。

這樣能夠在域名解析後直接強制跳轉 https,而沒必要對 Web 服務器或 網站作任何修改。

1565268546(1)

可是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。

相關文章
相關標籤/搜索