استقرار یک برنامه Docker سفارشی با آهنگسازی Terraform و Docker

مقدمه
در این وبلاگ ، ما با استقرار یک نمونه AWS EC2 با استفاده از ماژول های ترازو و تنظیم یک کاربرد چند کانتینر dockerized سفارشی با استفاده از داکر آهنگسازیبشر این یک پروژه عالی برای کسانی است که به دنبال تقویت آنها هستند شکلبا اسکلهوت AWS مهارت در هنگام خودکار سازی تأمین زیرساخت.
پیش نیازهای
قبل از شروع ، اطمینان حاصل کنید که:
✅ شکل نصب شده → بارگیری در اینجا
✅ AWS CLI نصب و پیکربندی → اجرا aws configure
✅ یک جفت کلید AWS (به SSH به عنوان مثال)
✅ یک برنامه سفارشی dockerized (یک برنامه وب ساده)
بررسی اجمالی پروژه
ما ایجاد خواهیم کرد:
✔ یک نمونه EC2 با یک گروه امنیتی اجازه ترافیک SSH و HTTP را می دهد
✔ ماژول های ترازو برای استفاده مجدد بهتر
✔ نصب داکر از طریق Terraform's user_data
✔ یک برنامه کاربردی سفارشی چندگانه با استفاده از داکر آهنگسازی
مرحله 1: ارائه دهنده Terraform را تعریف کنید
یک پرونده به نام ایجاد کنید provider.tf
و AWS را به عنوان ارائه دهنده مشخص کنید:
provider "aws" {
region = "us-east-1" # Change this as needed
}
مرحله 2: یک ماژول Terraform برای نمونه EC2 ایجاد کنید
یک پوشه جدید ایجاد کنید modules/ec2
و در داخل آن ، ایجاد کنید main.tf
با variables.tf
وت outputs.tf
پرونده ها
ماژول ها/ec2/main.tf
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI (update if needed)
instance_type = var.instance_type
key_name = var.key_name
security_groups = [var.security_group]
user_data = file("${path.module}/install_docker.sh")
tags = {
Name = var.instance_name
}
}
ماژول ها/EC2/متغیرها. tf
variable "instance_type" {}
variable "key_name" {}
variable "security_group" {}
variable "instance_name" {}
ماژول ها/ec2/outputs.tf
output "public_ip" {
value = aws_instance.web.public_ip
}
مرحله 3: ماژول گروه امنیتی را تعریف کنید
یک پوشه جدید ایجاد کنید modules/security_group
و قوانین امنیتی را تعریف کنید.
ماژول ها/Security_Group/main.tf
resource "aws_security_group" "ec2_sg" {
name = "terraform-sg"
description = "Allow SSH and HTTP"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # Allows SSH access
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # Allows HTTP access
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"] # Allows all outbound traffic
}
}
مرحله 4: آهنگسازی Docker و Docker را نصب کنید
یک اسکریپت پوسته ایجاد کنید install_docker.sh
درون modules/ec2
:
#!/bin/bash
sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
مرحله 5: با استفاده از آهنگسازی Docker یک برنامه چند کانتینر را مستقر کنید
ایجاد a docker-compose.yml
پرونده در نمونه EC2 پس از تهیه:
version: '3.8'
services:
app:
image: my-custom-app:latest
ports:
- "5000:5000"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
دستورات زیر را به عنوان مثال اجرا کنید:
docker-compose up -d
مرحله ششم: با Terraform مستقر شوید
Terraform را اولیه کنید
terraform init
پیش نمایش تغییرات
terraform plan
پیکربندی را اعمال کنید
terraform apply -auto-approve
Terraform خروجی خواهد کرد آدرس IP عمومی از نمونه
مرحله 7: به برنامه مستقر دسترسی پیدا کنید
پس از اتمام استقرار ، مرورگر خود را باز کرده و بازدید کنید:
http://:5000
شما برنامه وب سفارشی اکنون باید با موفقیت اجرا شود! 🎉
مرحله 8: منابع را نابود کنید (اختیاری)
برای تمیز کردن همه چیز و جلوگیری از اتهامات AWS ، اجرا کنید:
terraform destroy -auto-approve
پایان
در این وبلاگ ، ما:
✅ استفاده شده ماژول های ترازو برای استفاده مجدد بهتر
✅ مستقر نمونه EC2 با Terraform
✅ نصب شده Docker and Docker آهنگسازی
✅ دویدن کاربرد چند کانتینر سفارشی
✅ مجاز ترافیک SSH & HTTP با یک گروه امنیتی
✅ خروجی IP عمومی برای دسترسی آسان
این یک گام بزرگ به سمت زیرساخت به عنوان کد (IAC) وت اتوماسیون گردش کار DevOpsبشر
💡 مراحل بعدی:
- اضافه کردن ظروف بیشتر به برنامه
- اجرا مقیاس پذیر با AWS ECS
- استفاده کردن حالت از راه دور Terraform برای مقیاس پذیری بهتر
سؤال یا پیشنهاد دارید؟ آنها را در نظرات رها کنید! 🚀