استقرار پیش نمایش خودکار از GitHub به AWS در 10 دقیقه

استقرار پیشنمایش راهی برای چرخاندن محیطهای موقت از شاخهها یا کشیدن درخواستها است. از آنها برای اجازه دادن به هم تیمی ها و مدیران محصول استفاده می شود تا قبل از ادغام تغییرات، کار شما را به صورت بصری بررسی کنند، بدون اینکه فقط به کد تکیه کنند.
3 راه برای دریافت پیش نمایش استقرار
برای استفاده از استقرار پیش نمایش در گردش کار توسعه خود، 3 راه حل دارید:
- ارائه دهنده میزبانی شما، استقرارهای پیش نمایش را مرتب کرده است (مانند Heroku / Vercel / Render / Scalingo). راه اندازی آسان است، اما شما قفل فروشنده را دریافت می کنید، و برخی از ارائه دهندگان گران هستند.
- شما یک SaaS شخص ثالث پیدا می کنید تا خدمات را برای شما ارائه دهد. اگر از فایلهای تعریف سفارشی استفاده کنند، راهاندازی میتواند پیچیده باشد، هزینهبر است و کد شما اکنون در زیرساخت ارائهدهنده دیگر در خطر است.
- شما راه حلی می سازید یا استفاده می کنید که به شخص ثالث متکی نیست. این می تواند یک اکشن GitHub، خط لوله جنکینز، اسکریپت نیمه خودکار و غیره باشد.
ایجاد یک راه حل سفارشی از نظر توسعه و نگهداری هزینه بر است، بنابراین امروز می خواهم در مورد PullPreview صحبت کنم، یک اکشن GitHub که راه اندازی پیش نمایش را بسیار آسان می کند.
PullPreview
PullPreview یک GitHub Action منبع باز است که دارای ویژگی های زیر است:
- با هر برنامه ای که می تواند با Docker Compose بوت شود (یعنی همه) کار می کند.
- را می توان با اعمال یک برچسب روی یک درخواست کشش فعال کرد.
- کد را مستقیماً از GitHub روی AWS (Lightsail) مستقر می کند.
- سرورها در حساب AWS خودتان راه اندازی می شوند.
- دسترسی SSH به سرورها
- در صورت تمایل می توانید از دامنه سفارشی خود استفاده کنید.
- محیط ها در سراسر استقرار پایدار هستند.
- به طور کامل در رابط کاربری GitHub ادغام شده است، نیازی به استفاده از برنامه دیگری نیست.
بیا شروع کنیم
اعتبارنامه AWS را به مخزن خود اضافه کنید
PullPreview برای استقرار سرورها به اعتبارنامه AWS نیاز دارد، بنابراین بیایید یک کاربر جدید ایجاد کنیم.
به دلایلی مبهم AWS یک خطمشی پیشفرض برای Lightsail ارائه نمیکند، بنابراین باید یک خطمشی جدید با محتوای زیر برای این کاربر ایجاد کنید:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lightsail:*",
"Resource": "*"
}
]
}
سپس خط مشی جدید ایجاد شده را پیوست کنید و کاربر را ایجاد کنید:
مرحله آخر بازیابی یک کلید دسترسی و کلید دسترسی مخفی برای آن کاربر جدید، و اعلام آن کلیدها در تنظیمات مخزن خود در GitHub، به عنوان مخزن جدید است.
برچسب، فایل گردش کار و نمونه برنامه Docker Compose
عمل PullPreview فقط برای درخواستهای کششی که دارای برچسب خاصی هستند فعال میشود. به طور پیش فرض نام برچسب است pullpreview
، پس بیایید آن را در مخزن GitHub خود ایجاد کنیم. از هر رنگی که دوست دارید استفاده کنید.
حالا یک شاخه جدید ایجاد کنید و فایل های زیر را اضافه کنید:
(1) فایل گردش کار pullpreview:
# .github/workflows/pullpreview.yml
name: PullPreview
on:
pull_request:
types: [labeled, unlabeled, synchronize, closed, reopened]
jobs:
deploy:
permissions:
contents: read # to fetch code (actions/checkout)
deployments: write # to delete deployments
pull-requests: write # to remove labels
statuses: write # to create commit status
name: deploy
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v2
- uses: pullpreview/action@v5
# see https://github.com/pullpreview/action/wiki/Inputs
with:
admins: your-github-username
compose_files: docker-compose.pullpreview.yml
ports: 80,443
default_port: 443
env:
AWS_ACCESS_KEY_ID: "${{ secrets.AWS_ACCESS_KEY_ID }}"
AWS_SECRET_ACCESS_KEY: "${{ secrets.AWS_SECRET_ACCESS_KEY }}"
AWS_REGION: "us-east-1"
(2) نمونه فایل docker-compose با پشتیبانی از SSL:
# docker-compose.pullpreview.yml
services:
# easily set up SSL termination
proxy:
image: caddy:2
restart: unless-stopped
command: "caddy reverse-proxy --from '${PULLPREVIEW_URL}' --to web:4567"
depends_on:
- web
ports:
- "80:80"
- "443:443"
volumes:
- "/data"
# simple ruby web server for demo purposes, which connects to a postgres DB
web:
restart: unless-stopped
depends_on:
- db
build:
context: .
dockerfile_inline: |
FROM ruby:3.2
RUN gem install sinatra pg puma
CMD ruby -rsinatra -rpg -rpuma \
-e'get("https://dev.to/"){ "Hey PullPreview user, here is the postgres version: #{PG.connect(ENV["PGURI"]).exec("SELECT VERSION()").getvalue(0,0)}" }'
EXPOSE 4567
environment:
PGURI: "postgres://postgres:p4ssw0rd@db/postgres"
APP_ENV: production
db:
restart: unless-stopped
image: postgres:13
environment:
POSTGRES_PASSWORD: p4ssw0rd
بگذارید جادو شروع شود
حالا فایل های قبلی را commit کنید، شاخه جدید خود را فشار دهید و یک درخواست کشش را با آن باز کنید pullpreview
برچسب اعمال شد GitHub شروع به اجرای کار PullPreview می کند و چند دقیقه بعد یک محیط پیش نمایش جدید راه اندازی می شود!
جلوتر رفتن
مراحل بعدی جایگزینی مثال خواهد بود docker-compose.ci.yml
با فایل Docker Compose خود فایل کنید و ببینید آیا محیط نیز با موفقیت اجرا می شود یا خیر! ممکن است برای رسیدن به نقطه ای که محیط شما به طور کامل راه اندازی شده است به چند تلاش نیاز داشته باشید، اما به یاد داشته باشید که در صورت نیاز همیشه می توانید SSH را به سرور موقت وارد کنید!
نتیجه
ما فقط سطح کاری را که PullPreview می تواند انجام دهد خراشیده ایم. این واقعیت که به طور کامل در اکوسیستم GitHub و در حساب AWS شما اجرا می شود، امکان استفاده از موارد بسیار متنوعی را فراهم می کند:
- محدودیت دسترسی از محدوده IP خاص
- دامنه های سفارشی
- انواع نمونه های مختلف
- پشتیبانی از ثبت های docker خصوصی
- پشتیبانی از چندین فایل نوشتن docker
- پشتیبانی از چندین محیط پیش نمایش در هر درخواست کشش
- پشتیبانی از داده های بذر
- و غیره.
حتما باید به مستندات نگاهی بیندازید.
همچنین توجه داشته باشید که عملکرد PullPreview برای استفاده شخصی رایگان است، اما با مجوز تجاری (300 یورو در سال) برای مشاغل ارائه می شود. این تضمین می کند که عملکرد حفظ می شود و ویژگی های جدید اضافه می شود.