在 AWS EC2 实例上使用 SSH 和 Visual Studio Code 进行远程开发
下面将向您展示如何使用 Visual Studio CodeRemote - SSH扩展在 AWS 上创建和连接虚拟机 (VM)。您将能够使用 VS Code 在远程机器上运行 Telescope,就像源代码是本地的一样。本文档基于Remote development over SSH Telescope是一款用于跟踪围绕 Seneca 开源开发的博客的工具。应用程序本身有许多使用 Docker
下面将向您展示如何使用 Visual Studio CodeRemote - SSH扩展在 AWS 上创建和连接虚拟机 (VM)。您将能够使用 VS Code 在远程机器上运行 Telescope,就像源代码是本地的一样。本文档基于Remote development over SSH
Telescope是一款用于跟踪围绕 Seneca 开源开发的博客的工具。应用程序本身有许多使用 Docker 容器并使用 Docker-Compose 组合在一起的微服务。你可以在这里找到 GitHub repo
望远镜技术栈
-
Next.js
-
材质界面
-
节点.js
-
弹性搜索
-
雷迪斯
-
流量
-
火力基地
-
有
望远镜微服务
-
授权
-
饲料发现
-
图片
-
解析器
-
星球
-
个帖子
-
搜索
-
状态
-
个用户
免责声明:本指南中使用的 EC2 实例不在 AWS 的免费套餐范围内,因此请参阅EC2 定价以了解您是否对这些费用感到满意。在开发中运行 Docker 是 CPU 密集型的,所以这些是我推荐的 EC2 实例:
-
最低:
t2.medium (4 GiB RAM + 2 vCPU)
-
推荐:
t2.large (8 GiB RAM + 2 vCPU)
定价摘要:
-
t2.medium 每小时花费 \$0.0464
-
t2.large 每小时花费 \$0.0928
-
30GB Amazon Elastic Block Storage (EBS) 每月收费 \$3
每月费用估算:
t2.中
t2.大
每小时费用
\$0.0464
\$0.0928
每天几小时
8
8
每月天数
30
30
小计
\$11.14
\$22.27
30GB EBS 卷
\$3
\$3
全部的
\$14.14
\$25.27
先决条件:
-
下载安装Visual Studio Code
-
安装远程 - SSH扩展
-
创建一个AWS 账户。如果您需要帮助,可以观看 AWS Certified Cloud Practitioner 课程的第部分关于创建帐户的内容。
-
创建具有管理权限的 IAM 用户。您将需要您的
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
-
使用您的 IAM 用户登录您的 AWS 账户
创建您的虚拟机 (AWS EC2):
-
在您的 AWS 管理控制台的右上角,选择
US East (Ohio) us-east-2
作为您的Region
-
在 AWS 管理控制台的左上角,单击
Services
。这将显示 AWS 服务列表,搜索EC2
3.点击Launch instances
-
第 1 步 - 选择 Amazon 系统映像 (AMI):
Ubuntu Server 20.04 LTS (HVM), SSD Volume Type
-
第 2 步 - 选择实例类型:
t2.medium
-
第 3 步 - 配置实例详细信息:接受默认值并继续下一步
-
第 4 步 - 添加存储:将大小 (GiB) 从
8
更改为20
-
第 5 步 - 添加标签:不需要标签。继续下一步。
-
步骤 6 - 配置安全组:
-
分配安全组:
Create a new security group
-
安全组名称:
telescope-sg
-
添加以下规则:
-
SSH 为您的 IP 地址
-
类型:
SSH
-
协议:
TCP
-
端口范围:
22
-
来源:
My IP
(当您从下拉菜单中选择此项时,它会自动在字段中输入<your-ip-address>/32
。例如76.72.29.150/32
) -
为您的 IP 地址打开 3000 端口
-
类型:
Custom TCP
-
协议:
TCP
-
端口范围:
3000
-
来源:
My IP
-
为您的 IP 地址打开 8000 端口
-
类型:
Custom TCP
-
协议:
TCP
-
端口范围:
8000
-
来源:
My IP
-
为您的 IP 地址打开 8000 端口
-
类型:
Custom TCP
-
协议:
TCP
-
端口范围:
8443
-
来源:
My IP
[](https://res.cloudinary.com/practicaldev/image/fetch/s--8QqWh0de--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://seneca-cdot-telescope. s3.amazonaws.com/vscode-ssh/2021-10-26%2B12_54_12-vscode-ssh.md%2B-%2Btelescope%2B-%2BVisual%2BStudio%2BCode.png)
- 点击
Review and Launch
。你会得到一个警告:Your instance configuration is not eligible for the free usage tier
,这是因为我们使用的是t2.medium
实例类型。
2.点击Launch
3.在弹出窗口中选择Create a new key pair
-
密钥对类型:
RSA
-
密钥对名称:
telescope-dev-key
1.点击Download Key Pair
- 如果您使用的是 Windows,请将文件保存在您的用户配置文件夹中的
.ssh
目录中(例如C:/Users/cindy/.ssh/
)
3.点击Launch Instances
AWS 需要几分钟时间来启动您的新 EC2 实例。
- 一旦您的 EC2 实例启动,您应该将其命名为有意义的名称,例如
Telescope-Dev
,您可以找到您的 EC2 实例的公有 IPv4 地址。记下此 IP 地址。
使用 SSH 连接
1.打开Visual Studio Code
2.点击窗口左下角的Open a Remote Window
图标
3.选择Connect to Host
4.选择Configure SSH Hosts...
- 这将在 Visual Studio Code 中打开一个
config
文件。如果您使用的是 Windows,它将类似于C:/Users/cindy/.ssh/config
- 使用以下内容编辑
config
文件:
Host aws-ec2
HostName <your-ec2-ip-address>
User ubuntu
IdentityFile ~/.ssh/telescope-dev-key.pem
进入全屏模式 退出全屏模式
[](https://res.cloudinary.com/practicaldev/image/fetch/s--ogNJzT4U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://seneca-cdot-telescope。 s3.amazonaws.com/vscode-ssh/2021-10-26%2B14_02_31-config%2B-%2Btelescope%2B-%2BVisual%2BStudio%2BCode.png)
-
保存文件
-
当您再次点击左下角的
Open a Remote Window
图标并选择Connect to Host
时,您将看到aws-ec2
列出。 -
选择
aws-ec2
,将打开一个新的 Visual Studio Code 窗口。 -
您将看到
"aws-ec2" has fingerprint "SHA256:xxx"
和Are you sure you want to continue?
。单击Continue
。然后您应该看到您已连接!
设置您的 AWS 凭证
-
在 Visual Studio Code 中打开一个终端(Windows 上的热键:
Ctrl + backtick
)。您应该看到您以类似ubuntu@ip-172.31.23.4
的身份登录。 -
安装
unzip
。我们将需要它来安装 AWS CLI
$ sudo apt install unzip
进入全屏模式 退出全屏模式
- 安装最新版本的 AWS CLI
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
进入全屏模式 退出全屏模式
- 验证 AWS CLI 安装
$ aws --version
aws-cli/2.3.0 Python/3.8.8 Linux/5.4.0-1045-aws exe/x86_64.ubuntu.20 prompt/off
进入全屏模式 退出全屏模式
1.删除awscliv2.zip
文件和aws
目录
rm awscliv2.zip
rm -rf aws
进入全屏模式 退出全屏模式
- 配置您的 AWS 凭证
aws configure
进入全屏模式 退出全屏模式
- 目前,一切都设置为无,因此请输入您的 AWS IAM 用户的凭证。
AWS Access Key ID [None]: ****************764G
AWS Secret Access Key [None]: ****************qBbe
Default region name [None]: us-east-2
Default output format [None]:
进入全屏模式 退出全屏模式
安装 Docker 和 Docker-Compose
安装Docker引擎-社区版
1.更新apt包索引:
sudo apt-get update
进入全屏模式 退出全屏模式
- 安装软件包以允许 apt 通过 HTTPS 使用存储库:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
进入全屏模式 退出全屏模式
1.添加Docker官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
进入全屏模式 退出全屏模式
- 使用以下命令设置稳定存储库:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
进入全屏模式 退出全屏模式
1、再次更新apt包索引:
sudo apt-get update
进入全屏模式 退出全屏模式
1.安装最新版本的Docker Engine社区:
sudo apt-get install docker-ce docker-ce-cli containerd.io
进入全屏模式 退出全屏模式
- 将您的用户添加到 Docker 组(源):
sudo usermod -aG docker $USER
进入全屏模式 退出全屏模式
1.激活对组的更改
newgrp docker
进入全屏模式 退出全屏模式
- 现在在你的机器上运行 docker 作为服务,在启动时:
-
启动时启用 docker:
sudo systemctl enable docker
-
启动时禁用 docker:
sudo systemctl disable docker
安装 Docker-Compose
1.运行下载当前稳定版本的Docker-Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
进入全屏模式 退出全屏模式
1.对下载的文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
进入全屏模式 退出全屏模式
1.检查安装使用:
$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
进入全屏模式 退出全屏模式
安装 Node.js 和 npm
- 安装 Node.js 16.x 和 npm 8.1
$ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
进入全屏模式 退出全屏模式
1.验证安装
$ node -v
v16.12.0
$ npm -v
8.1.0
进入全屏模式 退出全屏模式
在 AWS EC2 中设置 Telescope 存储库:
- 克隆 Telescope 存储库,输入远程命名为
upstream
git clone -o upstream https://github.com/Seneca-CDOT/telescope.git
进入全屏模式 退出全屏模式
- 打开
telescope
目录,你应该可以看到整个 Telescope 文件和文件夹结构!
[](https://res.cloudinary.com/practicaldev/image/fetch/s--sPangEf5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://seneca-cdot-telescope。 s3.amazonaws.com/vscode-ssh/2021-10-26%2B16_54_04-Settings.png)
- 通过执行
aws-ip.sh
脚本在您的 env.remote 文件中设置所有必要的环境变量以包含您的 EC2 实例的公共 IPv4 地址
sh ./tools/aws-ip.sh
进入全屏模式 退出全屏模式
如果你做的一切都正确,你已经完成了环境设置!
现在开始开发...
1.安装所有依赖
npm install
进入全屏模式 退出全屏模式
- 启动所有 Telescope 服务。这需要一些时间才能完成
docker-compose --env-file .env up -d
进入全屏模式 退出全屏模式
- 在 3000 端口启动 Telescope 开发服务器
npm start
进入全屏模式 退出全屏模式
- 找到您的 EC2 实例的公有 IPv4
$ curl -s http://169.254.169.254/latest/meta-data/public-ipv4
35.174.16.133
进入全屏模式 退出全屏模式
- 打开
<public-ip>:8000
浏览器选项卡,查看在 AWS Cloud9 环境中运行的 Telescope!
2.在另一个浏览器选项卡中打开<public-ip>:3000/feeds
以查看后端的所有提要
- 在另一个浏览器选项卡中打开
<public-ip>:8443/v1/<microservice-port>
以查看微服务。例如35.174.16.133:8443/v1/posts
[](https://res.cloudinary.com/practicaldev/image/fetch/s--LlVz78Jx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://seneca-cdot-telescope. s3.amazonaws.com/vscode-ssh/2021-10-26%2B17_10_36-Telescope%2B%25E2%2580%2594%2BMozilla%2BFirefox.png)
常见问题 (FAQ)
如何停止我的 docker 容器?
npm run services:stop
进入全屏模式 退出全屏模式
如何删除我的 docker 容器?
docker system prune -af --volumes
进入全屏模式 退出全屏模式
运行docker-compose --env-file .env up -d
时出现Permission denied
错误
首次安装 Docker 时,有时未正确设置 Docker 权限。您可能需要重新启动 VM 或运行
newgrp docker
进入全屏模式 退出全屏模式
我无法打开:8000 运行,我做错了什么?
-
如果您打开了 VPN,请将其关闭并通过访问http://checkip.amazonaws.com/获取您的 IP 地址,然后允许您的 IP 地址访问端口 3000 和 8000。
-
当您停止或重启您的 EC2 实例时,AWS 可能会更改您的 EC2 实例 IP 地址。一种解决方案是购买弹性 IP 地址来保留特定的公共 IP 地址。但是,您可以只清除
env.remote
和.env
文件并再次运行./tools/aws-ip.sh
脚本以在适当的环境变量中设置新的 EC2 IP 地址。只需记住在浏览器中也使用新的 EC2 IP 地址。
我无法通过 SSH 连接到我的 EC2 实例
-
同上原因,当您停止或重启您的 EC2 实例时,您的 EC2 实例 IP 地址可能会发生变化。因此,请确保您的
.ssh/config
文件具有正确的主机名 -
如果您自己的 IP 地址发生变化(例如,您更换了互联网提供商或您搬到了具有不同 IP 地址的新位置),您需要更新您的入站规则以允许您的 IP 地址访问端口 22。不要忘记也允许访问端口 3000 和 8000。
如果我不主动使用 EC2 实例,如何关闭它?
有许多不同的方法可以停止 EC2 实例:
- 使用 AWS 控制台手动关闭它
[](https://res.cloudinary.com/practicaldev/image/fetch/s--rnt9cFrD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://seneca-cdot-telescope。 s3.amazonaws.com/vscode-ssh/2021-10-26%2B17_35_32-vscode-ssh.md%2B-%2Btelescope%2B-%2BVisual%2BStudio%2BCode.png)
- 创建 Cloudwatch 警报以在不活动后为您停止 EC2 实例
-
点击
Alarm status
下方的+
开始创建警报 -
点击
Create an alarm
单选按钮 -
将
Alarm action
设置为Stop
-
设置警报以在 EC2 实例的 CPU 使用率低于 25% 一个小时时触发
更多推荐
所有评论(0)