品尝过船上的免费晚餐,眺望着 aws 上搭建博客园海外站的宏伟目标,琢磨着眼前可以实现的小目标,不由自主地在屏幕上敲出了 —— "Hello World!",就从这个最简单朴实的小目标开始吧 —— 用 ASP.NET Core on .NET 5.0 在 Amazon EC2 服务器显示出 "Hello World!"。

先登录到之前启动的 EC2 服务器安装 .NET 5.0 SDK

mkdir $HOME/dotnet_install && cd $HOME/dotnet_install
curl -H 'Cache-Control: no-cache' -L https://aka.ms/install-dotnet-preview -o install-dotnet-preview.sh
sudo bash install-dotnet-preview.sh

安装好之后查看一下 .NET 的版本

dotnet --info
.NET SDK (reflecting any global.json):
Version: 5.0.100-rc.2.20479.15
Commit: da7dfa8840 Runtime Environment:
OS Name: ubuntu
OS Version: 20.04
OS Platform: Linux
RID: ubuntu.20.04-x64
Base Path: /usr/share/dotnet/sdk/5.0.100-rc.2.20479.15/

用 dotnet 命令基于模板创建一个 ASP.NET Core MVC 项目 hello-world

dotnet new mv --no-https --name hello-world

创建后之后用 dotnet run 命令运行项目

ubuntu@ip-172-31-44-65:~/hello-world$ dotnet run
Building...
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {b11ef41c-0ca0-4673-a6d2-05aa4a2bdb1a} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /home/ubuntu/hello-world

运行成功,接下来用 vim 修改一下视图文件,显示"Hello World!"与"Powered by ..."信息

vi Views/Home/Index.cshtml

改为下面的代码

@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Hello World!</h1>
<p>Powered by @System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription on AWS</p>
</div>

再接下来 build 项目生成 docker 镜像,用容器部署站点。

先安装 docker

curl -sSL https://get.docker.com/ | sh

安装后将当前用户添加到 docker 组

sudo usermod -aG docker ubuntu

编写 Dockerfile(采用 multistage build

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet build -c Release -o /app FROM build AS publish
WORKDIR /src
RUN dotnet publish -c Release -o /app/publish FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "hello-world.dll"]

基于上面的 Dockerfile 生成 docker 镜像

$ docker build . -t hello-world
Sending build context to Docker daemon 11.48MB
Step 1/16 : FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
---> 3e92f5fcc999
...
Step 16/16 : ENTRYPOINT ["dotnet", "hello-world.dll"]
---> Using cache
---> a2da910535e2
Successfully built a2da910535e2
Successfully tagged hello-world:latest

用下面的命令以 daemon 方式启动 hellow-world 容器

docker run -d --net=host --restart unless-stopped hello-world

这时 hello-world 应用已经在后台运行了

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df7d77140e76 hello-world "dotnet hello-world.…" 2 minutes ago Up 2 minutes dreamy_joliot

本机 curl 命令测试一下

$ curl -I localhost
HTTP/1.1 200 OK
Date: Sun, 08 Nov 2020 10:47:01 GMT
Content-Type: text/html; charset=utf-8
Server: Kestrel

站点可以访问正常,但现在只能本机访问,要让外部能访问,需要在 aws 安全组中添加入站规则开放80端口。

在这台 EC2 实例的详情控制台,进入“安全” tab,点击安全组名称,进入安全组控制台,点击“编辑入站规则”,点击“添加入站规则”,添加一条开放80端口的入站规则。

保存规则并生效后,就可以通过公网IP访问了。为了让这个小目标正式一点,我们用了一个域名 —— optcode.net,通过 dns 解析到这台 EC2 服务器的公网 IP。

好了,浏览器访问 http://optcode.net/,小目标大功告成!

