برنامه نویسی

وبلاگ Jekyll با Terraform (Opentofu) با استفاده از خطوط لوله GitLab

در این راهنما ، من یک کتابچه راهنمای کوتاه برای استقرار یک وبلاگ استاتیک ارائه می دهم ، در این مورد Jekyll (با تغییرات جزئی ، باید بتوانید آن را برای هر وب سایت استاتیک دیگر کار کنید) ، به آمازون S3 با استفاده از خطوط لوله GITLAB. تمام زیرساخت ها در Terraform (یا Opentofu ، مانند مورد ما) اداره می شوند.

این دفترچه راهنما فرض می کند که شما از مسیر 53 به عنوان ارائه دهنده DNS خود استفاده می کنید و تمام زیرساخت های AWS به منطقه شرق ایالات متحده (N. ویرجینیا) اعزام می شوند. اگر می خواهید از منطقه دیگری استفاده کنید ، تنظیم کنید aws_region متغیر بر این اساس در blog.tfvarsبشر

مرحله 1: تنظیم اعتبار و ایجاد سطل S3

ابتدا باید اعتبار AWS را تنظیم کنیم و اطمینان حاصل کنیم که AWS CLI و Terraform (یا Opentofu) از قبل نصب شده اند.

من از این دفترچه راهنما برای نصب Opentofu استفاده کردم:

نصب Opentofu در لینوکس مبتنی بر .db

در اینجا کد نصب وجود دارد:

# Download the installer script:
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh
# Alternatively: wget --secure-protocol=TLSv1_2 --https-only https://get.opentofu.org/install-opentofu.sh -O install-opentofu.sh

# Give it execution permissions:
chmod +x install-opentofu.sh

# Please inspect the downloaded script

# Run the installer:
./install-opentofu.sh --install-method deb

# Remove the installer:
rm -f install-opentofu.sh
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای نصب Terraform ، از این راهنما استفاده کنید:

Terraform را نصب کنید

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update
sudo apt-get install terraform
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای نصب AWS CLI ، دستورالعمل ها را در اینجا دنبال کنید:

نصب یا به روزرسانی آخرین نسخه AWS CLI

apt install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پس از اتمام نصب ، اعتبار AWS خود را با استفاده از نمایه تنظیم کنید prod (می توانید هر نام نمایه را انتخاب کنید ، اما prod برای این دفترچه استفاده می شود):

aws configure --profile prod
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پس از تنظیم اعتبار خود ، آنها را با اجرا تأیید کنید cat ~/.aws/credentials – باید چیزی مانند:

[prod]
aws_access_key_id=AXXXXXXXXX
aws_secret_access_key=xxxxxxxxxxxxxxxxxxx
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اعتبارنامه ها را با دستور زیر آزمایش کنید تا اطمینان حاصل شود که آنها کار می کنند:

aws sts get-caller-identity --profile prod
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شما باید خروجی مشابه:

