از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
استقرار برنامه های جنگو در AWS EC2 با داکر
سرفصلهای مطلب
معرفی
در زمینه پر سرعت برنامه های کاربردی وب، کانتینری سازی نه تنها رایج شده است، بلکه حالت ترجیحی بسته بندی و ارائه برنامه های کاربردی وب نیز شده است. کانتینرها به ما این امکان را می دهند که برنامه های خود را بسته بندی کنیم و آنها را در هر جایی بدون نیاز به پیکربندی مجدد یا تطبیق برنامه های خود با پلت فرم استقرار مستقر کنیم.
در خط مقدم کانتینرسازی قرار دارد داکرابزاری است که برای بسته بندی و اجرای برنامه ها در کانتینرهایی که پلتفرم آگنوستیک هستند استفاده می شود. فناوری بدون سرور نیز در این دوره از کانتینریسازی شکوفا شده است و ثابت میکند که در هنگام استقرار برنامههای کاربردی خود با ارائهدهندگان بیشتر و بیشتری که به کاربران اجازه میدهند نرمافزار کانتینریشده را استقرار دهند، گزینهای برای توسعهدهندگان است.
در حالی که ساخت یک برنامه کاربردی مهم است، در دسترس قرار دادن آن برای کاربران نهایی نیز بخش مهمی از محصول است. در این پست، یک برنامه جنگو را با استفاده از داکر بسته بندی کرده و آن را در آن مستقر می کنیم EC2 آمازون.
EC2 چیست؟
آمازون ابر محاسباتی الاستیک (EC2) پیشنهادی است که به توسعه دهندگان اجازه می دهد تا برنامه های خود را با ایجاد نمونه هایی از ماشین های مجازی در فضای ابری تهیه و اجرا کنند. EC2 همچنین مقیاس خودکار را در جایی که منابع بر اساس تخصیص داده می شود ارائه می دهد روی میزان ترافیک دریافتی
درست مانند سایر پیشنهادات AWS، EC2 را می توان به راحتی با سایر خدمات آمازون مانند ادغام کرد سرویس صف ساده (SQS)، یا سرویس ذخیره سازی ساده (S3)، در میان دیگران.
EC2 دارای ویژگی های زیر است:
- موارد: محیط های محاسباتی مجازی یا سرورهایی که به توسعه دهندگان اجازه می دهد برنامه های خود را اجرا کنند. این نمونه ها را می توان از نظر حافظه، ذخیره سازی، قدرت محاسباتی و منابع شبکه پیکربندی کرد تا متناسب با نیاز یا سناریوی فعلی باشد.
- تصاویر ماشین آمازون (AMI): الگوهای از پیش پیکربندی شده ای که برای ایجاد نمونه استفاده می شوند. آنها با سیستم عامل و نرم افزار از پیش بارگذاری شده در صورت نیاز عرضه می شوند و قابل تنظیم هستند.
- حجم های فروشگاه نمونه: برای ذخیره موقت داده ها استفاده می شود. این داده ها با پایان یافتن نمونه حذف می شوند.
- فروشگاه بلوک الاستیک (EBS) Volumes: حجمهای ذخیرهسازی بسیار در دسترس و قابل اعتماد که به منظور ذخیرهسازی مداوم دادهها به نمونهها متصل میشوند. داده های ذخیره شده در EBS Volumes بیشتر از نمونه ها عمر می کند و می توان چندین جلد را نصب کرد روی یک نمونه
- گروه های امنیتی: فایروال های مجازی که با تعیین پروتکل ها، محدوده آدرس IP و پورت ها، دسترسی به نمونه ها را کنترل می کنند. این ما را قادر می سازد تا ترافیک را به نمونه های خود کنترل و محدود کنیم.
اینها تنها تعدادی از ویژگیهای Elastic Compute Cloud آمازون هستند و موارد دیگر را میتوان یافت در مستندات.
پیش نیازها
در این آموزش، ما یک برنامه تحت وب می سازیم و آن را در سرویس EC2 آمازون مستقر می کنیم. برای رسیدن به آن نیاز داریم:
- یک خدمات وب آمازون حساب (AWS) که به ما امکان دسترسی به EC2 را می دهد. از طریق این لینک، می توانید در ردیف رایگان ثبت نام کنید که برای کار در این پست کافی است.
- Python 3.6+، Pip و Virtualenv به منظور ساخت برنامه جنگو ما نصب شده است.
- داکر همچنین برای بسته بندی برنامه ما و اجرای آسان آن در a مورد نیاز است container که نه تنها قابل حمل است بلکه می تواند در هر جایی که Docker نصب شده است اجرا شود.
داکر کردن یک برنامه جنگو
ما میخواهیم با ساختن برنامه ساده جنگو و کانتینری کردن آن شروع کنیم تا به ما امکان میدهد به راحتی آن را مستقر کنیم. بیایید با ایجاد یک پوشه برای پروژه خود شروع کنیم:
$ mkdir django_ec2 && cd $_
سپس یک محیط مجازی:
$ virtualev --python=python3 env --no-site-packages
سپس، بیایید آن را فعال کنیم و جنگو را نصب کنیم:
$ source env/bin/activate
$ pip install Django
یک برنامه جانشین ساده Django کافی است. تنها کاری که برای بوت استرپ کردن پروژه باید انجام دهیم این است که اجرا شود django-admin
‘s startproject
دستور، که یک پروژه اساسی را برای نام دایرکتوری داده شده شروع می کند:
$ django-admin startproject django_ec2_project
سپس، دایرکتوری پروژه را وارد می کنیم:
$ cd django_ec2_project
و یک سرور توسعه سبک وزن راه اندازی کنید:
$ python manage.py runserver
اگر همه چیز خوب پیش برود، باید بتوانیم فرود زیر را مشاهده کنیم page هنگامی که ما به برنامه خود دسترسی پیدا می کنیم localhost:8000
:
قبل از بسته بندی برنامه جنگو، باید به همه منابع اجازه ترافیک بدهیم که می توانیم با تغییر ALLOWED_HOSTS
تنظیم در django_ec2_project/django_ec2_project/settings.py
:
ALLOWED_HOSTS = ('*')
توجه داشته باشید: توصیه نمی شود که یک علامت عام در محیط تولید باقی بماند. لطفاً به جای آن از دامنه سایت تولیدی خود استفاده کنید.
از آنجایی که این برای استقرار کافی است، اجازه دهید پیش برویم و برنامه خود را با اضافه کردن یک کانتینر کنیم Dockerfile
در root پروژه ما شامل موارد زیر است:
FROM python:3.6-alpine
MAINTAINER Robley Gori <ro6ley.github.io>
EXPOSE 8000
RUN apk add --no-cache gcc python3-dev musl-dev
ADD . /django_ec2
WORKDIR /django_ec2
RUN pip install -r requirements.txt
RUN python django_ec2_project/manage.py makemigrations
RUN python django_ec2_project/manage.py migrate
CMD ( "python", "django_ec2_project/manage.py", "runserver", "0.0.0.0:8000" )
این Dockerfile توضیح می دهد که چگونه برنامه ما کانتینری شده و اجرا می شود. در بالا، از یک تصویر پایه استفاده می کنیم که پایتون 3.6 را نصب کرده است. پورت را هم افشا می کنیم 8000
، که به این معنی است که ترافیک به container باید به آن پورت هدایت شود، جایی که برنامه جنگو ما نیز از آنجا اجرا می شود. ما چند بسته را به تصویر خود نصب می کنیم و سپس برنامه جنگو را به آن اضافه می کنیم django_ec2
فهرست راهنما.
از آنجایی که پروژه جنگو ما کانتینری است، نیازی به ایجاد یک محیط مجازی نخواهیم داشت زیرا قبلاً از ماشینی که آن را اجرا می کند جدا شده است. بنابراین ما نیازمندی ها را مستقیماً نصب می کنیم و مهاجرت ها را اجرا می کنیم.
در انتها دستوری را اضافه می کنیم که زمانی اجرا می شود container شروع شده است که در مورد ما نیز برنامه جنگو ما را راه اندازی کرده و اجرا می کند روی بندر 8000
.
اگر توضیح عمیق تری می خواهید روی در این موضوع، مقاله ما Dockerizing Applications Python را بررسی کنید.
گام بعدی ساخت تصویر Docker با استفاده از Dockerfile بالا خواهد بود. قبل از آن، وابستگی های نصب شده در محیط را در یک فایل ذخیره می کنیم:
$ pip freeze > requirements.txt
و تنها پس از آن، بیایید تصویر داکر را بسازیم:
$ docker build . -t django_ec2
از طریق این دستور، Docker به دنبال Dockerfile ما در پوشه فعلی میگردد و از آن برای ساخت یک تصویر استفاده میکند که با عنوان برچسب گذاری میشود. django_ec2
. هنگامی که تصویر ما ساخته شد، می توانیم آن را با استفاده از دستور اجرا کنیم:
$ docker run -d -p 8000:8000 django_ec2
این دستور ما را شروع می کند container که دارای برنامه جنگو در حال اجرا و نقشه پورت است 8000
روی ماشین ما به container’ورزش 8000
، همانطور که توسط -p
پرچم و بدون سر اجرا خواهد شد (حتی پس از بستن terminal) همانطور که توسط -d
پرچم.
باید از همان فرود جنگو استقبال کنیم page هنگامی که ما به localhost:8000
یک بار دیگر، فقط این بار ما به برنامه در Docker دسترسی خواهیم داشت container برخلاف ماشین محلی ما.
وقتی تصویرمان آماده است، باید آن را منتشر کنیم داکرهاب برای تسهیل استقرار process روی EC2.
Docker Hub یک رجیستری برای تصاویر آماده است که کاربران را قادر می سازد تا تصاویر سفارشی Docker را برای همه اهداف ایجاد و به اشتراک بگذارند. همچنین به ما این امکان را می دهد که تصاویر خود را برای دسترسی منتشر کنیم روی پلتفرم های دیگر مانند AWS. در مورد ما، تصویر خود را در Dockerhub منتشر می کنیم، سپس آن را برای استقرار به EC2 می کشیم.
برای انتشار تصویر خود باید یک حساب کاربری ایجاد کنید روی ابتدا Docker Hub و وارد آن شوید روی ما terminal:
$ docker login
پس از ورود به سیستم، باید تصویر خود را با نام کاربری خود تگ کنیم و سپس آن را به Dockerhub فشار دهیم:
$ docker tag django_ec2 <DOCKERHUB_USERNAME>/django_ec2
$ docker push <DOCKERHUB_USERNAME>/django_ec2
با این کار، ما برای مرحله بعدی آماده هستیم، یعنی استقرار اپلیکیشن خود در Elastic Compute Cloud آمازون.
استقرار به EC2
با تصویر داکر آماده و منتشر شده در Dockerhub، اکنون میتوانیم به حساب AWS خود وارد شویم console و در داشبورد EC2، ما می توانیم یک نمونه جدید را بچرخانیم – که از طریق یک سری مراحل به دست می آید.
AMI را انتخاب کنید
اولین مرحله شامل انتخاب یک تصویر ماشین آمازون (AMI) که برای ایجاد نمونه ما استفاده می شود. ما با گزینه هایی از جمله ارائه شده است کلاه قرمز، سرور اوبونتو، و ویندوز سرور.
برای این نمایش به تصویری نیاز داریم که برای اجرای کانتینرها و ارسال با Docker سفارشی شده باشد. برای پیدا کردن آن، تایپ کنید ECS
در نوار جستجو:
را آمازون ECS-بهینه سازی آمازون لینوکس 2 برای سناریوی ما ایده آل است و ما آن را انتخاب خواهیم کرد.
نوع نمونه را انتخاب کنید
پس از انتخاب AMI برای نمونه خود، اکنون باید یک نوع نمونه را انتخاب کنیم. انتخاب ما در اینجا تعداد منابعی را که نمونه ما از نظر CPU، حافظه، ذخیره سازی و ظرفیت عملکرد شبکه خواهد داشت، تعیین می کند.
از آنجایی که ما هستیم روی سطح رایگان AWS، ما به جلو رفته و از آن استفاده خواهیم کرد t2.micro
به عنوان مثال، که برای نمونه های همه منظوره در نظر گرفته شده است و دارای 1 CPU مجازی و 1 گیگابایت حافظه است.
این فهرست شامل انواع نمونههای قویتری است که سایر نمونهها برای توان محاسباتی، حافظه یا ذخیرهسازی بهینهسازی شدهاند.
پیکربندی نمونه
اکنون که نوع نمونه را انتخاب کردهایم، مرحله بعدی به ما امکان میدهد تا جزئیات بیشتری را در مورد نمونه خود مشخص کنیم، از جمله تعداد نمونههایی که در هر زمان معین راهاندازی میشوند، گزینههای شبکه و سیستمهای فایل و سایر جزئیات. در این مرحله هیچ تغییری در گزینه های پیش فرض ایجاد نمی کنیم.
فضای ذخیره سازی را اضافه کنید
مرحله چهارم شامل اضافه کردن و مشخص کردن جزئیات ذخیره سازی برای نمونه ما است. این بخش به ما امکان می دهد حجم های اضافی اضافه کنیم، اندازه و نوع حجم را مشخص کنیم و اینکه آیا فضای ذخیره سازی ما رمزگذاری خواهد شد یا خیر.
8 گیگابایت گزینه پیش فرض است و برای برنامه ساده جنگو ما بیش از اندازه کافی است.
افزودن برچسب
AWS به ما این امکان را می دهد که برچسب هایی را به منابع خود اختصاص دهیم که از طریق آنها بتوانیم آنها را از نظر هدف، دسترسی یا محیط طبقه بندی کنیم. برچسب ها اجباری نیستند اما برای کمک به شناسایی منابع با افزایش تعداد آنها به شدت توصیه می شود.
پیکربندی گروه امنیتی
ما قبلاً در پست و در این مرحله از گروه های امنیتی را تعریف کردیم process، آنها را با ایجاد یک گروه امنیتی جدید یا استفاده از یک گروه موجود پیکربندی می کنیم.
ما قصد داریم یک گروه امنیتی جدید ایجاد کنیم که مشخص می کند چه ترافیکی برای سرور ما پذیرفته می شود. اولین قانون، قانون SSH است که به ترافیک SSH از طریق پورت به نمونه ما اجازه می دهد 22
.
ما منبع را تغییر می دهیم Anywhere
و همچنین یک قانون جدید برای Custom TCP
و منبع را تنظیم کنید Anywhere
و محدوده پورت به 8000
. این به ما امکان می دهد از طریق پورت به برنامه وب جنگو خود دسترسی پیدا کنیم 8000
.
بررسی و راه اندازی
این مرحله نهایی است که در آن جزئیات پیکربندی نمونه خود برای تأیید به ما ارائه می شود. همچنین میتوانیم پیکربندی را در این مرحله قبل از راهاندازی نمونه خود ویرایش کنیم.
اگر همه چیز درست باشد، در نهایت می توانیم کلیک کنیم روی “راه اندازی” تا در نهایت نمونه ما شروع شود:
قبل از اینکه نمونه ما راه اندازی شود، باید یک جفت کلید ایجاد کنیم که ما را قادر می سازد به نمونه در حال اجرا خود دسترسی داشته باشیم. برای اجرای برنامه جنگو، باید وارد نمونه شده و آن را در آنجا مستقر کنیم.
کلید خصوصی برای احراز هویت ما استفاده میشود و به ما امکان دسترسی به نمونه را میدهد تا بتوانیم استقرار خود را ادامه دهیم. سپس تأیید راهاندازی نمونه نمایش داده میشود روی بعدی page:
دسترسی به نمونه EC2
با دانلود کلید خصوصی و اجرای نمونه، اجازه دهید وارد سیستم شده و برنامه خود را اجرا کنیم.
برای این، ما نیاز داریم .pem
فایلی که قبلا دانلود شده و الف terminal پنجره ما همچنین به یک نام کاربری برای AMI انتخاب شده نیاز داریم – برای آمازون لینوکس AMI، نام کاربری پیش فرض است ec2-user
.
DNS عمومی نمونه نیز برای اتصال به آن مورد نیاز است و می توان آن را پیدا کرد روی بخش جزئیات نمونه روی EC2 console داشبورد.
اجازه دهید یک را باز کنیم terminal در پوشه ای که حاوی فایل کلید خصوصی ما است. ابتدا باید مجوزهای کلید را تغییر دهیم تا هشدار “فایل کلید محافظت نشده” را مشاهده نکنیم:
$ chmod 400 <PRIVATE_KEY_FILE_NAME>
سپس می توانیم از ssh
ابزار، همراه با فایل کلید ما، برای اتصال به نمونه:
$ ssh -i <PRIVATE_KEY_FILE_NAME> ec2-user@<PUBLIC_DNS>
__| __| __|
_| ( \__ \ Amazon Linux 2 (ECS Optimized)
____|\___|____/
For documentation, visit http://aws.amazon.com/documentation/ecs
12 package(s) needed for security, out of 25 available
Run "sudo yum update" to apply all updates.
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
(ec2-user@ip-#
پاسخ بالا به این معنی است که ما با موفقیت وارد نمونه خود شده ایم، با کشیدن تصویر برنامه خود از Dockerhub و اجرای آن با استفاده از docker run
دستور:
$ docker run -d -p 8000:8000 <DOCKERHUB_USERNAME>/django_ec2
هنگامی که تصویر Docker ما در نمونه ما کشیده شد و با موفقیت اجرا شد، اکنون می توانیم به برنامه جنگو خود دسترسی داشته باشیم. روی وب را از طریق همان آدرسی که برای SSH استفاده می کردیم وارد آن می شد.
وقتی این کار را انجام می دهیم، از ما استقبال می شود:
برنامه جنگو ما اکنون فعال است روی AWS Elastic Compute Cloud!
نتیجه
در این پست، ما یک برنامه جنگو را با استفاده از Docker کانتینری کرده و آن را با موفقیت در سرویس EC2 آمازون مستقر کرده ایم. ما همچنین آموختهایم که EC2 چیست و چه چیزی به ما به عنوان توسعهدهنده ارائه میدهد و چگونه میتوانیم از آن برای در دسترس قرار دادن برنامههای کاربردی وب خود برای کاربران نهایی استفاده کنیم.
کد منبع اسکریپت در این پروژه را می توان یافت اینجا روی GitHub.
(برچسبها برای ترجمه)# aws
منتشر شده در 1403-01-18 17:39:10