استقرار برنامه Docker در لیارا
در ابتدا، پس از ساخت برنامه بایستی تمام فایلها و پوشههایی که قصد ندارید در لیارا آپلود شوند را، از پروژه پاک کنید. به عنوان مثال، اگر که برنامهتان مبتنی بر Python باشد، باید پوشه venv. و اگر برنامهتان مبتنی بر NodeJS است، باید دایرکتوری node_modules را از پروژه خود پاک کنید؛ چرا که لیارا در حین فرایند استقرار، آنها را برای شما ایجاد خواهد کرد. به صورت کلی، اگر که در پروژه خود فایلی به نام gitignore. یا dockerignore. دارید، کافیست تا فایلهای و دایرکتوریهای اشاره شده در این فایل را، از پروژه خود پاک کنید.
همچنین، پروژه شما باید شامل یک فایل به نام Dockerfile باشد؛ لیارا، در حین فرایند استقرار، به صورت خودکار این فایل را پیدا میکند و در ادامه، برنامهتان در سرورهای لیارا build میشود و image نهایی در رجیستری خصوصی شما، در لیارا، ذخیره خواهد شد. به عنوان مثال، اگر که برنامهتان مبتنی بر فریمورک go است، میتوانید قطعه کد زیر را در Dockerfile، قرار دهید:
در ادامه به ساختار Dockerfile فوق، پرداخته شده است:
با استفاده از دستور FROM go:latest، image رسمی go به عنوان base image تنظیم میشود و تگ latest باعث میشود تا برنامه از آخرین نسخه go استفاده کند.
دستور WORKDIR /app مسیر کاری داخل container را به دایرکتوری app تنظیم میکند. در واقع app همان دایرکتوری است که که کد برنامه ما در آنجا کپی میشود و دستورات بعدی در آن اجرا میشوند.
دستور . . COPY محتوای دایرکتوری که Dockerfile در آن قرار دارد را به دایرکتوری app درون container کپی میکند. این دستور این فرض را دارد که کد برنامه شما در همان دایرکتوری Dockerfile قرار دارد.
دستور RUN go mod download ماژولهای go که در فایل go.mod تعریف شدهاند را دانلود میکند.
دستور . RUN go build -o main برنامه go شما را اجرا میکند. پرچم o- نام فایل خروجی را به main تنظیم میکند و نقطهای که در انتهای دستور قرار دارد؛ نشاندهنده این است که کد منبع در دایرکتوری فعلی قرار دارد.
دستور CMD ["./main"] دستوری را که هنگام شروع کانتینر اجرا میشود، مشخص میکند.
شما میتوانید با استفاده از دستور EXPOSE پورتی که برنامه توسط آن به درخواست کاربران گوش میدهد را مشخص کنید. البته چون که در حین استقرار، لیارا از شما port برنامه را میپرسد بنابراین برای استقرار برنامههای داکرایز شده در لیارا، نیازی به نوشتن این دستور در Dockerfile نیست.
در ادامه، بایستی پوشه پروژه خود را درون یک فایل zip قرار بدهید؛ سپس در برنامه خود، بر روی گزینه استقرار جدید کلیک کرده؛ وارد تب Drag & Drog شوید و فایل zip را آپلود کنید تا وارد مرحله بعدی استقرار شوید:
پس از آپلود پروژه، باید شخصیسازیهای پروژه را در برنامه خود، لحاظ کنید.
در انتها، به صورت مستقیم به صفحه تاریخچه برنامه هدایت میشوید که میتوانید لاگهای مربوط به استقرار را در آن، مشاهده بفرمایید.
پس از ساخت برنامه، باید در مسیر اصلی پروژه، یک فایل به نام liaraignore. یا gitignore. یا dockerignore. ایجاد کنید و درون آن، اسامی تمامی فایلها یا پوشههایی که قصد ندارید در لیارا آپلود شوند را، وارد کنید؛ به عنوان مثال در برنامههای مبتنی بر Python، نیازی به آپلود دایرکتوری venv. به همراه محتوای آن نیست؛ چرا که لیارا در حین استقرار برنامه، آنها را برای شما میسازد؛ پس بایستی اسم این دایرکتوری در یکی از سه فایل فوق، نوشته شود.
همچنین، پروژه شما باید شامل یک فایل به نام Dockerfile باشد؛ لیارا، در حین فرایند استقرار، به صورت خودکار این فایل را پیدا میکند و در ادامه، برنامهتان در سرورهای لیارا build میشود و image نهایی در رجیستری خصوصی شما، در لیارا، ذخیره خواهد شد. به عنوان مثال، اگر که برنامهتان مبتنی بر فریمورک go است، میتوانید قطعه کد زیر را در Dockerfile، قرار دهید:
در ادامه به ساختار Dockerfile فوق، پرداخته شده است:
با استفاده از دستور FROM go:latest، image رسمی go به عنوان base image تنظیم میشود و تگ latest باعث میشود تا برنامه از آخرین نسخه go استفاده کند.
دستور WORKDIR /app مسیر کاری داخل container را به دایرکتوری app تنظیم میکند. در واقع app همان دایرکتوری است که که کد برنامه ما در آنجا کپی میشود و دستورات بعدی در آن اجرا میشوند.
دستور . . COPY محتوای دایرکتوری که Dockerfile در آن قرار دارد را به دایرکتوری app درون container کپی میکند. این دستور این فرض را دارد که کد برنامه شما در همان دایرکتوری Dockerfile قرار دارد.
دستور RUN go mod download ماژولهای go که در فایل go.mod تعریف شدهاند را دانلود میکند.
دستور . RUN go build -o main برنامه go شما را اجرا میکند. پرچم o- نام فایل خروجی را به main تنظیم میکند و نقطهای که در انتهای دستور قرار دارد؛ نشاندهنده این است که کد منبع در دایرکتوری فعلی قرار دارد.
دستور CMD ["./main"] دستوری را که هنگام شروع کانتینر اجرا میشود، مشخص میکند.
شما میتوانید با استفاده از دستور EXPOSE پورتی که برنامه توسط آن به درخواست کاربران گوش میدهد را مشخص کنید. البته چون که در حین استقرار، لیارا از شما port برنامه را میپرسد بنابراین برای استقرار برنامههای داکرایز شده در لیارا، نیازی به نوشتن این دستور در Dockerfile نیست.
فایل liara.json
در ادامه، در مسیر اصلی پروژه، یک فایل به نام liara.json ایجاد کنید و قطعه کد زیر را در آن قرار دهید:
در قطعه کد فوق، در فیلد app باید شناسه برنامه خود را به جای my--app و در فیلد port، پورتی که برنامه در آن، به درخواست کاربران، گوش میدهد، را وارد کنید. در فیلد platform باید نوع پلتفرم خود را که docker است، مشخص کنید.
تعیین Dockerfile
ممکن است بخواهید چندین پروژه، که در یک monorepo قرار دارند را با Dockerfile های مختلفی استقرار کنید؛ یا اینکه از نام و مسیر دلخواه برای Dockerfileتان استفاده کنید. برای این کار میتوانید قطعه کد زیر را به فایل liara.json، اضافه کنید و در فیلد dockerfile، مسیر Dokcerfile خود را مشخص کنید:
استفاده از Cache
همچنین میتوانید در فیلدی به نام cache تعیین کنید که در حین فرایند build برنامه، از cache استفاده شود یا خیر؛ این مقدار، به صورت پیشفرض، بر روی true قرار دارد:
تعریف ARGs
در داکر، دستور ARG برای تعریف متغیرهای زمان ساخت (build-time variables) استفاده میشود. این متغیرها میتوانند در طول فرآیند ساخت image استفاده شوند تا پارامترهای مهمی مانند نسخه نرمافزار و ... را تعیین کنند. این متغیرها در مرحله ساخت image در دسترس هستند و به صورت کلید-مقدار تعریف میشوند. شما میتوانید ARGهایتان را در آرایهای به نام args، تعریف کنید، به عنوان مثال:
تعیین فرمان اصلی
دستور ENTRYPOINT برای تعیین فرمان اصلی است که باید هنگام اجرای کانتینر، run شود. این فرمان تعیین میکند که کانتینر چه چیزی را باید به عنوان فرآیند اصلی خود اجرا کند. برای تغییر ENTRYPOINT در image خود، کافیست تا قطعه کدی مشابه قطعه کد زیر را به آرایهای به نام args، در فایل liara.json، اضافه کنید:
در نهایت، یک فایل liara.json میتواند مانند قطعه کد زیر باشد:
در صورتی که قصد دارید برنامهتان را در تیم مدنظرتان، مستقر کنید، باید فیلد team-idرا به فایل liara.json مانند شکل زیر، اضافه کنید. مقدار این فیلد، باید شناسه تیم شما در لیارا باشد:
اکنون کافیست تا در مسیر اصلی پروژه و جایی که فایل liara.json قرار دارد؛ دستور زیر را اجرا کنید و منتظر بمانید تا عملیات استقرار تمام شود:
در حین فرایند استقرار، میتوانید در ترمینال خود، لاگهای مربوط به آن را مشاهده بفرمایید.
پس از ساخت برنامه، باید در مسیر اصلی پروژه، یک فایل به نام liaraignore. یا gitignore. یا dockerignore. ایجاد کنید و درون آن، اسامی تمامی فایلها یا پوشههایی که قصد ندارید در لیارا آپلود شوند را، وارد کنید؛ به عنوان مثال در برنامههای مبتنی بر Python، نیازی به آپلود دایرکتوری venv. به همراه محتوای آن نیست؛ چرا که لیارا در حین استقرار برنامه، آنها را برای شما میسازد؛ پس بایستی اسم این دایرکتوری در یکی از سه فایل فوق، نوشته شود.
همچنین، پروژه شما باید شامل یک فایل به نام Dockerfile باشد؛ لیارا، در حین فرایند استقرار، به صورت خودکار این فایل را پیدا میکند و در ادامه، برنامهتان در سرورهای لیارا build میشود و image نهایی در رجیستری خصوصی شما، در لیارا، ذخیره خواهد شد. به عنوان مثال، اگر که برنامهتان مبتنی بر فریمورک go است، میتوانید قطعه کد زیر را در Dockerfile، قرار دهید:
در ادامه به ساختار Dockerfile فوق، پرداخته شده است:
با استفاده از دستور FROM go:latest، image رسمی go به عنوان base image تنظیم میشود و تگ latest باعث میشود تا برنامه از آخرین نسخه go استفاده کند.
دستور WORKDIR /app مسیر کاری داخل container را به دایرکتوری app تنظیم میکند. در واقع app همان دایرکتوری است که که کد برنامه ما در آنجا کپی میشود و دستورات بعدی در آن اجرا میشوند.
دستور . . COPY محتوای دایرکتوری که Dockerfile در آن قرار دارد را به دایرکتوری app درون container کپی میکند. این دستور این فرض را دارد که کد برنامه شما در همان دایرکتوری Dockerfile قرار دارد.
دستور RUN go mod download ماژولهای go که در فایل go.mod تعریف شدهاند را دانلود میکند.
دستور . RUN go build -o main برنامه go شما را اجرا میکند. پرچم o- نام فایل خروجی را به main تنظیم میکند و نقطهای که در انتهای دستور قرار دارد؛ نشاندهنده این است که کد منبع در دایرکتوری فعلی قرار دارد.
دستور CMD ["./main"] دستوری را که هنگام شروع کانتینر اجرا میشود، مشخص میکند.
شما میتوانید با استفاده از دستور EXPOSE پورتی که برنامه توسط آن به درخواست کاربران گوش میدهد را مشخص کنید. البته چون که در حین استقرار، لیارا از شما port برنامه را میپرسد بنابراین برای استقرار برنامههای داکرایز شده در لیارا، نیازی به نوشتن این دستور در Dockerfile نیست.
ممکن است بخواهید چندین پروژه، که در یک monorepo قرار دارند را با Dockerfile های مختلفی استقرار کنید؛ یا اینکه از نام و مسیر دلخواه برای Dockerfileتان استفاده کنید. برای این کار میتوانید در مسیر اصلی پروژه، یک فایل به نام liara.json ایجاد کنید و قطعه کد زیر را به فایل liara.json، اضافه کنید و در فیلد dockerfile، مسیر Dokcerfile خود را مشخص کنید:
همچنین میتوانید در فیلدی به نام cache تعیین کنید که در حین فرایند build برنامه، از cache استفاده شود یا خیر؛ این مقدار، به صورت پیشفرض، بر روی true قرار دارد:
در داکر، دستور ARG برای تعریف متغیرهای زمان ساخت (build-time variables) استفاده میشود. این متغیرها میتوانند در طول فرآیند ساخت image استفاده شوند تا پارامترهای مهمی مانند نسخه نرمافزار و ... را تعیین کنند. این متغیرها در مرحله ساخت image در دسترس هستند و به صورت کلید-مقدار تعریف میشوند. شما میتوانید ARGهایتان را در آرایهای به نام args، تعریف کنید، به عنوان مثال:
دستور ENTRYPOINT برای تعیین فرمان اصلی است که باید هنگام اجرای کانتینر، run شود. این فرمان تعیین میکند که کانتینر چه چیزی را باید به عنوان فرآیند اصلی خود اجرا کند. برای تغییر ENTRYPOINT در image خود، کافیست تا قطعه کدی مشابه قطعه کد زیر را به آرایهای به نام args، در فایل liara.json، اضافه کنید:
در نهایت، یک فایل liara.json میتواند مانند قطعه کد زیر باشد:
در فایل فوق، برای جلوگیری از خطا خوردن فرایند استقرار، از فیلدهای app و platform استفاده نکنید؛ چرا که لیارا، آنها را به صورت خودکار، تشخیص خواهد داد.
در صورتی که قصد دارید برنامهتان را در تیم مدنظرتان، مستقر کنید، باید فیلد team-idرا به فایل liara.json مانند شکل زیر، اضافه کنید. مقدار این فیلد، باید شناسه تیم شما در لیارا باشد:
در ادامه، بایستی یک ریپازیتوری در حساب گیتهاب خود برای برنامهمدنظرتان با نام دلخواهتان ایجاد کنید، برای این کار، پس از ورود به گیتهاب، وارد بخش Repositories شوید و بر روی دکمه New کلیک کنید؛ پس از نوشتن نام و توضیحات ریپازیتوری، سطح دسترسی ریپازیتوری را (public یا private)، انتخاب کنید و در نهایت بر روی دکمه create repository کلیک کنید تا ریپازیتوری برایتان ساخته شود:
در صورتی که از قبل، این کار را انجام دادهاید یا قصد دارید از ریپازیتوریهای فعلی خود استفاده کنید؛ نیازی به ساخت ریپازیتوری جدید نیست.
اکنون، باید پروژه نهایی خود را در ریپازیتوریتان در گیتهاب آپلود کنید؛ حتماً در نظر داشته باشید که درون پروژهتان، فایل gitignore. قرار داشته باشد و درون آن، فایلهای اضافی برنامه، که قصد ندارید آپلود شوند؛ لیست شده باشند. میتوانید برای آپلود، مانند دستورات زیر در ترمینال ریشه پروژهتان، عمل کنید:
در صورتی که هنوز git را در سیستم عامل خود نصب ندارید؛ میتوانید آن را از اینجا، دانلود و نصب نمایید.
اگر که از قبل، پروژه نهایی خود را همراه با فایل liara.json، در گیتهاب آپلود کردهاید؛ نیازی به انجام مجدد این کار نیست.
در ادامه، بایستی حساب لیارا خود را به گیتهاب متصل کنید. برای اتصال حساب لیارا خود به گیتهاب، در لیارا بر روی پروفایل خود کلیک کرده و وارد زیر قسمت حساب کاربری شوید. در ادامه وارد منوی گیتهاب شوید و بر روی دکمه اتصال به گیتهاب، کلیک کنید. پس از انجام این کار و وارد کردن اطلاعات مربوط به گیتهاب، حساب لیارا شما به گیتهاب متصل خواهد شد:
در صورت مواجه با خطای "اتصال به Github"، بایستی از حساب لیارا خود، خارج شده و مجدداً به وسیله Github، به اکانت لیارا خود، وارد شوید.
اگر که قصد دارید به جای اتصال به حساب شخصی، از حساب سازمانی استفاده کنید. باید در ابتدا با حساب شخصی، به کنسول متصل شوید و بعد از آن میتوانید به حساب سازمانی هم متصل شوید.
بعد از اتصال به اکانت گیتهاب، بر روی گزینه ویرایش دسترسیها کلیک کرده و ریپازیتوری (ریپازیتوریهای) مدنظرتان را به حساب لیارا متصل کنید.
برای این کار در ابتدا، حساب شخصی یا سازمانی خود را انتخاب کنید؛ سپس در صورتی که قصد دارید تمام ریپازیتوریهای حساب گیتهابتان به لیارا متصل شود؛ گزینه All repositories را انتخاب کنید؛ اما اگر قصد دارید که فقط یک یا چند ریپازیتوری مدنظرتان را انتخاب کنید؛ گزینه Only select repositories را انتخاب کرده و در ادامه ریپازیتوریهای مدنظرتان را در کشوی باز شده، انتخاب کنید. در نهایت، بر روی گزینه Install & Authorize کلیک کنید تا ریپازیتوریهای انتخابی، به حساب لیارا، متصل شوند:
در نهایت، بر روی برنامه خود کلیک کرده وارد صفحه استقرار جدید شوید؛ سپس در منوی گیتهاب، ریپازیتوری مدنظرتان را انتخاب کرده و پس از انتخاب نوع استقرار (استقرار در صورت CI موفق یا استقرار خودکار) و branch مدنظرتان، بر روی گزینه اتصال به برنامه کلیک کنید تا برنامهتان به ریپازیتوری مدنظرتان متصل شود. در نهایت، کافیست تا یکبار بر روی گزینه استقرار دستی کلیک کنید تا آخرین commit شما در لیارا مستقر شود:
پس از انجام کارهای فوق، با هر بار push کردن پروژهتان در ریپازیتوری انتخاب شده، یک استقرار جدید مطابق آخرین تغییرات شما در لیارا، انجام خواهد شد.
برای قطع ارتباط برنامه و ریپازیتوری نیز، میتوانید بر روی دکمه قطع اتصال کلیک کنید تا تغییرات جدید، مستقر نشوند.
در صورت انتخاب گزینه استقرار در صورت CI موفق، تمامی تستهای تعریف شده باید pass شده و تیک سبز رنگ گرفته باشند، در غیر اینصورت، پروژهتان در لیارا، مستقر نخواهد شد.
در هر برنامه داکر در لیارا، شما میتوانید فقط پورت یک وبسرور با پروتکل HTTP را Expose کنید. به عنوان مثال، پورت یک دیتابیس، خارج از شبکه خصوصی، در دسترس نیست و تنها در بین برنامههای موجود در شبکه خصوصی، قابل دسترسی است.