{
    "UserId": "AXXXXXXXXX",
    "Account": "8XXXXXXXXX",
    "Arn": "arn:aws:iam::8XXXXXXXXX:user/jurijsxxxxxxx"
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون ، سطل S3 را که در آن پرونده دولت Terraform ذخیره می شود ، ایجاد کنید. به خاطر داشته باشید که این نام ممکن است قبلاً گرفته شود ، بنابراین از چیزی منحصر به فرد استفاده کنید. اگر از نام دیگری استفاده می کنید ، حتماً به روز کنید main.tf بر این اساس:

aws s3api create-bucket --bucket "myblog-tf-state" --region "us-east-1" --acl private --profile prod
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

خروجی باید چیزی شبیه به این باشد:

{
    "Location": "/myblog-tf-state"
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 2: تنظیم کد Terraform

بیشتر کد Terraform از مخزن زیر گرفته شده است:

Github terraform-aws-static-site

پست وبلاگ نویسنده با جزئیات توضیح می دهد که هر قسمت از کد چه کاری انجام می دهد:

Pirx.io – استقرار خودکار سایت استاتیک در AWS با استفاده از terraform

با این حال ، من با این کد با چند مسئله روبرو شدم. اول ، اجباری را از دست می داد aws_s3_bucket_ownership_controls منبع راه حل اضافه کردن aws_s3_bucket_ownership_controls منبع و به روزرسانی aws_s3_bucket_acl بر این اساس در اینجا قطعه کامل کد برای قسمت مربوطه آورده شده است:

resource "aws_s3_bucket" "static_site" {
  bucket = var.domain
}

resource "aws_s3_bucket_ownership_controls" "static_site" {
  bucket = aws_s3_bucket.static_site.id
  rule {
    object_ownership = "BucketOwnerPreferred"
  }
}

resource "aws_s3_bucket_acl" "static_site" {
  depends_on = [aws_s3_bucket_ownership_controls.static_site]

  bucket = aws_s3_bucket.static_site.id
  acl    = "private"
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

علاوه بر این ، ما برای استقرار وبلاگ از طریق خط لوله GitLab باید یک کاربر IAM ایجاد کنیم. من کد مربوطه را از اینجا کپی کردم:

github terraform-aws-s3-site-site

resource "aws_iam_user" "deploy" {
  name = "${var.domain}-deploy"
  path = "https://dev.to/"
}

resource "aws_iam_access_key" "deploy" {
  user = aws_iam_user.deploy.name
}

resource "aws_iam_user_policy" "deploy" {
  name   = "deploy"
  user   = aws_iam_user.deploy.name
  policy = data.aws_iam_policy_document.deploy.json
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این قطعه کد را به آن اضافه کنید outputs.tf برای خروجی اعتبار مورد نیاز برای خط لوله:

output "AWS_ACCESS_KEY_ID" {
  sensitive   = true
  description = "The AWS Access Key ID for the IAM deployment user."
  value       = aws_iam_access_key.deploy.id
}

output "AWS_SECRET_ACCESS_KEY" {
  sensitive   = true
  description = "The AWS Secret Key for the IAM deployment user."
  value       = aws_iam_access_key.deploy.secret
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای آسانتر کردن کارها ، من تمام کد را در یک مخزن واحد تلفیق کردم:

github jekyll-terraform-aws-s3

من تصمیم گرفتم به جای ماژول ها برای سادگی از یک رویکرد یکپارچه استفاده کنم. شما فقط باید حداقل تنظیم کنید domain وت route53_zone_id متغیرها در blog.tfvars و شما آماده است تا زیرساخت ها را در AWS مستقر کنید:

tofu init
tofu plan -var-file="blog.tfvars"
tofu apply -var-file="blog.tfvars"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یا با استفاده از terraform:

terraform init
terraform plan -var-file="blog.tfvars"
terraform apply -var-file="blog.tfvars"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پس از استفاده ، خروجی متغیرهایی را برای استفاده بعداً در خط لوله نمایش می دهد:

AWS_ACCESS_KEY_ID = 
AWS_SECRET_ACCESS_KEY = 
CLOUDFRONT_DISTRIBUTION_ID = "EXXXXXX"
S3_BUCKET = "my-site.com"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای بازیابی متغیرهای حساس ، اجرا کنید:

tofu output --json
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یا با استفاده از terraform:

terraform output --json
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله 3: تنظیم خط لوله Gitlab

خط لوله ای که من استفاده می کنم مستقیماً از اینجا کپی می شود:

وبلاگ Schenktech – میزبان یک سایت Jekyll در S3 Part 2

از آنجا که نویسنده مخزن GIT را برای کد ارائه نداد ، من خودم یکی را ایجاد کردم:

Gitlab Deploy-Jekyll-to-S3

هنگامی که آن مخزن را چنگال می زنید یا پرونده ها را کپی می کنید ، باید متغیرهای زیر را در تنظیمات Gitlab CI/CD تنظیم کنید. اطمینان حاصل کنید که آنها برای محافظت از اطلاعات حساس ماسک و محافظت می شوند:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • CLOUDFRONT_DISTRIBUTION_ID
  • S3_BUCKET

بعد ، کد Jekyll واقعی خود را به مخزن اضافه کنید ، متعهد شوید و آن را فشار دهید:

cd ~
git clone https://github.com/daattali/beautiful-jekyll.git
rm -Rf ./beautiful-jekyll/.git* ./beautiful-jekyll/README.md
cp -a ./beautiful-jekyll/* ./deploy-jekyll-to-s3/  # Assuming your code with the pipeline is in ~/deploy-jekyll-to-s3 directory
cd ~/deploy-jekyll-to-s3
git add .
git commit -m "added jekyll"
git push
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و شما تمام شد! پس از اتمام ساخت ، وب سایت شما مستقر خواهد شد و باید الگوی زیبای جکیل را به صورت زنده ببینید.

در ابتدا در وبلاگ Cyberpunk Tools منتشر شده است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا