Skip to content

Commit

Permalink
update paas/docker docs
Browse files Browse the repository at this point in the history
  • Loading branch information
A-Najmabadi committed Jul 23, 2024
1 parent e631a99 commit 3ace1f0
Show file tree
Hide file tree
Showing 10 changed files with 545 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/components/Sidebar/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -2482,7 +2482,7 @@ export default {
link: "/paas/docker/related-apps/fastapi"
},
{
title: "Pure Python Scripts",
title: "Python Scripts",
icon: <IconContainer alt="python" />,
link: "/paas/docker/related-apps/python"
},
Expand Down
2 changes: 1 addition & 1 deletion src/pages/paas/about.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ import {
{ alt: 'docker', platform: 'Spring Boot', link: "" },
{ alt: 'docker', platform: 'Ruby On Rails', link: "" },
{ alt: 'docker', platform: 'Rust', link: "" },
{ alt: 'python', platform: 'Pure Python Apps', link: "" },
{ alt: 'python', platform: 'Python Apps', link: "" },
{ alt: 'fastapi', platform: 'Fast API', link: "" },
{ alt: 'docker', platform: 'Play Framework', link: "" },
{ alt: 'python', platform: 'Pyramid', link: "" },
Expand Down
2 changes: 1 addition & 1 deletion src/pages/paas/docker/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ import {
{ alt: 'flutter', platform: 'Flutter', link: "/paas/django/related-apps/flutter" },
{ alt: 'nginx', platform: 'Nginx', link: "/paas/django/related-apps/nginx" },
{ alt: 'fastapi', platform: 'FastAPI', link: "/paas/django/related-apps/fastapi" },
{ alt: 'python', platform: 'Pure Python Scripts', link: "/paas/django/related-apps/python" },
{ alt: 'python', platform: 'Python Scripts', link: "/paas/django/related-apps/python" },
{ alt: 'streamlit', platform: 'Streamlit', link: "/paas/django/related-apps/streamlit" },
{ alt: 'arangodb', platform: 'ArangoDB', link: "/paas/django/related-apps/arangodb" },
{ alt: 'seq', platform: 'Seq', link: "/paas/django/related-apps/seq" },
Expand Down
84 changes: 84 additions & 0 deletions src/pages/paas/docker/related-apps/arangodb.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import Layout from "@/components/Layout";
import Button from "@/components/Common/button";
import Section from "@/components/Common/section";
import Alert from "@/components/Common/alert";
import Tabs from "@/components/Common/tab";
import Step from "@/components/Common/step";
import Card from "@/components/Common/card";
import Important from "@/components/Common/important";
import Highlight from "react-highlight";
import Link from "next/link";
import NextPage from "@/components/Common/nextpage";

<Layout>
# استقرار برنامه‌های ArangoDB
<hr className="mb-2" />

<div className="h-4" />
<a href="https://arangodb.com/" className="blue-link">ArangoDB</a> یک پایگاه داده چند مدلی است که از مدل‌های مختلف داده مانند اسناد، گراف‌ها و کی‌والیو پشتیبانی می‌کند. این پایگاه داده قابلیت اجرای پرس‌وجوهای پیچیده را از طریق زبان پرس‌وجوی AQL فراهم می‌کند. ArangoDB به دلیل انعطاف‌پذیری، مقیاس‌پذیری و عملکرد بالا در بسیاری از برنامه‌های کاربردی مورد استفاده قرار می‌گیرد. همچنین از ویژگی‌های مانند ACID و توزیع‌شدگی پشتیبانی می‌کند که آن را برای کاربردهای تجاری و بزرگ مناسب می‌سازد.







<div className="h-2" />

شما می‌توانید برنامه‌های ArangoDB خود را با <a href="../how-tos/create-app" className="blue-link">ایجاد برنامه‌های Docker</a> در لیارا، مستقر کنید.
برای این‌کار، کافیست تا
در Local یک دایرکتوری با نام دلخواه بسازید، وارد دایرکتوری شوید و در آن یک فایل به نام <Important>liara.json</Important> ایجاد کنید و قطعه کد زیر را در آن قرار دهید:
<div className="h-2" />
<div dir='ltr'>
<Highlight className="json">
{`{
"image": "arangodb/arangodb:3.12.0.2",
"port": 8529,
"disks": [
{
"name": "arangodb-data",
"mountTo": "/var/lib/arangodb3"
},
{
"name": "arangodb-config",
"mountTo": "/etc/arangodb3"
}
]
}`}
</Highlight>
</div>
<div className="h-2" />

در ادامه، طبق <a href="../../details/envs" className="blue-link">مستندات تنظیم متغیرهای محیطی</a>، متغیر محیطی زیر را با مقدار رمزی قوی؛ به برنامه داکر خود، اضافه کنید:

<div className="h-2" />
<div dir='ltr'>
<Highlight className="bash">
{`ARANGO_ROOT_PASSWORD=secure-password`}
</Highlight>
</div>
<div className="h-2" />
سپس، طبق <a href="../../disks/create" className="blue-link">مستندات ساخت دیسک</a>، دو دیسک با نام‌های <Important>arangodb-data</Important> و <Important>arangodb-config</Important> با میزان فضای مورد نیاز، ایجاد کنید.
در نهایت نیز، کافیست تا در جایی که فایل <Important>liara.json</Important> قرار دارد، دستور زیر را اجرا کنید تا برنامه‌تان در لیارا، مستقر شود:

<div className="h-2" />
<div dir='ltr'>
<Highlight className="bash">
{`liara deploy`}
</Highlight>
</div>

<div className="h-2" />
<Alert variant="info">
<p>
پس از استقرار موفق، دیتابیس در <a href="../../details/private-network" className="blue-link">شبکه خصوصی</a> و بر روی پورت 8592 قابل دسترسی است.
</p>
</Alert>

<Alert variant="info">
<p>
برای ورود به پنل ادمین دیتابیس، می‌توانید از نام کاربری <Important>root</Important> و پسوردی که تنظیم کرده‌اید، استفاده کنید.
</p>
</Alert>

</Layout>
90 changes: 89 additions & 1 deletion src/pages/paas/docker/related-apps/fastapi.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,102 @@ CMD ["uvicorn", "your-app.main:app", "--host", "0.0.0.0", "--port", "80"]`}

<div className="h-2" />
<div dir='ltr'>
<Highlight className="dockerfile">
<Highlight className="bash">
{`liara deploy --port 80 --platform docker`}
</Highlight>
</div>
<div className="h-2" />

در نظر داشته باشید که اگر در برنامه از ماژول خاصی استفاده می‌کنید یا نیازمند یک پکیج سیستمی هستید که به صورت پیش‌فرض، نصب نیست؛ بایستی دستورات مربوط به نصب آن را در <Important>Dockerfile</Important> مشخص کنید.

<Section id="connect-to-mssql" title="اتصال برنامه FastAPI به دیتابیس MSSQL" />
برای اتصال برنامه خود به دیتابیس MSSQL در لیارا، بایستی در ابتدا، طبق <a href="../../details/envs" className="blue-link">مستندات تنظیم متغیرهای محیطی</a>، متغیرهای محیطی مربوط به دیتابیس خود را، به برنامه، اضافه کنید؛ به عنوان مثال:

<div className="h-2" />
<div dir='ltr'>
<Highlight className="bash">
{`DB_USER=sa
DB_NAME=my_db
DB_HOST=bromo.liara.cloud
DB_PORT=31858
DB_PASS=yw8FVaUqlvliRFxmcp7VnDUG`}
</Highlight>
</div>
<div className="h-2" />

در ادامه، می‌توانید مانند قطعه کد زیر، به دیتابیس خود متصل شوید:


<div className="h-2" />
<div dir='ltr'>
<Highlight className="py">
{`from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base, sessionmaker
from dotenv import load_dotenv
import os
load_dotenv()
DB_USER=os.getenv("DB_USER")
DB_NAME=os.getenv("DB_NAME")
DB_HOST=os.getenv("DB_HOST")
DB_PORT=os.getenv("DB_PORT")
DB_PASS=os.getenv("DB_PASS")
SQLALCHEMY_DATABASE_URL = (
f"mssql+pyodbc://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}?driver=ODBC+Driver+17+for+SQL+Server"
)
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
# connect_args={"check_same_thread": False}, # only needed for SQLite
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()`}
</Highlight>
</div>
<div className="h-2" />

در نهایت، می‌توانید <Important>Dockerfile</Important> خود را مانند قطعه کد زیر بنویسید تا تمامی پکیج‌های مربوط به دیتابیس MSSQL، برای‌تان، نصب بشود و در برنامه، با مشکل خاصی مواجه نشوید:


<div className="h-2" />
<div dir='ltr'>
<Highlight className="dockerfile">
{`# Dockerfile
# Using Python base image version 3.11
FROM python:3.11
# Update system packages and install necessary dependencies
RUN apt-get update && apt-get install -y gcc unixodbc-dev
# Install ODBC driver for SQL Server
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list && apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql17
# Upgrade pip
RUN pip install --upgrade pip
# Create working directory /app
WORKDIR /app
# Copy all project files to the working directory
COPY . /app
# Install project dependencies from requirements.txt
RUN pip install -r requirements.txt
# Set the command to run the project using uvicorn
CMD ["uvicorn", "sql_app.main:app", "--host", "0.0.0.0", "--port", "80"]`}
</Highlight>
</div>
<div className="h-2" />

<Alert variant="success">
<p>
یک پروژه FastAPI نمونه آماده استقرار در <a href="https://github.com/liara-cloud/fastapi-getting-started" className="blue-link">اینجا</a> قرار دارد که می‌توانید از آن، استفاده کنید.
</p>
</Alert>

</Layout>
135 changes: 135 additions & 0 deletions src/pages/paas/docker/related-apps/go.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
import Layout from "@/components/Layout";
import Button from "@/components/Common/button";
import Section from "@/components/Common/section";
import Alert from "@/components/Common/alert";
import Tabs from "@/components/Common/tab";
import Step from "@/components/Common/step";
import Card from "@/components/Common/card";
import Important from "@/components/Common/important";
import Highlight from "react-highlight";
import Link from "next/link";
import NextPage from "@/components/Common/nextpage";

<Layout>
# استقرار برنامه‌های Golang
<hr className="mb-2" />

<div className="h-4" />
<a href="https://go.dev/" className="blue-link">Go (یا Golang)</a> یک زبان برنامه‌نویسی open-source است که توسط گوگل توسعه داده شده است. این زبان طراحی شده تا کدنویسی ساده‌تر، سریع‌تر و کارآمدتر باشد و برای ساخت نرم‌افزارهای مقیاس‌پذیر و با کارایی بالا مناسب است. ویژگی‌های اصلی Go شامل مدیریت حافظه خودکار و هم‌روندی (concurrency) با استفاده از goroutines است. Go به ویژه در توسعه سرویس‌های وب، ابزارهای شبکه و نرم‌افزارهای توزیع‌شده محبوب است.

<div className="h-2" />

شما می‌توانید برنامه‌های go خود را با <a href="../how-tos/create-app" className="blue-link">ایجاد برنامه‌های Docker</a> در لیارا، مستقر کنید.
برای این‌کار، کافیست تا
در Local
در مسیر اصلی پروژه، یک فایل به نام <Important>Dockerfile</Important>، ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید:
<div className="h-4" />
<div dir='ltr'>
<Highlight className="docker">
{`# Use the official Golang image as the base image
FROM golang:latest
# Set the working directory inside the container
WORKDIR /app
# Copy the local code to the container
COPY . .
# Download Go modules
RUN go mod download
# Build the Go application
RUN go build -o main .
# Expose port 8080 to the outside world
# EXPOSE 8080
# Command to run the executable
CMD ["./main"]`}
</Highlight>
</div>
<div className="h-2" />
<p>
در ادامه به ساختار Dockerfile فوق، پرداخته شده است:
</p>

<Step steps={[
{
step: "۱",
content: (
<>
<p>
با استفاده از دستور <Important>FROM golang:latest</Important>، image رسمی golang به عنوان base image تنظیم می‌شود و تگ <Important>latest</Important> باعث می‌شود تا برنامه از آخرین نسخه golang استفاده کند.
</p>
</>
)
},
{
step: "۲",
content: (
<>
<p>
دستور <Important>WORKDIR /app</Important> مسیر کاری داخل container را به دایرکتوری <Important>app</Important> تنظیم می‌کند. در واقع app همان دایرکتوری است که که کد برنامه ما در آنجا کپی می‌شود و دستورات بعدی در آن اجرا می‌شوند.
</p>
</>
)
},
{
step: "۳",
content: (
<>
<p>
دستور <Important>. . COPY</Important> محتوای دایرکتوری که <Important>Dockerfile</Important> در آن قرار دارد را به دایرکتوری <Important>app</Important> درون container کپی می‌کند. این دستور این فرض را دارد که کد برنامه شما در همان دایرکتوری Dockerfile قرار دارد.
</p>
</>
)
},
{
step: "۴",
content: (
<>
<p>
دستور <Important>RUN go mod download</Important> ماژول‌های go که در فایل <Important>go.mod</Important> تعریف شده‌اند را دانلود می‌کند.
</p>
</>
)
},
{
step: "۵",
content: (
<>
<p>
دستور <Important>. RUN go build -o main </Important> برنامه golang شما را اجرا می‌کند. پرچم <Important>o-</Important> نام فایل خروجی را به <Important>main</Important> تنظیم می‌کند و نقطه‌ای که در انتهای دستور قرار دارد؛ نشان‌دهنده این است که کد منبع در دایرکتوری فعلی قرار دارد.
</p>
</>
)
},
{
step: "۶",
content: (
<>
<p>
دستور <Important>CMD ["./main"]</Important> دستوری را که هنگام شروع کانتینر اجرا می‌شود، مشخص می‌کند.
</p>
</>
)
},
]}/>
<div className="h-5" />

<Alert variant="info">
<p>
شما می‌توانید با استفاده از دستور <Important>EXPOSE</Important> پورتی که برنامه توسط آن به درخواست کاربران گوش می‌دهد را مشخص کنید. البته چون که در حین استقرار، لیارا از شما port برنامه را می‌پرسد بنابراین برای استقرار برنامه‌های داکرایز شده در لیارا، نیازی به نوشتن این دستور در <Important>Dockerfile</Important> نیست.
</p>
</Alert>

در نهایت، کافیست با اجرای دستور زیر، برنامه خود را در لیارا، مستقر کنید:
<div className="h-4" />
<div dir='ltr'>
<Highlight className="docker">
{`liara deploy --platform=docker --port=8080`}
</Highlight>
</div>
<div className="h-2" />

</Layout>
8 changes: 8 additions & 0 deletions src/pages/paas/docker/related-apps/nginx.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ import NextPage from "@/components/Common/nextpage";
width="100%"
></video>

<div className="h-2" />
<Alert variant="success">
<p>
فایل‌های مورد استفاده در ویدیوی فوق، در <a href="https://github.com/liara-cloud/docker-getting-started/tree/nginx" className="blue-link">اینجا</a> قابل دسترسی هستند.
</p>
</Alert>


<div className="h-2" />

<a href="../../details/reverse-proxy" className="blue-link">Reverse proxy</a> سروری است که درخواست‌های مشتریان (clients) را به یک یا چند سرور پشتیبان (backend servers) ارسال می‌کند و نتایج را به مشتریان بازمی‌گرداند. این ساختار به بهبود کارایی، توازن بار، و امنیت سرورها کمک می‌کند.
Expand Down
Loading

0 comments on commit 3ace1f0

Please sign in to comment.