首页 > web前端 > js教程 > 使用 Terraform 自动部署 Meteor.js 包

使用 Terraform 自动部署 Meteor.js 包

Susan Sarandon
发布: 2024-12-20 08:52:13
原创
774 人浏览过

Automated Deployments of Meteor.js bundle using Terraform

使用 Terraform 和 Docker 在 EC2 实例上自动部署

嘿伙计!技术可能很棘手,但你已经掌握了。将其视为一边喝咖啡一边技术聊天……或者我个人最喜欢的 Chaay(茶)。

让我们深入了解如何在 AWS 上自动部署 Meteor.js 项目。到此结束时,您会感觉自己像一个云部署忍者。准备好?走吧!

你需要什么

在卷起袖子之前,让我们先收拾好东西。这是清单:

  1. AWS 凭证:确保您已配置 AWS CLI 并准备好运行。

  2. Terraform:如果尚未安装,请下载并安装 Terraform。

  3. SSH 密钥对:生成 SSH 密钥对。请妥善保管私钥,以便稍后连接到您的实例。

  4. 域名:有域名吗?伟大的!确保您可以更新其 A 记录。

  5. Meteor Bundle:使用以下命令准备 Meteor.js 项目包:

   meteor build --server-only --directory ~/path/to/Dockerfile
登录后复制
登录后复制
  1. 设置脚本:您需要三个脚本来设置服务器:
  • 服务器设置-part1.sh
  • mongodb4-setup.sh
  • 服务器设置-part2.sh

东西都齐全了吗?惊人的!让我们开始构建吧。

游戏计划

这是我们即将继续的旅程:

  1. 使用 Terraform 在 AWS 上启动 EC2 实例。
  2. 运行一些脚本来配置服务器、安装 MongoDB 并使用 Docker 部署 Meteor.js 应用程序。
  3. 调整您的 DNS 设置,将您的域指向服务器的 IP。
  4. 通过 Certbot 通过 SSL 设置完成一切。

很简单,对吧?让我们一步步分解。


设置 Terraform

首先组织您的 Terraform 项目。创建一个像这样的目录结构:

project-directory/
├── main.tf
├── variables.tf
├── outputs.tf
├── run.sh
登录后复制
登录后复制

第1步:变量配置

在variables.tf中,定义我们需要的所有变量。这些使设置变得灵活:

variable "server_name" {
  description = "Server created by Terraform"
  type        = string
  default     = "AutomatedDeployment"
}

variable "key_pair_name" {
  description = "Key pair name"
  type        = string
  default     = "tf-key-pair"
}

variable "domain_name" {
  description = "Your domain name"
  type        = string
  default     = "xyz.domain.com"
}
登录后复制
登录后复制

第 2 步:心脏 — main.tf

这就是奇迹发生的地方。该文件设置了所有内容:EC2 实例、安全组和配置步骤。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }
  required_version = ">= 1.2.0"
}

provider "aws" {
  region = "ca-central-1"
}

resource "aws_security_group" "tf-security-group" {
  name        = var.server_name
  description = "Security group for ${var.server_name}"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_instance" "tf-created-instance" {
  ami           = "ami-0083d3f8b2a6c7a81"
  instance_type = "t2.micro"
  key_name      = var.key_pair_name
  tags = {
    Name = var.server_name
  }
}
登录后复制

第 3 步:输出

定义 Terraform 运行后应输出的内容:

output "public_ip" {
  value       = aws_instance.tf-created-instance.public_ip
  description = "The public IP address of the instance"
}
登录后复制

第 4 步:自动化脚本

在 run.sh 中,编写一个脚本来自动化 Terraform 命令并处理 DNS 传播:

#!/bin/bash
set -e
DOMAIN="your.domain.com"

terraform apply -auto-approve

echo "Waiting for DNS propagation..."
OLD_IP=$(dig +short $DOMAIN)
while true; do
  sleep 10
  NEW_IP=$(dig +short $DOMAIN)
  [ "$NEW_IP" != "$OLD_IP" ] && break
  echo "DNS records not updated yet. Retrying..."
done

terraform apply -auto-approve
登录后复制

Meteor 的 Dockerfile

这是一个用于打包 Meteor.js 应用程序的示例 Dockerfile:

   meteor build --server-only --directory ~/path/to/Dockerfile
登录后复制
登录后复制

部署步骤

  1. 初始化 Terraform: 运行以下命令来设置 Terraform:
project-directory/
├── main.tf
├── variables.tf
├── outputs.tf
├── run.sh
登录后复制
登录后复制
  1. 自动化部署: 运行脚本进行部署:
variable "server_name" {
  description = "Server created by Terraform"
  type        = string
  default     = "AutomatedDeployment"
}

variable "key_pair_name" {
  description = "Key pair name"
  type        = string
  default     = "tf-key-pair"
}

variable "domain_name" {
  description = "Your domain name"
  type        = string
  default     = "xyz.domain.com"
}
登录后复制
登录后复制
  1. DNS 更新:
    更新您域的 A 记录以指向 EC2 实例的公共 IP。

  2. 验证:
    DNS 传播完成后,通过在浏览器中访问域来验证您的部署。


就是这样!使用 Terraform 和 Docker 在 AWS 上完全自动化地部署 Meteor.js 应用程序。请记住,每一个挑战都是另一个学习的机会。如果您遇到了困难,请喝一口茶,然后像技术专家一样排除故障。庆祝您的部署成功并将其发布到各处!?

以上是使用 Terraform 自动部署 Meteor.js 包的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板