مقدمه
در طی چند سال گذشته ، Docker به لطف نحوه ساده سازی و اجرای برنامه ها در کانتینرهای زودگذر ، به یک راه حل متداول برای استقرار برنامه های کاربردی تبدیل شده است. به عنوان مثال ، هنگام استفاده از یک پشته برنامه LEMP ، با PHP ، Nginx ، MySQL و چارچوب Laravel ،Docker می تواند روند تنظیم را بطور قابل توجهی ساده کند.
Docker Compose با اجازه دادن به توسعه دهندگان ، برای معرفی زیرساخت های خود از جمله خدمات برنامه ، شبکه ها و حجم ها را در یک فایل واحد ، فرایند توسعه را ساده تر کرده است. Docker Compose یک گزینه جایگزین کارآمد برای اجرای چندین دستور docker container create و docker container run ارائه می دهد.
در این آموزش شما یک برنامه وب با استفاده از چارچوب Laravel ایجاد می کنید ، و Nginx به عنوان وب سرور مجازی و MySQL به عنوان بانک اطلاعات ، همه در داخل کانتینرهای Dockerشما قرار دارند. کل پیکربندی پشته را در یک فایل docker-compose ، همراه با فایل های پیکربندی برای PHP ، MySQL و Nginx تعریف خواهید کرد.
پیش نیازها
قبل از شروع ، به موارد زیر نیاز دارید:
⦁ یک سرور Ubuntu 18.04 و یک کاربر غیر ریشه با امتیازات sudo. برای انجام این تنظیمات ، راه اندازی سرور اولیه را با آموزش اوبونتو 18.04 دنبال کنید.
⦁ Docker نصب شده ، طبق مراحل 1 و 2 نحوه نصب و استفاده از Docker در اوبونتو 18.04.
⦁ Docker Compose نصب شده طبق مرحله 1 نحوه نصب Docker Compose در اوبونتو 18.04.
مرحله 1 – دانلود Laravel و نصب متعلقات
به عنوان اولین مرحله ، آخرین نسخه Laravel را گرفته و متعلقات مربوط به پروژه از جمله Composer ، یعنی مدیر بسته برنامه های کاربردی برای PHP را نصب می کنیم. ما این متعلقات را با Docker نصب خواهیم کرد تا از نصب Composer در سطح جهانی جلوگیری کنید.
ابتدا بررسی کنید که در دیرکتوری هوم خود قرار دارید و آخرین نسخه Laravel را به دیرکتوری به نام laravel-app کلون کنید:
⦁ $ cd ~

⦁ $ git clone https://github.com/laravel/laravel.git laravel-app

به دیرکتوری laravel-app بروید:
⦁ $ cd ~/laravel-app

در مرحله بعدی ، از تصویر composer Docker برای سوار کردن دایرکتوری هایی که برای پروژه Laravel نیاز دارند استفاده کنید و از نصب composer در سطح جهانی جلوگیری کنید:
⦁ $ docker run –rm -v $(pwd):/app composer install

استفاده از فلگ های -v و – rm با اجرای docker run ، کانتینری زودگذر ایجاد می کند که قبل از حذف ، به دیرکتوری فعلی شما وصل خواهد شد. با این کار محتویات دیرکتوری ~ / laravel-app خود را در کانتینر کپی می کنید و همچنین اطمینان حاصل می کنید که پوشه vendor کامپوزر که در داخل کانتینر ایجاد شده در دیرکتوری فعلی شما کپی می شود.
به عنوان مرحله آخر ، مجوزها را در دایرکتوری پروژه تنظیم کنید تا متعلق به کاربر غیر ریشه شما باشد:
⦁ $ sudo chown -R $USER:$USER ~/laravel-app

این مسئله هنگامی که Dockerfile را برای تصویر برنامه خود در مرحله 4 می نویسید مهم خواهد بود ، زیرا به شما امکان می دهد با کد برنامه خود کار کنید و فرآیندهای موجود در کانتینر خود را به عنوان کاربر غیر ریشه اجرا کنید.
با استفاده از کد برنامه خود می توانید در تعریف خدمات خود با Docker Compose پیش بروید.
مرحله 2 – ایجاد فایل Docker Compose
ساخت برنامه های کاربردی خود با Docker Compose روند تنظیم و نسخه سازی زیرساخت های شما را ساده می کند. برای راه‌اندازی برنامه Laravel ، ما یک فایل docker-compose را برای معرفی سرور مجازی ، بانک اطلاعاتی و خدمات برنامه خود خواهیم نوشت.
فایل را باز کنید:
⦁ $ nano ~/laravel-app/docker-compose.yml