云计算之路-出海记-小目标:Hello World from .NET 5.0 on AWS的更多相关文章

  1. 云计算之路-出海记:建一个免费仓库 Amazon RDS for SQL Server

    上周由于园子后院起火,不得不调兵回去救火,出海记暂时停更,这周继续更新,"出海记"记录的是我们在 AWS 上建设博客园海外站的历程. 在这一记中记录的是我们基于 AWS 免费套餐( ...

  2. 云计算之路-出海记:蹭一张 aws 船票

    出海记开篇之后,在 aws 上搭建博客园海外站的出海计划今天开始迈出第一步 -- 注册一个 aws 海外区域账号. aws 现在针对新注册用户提供12个月免费套餐(正在园子里推广并提供了专属注册通道) ...

  3. 云计算之路-出海记:命令行下的 AWS

    俗话说"三百六十行,行行出状元",自从有了电脑之后,三百六十行又多了一行 -- 命令行.GUI 的诞生开创了繁荣的 PC "窗口"(windows)时代,互联网 ...

  4. 云计算之路-出海记:整一台 aws 免费云服务器

    上次蹭到一张船票,登上了 aws 这艘巨轮,今天要在船上的免费餐厅吃一顿免费晚餐 -- 整一台 aws 免费套餐中的 EC2 服务器体验一下. 进入 EC2 控制台,点击"启动实例" ...

  5. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

  6. 云计算之路-阿里云上:对“黑色n秒”问题的最终猜想——CPU C-states引起的

    如果说2013年云计算之路的主题是“踩坑”,那么2014年我们希望云计算之路的主题变成“填坑”——当然填坑是阿里云来完成的,我们只是见证曾经的坑坑洼洼变成平坦大道. 15号(周四)晚上我们发现了SLB ...

  7. 定一个小目标:明年1024能成功转行web前端,光荣地成为一个程序员!

    第一次在博客园写博,我为什么要选择这里吗? 据说博客园这里的IT大牛如云,作为一个求知若渴的小白,我屁颠屁颠的跟着过来了. 于是今天早上兴高采烈的注册了账号,迫不及待的打开我的博客,呃!注册账号成功了 ...

  8. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  9. 云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事

    在之前对“黑色1秒”问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的 ...

随机推荐

  1. C 清空输入缓冲区,以及fflush(stdin)的使用误区和解决方法

    转载:https://blog.csdn.net/Veniversum/article/details/62048870 对C 语言初学者来说,fflush(stdin)函数被解释为会清空输入缓冲区的 ...

  2. C/C++ 中 exit() 函数

    参考: https://blog.csdn.net/jjjcainiao/article/details/21935795 知乎上的问题]C/C++ 中 exit() 函数的参数到底有什么意义? C ...

  3. 【题解】[APIO2010]特别行动队

    Link 题目大意:一段区间的贡献是\(ax^2+bx+c,x=\sum v\),求一个划分让总区间的价值最大.分段必须连续. \(\text{Solution:}\) 设计\(dp[i]\)表示前\ ...

  4. AA.Dapper升级了

    AA.Dapper基于dapper进一步封装而成的orm框架,提供增删改查.分页.事务.原生sql的功能,以满足日常的业务开发. 1.Repository层: DapperRepository类包含大 ...

  5. selenium3+python3自动化环境搭建

    (我也是小白,刚开始接触自动化,以下内容是我自己在配置环境的时候遇到的问题及解决方法,是后面才记录的要是有什么遗漏或者问题,欢迎帮忙指出来.)1.1首先下载python下载网址:https://www ...

  6. centos7 yum 安装nodejs、npm、cnpm、pm2、yarn

    一.环境准备 1.1 查看系统环境 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [ ...

  7. day10 Pyhton学习

    一.昨日内容回顾 函数: 定义:对功能或者动作的封装 def 函数名(形参): 函数体 函数名(实参) return:  返回,当程序运行到return的时候,终止函数的执行 一个函数一定拥有返回值 ...

  8. spring boot:用cookie保存i18n信息避免每次请求时传递参数(spring boot 2.3.3)

    一,用cookie保存i18n信息的优点? 当开发一个web项目(非api站)时,如果把i18n的选择信息保存到cookie, 则不需要在每次发送请求时都传递所选择语言的参数, 也不需要增加heade ...

  9. spring boot:用itextpdf处理pdf表格文件(spring boot 2.3.2)

    一,什么是itextpdf? 1,itextpdf的用途 itextpdf是用来生成PDF文档的一个java类库, 通过iText可以生成PDF文档, 还可以把XML/Html文件转化为PDF文件 2 ...

  10. centos8平台php7.4.2安装phpredis实现对redis的访问

    一,下载phpredis 1,官方下载地址: https://github.com/phpredis/phpredis/releases 2,wget下载 [root@yjweb source]# w ...