پیاده سازی کوتاه و مختصرRabbitMQ و اجرای Celery

Search: Rabbitmq docker in google

Starting RabbitMQ


Starting Celery

Note: If you are using windows save yourself using gevent execution pool:

(https://stackoverflow.com/questions/62524908/task-receive-but-doesnt-excute)

and for Django:

Running Celery worker and Beat


Django Celery Beat extention


Flow monitoring

Flow monitoring

گشت و گذار اولیه توی داکر for inspection

دستورات اولیه کار با داکر و تنظیمات اولیه.

پیاده سازی gitlab بر روی داکر با پشتیبانگیری

برای پیاده سازی gitlab بر روی داکر از compose زیر استفاده کردم:

برای پشتیبانی گیری و برگرداندن بک آپ هم از کامند های زیر استفاده می شود:

پشتیبانگیری از کانتینر و volume داکر MySQL

یک اسکریپت نوشتم که هر روز از volume کانتینر MySQL پشتیبان بگیره و ذخیره کنه و برای تست هم خود کانتینر با volume اش رو پاک کردم و و دوباره بک آپ رو برگردوندم و تمامی جدول ها و داده های توی اون هم برگشت.

کامند پشتیبان گیری:

و با کامندهای زیر هم پشتیبان رو به روی کانتینر جدید برگردوندم:

لازمه که بدونیم که خود کانتینر با compose زیر ساخته شده و دو تا volume داره:

فایل Compose برای MySQL

میخایم یه کانتینر از MySQL بسازیم به صورتی که فایلهای دیتابیس شامل کانفیگ هاش توی یک volume ذخیره بشه.

برای این کار باید فایل compose به صورت زیر باشه:

مقایسه docker volume و bind mount

توی داکر به سه شکل میتونیم فایل ها رو با خود هاست داکر به اشتراک بزاریم. اگر یک کانتینر از بین بره طبیعتا تمامی داده های توی اون هم از بین میره و این خطرناکه.

داکر یک مکانیزم داره به اسم volume که اینها رو خود داکر مدیریت میکنه و اگر کانتینر خاموش بشه یا از بین بره میشه یه کانتینر دیگه بالا آورد که از اون استفاده کنه. البته بهتره قبل از پاک کردن کانتینر فعلی یکی دیگه بسازیم.

توی داکر میشه بجای volume از bind mount هم استفاده کرد. bind mount ساده است مثل اینکه یک فولدر رو بین کانتینر و هاست فعلی به اشتراک بزاریم.

حالت بعدی استفاده از tmpfs هست که فقط در صورتی که هاست لینوکس باشه قابل استفاده است. و این دیتا توی حافظه memory ذخیره میشه بنابراین دائمی نیست.

شمای کلی قابلیت های داکر در این زمینه توی عکس زیر معلومه:

پشتیبانگیری از docker containers

یکی از چالش هایی که برخوردیم پشتیبان گیری از سرویس هایی بود که روی داکر هستن. چند تا اپلیکیشن و یک دیتابیس داریم که هر کدوم توی یک container هستن. طبیعتا اگر container پاک بشه تمامی اون داده ها هم از بین می روند. برای اینکه این اتفاق نیوفته باید پشتیبان بگیریم.

data volume توی برای نگهداری دیتا خارج از فایل سیستم کانتینر هست. داکر هیچ وقت این data volume ها رو پاک نمیکنه مگر اینکه خودمون volume های مربوط به یک کانتینر رو باهاش پاک کنیم.

docker rm -v

اگر همه کانتینرهایی که با یک volume کار میکنن رو پاک کنیم، پاک کردن و دسترسی به اون volume سخت میشه. به این volume ها میگن dangling volume. برای اینکه dangling volume وجود نداشته باشه بهتره همیشه یک کانتینر مرتبط با اون volume بسازیم.

برای اینکه بک آپ کاملی داشته باشیم باید از موارد زیر پشتیبان بگیریم:

  • image های داکر
    • از کانتینرهای داکر
    • از volume های موجود

    نصب gitlab روی داکر

    میخایم gitlab رو روی داکر بالا بیاریم. برای این کار از docker compose استفاده میکنیم. فایل compose.yml زیر رو مینویسیم:

    این یه کانتینر از gitlab-ce میسازه که پورتهاش رو به هم مپ میکنه.

    environment variable ای که استفاده شده GITLAB_HOME رو لازمه با دستور زیر تعریف کنیم

    یا کار بهتر اینه که فایل custom.sh رو توی /etc/profile.d/ میسازیم و اون اکسپورت رو توش میزاریم.

    قسمت environment توی فایل کامپوز برای متغیرهای توی خود کانتینر هست و ربطی به سرور اصلی نداره.

    آخر هم دستور زیر کانتینر رو میسازه.

    دستورات اولیه نصب Odoo

    دستورات تست شده برای نصب Odoo رو توی این پست میارم:

    Coroutine و Awaitables

    Coroutine در واقع یک تابع هست که میتونیم اونو pause کنیم. فرض کنیم دو تا تابع داریم و میخایم کنترل اجرا بین این دو تا جابجا بشه مثل ping pong مثلا تابع اول چند خط رو اجرا کنه بعد کنترل رو به تابع دوم بده و اون چند خط اجرا کنه و … در واقع دو تا routine که اینجا بهشون میگیم تابع با هم cooperate کنن.

    برای تریفش توی پایتون از async کلیدواژه استفاده میکنیم. که اون وقت اون تابع coroutine میشه. میتونیم هر جای کد coroutine ازش بخایم وایسه تا اجرای یه تابع دیگه تموم شه برای این کار await میکنیم.