در فایل docker-compose ، شما سه سرویس را تعریف خواهید کرد: app ، webserver و db. کد زیر را به فایل اضافه کنید ، حتماً رمز اصلی را برای MYSQL_ROOT_PASSWORD که به عنوان یک متغیر محیط تحت سرویس db تعریف شده است ، با یک رمز عبور قوی به انتخاب خود جایگزین کنید:
~/laravel-app/docker-compose.yml
version: ‘3’
services:

#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: vpsgol.net/php
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
networks:
– app-network

#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
– “80:80”
– “443:443”
networks:
– app-network

#MySQL Service
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
– “3306:3306”
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: your_mysql_root_password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
– app-network

#Docker Networks
networks:
app-network:
driver: bridge

خدمات تعریف شده در اینجا شامل موارد زیر است:
⦁ app: این تعریف سرویس شامل برنامه Laravel است و یک تصویر Docker سفارشی ، vpsgol.net/php را اجرا می کند ، که در مرحله 4 آن را تعریف خواهید کرد. این کار همچنین work_dir را در کانتینر برابر / var / www قرار میدهد.
⦁ Webserver: این تعریف سرویس تصویر nginx: alpine را از Docker میگیرد و پورت های 80 و 443 را در معرض دید شما قرار می دهد.
⦁ Db: این تعریف سرویس ، تصویر mysql: 5.7.22 را از Docker گرفته و چند متغیر محیطی از جمله پایگاه داده ای به نام laravel را برای برنامه شما و رمز عبور اصلی برای پایگاه داده تعریف می کند. شما می توانید بانک اطلاعاتی را هر چه می خواهید ، بنامید و باید کلمه عبور your_mysql_root_pass را با رمزعبور قوی خود جایگزین کنید. این تعریف سرویس همچنین پورت 3306 روی هاست به پورت 3306 روی کانتینر نگاشت می کند.
هر یک از ویژگی های container_name یک نام برای کانتینر تعریف می کند ، که با نام سرویس مطابقت دارد. اگر این ویژگی را تعریف نکنید ، Docker با ترکیب یک نام مشهور از نظر تاریخی و یک کلمه تصادفی که با آندرلاین جدا شده است ، به هر کانتینر یک نام می دهد.
برای تسهیل ارتباط بین کانتینرها ، سرویس ها به شبکه پلی به نام app-network وصل می شوند. یک شبکه پلی از یک پل نرم افزاری استفاده می کند که به کانتینرهای متصل به یک شبکه پلی اجازه می دهد تا با یکدیگر ارتباط برقرار کنند. درایور پل به طور خودکار قوانینی را در دستگاه هاست نصب می کند تا کانتینرها در شبکه های مختلف پل نتوانند مستقیماً با یکدیگر ارتباط برقرار کنند. این باعث می شود سطح امنیتی بیشتری برای برنامه ها ایجاد شود و اطمینان حاصل شود که فقط خدمات مرتبط می توانند با یکدیگر ارتباط برقرار کنند. همچنین این امکان وجود دارد که بتوانید چندین شبکه و سرویس متصل به توابع مرتبط را تعریف کنید: به عنوان مثال سرویس های برنامه front-end می توانند از یک شبکه frontend ، و سرویس های back-end می توانند از یک شبکه backend استفاده کنند.
بیایید ببینیم که چگونه می توان حجم ها را اضافه کرد و نصب ها را به تعاریف سرویس خود اضافه کرد تا داده های برنامه شما ثابت شود
مرحله 3 – داده های ماندگار
Docker دارای ویژگی های قدرتمند و مناسبی برای داده های پایدار است. در برنامه ما از volumes و bind mounts  برای پایداری پایگاه داده و فایلهای برنامه و پیکربندی استفاده خواهیم کرد. volumes قابلیت انعطاف پذیری را برای تهیه نسخه پشتیبان و ماندگاری فراتر از چرخه حیات یک کانتینر ارائه می دهند ، در حالی که bind mounts باعث تغییر کد در طول توسعه می شوند و تغییراتی را در فایل ها یا دایرکتوری های هاست شما ایجاد می کنند که فوراً در کانتینرهای شما موجود است. ستاپ ما از هر دو استفاده خواهد کرد.
هشدار: با استفاده از bind mounts، می توانید سیستم فایل هاست را از طریق فرآیندهای در حال اجرا در یک کانتینر ، از جمله ایجاد ، اصلاح یا حذف فایل های مهم سیستم یا دایرکتوری ها ، تغییر دهید. این یک توانایی قدرتمند با پیامدهای امنیتی است و می تواند فرآیندهای غیر Docker را روی سیستم میزبان تحت تأثیر بگذارد. با دقت از bind mounts استفاده کنید.

در فایل docker-compose ، یک والیوم به نام dbdata را تحت تعریف سرویس db تعریف کنید تا پایگاه داده MySQL را ماندگار کنید:
~/laravel-app/docker-compose.yml

#MySQL Service
db:

volumes:
– dbdata:/var/lib/mysql
networks:
– app-network

