云计算之路-出海记-小目标:Hello World from .NET 5.0 on AWS
品尝过船上的免费晚餐,眺望着 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的更多相关文章
- 云计算之路-出海记:建一个免费仓库 Amazon RDS for SQL Server
上周由于园子后院起火,不得不调兵回去救火,出海记暂时停更,这周继续更新,"出海记"记录的是我们在 AWS 上建设博客园海外站的历程. 在这一记中记录的是我们基于 AWS 免费套餐( ...
- 云计算之路-出海记:蹭一张 aws 船票
出海记开篇之后,在 aws 上搭建博客园海外站的出海计划今天开始迈出第一步 -- 注册一个 aws 海外区域账号. aws 现在针对新注册用户提供12个月免费套餐(正在园子里推广并提供了专属注册通道) ...
- 云计算之路-出海记:命令行下的 AWS
俗话说"三百六十行,行行出状元",自从有了电脑之后,三百六十行又多了一行 -- 命令行.GUI 的诞生开创了繁荣的 PC "窗口"(windows)时代,互联网 ...
- 云计算之路-出海记:整一台 aws 免费云服务器
上次蹭到一张船票,登上了 aws 这艘巨轮,今天要在船上的免费餐厅吃一顿免费晚餐 -- 整一台 aws 免费套餐中的 EC2 服务器体验一下. 进入 EC2 控制台,点击"启动实例" ...
- 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时
在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...
- 云计算之路-阿里云上:对“黑色n秒”问题的最终猜想——CPU C-states引起的
如果说2013年云计算之路的主题是“踩坑”,那么2014年我们希望云计算之路的主题变成“填坑”——当然填坑是阿里云来完成的,我们只是见证曾经的坑坑洼洼变成平坦大道. 15号(周四)晚上我们发现了SLB ...
- 定一个小目标:明年1024能成功转行web前端,光荣地成为一个程序员!
第一次在博客园写博,我为什么要选择这里吗? 据说博客园这里的IT大牛如云,作为一个求知若渴的小白,我屁颠屁颠的跟着过来了. 于是今天早上兴高采烈的注册了账号,迫不及待的打开我的博客,呃!注册账号成功了 ...
- 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况
在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...
- 云计算之路-阿里云上:“黑色1秒”问题与2009年Xen一个补丁的故事
在之前对“黑色1秒”问题的分析博文中,我们将最大嫌疑对象锁定在了Xen,在这篇博文我们将从Xen的角度进行分析.也许有人会问,为什么不知道天多高地多厚地去研究不属于自己范围的问题?只因我们对一个问题的 ...
随机推荐
- Github 太狠了,居然把 "master" 干掉了!
前段时间栈长有看到 Github 和 master 分支变更的新闻,当时没有注意细节,直到今天我创建仓库时: 看了半天感觉有点不对劲啊... 怎么 master 不见了,之前默认主干分支名称都是叫 m ...
- Croppie -一个Javascript图像Croppie
下载 Croppie -一个Javascript图像CroppieCroppie -一个Javascript图像Croppie 安装 凉棚:凉棚安装作物 Npm: Npm安装作物 下载: croppi ...
- 访问 LNMP 报 502 Bad Gateway 错误的解决办法
LNMP : Linux + Nginx + MySQL + PHP Nginx 出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端 PHP-FPM 处理有问题,Nginx 将正 ...
- 2020 CSP-J 初赛答案及解析
部分咕咕咕的明天一定 单项选择 A A D 解析 : 与z的都是假 C 解析 : $ \frac{2048\times1024\times32}{8\times1024\times1024}=8$ C ...
- linux块设备驱动---概念与框架(转)
基本概念 块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性 ...
- 多测师讲解接口测试 _postman(上)_高级讲师肖sir
Postman 一.Postman介绍 Postman是一个网页调试工具,也可以调试css.html Postman的操作环境 环境:Postman Mac.Windows X32.Windows X ...
- 云服务器、euleros系统自动断开连接解决方案
我这里的云服务器,网上查的修改sshd.config文件并不有效 我提供另一种方法解决这个问题: vim /etc/profile 再最底部新增 export TMOUT=6000 #6000代表60 ...
- 不是计算机专业的,可以转专业甚至转行学IT吗?答案揭晓~
相信有这样疑惑的同学不在少数,随着互联网的快速发展,越来越多的人想要转行到IT行业,可又担心自己的专业不对口,影响将来的发展,那么究竟不是计算机专业的可以转行IT吗? 当然是可以的,其实很多的IT大佬 ...
- 【C语言教程】双向链表学习总结和C语言代码实现!值得学习~
双向链表 定义 我们一开始学习的链表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为单向链表. 虽然使用单向链表能 100% 解决逻辑关系为 "一对一" ...
- C/C++编程日记:用C语言实现的简单Web服务器(Linux),全代码分享!
相信大家对Apache都有所听闻,Apache是目前使用最为广泛我Web服务器.大家可以从news.netcraft.com/这个网站得到证实. 这是腾讯的uptime.netcraft.com/up ...