Docker روی لینوکس/مکاِس (macOS)
در این راهنما، یاد خواهید گرفت که چگونه MyEMS را با استفاده از Docker روی سیستم عامل لینوکس (یا مکاِس) مستقر کنید.
پیشنیازها
- Docker و npm بر روی میزبان (host) نصب شده باشند.
- سرور MySQL نصب شده باشد.
- پایگاه داده MySQL قابل اتصال از میزبانی که موتور Docker روی آن اجرا میشود، باشد.
- الزامات سختافزاری: حداقل 4 گیگابایت رم، 20 گیگابایت فضای ذخیرهسازی (برای پایگاه داده و کانتینرهای Docker).
کلون کردن کد منبع:
cd ~
git clone https://github.com/myems/myems
گام 1: پایگاه داده
مراحل نصب پایگاه داده را از بخش Database مرور کنید.
گام 2: myems-api
در این بخش، myems-api را روی Docker نصب خواهید کرد.
- کپی کردن کد منبع به دایرکتوری ریشه
cp -r myems/myems-api /
cd /myems-api
- ایجاد فایل .env بر اساس فایل example.env
آدرس IP 127.0.0.1 را به صورت دستی با آدرس IP واقعی میزبان (HOST) جایگزین کنید.
cp example.env .env
- ساخت تصویر (Image) از کد منبع
docker build -t myems/myems-api .
برای ساخت تصویر برای چندین پلتفرم (نه فقط معماری و سیستم عاملی که کاربر در آن دستور build را اجرا میکند)، میتوانید از buildx استفاده کرده و پرچم --platform را برای مشخص کردن پلتفرم مقصد خروجی build تنظیم کنید (مثال: linux/amd64، linux/arm64 یا darwin/amd64):
docker buildx build --platform=linux/amd64 -t myems/myems-api .
- اجرای یک کانتینر Docker
بر روی میزبان، پوشه اشتراکی فایل upload ایجاد کنید:
mkdir /myems-upload
کانتینر را ایجاد کنید، پوشه اشتراکی را به کانتینر متصل (bind-mount) کنید و همچنین فایل .env را به کانتینر متصل کنید:
docker run -d -p 8000:8000 -v /myems-upload:/var/www/myems-admin/upload -v /myems-api/.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-api myems/myems-api
- -d: اجرای کانتینر در پسزمینه و چاپ شناسه (ID) کانتینر
- -p: انتشار پورت(های) کانتینر به میزبان، 8000:8000 (Host:Container) پورت 8000 (سمت راست) کانتینر را به پورت TCP 8000 (سمت چپ) دستگاه میزبان متصل میکند.
- -v: اگر از -v یا --volume برای bind-mount یک فایل یا دایرکتوری که هنوز در میزبان Docker وجود ندارد استفاده کنید، -v آن نقطه پایانی (endpoint) را برای شما ایجاد میکند. این 항항 به صورت دایرکتوری ایجاد میشود. گزینه ro (در صورت وجود) باعث میشود bind mount به صورت فقط خواندنی (read-only) در کانتینر متصل شود. برای نسخههای 4.7.0 یا قدیمیتر، از '/code/.env' به جای '/app/.env' استفاده کنید.
- --log-opt max-size=2m: حداکثر اندازه لاگ قبل از رول کردن (rollen) آن. یک عدد صحیح مثبت به همراه یک مодиفایر که واحد اندازه را نشان میدهد (k، m یا g).
- --log-opt max-file=2: حداکثر تعداد فایلهای لاگ که میتوانند موجود باشند. اگر رول کردن لاگها باعث ایجاد فایلهای اضافی شود، قدیمیترین فایل حذف میشود. یک عدد صحیح مثبت.
- --restart: سیاست راهاندازی مجدد (restart) که باید هنگام خروج کانتینر اعمال شود.
- --name: اختصاص یک نام به کانتینر.
مسیر مطلق قبل از دو نقطه برای مسیر روی میزبان است و ممکن است در سیستم شما متفاوت باشد. مسیر مطلق بعد از دو نقطه برای مسیر روی کانتینر است و نمیتواند تغییر کند. با پاس دادن فایل .env به عنوان پارامتر bind-mount، میتوانید بعداً مقادیر پیکربندی را تغییر دهید. اگر فایل .env را تغییر دادید، کانتینر را راهاندازی مجدد کنید تا تغییرات اعمال شوند.
اگر میخواهید تصویر را به کامپیوتر دیگری انتقال دهید:
- صادر کردن (Export) تصویر به فایل tar
docker save --output myems-api.tar myems/myems-api
- کپی کردن فایل tar به کا مپیوتر دیگری و سپس بارگذاری (load) تصویر از فایل tar
docker load --input .\myems-api.tar
گام 3: myems-admin
در این بخش، myems-admin را روی Docker نصب خواهید کرد.
- کپی کردن کد منبع به دایرکتوری ریشه
cp -r myems/myems-admin /
cd /myems-admin
آدرس 127.0.0.1:8000 در فایل nginx.conf را به صورت دستی با آدرس IP واقعی میزبان (HOST) و پورت myems-api جایگزین کنید.
nano nginx.conf
proxy_pass http://127.0.0.1:8000/;
- ساخت تصویر (Image) از کد منبع
docker build -t myems/myems-admin .
برای ساخت تصویر برای چندین پلتفرم (نه فقط معماری و سیستم عاملی که کاربر در آن دستور build را اجرا میکند)، میتوانید از buildx استفاده کرده و پرچم --platform را برای مشخص کردن پلتفرم مقصد خروجی build تنظیم کنید (مثال: linux/amd64، linux/arm64 یا darwin/amd64):
docker buildx build --platform=linux/amd64 -t myems/myems-admin .
- اجرای یک کانتینر Docker
بر روی میزبان، پوشه اشتراکی فایل upload ایجاد کنید:
mkdir /myems-upload
کانتینر را ایجاد کنید، پوشه اشتراکی فایل upload را به کانتینر متصل (bind-mount) کنید و همچنین فایل nginx.conf را متصل کنید:
docker run -d -p 8001:8001 -v /myems-upload:/var/www/myems-admin/upload -v /myems-admin/nginx.conf:/etc/nginx/nginx.conf:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-admin myems/myems-admin
- -d: اجرای کانتینر در پسزمینه و چاپ شناسه (ID) کانتینر
- -p: انتشار پورت(های) کانتینر به میزبان، 8001:8001 (Host:Container) پورت 8001 (سمت راست) کانتینر را به پورت TCP 8001 (سمت چپ) دستگاه میزبان متصل میکند.
- -v: اگر از -v یا --volume برای bind-mount یک فایل یا دایرکتوری که هنوز در میزبان Docker وجود ندارد استفاده کنید، -v آن نقطه پایانی (endpoint) را برای شما ایجاد میکند. این 항항 به صورت دایرکتوری ایجاد میشود. گزینه ro (در صورت وجود) باعث میشود bind mount به صورت فقط خواندنی (read-only) در کانتینر متصل شود. برای نسخههای 4.7.0 یا قدیمیتر، از '/code/.env' به جای '/app/.env' استفاده کنید.
- --log-opt max-size=2m: حداکثر اندازه لاگ قبل از رول کردن (rollen) آن. یک عدد صحیح مثبت به همراه یک مодиفایر که واحد اندازه را نشان میدهد (k، m یا g).
- --log-opt max-file=2: حداکثر تعداد فایلهای لاگ که میتوانند موجود باشند. اگر رول کردن لاگها باعث ایجاد فایلهای اضافی شود، قدیمیترین ف ایل حذف میشود. یک عدد صحیح مثبت.
- --restart: سیاست راهاندازی مجدد (restart) که باید هنگام خروج کانتینر اعمال شود.
- --name: اختصاص یک نام به کانتینر.
اگر میخواهید تصویر را به کامپیوتر دیگری انتقال دهید:
- صادر کردن (Export) تصویر به فایل tar
docker save --output myems-admin.tar myems/myems-admin
- کپی کردن فایل tar به کامپیوتر دیگری و سپس بارگذاری (load) تصویر از فایل tar
docker load --input .\myems-admin.tar
گام 4: myems-modbus-tcp
در این بخش، myems-modbus-tcp را روی Docker نصب خواهید کرد.
- کپی کردن کد منبع به دایرکتوری ریشه
cp -r myems/myems-modbus-tcp /
cd /myems-modbus-tcp
- ایجاد فایل .env بر اساس فایل example.env
آدرس IP 127.0.0.1 را به صورت دستی با آدرس IP واقعی میزبان (HOST) جایگزین کنید.
cp example.env .env
- ساخت تصویر (Image) از کد منبع
docker build -t myems/myems-modbus-tcp .
برای ساخت تصویر برای چندین پلتفرم (نه فقط معماری و سیستم عاملی که کاربر در آن دستور build را اجرا میکند)، میتوانید از buildx استفاده کرده و پرچم --platform را برای مشخص کردن پلتفرم مقصد خروجی build تنظیم کنید (مثال: linux/amd64، linux/arm64 یا darwin/amd64):
docker buildx build --platform=linux/amd64 -t myems/myems-modbus-tcp .
- اجرای یک کانتینر Docker (به عنوان سوپر یوزر اجرا کنید)
docker run -d -v /myems-modbus-tcp/.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-modbus-tcp myems/myems-modbus-tcp
- -d: اجرای کانتینر در پسزمینه و چاپ شناسه (ID) کانتینر
- -v: اگر از -v یا --volume برای bind-mount یک فایل یا دایرکتوری که هنوز در میزبان Docker وجود ندارد استفاده کنید, -v آن نقطه پایانی (endpoint) را برای شما ایجاد میکند. این 항항 به صورت دایرکتوری ایجاد میشود. گزینه ro (در صورت وجود) باعث میشود bind mount به صورت فقط خواندنی (read-only) در کانتینر متصل شود. برای نسخههای 4.7.0 یا قدیمیتر، از '/code/.env' به جای '/app/.env' استفاده کنید.
- --log-opt max-size=2m: حداکثر اندازه لاگ قبل از رول کردن (rollen) آن. یک عدد صحیح مثبت به همراه یک مодиفایر که واحد اندازه را نشان میدهد (k، m یا g).
- --log-opt max-file=2: حداکثر تعداد فایلهای لاگ که میتوانند موجود باشند. اگر رول کردن لاگها باعث ایجاد فایلهای اضافی شود، قدیمیترین فایل حذف میشود. یک عدد صحیح مثبت.
- --restart: سیاست راهاندازی مجدد (restart) که باید هنگام خروج کانتینر اعمال شود.
- --name: اختصاص یک نام به کانتینر.
مسیر مطلق قبل از دو نقطه برای مسیر روی میزبان است و ممکن است در سیستم شما متفاوت باشد. مسیر مطلق بعد از دو نقطه برای مسیر روی کانتینر است و نمیتواند تغییر کند. با پاس دادن فایل .env به عنوان پارامتر bind-mount، میتوانید بعداً مقادیر پیکربندی را تغییر دهید. اگر فایل .env را تغییر دادید، کانتینر را راهاندازی مجدد کنید تا تغییرات اعمال شوند.
- انتقال (Immigrate) کانتینر Docker
برای انتقال کانتینر به کامپیوتر دیگری:
- صادر کردن (Export) تصویر به فایل tar
docker save --output myems-modbus-tcp.tar myems/myems-modbus-tcp
- کپی کردن فایل tar به کامپیوتر دیگری و سپس بارگذاری (load) تصویر از فایل tar
docker load --input .\myems-modbus-tcp.tar
گام 5: myems-cleaning
در این بخش، myems-cleaning را روی Docker نصب خواهید کرد.
- کپی کردن کد منبع به دایرکتوری ریشه
cp -r myems/myems-cleaning /
cd /myems-cleaning
- ایجاد فایل .env بر اساس فایل example.env
آدرس IP 127.0.0.1 را به صورت دستی با آدرس IP