আমি আরও কোড করতে শুরু করেছি পাইথন প্রায় 6 মাস আগে। কেন? এআই এর কারণে, স্পষ্টতই। এটা পরিষ্কার (আমার কাছে) বড় টাকা সুযোগগুলি আজকাল এআই জুড়ে রয়েছে। এবং অনুমান কি আসলে এআই এর জন্য প্রোগ্রামিং ভাষা? হ্যাঁ, সেই ছদ্মবেশী এক।
আমি আগে পাইথন ব্যবহার করেছি, তবে কেবল ছোট স্ক্রিপ্টগুলির জন্য। উদাহরণস্বরূপ, এই স্ক্রিপ্ট সমস্ত ভিডিও থেকে মেটাডেটা স্ক্র্যাপ করে আমার ইউটিউব চ্যানেল। মেটাডেটা হিসাবে ফেলে দেওয়া হয় একটি জেএসএন ফাইল যে আমি এই স্ট্যাটিক পৃষ্ঠায় ভিডিওগুলির পরিসংখ্যানগুলি সুন্দরভাবে প্রদর্শন করতে ব্যবহার করি। আপনি যেমন পারেন এখানে দেখুনএই ছোট্ট স্ক্রিপ্টটি প্রতি সোমবার গিটহাব ক্রিয়াকলাপের মাধ্যমে একক মোডে চলে। পাইথনে এই জাতীয় জিনিসটি করা ব্যাচ ব্যবহার করে বলুন, এর চেয়ে আরও বেশি সুবিধাজনক। কেবলমাত্র সিনট্যাক্সটি আরও মানব-বান্ধব নয়, তবে পাইথন দোভাষী সমস্ত ইউনিক্স ডিস্ট্রোসে স্থানীয়ভাবে সংহত করার কারণেও। এটা কি শীতল নয়?
হ্যাঁ, পাইথন শক্তিশালী, এবং এটি এখন সর্বব্যাপী সহ খুব ভাল দম্পতিরা Vscode সম্পাদক। তবে আমি সম্প্রতি পর্যন্ত এটি গুরুত্বের সাথে আচরণ করিনি, আমি “রিয়েল ওয়ার্ল্ড” এর জন্য আমি এআই অ্যাপ্লিকেশনগুলি (আরএজি, এজেন্টস, জেনাই সরঞ্জাম ইত্যাদি) তৈরি করতে চেয়েছিলাম যে আমি বুঝতে পেরেছিলাম যে আপনি এটি পছন্দ করেন বা না করেন, পাইথন সেই বিষয়গুলির জন্য পছন্দের ভাষা।
তাই আমি এটিকে একটি গুরুতর চেষ্টা করার সিদ্ধান্ত নিয়েছি এবং আমার অবাক করার জন্য আমি খুঁজে পেয়েছি যে পাইথন এবং এর চারপাশের সমস্ত কিছুই গত দশকগুলিতে সত্যই অনেক উন্নতি করেছে।
এখানে মাত্র তিনটি উদাহরণ:
- পাইথন ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণের জন্য লাইব্রেরি এবং সরঞ্জামগুলির একটি খুব সম্পূর্ণ বাস্তুতন্ত্র তৈরি করেছে।
- পাইথন যেমন অনুকূলিত স্ট্যাটিক সংকলকগুলির সাথে দ্রুত অর্জন করেছে সাইথন।
- পাইথন এর উত্তরাধিকার কদর্য লুকিয়ে রাখার জন্য একটি ভাল কাজ করেছেন (যেমন)
__init__
,__new__
এবং অনুরূপ ক্ষয়), এর সিনট্যাক্সটি অ্যাডমোডেট বিকাশকারীদের কাছে স্যুইট করেভাল স্বাদ সঙ্গে।
এই এবং অন্যান্য অনেক কিছুর জন্য ধন্যবাদ, আমি এখন ভাষার জন্য একটি বিশেষ আনন্দ অনুভব করছি।
যাইহোক, এই সময়ে, আমি খুঁজে পেয়েছি যে “উত্পাদন-প্রস্তুত” এর জন্য পাইথন ব্যবহারের মধ্যে এখনও একটি বড় ব্যবধান রয়েছে অ্যাপ্লিকেশন বনাম সাধারণ জুপিটার নোটবুক বা স্ক্রিপ্ট-ভিত্তিক কর্মপ্রবাহ।
সুতরাং এই পোস্টে, আমি সরঞ্জামগুলি, গ্রন্থাগারগুলি, কনফিগারগুলি এবং অন্যান্য সংহতগুলি ভাগ করি যা আমাকে আনন্দ দেয় এবং আমি এখন আমার পাইথন অ্যাপ্লিকেশনগুলি তৈরির জন্য ব্যবহার করি।
⚠ এই পোস্টটি আমি ব্যক্তিগতভাবে আজ যে সরঞ্জামগুলি ব্যবহার করি তার প্রতি অত্যন্ত পক্ষপাতদুষ্ট এবং আপনি যদি মনে করেন যে আমি কিছু রত্ন মিস করছি তবে দয়া করে আমাকে/আমাদের জানান (পছন্দসই নীচের মন্তব্য বিভাগে)।
আমি একটি ব্যবহার করতে পছন্দ করি মনোরপো আমার পাইথন প্রকল্পগুলির জন্য কাঠামো (ব্যাকএন্ড এবং ফ্রন্টএন্ড)।
কেন?
- আমার খারাপ স্মৃতির কারণে: আমি একাধিক সংগ্রহস্থল জুড়ে ছড়িয়ে ছিটিয়ে থাকা কোড পার্টস পছন্দ করি না (এটি অবশ্যই অনুসন্ধান-বান্ধব নয়)।
- কারণ একাধিক পুনরায় পোস্ট করা বেশিরভাগ অপ্রয়োজনীয়: আমি কেবল একজন লোক, এবং আমি বিশ্বাস করি যে কোনও প্রকল্প যদি এমন পর্যায়ে বেড়ে যায় যে এটি একাধিক সংগ্রহস্থলে বিভক্ত হওয়া দরকার, তবে এটি অতিরিক্ত ইঞ্জিনিয়ারিংয়ের লক্ষণ।
- কারণ আমি অলস: আমি জিনিসগুলি যতটা সম্ভব সহজ, সংকলন, পরীক্ষা, ধারক এবং একটি একক অবস্থান থেকে স্থাপন করতে চাই।
আমি এমন একটি সরঞ্জাম রাখতে চাই যা আমার জন্য প্রকল্পের কাঠামো তৈরি করে তবে আমি এখনও আমার কাছে ফিট করে না এমন একটি খুঁজে পাইনি। অতীতে, আমি ব্যবহার করেছি সিসিডিবেশিরভাগ ডেটা বিজ্ঞান প্রকল্পের জন্য একটি প্রকল্পের সূচনা সরঞ্জাম। এটি খুব ভাল, তবে এটি ফুল-স্ট্যাক বিকাশকারীদের এর মূল ব্যবহারকারী হিসাবে টার্গেট করছে না।
ফ্রন্টএন্ড-ব্যাকেন্ড আর্কিটেকচার সহ একটি প্রকল্পের সাধারণ কাঠামো এখানে (আমি এই পোস্টে প্রতিটি সাব-পার্ট দিয়ে যাব):
project/
│
├── .github/ # GitHub Actions workflows for CI/CD pipelines
│ ├── workflows/ # Directory containing YAML files for automated workflows
│ └── dependabot.yml # Configuration for Dependabot to manage dependencies
│
├── .vscode/ # VSCode configuration for the project
│ ├── launch.json # Debugging configurations for VSCode
│ └── settings.json # Project-specific settings for VSCode
│
├── docs/ # Website and docs (a static SPA with MkDocs)
│
├── project-api/ # Backend API for handling business logic and heavy processing
│ ├── data/ # Directory for storing datasets or other static files
│ ├── notebooks/ # Jupyter notebooks for quick (and dirty) experimentation and prototyping
│ ├── tools/ # Utility scripts and tools for development or deployment
│ ├── src/ # Source code for the backend application
│ │ ├── app/ # Main application code
│ │ └── tests/ # Unit tests for the backend
│ │
│ ├── .dockerignore # Specifies files to exclude from Docker builds
│ ├── .python-version # Python version specification for pyenv
│ ├── Dockerfile # Docker configuration for containerizing the backend
│ ├── Makefile # Automation tasks for building, testing, and deploying
│ ├── pyproject.toml # Python project configuration file
│ ├── README.md # Documentation for the backend API
│ └── uv.lock # Lock file for dependencies managed by UV
│
├── project-ui/ # Frontend UI for the project (Next.js, React, etc.)
│
├── .gitignore # Global Git ignore file for the repository
├── .pre-commit-config.yaml # Configuration for pre-commit hooks
├── CONTRIBUTING.md # Guidelines for contributing to the project
├── docker-compose.yml # Docker Compose configuration for multi-container setups
├── LICENSE # License information for the project (I always choose MIT)
├── Makefile # Automation tasks for building, testing, and deploying
└── README.md # Main documentation for the project (main features, installation, and usage)
আমার project
মূল ডিরেক্টরি এবং আমার গিটহাব রেপোর নাম। আমি প্রকল্পগুলির জন্য সংক্ষিপ্ত নামগুলি পছন্দ করি, আদর্শভাবে 10 টি চরিত্রের চেয়ে কম দীর্ঘ। না snake_case
; হাইফেনগুলির সাথে বিচ্ছেদ আমার কাছে ঠিক আছে। নোট করুন যে প্রকল্পটি স্বনির্ভর হওয়া উচিত, যার অর্থ এটিতে ডকুমেন্টেশন, বিল্ড/ডিপ্লোয়মেন্ট অবকাঠামো এবং এটি এককভাবে চালানোর জন্য অন্য কোনও প্রয়োজনীয় ফাইল অন্তর্ভুক্ত রয়েছে।
কোনও ভারী ডেটা প্রসেসিং পদক্ষেপ না করা গুরুত্বপূর্ণ project-ui
যেহেতু আমি ব্যাকএন্ড দায়িত্ব থেকে ফ্রন্টেন্ড লজিককে আলাদা করার সিদ্ধান্ত নিয়েছি। পরিবর্তে, আমি এইচটিটিপি অনুরোধ করা পছন্দ করি project-api
পাইথন কোড রয়েছে এমন সার্ভার। এইভাবে, আমরা সার্ভারে ভারী উত্তোলন এবং ব্যবসায়িক যুক্তি অর্পণ করার সময় ব্রাউজার অ্যাপ্লিকেশনটিকে হালকা রাখি।
একটি আছে __init__.py
ফাইল ইন project-api/src/app
যে এটি নির্দেশ করতে app
এটি একটি পাইথন মডিউল (এটি অন্যান্য মডিউল থেকে আমদানি করা যেতে পারে)।
ইউভি
আমি ব্যবহার করি ইউভি আমার পাইথন প্যাকেজ ম্যানেজার এবং বিল্ড টুল হিসাবে। নির্ভরতাগুলি ইনস্টল এবং পরিচালনা করার জন্য আমার কেবল এটিই দরকার।
এটি সেট আপ করার জন্য এখানে মূল কমান্ডগুলি রয়েছে:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Install uv globally if not already installed
curl -sSfL < | sh
# Initialize a new project (adds .gitignore, .python-version, pyproject.toml, etc.)
uv init project-api
# Add some dependencies into the project and update pyproject.toml
uv add --dev pytest ruff pre-commit mkdocs gitleaks fastapi pydantic
# Update the lock file with the latest versions of the dependencies (creates a .venv if not already created)
uv sync
# Activate the .venv
uv venv activate
নোট যে জন্য সবচেয়ে গুরুত্বপূর্ণ ফাইল uv
হয় pyproject.toml
।
এই ফাইল রয়েছে মেটাডেটা এবং প্রকল্পটি তৈরি এবং চালানোর জন্য প্রয়োজনীয় নির্ভরতার তালিকা।
রাফ
আমি সত্যিই পছন্দ করি রাফ। এটি একটি সুপার-ফাস্ট পাইথন লিন্টার এবং কোড ফর্ম্যাটার, আমার মতো অলস বিকাশকারীদের আমাদের কোডব্যাসগুলি পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য রাখতে সহায়তা করার জন্য ডিজাইন করা। রাফ একত্রিত isort
, flake8
, autoflake
এবং একক কমান্ড-লাইন ইন্টারফেসে অনুরূপ সরঞ্জাম:
1
2
3
4
# Lint all files in `/path/to/code` (and any subdirectories).
ruff check path/to/code/
# Format all files in `/path/to/code` (and any subdirectories).
ruff format path/to/code/
রাফ সমর্থন করে পেপ 8 বাক্সের বাইরে স্টাইল গাইড।
ty
ty পাইথনের জন্য টাইপ চেকার। এটি জন্য একটি দুর্দান্ত কম্বো টাইপিংস্ট্যাটিক টাইপিং যুক্ত করার জন্য জনপ্রিয় পাইথন মডিউল। আমি মনে করি টাইপ করা আমাকে বিকাশের প্রক্রিয়া শুরুর দিকে টাইপ ত্রুটিগুলি ধরতে সহায়তা করে। আমি আসলে আরও কোড লেখার বিষয়ে চিন্তা করি না, আসলে, আমি এটি পছন্দ করি যদি এটি কোডের মান উন্নত করে এবং রানটাইম ত্রুটির সম্ভাবনা হ্রাস করে।
দ্রষ্টব্য: লেখার সময়, ty
অ্যাস্ট্রাল দ্বারা এখনও প্রাথমিক বিকাশে রয়েছে (পিছনে একই সংস্থা uv
এবং ruff
), তবে আমি এটি ব্যবহার করছি এবং এখনও পর্যন্ত কোনও লক্ষণীয় ত্রুটি খুঁজে পাইনি।
pyteste
pyteste হয় দ্য পাইথনের জন্য গ্রন্থাগার পরীক্ষা করা। এর সাথে সহজ এবং স্কেলযোগ্য পরীক্ষার কেসগুলি লেখা কেবল অত্যন্ত সহজ। এটি ফিক্সচার, প্যারামিটারাইজড পরীক্ষাগুলিকে সমর্থন করে এবং প্লাগইনগুলির একটি সমৃদ্ধ বাস্তুতন্ত্র রয়েছে। নামকরণ করা একটি ফাইল তৈরি করুন test_<unit_or_module>.py
মধ্যে project-api/src/app/tests/
এবং রান:
uv run pytest
এটাই!
পাইডান্টিক
পাইডান্টিক পাইথনের জন্য একটি ডেটা বৈধতা এবং সেটিংস পরিচালনা গ্রন্থাগার। এটি সমস্ত ধরণের কনফিগারেশন সেটিংস পরিচালনা করতে সহায়তা করে যেমন এপিআই কী, ডাটাবেস সংযোগের বিশদ, বা মডেল পরামিতি (এই মানগুলি হার্ডকোডিং করা খুব খারাপ অনুশীলন, বিটিডাব্লু)।
বিশেষত, পাইডান্টিক সেটিংস আপনাকে পাইডান্টিক মডেলগুলি ব্যবহার করে অ্যাপ্লিকেশন কনফিগারেশনগুলি সংজ্ঞায়িত করতে দেয়। এটি স্বয়ংক্রিয়ভাবে পরিবেশের ভেরিয়েবল বা বিশেষ থেকে সেটিংস লোড করতে পারে .env
ফাইলগুলি, তাদের প্রকারগুলি বৈধতা দেয় এবং আপনার কোডে এগুলি সহজেই অ্যাক্সেসযোগ্য করে তোলে।
এখানে একটি উদাহরণস্বরূপ উদাহরণ:
1
2
3
4
5
6
7
8
9
10
from pydantic import BaseSettings
class Settings(BaseSettings):
api_key: str
db_url: str
class Config:
env_file = ".env"
settings = Settings()
এখন, আপনি যখন এই কোডটি চালাবেন, পাইডান্টিক স্বয়ংক্রিয়ভাবে এর মানগুলি লোড করবে api_key
এবং db_url
থেকে .env
ফাইল বা পরিবেশ ভেরিয়েবল। এই মানগুলি অ্যাক্সেসযোগ্য হবে এবং এর মধ্যে সংজ্ঞায়িত প্রকার অনুসারে বৈধ হবে Settings
মডেল। শুধু দুর্দান্ত!
এমকেডোকস
আমি ব্যবহার করি এমকেডোকস প্রকল্পের জন্য ওয়েবসাইটের ডকুমেন্টেশন এবং স্ট্যাটিক প্রজন্মের জন্য।
আমি কোনও ডিজাইনার নই, তাই আমি কেবল অন্য অনুরূপ ওপেন সোর্স প্রকল্পের একটি নান্দনিকভাবে আনন্দদায়ক নকশাকে অনুলিপি করতে এবং সিএসএসে কিছু সাধারণ পরিবর্তন করতে পছন্দ করি (যেমন ফন্ট এবং রঙ পরিবর্তন করার মতো)।
ফাস্টাপি
আমি ব্যবহার করি ফাস্টাপি এপিআই বিল্ডিংয়ের জন্য। এটি আমার জন্য একটি গেম চেঞ্জার হয়ে দাঁড়িয়েছে, এটি স্বয়ংক্রিয় বৈধতা, সিরিয়ালাইজেশন এবং ডকুমেন্টেশন সহ রেস্টফুল এপিআইগুলির সহজে তৈরির অনুমতি দেয়। স্টারলেট এবং পাইডান্টিকের শীর্ষে ফাস্টাপি নির্মিত হয়েছে, যার অর্থ এটি দুর্দান্ত পারফরম্যান্স এবং টাইপ সুরক্ষা সরবরাহ করে। এটি দ্রুত, ব্যবহার করা সহজ এবং ডেটা বৈধতার জন্য পিডান্টিকের সাথে নির্বিঘ্নে সংহত করে।
ডেটাক্লাসেস
ডেটাক্লাসেস কোনও গ্রন্থাগার নয় তবে একটি পাইথন বৈশিষ্ট্য যা মূলত ডেটা সঞ্চয় করতে ব্যবহৃত ক্লাসগুলি সংজ্ঞায়িত করার একটি উপায় সরবরাহ করে। তারা ক্লাস তৈরির জন্য একটি সাধারণ সিনট্যাক্স সরবরাহ করে যা স্বয়ংক্রিয়ভাবে বিশেষ পদ্ধতি তৈরি করে __init__()
, __repr__()
এবং __eq__()
।
ডেটা পাত্রে তৈরি করার সময় এটি বয়লারপ্লেটকে ব্যাপকভাবে হ্রাস করে।
এখানে একটি উদাহরণ:
1
2
3
4
5
6
7
8
9
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(1, 2)
print(p) # Output: Point(x=1, y=2)
তাই বিদায় বয়লারপ্লেট এবং ক্রিপ্টিক কোড!
গিটহাব ক্রিয়া
আমি একজন ফ্যানবয় গিটহাব ক্রিয়াবিশেষত বিভিন্ন ওএসএস জুড়ে সিআইয়ের জন্য। আমি এটি এপিআই এবং ইউআই পাইপলাইন উভয়ের জন্য ব্যবহার করার পরামর্শ দিচ্ছি।
জন্য একটি সাধারণ ওয়ার্কফ্লো project-api
দেখে মনে হচ্ছে:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
name: CI-API
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Build Docker image
run: docker build -t project-api:ci ./project-api
- name: Run tests
run: docker run --rm project-api:ci pytest
নোট করুন যে এই কর্মপ্রবাহটি বিচ্ছিন্ন পরিবেশে পরীক্ষা চালানোর জন্য ডকার ব্যবহার করে।
আপনি সেট করে ওএস পরিবর্তন করতে পারেন runs-on
প্যারামিটার windows-latest
বা macos-latest
।
নির্ভরযোগ্য
নির্ভরতা পরিচালনা করা একটি ব্যথা, কিন্তু নির্ভরযোগ্য এটি সহজ করে তোলে। এটি স্বয়ংক্রিয়ভাবে পুরানো নির্ভরতাগুলির জন্য পরীক্ষা করে এবং সেগুলি আপডেট করার জন্য পুলের অনুরোধ তৈরি করে।
এখানে নির্ভরযোগ্যতার জন্য একটি নমুনা কনফিগারেশন রয়েছে .github/dependabot.yml
ফাইল:
1
2
3
4
5
6
7
version: 2
updates:
- package-ecosystem: "uv"
directory: "/"
schedule:
interval: "weekly"
গিটলিক্স
যদি এমন কিছু থাকে যা আমাদের খ্যাতিকে আঘাত করতে পারে তবে এটি সরাসরি কোনও সংগ্রহস্থলে এপিআই কী বা পাসওয়ার্ডের মতো সংবেদনশীল তথ্য প্রতিশ্রুতিবদ্ধ। ভাগ্যক্রমে, গিটলিক্স এটি ঘটতে বাধা দিতে সহায়তা করে। এটি ব্যবহার না করার কোনও কারণ নেই।
প্রাক-কমিট হুকস
আমি ব্যবহার করি প্রাক-কমিট প্রতিশ্রুতিবদ্ধ হওয়ার আগে চেক এবং ফর্ম্যাট কোড চালাতে। এটি কোডটি সর্বদা একটি ভাল অবস্থায় থাকে এবং প্রকল্পের কোডিং মান অনুসরণ করে তা নিশ্চিত করতে সহায়তা করে। উদাহরণস্বরূপ, আমি এটি চালানোর জন্য ব্যবহার করি রাফ-প্রি-কমিট এবং gitleaks
আমার কোড করার আগে।
এখানে একটি নমুনা .pre-commit-config.yaml
আমি যে ফাইলটি ব্যবহার করি:
1
2
3
4
5
6
7
8
9
10
11
12
repos:
repos:
- repo:
rev: v0.12.3 # Ruff version.
hooks:
- id: ruff-check # Run the linter.
args: ( --fix )
- id: ruff-format # Run the formatter.
- repo:
rev: v8.27.2
hooks:
- id: gitleaks
তৈরি
তৈরি একটি সুইস আর্মি ছুরি, স্বয়ংক্রিয় কাজের জন্য একটি ক্লাসিক ইউটিলিটি। আমি এটি সাধারণ উন্নয়ন কমান্ডগুলির জন্য সাধারণ শর্টকাট তৈরি করতে ব্যবহার করি। পরীক্ষা চালানোর জন্য, ডকার চিত্রগুলি তৈরি করতে বা পরিষেবাগুলি শুরু করার জন্য দীর্ঘ সিএলআই ইনসেন্টেশনগুলি স্মরণ এবং টাইপ করার পরিবর্তে আমি এই কাজগুলি একটিতে সংজ্ঞায়িত করি Makefile
। তারপরে আমি ঠিক যেমন কমান্ডগুলি চালাই make test
বা make infrastructure-up
।
আপনি যেমন খেয়াল করেছেন, একটি আছে Makefile
উভয় মধ্যে project-api
এবং গ্লোবাল project
ডিরেক্টরি:
project/project-api/Makefile
: লিন্টিং, টেস্টিং এবং এপিআই চালানোর জন্য।project/Makefile
: অবকাঠামো নির্মাণ ও চালানোর জন্য (মাধ্যমেdocker-compose
)।
এখানে একটি অত্যন্ত সাধারণ উদাহরণ project-api
মেকফিল:
1
2
3
4
5
6
7
8
9
10
11
DIR := . # project/project-api/Makefile
test:
uv run pytest
format-fix:
uv run ruff format $(DIR)
uv run ruff check --select I --fix
lint-fix:
uv run ruff check --fix
এখন, আমি যদি পরীক্ষাগুলি চালাতে চাই তবে আমি কেবল দৌড়েছি make test
এবং এটি কার্যকর করে uv run pytest
বর্তমান ডিরেক্টরিতে।
গ্লোবাল প্রকল্পের জন্য, আমি নিম্নলিখিতগুলি ব্যবহার করি Makefile
::
1
2
3
4
5
6
7
8
infrastructure-build:
docker compose build
infrastructure-up:
docker compose up --build -d
infrastructure-stop:
docker compose stop
make
একটি শক্তিশালী সরঞ্জাম যা আপনাকে আপনার বিকাশের কর্মপ্রবাহে প্রায় কোনও কিছু স্বয়ংক্রিয় করতে সহায়তা করতে পারে। যদিও উপরের উদাহরণগুলি খুব সহজ, তবে আপনি কীভাবে প্রয়োজন অনুযায়ী আরও জটিল কাজগুলি যুক্ত করতে পারেন তা কল্পনা করুন।
ডকার
ডকার এমন একটি সরঞ্জাম যা আপনাকে আপনার অ্যাপ্লিকেশন এবং এর নির্ভরতাগুলিকে একটি পাত্রে প্যাকেজ করতে দেয়, যার মধ্যে চালানোর জন্য প্রয়োজনীয় সমস্ত কিছু: নির্ভরতা, সিস্টেম সরঞ্জাম, কোড এবং রানটাইম ওএস সহ। স্থানীয়ভাবে কাজ করার সময়, আমি ব্যবহার করি ডকার রচনা সমস্ত ডকার চিত্র একই নেটওয়ার্কে সংযুক্ত করতে। নির্ভরতার জন্য ডকারের মতো, ডকার রচনাটি পুরো অ্যাপ্লিকেশন স্ট্যাকটি এনক্যাপসুলেটিং এবং এটি আপনার স্থানীয় পরিবেশের বাকী অংশ থেকে পৃথক করার অনুমতি দেয়।
এই ধারণাটি পুরোপুরি উপলব্ধি করতে, আসুন একটি সাধারণ দিকে একবার নজর দিন docker-compose.yml
ফাইল:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: '3.8'
services:
project-api:
build:
context: ./project-api
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- ./project-api:/app
environment:
- ENV_VAR=value
networks:
- project-network
project-ui:
build:
context: ./project-ui
dockerfile: Dockerfile
ports:
- "3000:3000"
networks:
- project-network
networks:
project-network:
driver: bridge
এই ফাইলে, আমরা দুটি পরিষেবা সংজ্ঞায়িত করি: project-api
এবং project-ui
। প্রতিটি পরিষেবার নিজস্ব বিল্ড প্রসঙ্গ রয়েছে (Dockerfile
), বন্দর, খণ্ড এবং পরিবেশের ভেরিয়েবল।
এখানে একটি নমুনা Dockerfile
জন্য project-api
পরিষেবা:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM python:3.11-slim
# Install system dependencies
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
COPY uv.lock pyproject.toml README.md ./
RUN uv sync --frozen --no-cache
# Bring in the actual application code
COPY src/app app/
COPY tools tools/
# Define a command to run the application
CMD ("/app/.venv/bin/fastapi", "run", "project/infrastructure/api.py", "--port", "8000", "--host", "0.0.0.0")
আপনি দেখতে পাচ্ছেন, ডকারফিলটি পাইথন বেস চিত্র থেকে শুরু হয়, নির্ভরতা ইনস্টল করে, প্রকল্পের ফাইলগুলি অনুলিপি করে এবং ফাস্টাপি অ্যাপ্লিকেশনটি চালানোর জন্য কমান্ডটি সংজ্ঞায়িত করে।
এইভাবে, আপনি একক কমান্ড দিয়ে পুরো অ্যাপ্লিকেশন স্ট্যাকটি চালাতে পারেন:
docker compose up --build -d