والیوم به نام dbdata ، محتوای پوشه / var / lib / mysql موجود در داخل کانتینر را ادامه می دهد. این به شما امکان می دهد سرویس db را بدون از دست دادن داده متوقف کرده و مجدداً راه اندازی کنید.
در انتهای فایل ، تعریف مربوط به حجم dbdata را اضافه کنید:
~/laravel-app/docker-compose.yml

#Volumes
volumes:
dbdata:
driver: local

با استفاده از این تعریف ، می توانید از این حجم در سرویس ها استفاده کنید.
در مرحله بعد ، یک bind mount به سرویس db برای فایل های پیکربندی MySQL که در مرحله 7 ایجاد خواهید کرد اضافه کنید:
~/laravel-app/docker-compose.yml

#MySQL Service
db:

volumes:
– dbdata:/var/lib/mysql
– ./mysql/my.cnf:/etc/mysql/my.cnf

این bind mount ، ~ / laravel-app / mysql / my.cnf را به /etc/mysql/my.cnf در کانتینر متصل می کند.
سپس ، bind mount را به سرویس webserver اضافه کنید. دو مورد وجود دارد: یکی برای کد برنامه شما و دیگری برای تعریف پیکربندی Nginx که در مرحله 6 ایجاد خواهید کرد:
~/laravel-app/docker-compose.yml
#Nginx Service
webserver:

volumes:
– ./:/var/www
– ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
– app-network

 

برای تعامل با بانکهای اطلاعاتی خود و آزمایش سرویس ها و مدلها می توانید از tinker استفاده کنید.
با استفاده از برنامه Laravel در محل خود ، آماده توسعه و آزمایش بیشتر هستید.
نتیجه
اکنون یک برنامه پشته LEMP دارید که روی سرور مجازی تان در حال اجرا است که با دسترسی به صفحه استقبال Laravel و ایجاد جا به جایی در پایگاه داده MySQL ، آن را آزمایش کرده اید.
کلید سادگی این نصب Docker Compose است که به شما امکان می دهد گروهی از کانتینرهای Docker را که در یک فایل واحد تعریف شده، با یک دستور واحد ایجاد کنید. اگر دوست دارید درباره نحوه انجام CI با Docker Compose اطلاعات بیشتری کسب کنید به راهنمای پیکربندی یک محیط آزمایش یکپارچه سازی مداوم با Docker و Docker Compose در اوبونتو 16.04 نگاهی بیاندازید. اگر می خواهید روند استقرار برنامه Laravel خود را ساده تر کنید ، راهنمای چگونگی به کارگیری برنامه های کاربردی Laravel با Deployer در Ubuntu 16.04 ، منبع مرتبطی خواهد بود.

 

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

استفاده از nsh برای دستورات از راه دور اوبونتو 18 –  میزبانی وب سایت با Caddy اوبونتو 18

تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18  –  ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو

تنظیم مسیریابی شرطی و پاسخگو با React Router v4  –  ایجاد یک URL کوتاه کننده با Django و GraphQL

یک برنامه ردیابی سلامت را با React ،GraphQL و Okta –  ساخت برنامه چت زمان حقیقی React و GraphQL

به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) –  با استفاده از React ، Superagent و API اینستاگرام

نحوه ساختن یک برنامه جهانی با Nuxt.js و Django –  دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js

نحوه اضافه کردن عکسهای پیشرفته در Node و Express  –  با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت

یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید  –  ساخت برنامه های وب پیشرونده با Angular

اشکال زدایی JavaScript در تولید با نقشه های منبع  –  می توان با Koa برنامه “سلام جهانی” ساخت

ساختن یک برنامه با Node ، React ، Okta  –   مدیریت حالت فرم در React با Redux Form

نحوه تنظیم Laravel ، Nginx و MySQL  –  ارتقاء از AngularJS به Angular با ngUpgrade

استفاده از ویژوال استودیو از راه دور  –  احراز هویت API با JSON Web Tokens و Passport

راه اندازی یک پروژه React با Parcel  –  ایجاد Swiper مانند Netflix را در Vue

ساختن یک ربات تلگرام با Laravel و BotMan  –  استفاده از map، filter، و reduce در جاوااسکریپت

چگونه می توان موتور جستجوی زمان واقعی را با Vue  –  ساختن سیستم مستندات (Documentation) با Vue و VuePress

استفاده از اشتراک زنده با کد ویژوال استودیو  –  ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React

شروع عملی GraphQL با Node.js و Express  –  ساخت یک برنامه آب و هوا در Django

نحوه نصب Discourse روی Ubuntu 18  –  تأیید رمز عبور با استفاده از درخواست فرم Laravel

نحوه نصب MySQL در CentOS 8  –  استفاده از پسوند PDO PHP برای انجام تراکنش MySQL

نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18  –  نصب Linux، Nginx، MariaDB،PHP در Debian 10

 

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –