سفارش تبلیغ
صبا ویژن

نحوه نصب Drupal با Docker Compose

Drupal یک سیستم مدیریت محتوا (CMS) است که به زبان PHP نوشته شده و تحت مجوز عمومی منبع آزاد GNU توزیع می شود. مردم و سازمانهای مختلف در سراسر جهان از Drupal برای ایجاد سایتهای دولتی ، وبلاگ های شخصی ، کسب و کارها و موارد دیگر استفاده می کنند. آنچه Drupal را از سایر چارچوبهای CMS منحصر به فرد می کند ، جامعه در حال رشد آن و مجموعه ای از ویژگی هایی است که شامل فرآیندهای ایمن ، عملکرد قابل اعتماد ، مدولاریتی (پیمانه ای بودن) و انعطاف پذیری در انطباق است.
Drupal نیاز به نصب پشته LAMP (Linux ، Apache ، MySQLیا PHP) یا پشته LEMP (Linux، Nginx ، MySQL و PHP) دارد ، اما نصب تک تک مؤلفه ها یک کار زمان بر است. ما می توانیم از ابزارهایی مانند Docker و Docker Compose برای ساده کردن روند نصب Drupal استفاده کنیم. در این آموزش از تصاویر Docker برای نصب مولفه های جداگانه در کانتینر Docker استفاده خواهد شد. با استفاده از Docker Compose می توان چندین کانتینر را برای پایگاه داده ، برنامه و شبکه / ارتباط بین آنها تعریف و مدیریت کرد.
در این آموزش Drupal را با استفاده از Docker Compose نصب خواهیم کرد تا بتوانیم از کانتینرینگ استفاده کرده و وب سایت Drupal خود را روی سرورها مستقر کنیم. کانتینرهایی برای یک پایگاه داده MySQL ، وب سرور مجازی Nginx و Drupal اجرا خواهیم کرد. همچنین با بدست آوردن گواهینامه های TLS / SSL با Let’s Encrypt برای دامنه مورد نظر جهت پیوند با سایت خود ، نصب خود را ایمن خواهیم کرد. سرانجام ، یک فرآیند cron را برای تمدید گواهینامه های خود تنظیم خواهیم کرد تا دامنه مان ایمن بماند.
پیش نیازها
برای دنبال کردن این آموزش ، به موارد زیر نیاز خواهیم داشت:
⦁ سروری که اوبونتو 18.04 را اجرا می کند ، به همراه یک کاربر غیر ریشه با امتیازات sudo و یک فایروال فعال. برای راهنمایی در مورد نحوه تنظیم این موارد ، لطفاً به این راهنمای تنظیم اولیه سرور مجازی مراجعه کنید.
⦁ Docker که طبق مراحل 1 و 2 نحوه نصب و استفاده از Docker در اوبونتو 18.04 بر روی سرور مجازی نصب شده باشد. این آموزش بر روی نسخه 19.03.8 تست شده است.
⦁ Docker Compose که طبق مرحله 1 نحوه نصب Docker در اوبونتو 18.04 بر روی سرور مجازی نصب باشد. این آموزش بر روی نسخه 1.21.2 تست شده است.
⦁ نام دامنه ثبت شده. در سراسر این آموزش از your_domain استفاده خواهد کرد. می توانید یک نام دامنه به صورت رایگان در Freenom دریافت کنید ، و یا از ثبت کننده دامنه مورد نظر خود استفاده کنید.
⦁ هر دو فایل DNS زیر برای سرور مجازی شما تنظیم شده باشد.
⦁ یک رکورد A با your_domain که به آدرس IP عمومی سرور مجازی شما اشاره کند.
⦁ رکورد A با www.your_domain که به آدرس IP عمومی سرور مجازی شما نشان می دهد.
مرحله 1 – تعریف پیکربندی وب سرور
قبل از اجرای هر نوع کانتینر ، باید پیکربندی سرور مجازی وب Nginx خود را تعریف کنیم. فایل پیکربندی ما شامل برخی از بلوک های مکانی مخصوص Drupal ، به همراه بلوک موقعیت مکانی برای هدایت درخواست های تأیید Let’s Encrypt به کلاینت Certbot برای تمدید خودکار گواهینامه میباشد.
ابتدا ، اجازه دهید یک دایرکتوری پروژه برای مجموعه Drupal خود به نام drupal ایجاد کنیم:
⦁ $ mkdir drupal

به دیرکتوری جدید ایجاد شده بروید:
⦁ $ cd drupal

اکنون می توانیم یک دایرکتوری برای فایل پیکربندی خود تهیه کنیم:
⦁ $ mkdir nginx-conf

فایل را با nano یا ویرایشگر متن مورد علاقه خود باز کنید:
⦁ $ nano nginx-conf/nginx.conf

در این فایل ، یک بلوک سرور مجازی با دستورالعمل هایی برای نام سرور مجازی و ریشه اسناد ، و بلوک های مکان برای هدایت درخواست کلاینت Certbot برای صدور گواهینامه ها ، پردازش PHP و درخواست های دارایی استاتیک اضافه خواهیم کرد.
کد زیر را در فایل اضافه کنید. حتماً your_domain را با نام دامنه خود جایگزین کنید:
~/drupal/nginx-conf/nginx.conf
server {
listen 80;
listen [::]:80;

server_name your_domain www.your_domain;

index index.php index.html index.htm;

root /var/www/html;

location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass drupal:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~ /\.ht {
deny all;
}

location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}

بلوک سرور مجازی ما شامل اطلاعات زیر است:
دستورالعمل ها:
⦁ listen: به Nginx می گوید که به پورت 80 گوش دهد ، که به ما این امکان را می دهد تا از پلاگین webroot Certbot برای درخواست های گواهی خود استفاده کنیم. توجه داشته باشید که ما هنوز پورت 443 را دراختیار نداریم – پس از اینکه گواهینامه های خود را با موفقیت به دست آوردیم ، پیکربندی خود را برای شامل شدن SSL به روز خواهیم کرد.
⦁ server_name: نام سرور مجازی ما و بلوک سرور مجازی را که باید برای درخواست به سرور مجازی ما استفاده شود ، تعریف می کند. حتما your_domain را در این خط با نام دامنه خود جایگزین کنید.
⦁ index: فایل هایی را که هنگام پردازش درخواست به سرور مجازی ما به عنوان دیرکتوری استفاده می شوند ، تعریف می کند. ما ترتیب پیش فرض اولویت را در اینجا تغییر داده ایم ، index.php را در جلوی index.html قرار می دهیم تا Nginx در صورت امکان فایلهایی به نام index.php را در اولویت قرار دهد.
⦁ Root: دستورالعمل root دیرکتوری اصلی برای درخواست به سرور مجازی ما را نامگذاری می کند. این دیرکتوری ، / var / www / html ، به عنوان یک نقطه نصب در زمان ساخت با دستورالعمل هایی در Drupal Dockerfile ما ایجاد می شود. این دستورالعمل Dockerfile همچنین اطمینان حاصل می کند که فایل های موجود در نسخه Drupal روی این حجم نصب شده اند.
⦁ rewrite: اگر عبارت معمول و مشخص شده (^/core/authorize.php/core/authorize.php(.*)$) با یک URI درخواستی مطابقت داشته باشد ، URI همانطور که در رشته جایگزینی مشخص شده است تغییر می کند (/core/authorize.php$1)
بلوک های موقعیت مکانی:
⦁ location ~ /.well-known/acme-challenge : این بلوک موقعیت مکانی درخواست ها به دایرکتوری .well-known را مدیریت میکند که در آن Certbot یک فایل موقت قرار می دهد تا تأیید کند که DNS برای دامنه ما روی سرور مجازی مناسب میباشد. با استقرار این پیکربندی ، می توانیم از پلاگین webroot Certbot برای به دست آوردن گواهینامه های دامنه خود استفاده کنیم.
⦁ location / : در این بلوک موقعیت مکانی ، ما از یک دستورالعمل try_files برای بررسی فایل های مطابق با درخواست های URI استفاده خواهیم کرد. با این وجود ، به جای بازگشت یک وضعیت 404 Not Found به عنوان پیش فرض ، با آرگومان های درخواست ، کنترل را به فایل index.php Drupal خواهیم داد.
⦁ location ~ \.php$ : این بخش موقعیت مکانی پردازش PHP و پروکسی این درخواستها به کانتینر Drupal را مدیریت می کند. از آنجا که تصویر Drupal Docker ما مبتنی بر تصویر php: fpm خواهد بود ، همچنین گزینه های پیکربندی خاص را در پروتکل FastCGI در این بلوک قرار خواهیم داد. Nginx برای درخواست های PHP به یک پردازنده مستقل PHP احتیاج دارد: در مورد ما ، این درخواست ها توسط پردازنده php-fpm که همراه با تصویر php: fpm است ، انجام می شود. علاوه بر این ، این بلوک موقعیت مکانی شامل دستورالعمل ها ، متغیرها و گزینه های خاص FastCGI است که درخواست ها به برنامه Drupal را که در کانتینر Drupal ما اجرا می شود ، پروکسی میکند، و شاخص مورد نظر را برای URI درخواستی تجزیه شده و درخواست های URI تنظیم میکند.
⦁ location ~ /\.ht : این بلوک فایل های html دسترسی را از آنجایی که Nginx به آنها سرویس نمی دهد ، مدیریت خواهد کرد. دستورالعمل deny_all تضمین می کند که فایل های .htaccess هرگز در اختیار کاربران قرار نمی گیرد.
⦁ location = /favicon.ico, location = /robots.txt : این بلوک ها اطمینان حاصل می کنند که درخواست ها به /favicon.ico و /robots.txt وارد نشوند.
⦁ location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ : این بلوک ورود به سیستم برای درخواست های دارایی استاتیک را غیرفعال می کند و تضمین می کند که این دارایی ها بسیار قابل ذخیره هستند ، زیرا ارائه آن ها معمولاً گران است.
برای کسب اطلاعات بیشتر در مورد پراکسی FastCGI ، به راهنمای درک و اجرای Proxying FastCGI در Nginx مراجعه کنید. برای کسب اطلاعات در مورد بلوک های سرور و موقعیت مکانی ، به راهنمای درک سرور Nginx و الگوریتم های انتخاب بلوک موقعیت مراجعه کنید.
پس از پایان ویرایش ، فایل را ذخیره کنید و ببندید.
با تنظیم Nginx در محل خود ، می توانید به سراغ ایجاد متغیرهای محیط بروید تا در زمان اجرا به کانتینرها برنامه و پایگاه داده خود منتقل شوید.
مرحله 2 – تعیین متغیرهای محیط
برنامه Drupal ما برای ذخیره اطلاعات مربوط به سایت به یک پایگاه داده (MySQL ، PostgresSQL و غیره) نیاز دارد. برای دسترسی به کانتینر پایگاه داده (MySQL) ، کانتینر Drupal در زمان اجرا به برخی از متغیرهای محیطی نیاز دارد. این متغیرها حاوی اطلاعات حساسی مانند اعتبارات پایگاه داده هستند ، بنابراین نمی توانیم مستقیماً آنها را در فایل Docker Compose قرار دهیم – فایل اصلی که حاوی اطلاعاتی در مورد نحوه اجرای کانتینرهای ما است.
همیشه توصیه می شود مقادیر حساس را در فایل .env تنظیم کنید و گردش آن را محدود کنید. این کار مانع از کپی شدن این مقادیر در مخازن پروژه می شود و در معرض دید عموم قرار نمیگیرد.
در دیرکتوری اصلی پروژه ، ~ / drupal ، فایلی با نام .env ایجاد و آن را باز کنید:
⦁ $ nano .env

متغیرهای زیر را به فایل .env اضافه کنید و بخش هایلایت شده را با اعتبار مورد نظر خود جایگزین کنید:
~/drupal/.env
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=drupal
MYSQL_USER=drupal_database_user
MYSQL_PASSWORD=drupal_database_password

اکنون گذرواژه را برای حساب ریشه MySQL و همچنین نام کاربری و رمزعبور مورد نظر خود برای بانک اطلاعات برنامه خود اضافه کرده ایم.
فایل .env ما حاوی اطلاعات حساسی است ، بنابراین همیشه توصیه می شود آن را در فایل های .gitignore و .dockerignore یک پروژه قرار دهید تا به مخازن Git و تصاویر Docker اضافه نشود.
اگر می خواهید برای کنترل نسخه با Git کار کنید ، دیرکتوری کاری فعلی خود را به عنوان یک مخزن با git init مقداردهی کنید:
⦁ $ git init

فایل gitignore را باز کنید:
⦁ $ nano .gitignore

موارد زیر را اضافه کنید:
~/drupal/.gitignore
.env
فایل را ذخیره کنید و از آن خارج شوید.
به همین ترتیب ، فایل .dockerignore را باز کنید:
⦁ $ nano .dockerignore

سپس موارد زیر را اضافه کنید:
~/drupal/.dockerignore
.env
.git
فایل را ذخیره کنید و از آن خارج شوید.
اکنون که برای حفظ اعتبار خود به عنوان متغیرهای محیطی اقداماتی انجام داده ایم ، بیایید به مرحله بعدی تعریف خدمات خود در فایل docker-compose.yml برویم.
مرحله 3 – تعریف خدمات با Compose Docker
Docker Compose ابزاری برای تعریف و اجرای برنامه های چند کانتینری Docker است. ما برای پیکربندی خدمات برنامه خود ، یک فایل YAML تعریف می کنیم. سرویس در Docker Compose یک کانتینر در حال اجرا است و Compose به ما اجازه می دهد تا این سرویس ها را با حجم و شبکه های مشترک پیوند دهیم.
کانتینرهای مختلفی را برای برنامه Drupal ، پایگاه داده و سرور مجازی وب خود ایجاد خواهیم کرد. در کنار اینها ، همچنین یک کانتینر برای اجرای Certbot ایجاد خواهیم کرد تا بتوانیم گواهینامه هایی را برای سرور مجازی وب خود بدست آوریم.
یک فایل docker-compose.yml ایجاد کنید:
⦁ $ nano docker-compose.yml

برای تعریف نسخه فایل Compose و سرویس پایگاه داده mysql کد زیر را اضافه کنید:
~/drupal/docker-compose.yml
version: “3”

services:
mysql:
image: mysql:8.0
container_name: mysql
command: –default-authentication-plugin=mysql_native_password
restart: unless-stopped
env_file: .env
volumes:
– db-data:/var/lib/mysql
netwoکار ، کانتینر خود را نامگذاری می کنیم و آن را به کانتینر Drupal وابسته می کنیم. همچنین از یک تصویر alpine– تصویر 1.17.4-alpine Nginx – استفاده می کنیم .

این تعریف خدمات نیز گزینه های زیر را شامل می شود:
⦁ ports: پورت 80 را برای فعال کردن گزینه های پیکربندی تعریف شده در فایل nginx.conf در مرحله 1 در معرض نمایش قرار می دهد.
⦁ volumes: در اینجا ، ما هم والیوم نامگذاری شده و هم مسیر هاست را تعریف می کنیم:
⦁ drupal-data:/var/www/html : کد برنامه Drupal ما را روی دیرکتوری / var / www / html سوار می کند ، که ما آن را به عنوان ریشه در بلوک سرور مجازی Nginx قرار داده ایم.
⦁ ./nginx-conf:/etc/nginx/conf.d : دایرکتوری پیکربندی Nginx را بر روی هاست برای دیرکتوری مربوطه در کانتینر سوار می کند ، و اطمینان حاصل می کند که هرگونه تغییری که در فایل ها ایجاد کنیم روی هاست در کانتینر منعکس می شود.
⦁ certbot-etc:/etc/letsencrypt : مجوزها و کلیدهای Let’s Encrypt برای دامنه ما را روی دایرکتوری مناسب موجود در کانتینر سوار می کند.
⦁ networks: ما شبکه خارجی را فقط برای این تعریف کرده ایم تا این کانتینر بتواند با کانتینر Drupal و نه با کانتینر mysql ارتباط برقرار کند.
سرانجام آخرین تعریف سرویس خود را برای سرویس certbot اضافه خواهیم کرد. حتماً sammy @ your_domain و your_domain را با ایمیل و نام دامنه خود جایگزین کنید:
~/drupal/docker-compose.yml

certbot:
depends_on:
– webserver
image: certbot/certbot
container_name: certbot
volumes:
– certbot-etc:/etc/letsencrypt
– drupal-data:/var/www/html
command: certonly –webroot –webroot-path=/var/www/html –email sammy@your_domain –agree-tos –no-eff-email –staging -d your_domain -d www.your_domain

این تعریف به Compose می گوید تا تصویر certbot / certbot را از Docker Hub دریافت کند. همچنین از این والیوم های نامگذاری شده برای به اشتراک گذاری منابع با کانتینر Nginx ، از جمله گواهینامه های دامنه و کلید در certbot-etcو کد برنامه در drupal-data استفاده می کند.
همچنین از depends_on استفاده کرده ایم تا مطمئن شویم که پس از اجرای سرویس وب سرور مجازی ، کانتینرهای certbot شروع می شوند.
ما هیچ شبکه ای را در اینجا مشخص نکرده ایم زیرا این کانتینر با هیچ سرویس دیگری از طریق شبکه ارتباط برقرار نخواهد کرد. تنها گواهی نامه های دامنه و کلید را اضافه میکند که ما با استفاده از والیوم نام گذاری شده نصب کرده ایم.
همچنین گزینه command  را گنجانده ایم که یک فرمان فرعی را برای اجرا با دستور certbot پیش فرض کانتینر مشخص می کند. کلاینت Certbot از پلاگین ها برای بدست آوردن و نصب گواهینامه ها پشتیبانی می کند. ما از پلاگین webroot برای بدست آوردن گواهی نامه با درج نام مستقل و – webroot در خط فرمان استفاده می کنیم. اطلاعات بیشتر در مورد افزونه و دستورات اضافی را از مستندات رسمی Certbot بخوانید.
پس از تعریف سرویس certbot ، تعریف شبکه و والیوم را اضافه کنید:
~/drupal/docker-compose.yml

نتیجه
در این آموزش از Docker Compose برای ایجاد نصب Drupal با یک وب سرور مجازی Nginx استفاده کرده ایم. به عنوان بخشی از این گردش کار ، گواهینامه های TLS / SSL را برای دامنه مورد نظر خود با سایت Drupal در نظر گرفتیم و یک کار cron ایجاد کردیم تا در صورت لزوم این گواهینامه ها را تمدید کنیم.
اگر دوست دارید درباره Docker اطلاعات بیشتری کسب کنید ، به صفحه  Docker topic مراجعه کنید.

 

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

نصب و پیکربندی Ansible در اوبونتو 18.04 – نصب MySQL در اوبونتو 18.04

نظارت بر سلامت سرور با Checkmk در اوبونتو – اجرای چند نسخه PHP بر روی یک سرور

نصب Nginx، MySQL، PHP در CentOS 7 –  نصب و پیکربندی Elasticsearch در اوبونتو 18.04

راه اندازی سرور اولیه با اوبونتو 20.04 – تنظیم کلیدهای SSH در Ubuntu 20.04

نصب و استفاده از PostgreSQL در اوبونتو 20.0 – نحوه نصب MySQL در اوبونتو 20.04

نصب Python 3 روی سرور Ubuntu 18.04 –  نحوه نصب Python 3 روی سرور Ubuntu 20.04

نصب Linux،Apache،MySQL،PHP LAMP در اوبونتو 20.04 –  نصب وب سرور Apache در CentOS 8

نحوه نصب Drupal با Docker Compose –  نحوه نصب Nginx در اوبونتو 20.04

7 مورد از اقدامات امنیتی برای محافظت از سرورهای شما –  نحوه نصب و ایمن سازی Redis در اوبونتو 20.04

نحوه نصب و ایمن سازی Redis در اوبونتو 18.04 – اضافه کردن فضای Swap در اوبونتو 20.04

چگونه می توان فایروال را با UFW در اوبونتو 20.04 تنظیم کرد – نظارت بر اطلاعیه و مسیر BGP با BGPalerter اوبونتو 18.04

نصب و ایمن سازی phpMyAdmin در اوبونتو 20.04  –  نصب و استفاده از Composer در اوبونتو 20.04

ریست کردن رمز ورود ریشه MySQL یا MariaDB –  استفاده از نوع داده MySQL BLOB برای ذخیره تصاویر

نصب Nginx در اوبونتو 18.04 – نصب توزیع Anaconda پایتون در اوبونتو 20.04

نحوه نصب جاوا با Apt در اوبونتو 18.04 –  نحوه نصب Django و تنظیم محیط توسعه در اوبونتو 16.04

نصب جنگو و تنظیم محیط توسعه در اوبونتو 20.04 – نحوه ایجاد سرور Minecraft در اوبونتو 18.04

نحوه راه اندازی یک پروژه Node با Typescript –  نحوه نصب و پیکربندی VNC در اوبونتو 18.04

ایجاد یک برنامه Django و اتصال آن به یک بانک اطلاعاتی – نصب و پیکربندی VNC در اوبونتو 20.04

نصب MariaDB در اوبونتو 20.04  –  فعال سازی و اتصال رابط کاربری Django

تنظیم پلتفرم Cloud IDE کد سرور را در اوبونتو 18.04 – پیکربندی Apache HTTP با رویداد MPM و PHP-FPM

 

 

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

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