سرور مجازی

  • ۰
  • ۰

نحوه نصب متابیس در اوبونتو 20.04 با داکر

ورود به سایت

معرفی

Metabase یک ابزار مبتنی بر جاوا منبع باز هوش تجاری (BI) است. این می تواند به تعدادی پایگاه داده مختلف متصل شود و یک ابزار سازنده سوال دارد که می تواند پیچیدگی پرس و جوهای بزرگ SQL را پنهان کند.

در این آموزش شما Metabase را با استفاده از Docker Compose نصب می‌کنید، سپس Nginx را نصب می‌کنید تا به عنوان یک پروکسی معکوس برای سایت متابیس شما عمل کند. سپس، اتصالات HTTPS ایمن را با استفاده از Certbot برای دانلود و پیکربندی یک گواهی TLS از Let’s Encrypt Certificate Authority فعال می کنید. در نهایت، Metabase را پیکربندی می‌کنید و برخی از داده‌های نمونه را بارگیری می‌کنید تا بتوانید سؤالات و داشبوردهای BI خود را بسازید.

پیش نیازها

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

یک سرور اوبونتو 20.04 با 2 یا بیشتر CPU، یک کاربر غیر ریشه با دسترسی sudo و یک فایروال. برای تنظیم این، آموزش راه اندازی سرور اولیه ما با اوبونتو 20.04 را دنبال کنید.
داکر نصب شده است. مراحل 1 و 2 نحوه نصب و استفاده از Docker در اوبونتو 20.04 را دنبال کنید تا آن را نصب کنید و کاربر غیر روت خود را پیکربندی کنید تا بتواند دستورات docker را اجرا کند.

در نهایت، برای فعال کردن TLS به یک نام دامنه نیاز دارید که به آدرس IP عمومی سرور شما اشاره شده باشد. این باید چیزی شبیه example.com یا metabase.example.com باشد. اگر از DigitalOcean استفاده می کنید، لطفاً برای کسب اطلاعات در مورد ایجاد منابع دامنه در کنترل پنل خود، به Start سریع DNS ما مراجعه کنید.

هنگامی که تمام پیش نیازها را آماده کردید، به مرحله 1 بروید، جایی که بسته docker-compose را نصب خواهید کرد.

مرحله 1 – نصب Docker Compose

برای نصب ابزار خط فرمان docker-compose، ابتدا لیست بسته خود را بازخوانی کنید:

sudo apt update

سپس بسته را با استفاده از apt نصب کنید:

sudo apt install docker-compose

با اجرای دستور زیر می توانید تایید کنید که بسته نصب شده است:

docker-compose –version

شما باید خروجی هایی مانند زیر دریافت کنید:

 

Output

docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10

هنگامی که تأیید کردید که Docker Compose روی سرور شما نصب شده است، از آن برای پیکربندی و راه اندازی Metabase در مرحله بعدی این آموزش استفاده خواهید کرد.

مرحله 2 – اجرای Metabase با Docker Compose

برای شروع ایجاد محفظه Metabase خود، دایرکتوری به نام metabase را در فهرست اصلی خود ایجاد کنید تا فایل هایی را که در این آموزش ایجاد خواهید کرد ذخیره کنید. شما از این دایرکتوری برای ذخیره تمام فایل هایی که برای اجرای Metabase نیاز دارید استفاده خواهید کرد.

برای ایجاد دایرکتوری دستور زیر را اجرا کنید:

mkdir ~/metabase

سپس در آن حرکت کنید:

cd ~/metabase

اکنون یک فایل YAML خالی جدید به نام docker-compose.yml را با استفاده از nano یا ویرایشگر دلخواه خود باز کنید:

nano docker-compose.yml

شما از این فایل با دستور docker-compose برای راه اندازی ظرف Metabase خود استفاده خواهید کرد. خطوط زیر را به فایل اضافه کنید:

docker-compose.yml

version: '3'
services:
  metabase:
    image: metabase/metabase:latest
    ports:
      - "3000:3000"
    volumes:
      - data:/metabase

volumes:
  data:

این فایل سرویسی به نام metabase را تعریف می کند که برنامه Metabase را اجرا می کند. این سرویس همچنین به یک حجم نام‌گذاری شده اشاره می‌کند که از آن برای ذخیره داده‌های خارج از نمونه کانتینر در حال اجرا استفاده می‌کند. در نهایت، سرویس متابیس پورت 3000 سرور شما را در معرض کانتینر Metabase که در همان پورت 3000 در حال اجرا است، قرار می دهد.

پس از اتمام ویرایش فایل را ذخیره کرده و از آن خارج شوید. اگر از نانو استفاده می کنید، CTRL+O و سپس RETURN را برای ذخیره و سپس CTRL+X را برای خروج فشار دهید.

اکنون آماده هستید تا ظرف متابیس را با دستور docker-compose راه اندازی کنید:

docker-compose up -d

فرمان فرعی up به docker-compose می‌گوید که ظرف و حجم(های) و شبکه(های) مرتبط را که در فایل docker-compose.yml شما تعریف شده‌اند، راه اندازی کند. پرچم -d (که مخفف “daemonize” است) به docker-compose می‌گوید که کانتینر را در پس‌زمینه اجرا کند تا فرمان ترمینال شما را نگیرد. docker-compose زمانی که تصویر Docker مورد نیاز را دانلود می‌کند و سپس کانتینر را راه‌اندازی می‌کند، خروجی مختصری را چاپ می‌کند:

 

Output

Creating network "metabase_default" with the default driver
Creating volume "metabase_data" with default driver
Pulling metabase (metabase/metabase:latest)...
latest: Pulling from metabase/metabase
. . .

docker-compose stop

وقتی این کار انجام شد، Metabase باید در حال اجرا باشد. می توانید با واکشی صفحه اصلی با استفاده از دستور curl آزمایش کنید که یک وب سرور در 127.0.0.1:3000 اجرا می شود:

curl –head http://localhost:3000

با این کار فقط سرصفحه های HTTP از پاسخ چاپ می شود:

 

Output

HTTP/1.1 200 OK
Date: Tue, 15 Mar 2022 19:26:22 GMT
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Last-Modified: Tue, 15 Mar 2022 19:26:22 GMT
Strict-Transport-Security: max-age=31536000
Set-Cookie: metabase.DEVICE=3525ed6d-13e0-4ad0-8fdb-f1bc426706dc;HttpOnly;Path=/;Expires=Sat, 15 Mar 2042 19:26:22 GMT;SameSite=Lax
X-Permitted-Cross-Domain-Policies: none
Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-eval' https://maps.google.com https://apis.google.com https://*.googleapis.com *.gstatic.com https://www.google-analytics.com   'sha256-lMAh4yjVuDkQ9NqkK4H+YHUga+anpFs5JAuj/uZh0Rs=' 'sha256-ib2/2v5zC6gGM6Ety7iYgBUvpy/caRX9xV/pzzV7hf0=' 'sha256-JJa56hyDfUbgNfq+0nq6Qs866JKgZ/+qCq2pkDJED8k='; child-src 'self' https://accounts.google.com; style-src 'self' 'unsafe-inline'; font-src 'self' ; img-src * 'self' data:; connect-src 'self' metabase.us10.list-manage.com www.google-analytics.com https://sp.metabase.com ; manifest-src 'self';  frame-ancestors 'none';
Content-Type: text/html;charset=utf-8
Expires: Tue, 03 Jul 2001 06:00:00 GMT
Content-Length: 0
Server: Jetty(9.4.43.v20210629)

پاسخ OK 200 به این معنی است که یک برنامه در پورت 3000 پاسخ می دهد. هدرهای Set-Cookie و Server برجسته شده تأیید می کنند که برنامه Metabase در سرور وب Jetty اجرا می شود.

سپس Nginx را برای پراکسی کردن ترافیک عمومی به کانتینر Metabase راه‌اندازی می‌کنیم.

مرحله 3 – نصب و پیکربندی Nginx

قرار دادن یک وب سرور مانند Nginx در مقابل سرور Metabase شما می‌تواند عملکرد را با بارگذاری ذخیره‌سازی، فشرده‌سازی و سرویس فایل استاتیک برای فرآیندی کارآمدتر بهبود بخشد. ما قصد داریم Nginx را نصب کنیم و آن را به گونه ای پیکربندی کنیم که درخواست های پراکسی را به Metabase معکوس کند، به این معنی که از رسیدگی به درخواست های کاربران شما به Metabase و بازگشت مجدد مراقبت می کند. استفاده از فرآیند Nginx غیر کانتینری اضافه کردن گواهینامه‌های Let’s Encrypt TLS را در مرحله بعدی آسان‌تر می‌کند.

ابتدا لیست بسته خود را بازخوانی کنید، سپس Nginx را با استفاده از apt نصب کنید:

sudo apt install nginx

با استفاده از نمایه برنامه Nginx Full UFW، ترافیک عمومی به پورت های 80 و 443 (HTTP و HTTPS) را مجاز کنید:

sudo ufw allow “Nginx Full”

 

Output

Rule added
Rule added (v6)

در مرحله بعد، یک فایل پیکربندی جدید Nginx را در پوشه /etc/nginx/sites-available باز کنید. ما سایت خود را metabase.conf می نامیم اما می توانید از نام دیگری استفاده کنید:

sudo nano /etc/nginx/sites-available/metabase.conf

موارد زیر را در فایل پیکربندی جدید جای‌گذاری کنید، مطمئن شوید که your_domain_here را با دامنه‌ای که پیکربندی کرده‌اید برای اشاره به سرور متابیس خود جایگزین کنید. برای مثال باید چیزی شبیه metabase.example.com باشد:

/etc/nginx/sites-available/metabase.conf

server {
    listen       80;
    listen       [::]:80;
    server_name  your_domain_here;

    access_log  /var/log/nginx/metabase.access.log;
    error_log   /var/log/nginx/metabase.error.log;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Proto https;
      proxy_pass http://localhost:3000;
  }
}

این پیکربندی فعلاً فقط HTTP است، زیرا به Certbot اجازه می‌دهیم تا در مرحله بعدی پیکربندی TLS را انجام دهد. بقیه فایل پیکربندی مکان های ورود به سیستم را تنظیم می کند و سپس تمام ترافیک و همچنین برخی از هدرهای پراکسی مهم را به همراه http://localhost:3000، ظرف Metabase که در مرحله قبل راه اندازی کردیم، ارسال می کند.

فایل را ذخیره کرده و ببندید، سپس با پیوند دادن آن به /etc/nginx/sites-enabled/ پیکربندی را فعال کنید:

sudo ln -s /etc/nginx/sites-available/metabase.conf /etc/nginx/sites-enabled/

از nginx -t برای بررسی درست بودن نحو فایل پیکربندی استفاده کنید:

sudo nginx -t

 

Output

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

و در نهایت سرویس nginx را با پیکربندی جدید بارگیری مجدد کنید:

sudo systemctl reload nginx.service

سایت متابیس شما اکنون باید با HTTP ساده در دسترس باشد. http://your_domain_here را بارگیری کنید (ممکن است مجبور شوید از طریق یک هشدار امنیتی کلیک کنید) و به شکل زیر خواهد بود:

اکنون که سایت خود را از طریق HTTP راه‌اندازی کرده‌اید، زمان آن رسیده است که اتصال را با گواهی‌های Certbot و Let’s Encrypt ایمن کنید. شما باید این کار را قبل از انجام مراحل راه اندازی مبتنی بر وب متابیس انجام دهید.

مرحله 4 – نصب Certbot و راه‌اندازی گواهی‌های TLS

به لطف Certbot و مجوز مجوز رایگان Let’s Encrypt، افزودن رمزگذاری TLS به برنامه Metabase شما تنها دو دستور را می‌گیرد.

ابتدا Certbot و افزونه Nginx آن را نصب کنید:

sudo apt install certbot python3-certbot-nginx

سپس، certbot را در حالت –nginx اجرا کنید و همان دامنه ای را که در دستورالعمل پیکربندی Nginx server_name استفاده کرده اید، مشخص کنید:

sudo certbot –nginx -d your_domain_here

از شما خواسته می شود با شرایط خدمات Let’s Encrypt موافقت کنید و یک آدرس ایمیل وارد کنید.

پس از آن، از شما پرسیده می شود که آیا می خواهید تمام ترافیک HTTP را به HTTPS هدایت کنید. این به شما بستگی دارد، اما این به طور کلی توصیه می شود و انجام آن بی خطر است.

پس از آن، Let’s Encrypt درخواست شما را تایید می کند و Certbot گواهی شما را دانلود می کند:

 

Output

Congratulations! You have successfully enabled https://metabase.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=metabase.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/metabase.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/metabase.example.com/privkey.pem
   Your cert will expire on 2022-05-09. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Certbot به طور خودکار Nginx را با پیکربندی و گواهی های جدید بارگیری می کند. سایت خود را مجدداً در مرورگر خود بارگیری کنید و اگر گزینه تغییر مسیر را انتخاب کنید، باید به طور خودکار شما را به HTTPS تغییر دهد.

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

مرحله 5 – راه اندازی متابیس

به مرورگر وب خود برگردید، صفحه را دوباره بارگیری کنید. اکنون باید صفحه پیکربندی پایگاه داده Metabase را از طریق یک اتصال امن https:// باز کنید. اکنون می توانید با کلیک روی دکمه Let’s get start، فرآیند پیکربندی را تکمیل کنید.

از شما خواسته می شود که جزئیات زیر را وارد کنید:

زبان مورد علاقه شما چیست؟ اگر زبان شما در لیست است، آن را انتخاب کنید و در تصویر زیر روی Next کلیک کنید:

شما را چه صدا کنیم؟ تمام فیلدها را پر کنید و مطمئن شوید که رمز عبور خود را در جایی امن ثبت کرده اید.

اطلاعات خود را اضافه کنید: روی گزینه I’ll add my data later در پایین صفحه کلیک کنید

تنظیمات برگزیده داده استفاده: برای کمک به بهبود ابزار، انتخاب کنید که آیا می‌خواهید داده‌های استفاده را با Metabase به اشتراک بگذارید. پس از انتخاب خود روی Finish کلیک کنید.

همه چیز آماده اید! اگر می‌خواهید به‌روزرسانی‌های پروژه Metabase را دریافت کنید، آدرس ایمیل خود را اضافه کنید، در غیر این صورت می‌توانید این قسمت را نادیده بگیرید.

در نهایت روی دکمه Take me to Metabase کلیک کنید. به صفحه‌ای می‌رسید که روی آن «سلام، سامی» در بالا آمده است، با مجموعه‌ای از اشعه‌های ایکس از پیش پیکربندی‌شده که می‌توانید روی آن کلیک کنید تا داده‌های نمونه‌ای را که بارگیری کرده‌اید بررسی کنید.

برای مشاهده جزئیات جدول در متابیس روی هر X-Ray کلیک کنید. می‌توانید از کنترل‌های صفحه X-Ray برای فیلتر کردن داده‌ها یا کشف فیلدها و جداول پایگاه داده مرتبط استفاده کنید.

وقتی آماده هستید که سؤال خود را ایجاد کنید (این اصطلاحی است که Metabase برای توصیف یک پرس و جو استفاده می کند)، روی نماد Browse data grid در سمت راست بالای صفحه خود کلیک کنید. روی کاشی Sample Database کلیک کنید و سپس روی جدولی از لیست کلیک کنید. در این مثال از جدول Reviews استفاده می کنیم.

صفحه نمایش شما شبیه موارد زیر خواهد بود:

اکنون بر روی دکمه خلاصه در سمت راست بالای صفحه خود کلیک کنید و قسمت Summarize by را به Average of Rating تغییر دهید. Metabase این مقدار را بر اساس داده های جدول در قسمت Rating محاسبه می کند. همچنین گروه با فیلد را به Created At تغییر دهید، زیرا این فیلد به Metabase اجازه می‌دهد تا میانگین رتبه‌بندی محصول در هر ماه را در تمام محصولات و رتبه‌بندی‌های نمونه محاسبه کند.

روی دکمه Done در پایین سمت راست کلیک کنید و در صفحه‌ای قرار می‌گیرید که نموداری از میانگین رتبه‌بندی محصول را مانند تصویر زیر نشان می‌دهد:

روی دکمه Done در پایین سمت راست کلیک کنید و در صفحه‌ای قرار می‌گیرید که نموداری از میانگین رتبه‌بندی محصول را مانند تصویر زیر نشان می‌دهد:

نتیجه

در این آموزش، ابزار Metabase BI را با استفاده از Docker Compose راه‌اندازی کردید، سپس یک پروکسی معکوس Nginx راه‌اندازی کردید و آن را با استفاده از گواهی‌های Let’s Encrypt TLS ایمن کردید. شما همچنین چند نمونه از داده‌ها را اضافه کردید، و با ایجاد سؤالات خود در Metabase آزمایش کردید تا داده‌ها را پرس و جو کنید.

شما اکنون آماده هستید تا Metabase را به یک پایگاه داده خارجی متصل کنید تا داده های خود را جستجو کنید. Metabase از انواع منابع داده، از جمله پایگاه‌های داده سنتی SQL و همچنین موتورهای تحلیلی و پایگاه‌های اطلاعاتی سند محور پشتیبانی می‌کند.

برچسب‌ها:Metabase یک ابزار مبتنی بر جاوااتصال به سرور مجازی لینوکساوبونتو 20.04 با داکرخرید سرور مجازیخرید سرور مجازی فرانسهسرور مجازینحوه نصب متابیسنصب Certbotنصب Docker Composeنصب و پیکربندی Nginxهوش تجاری (BI)

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

  • behnam gol mohamadi
  • ۰
  • ۰

 نحوه نصب و استفاده از Homebrew در لینوکس

ورود به سایت

معرفی

Homebrew یک مدیر بسته است که در ابتدا برای macOS توسعه داده شد تا به شما امکان می دهد نرم افزار رایگان و منبع باز را با استفاده از ترمینال خود نصب کنید. سیستم‌های لینوکس همگی از مدیران بسته داخلی خود مانند apt در دبیان، اوبونتو و مشتقات و dnf در Red Hat، Fedora و Rocky Linux برای نصب برنامه‌ها و ابزارها از مخازن بسته‌های قابل اعتماد و نگهداری شده استفاده می‌کنند.

با این حال، نصب همه نرم افزارها از طریق apt یا dnf همیشه عملی نیست. به عنوان مثال، برخی از زبان‌های برنامه‌نویسی ترجیح می‌دهند از مدیریت بسته‌های خود مانند پیتون پایتون یا npm Node.js برای نصب اسکریپت‌ها یا کتابخانه‌های اضافی که در حساب کاربری شما بومی‌سازی شده‌اند استفاده کنند.

اخیراً Homebrew پشتیبانی بومی برای لینوکس اضافه کرده است. در حالی که Homebrew در ابتدا برای نصب ابزارهای لینوکس در macOS ایجاد شد، بسیاری از بسته‌های Homebrew نسبت به بسته‌های مشابه موجود در مخازن لینوکس بهتر نگهداری می‌شوند یا استفاده از آنها راحت‌تر است. همچنین، از آنجایی که بسته های Homebrew فقط برای ارائه عملکرد برای هر کاربر طراحی شده اند، Homebrew می تواند در کنار مدیر بسته سیستم شما بدون ایجاد تداخل استفاده شود.

در این آموزش شما Homebrew را در محیط لینوکس نصب و استفاده می کنید. شما ابزارهای سیستم را نصب کرده و محیط پوسته خود را برای استفاده از Homebrew از رابط خط فرمان پیکربندی خواهید کرد.

پیش نیازها

  • یک سرور لینوکس یا محیط دسکتاپ، و یک کاربر غیر ریشه با امتیازات sudo.
  • گیت ابزار کنترل نسخه بر روی دستگاه شما نصب شده است.

مرحله 1 – نصب یک محیط کامپایلر

قبل از نصب Homebrew، به یک کامپایلر کار نیاز دارید تا Homebrew بتواند بسته ها را بسازد. در حالی که اکثر بسته‌ها از پیش کامپایل شده‌اند، برخی از وابستگی‌های بسته باید مستقیماً روی دستگاه شما ساخته شوند. اکثر توزیع‌های لینوکس به شما اجازه می‌دهند یک کامپایلر را با یک فرمان نصب کنید، اما به طور پیش‌فرض آن را ارائه نمی‌کنند.

در اوبونتو، می‌توانید بسته‌ای به نام build-essential نصب کنید که تمام بسته‌های مورد نیاز برای یک محیط کامپایلر مدرن و با پشتیبانی خوب را فراهم می‌کند. بسته را با apt نصب کنید:

sudo apt build-essential

در راکی لینوکس، CentOS یا سایر مشتقات RedHat، می‌توانید گروهی از بسته‌ها به نام ابزار توسعه را نصب کنید تا عملکرد کامپایلر یکسانی را ارائه دهید. بسته ها را با dnf نصب کنید:

dnf groups mark install “Development Tools”
dnf groupinstall “Development Tools”

شما می توانید با بررسی وجود دستور make در سیستم خود اطمینان حاصل کنید که یک کامپایلر در دسترس است. برای انجام این کار از دستور which استفاده کنید:

which make

 

Output

/usr/bin/make

اکنون که یک کامپایلر فعال دارید، می توانید Homebrew را نصب کنید.

مرحله 2 – نصب و راه اندازی Homebrew

برای نصب Homebrew، یک اسکریپت نصب را دانلود کرده و سپس اسکریپت را اجرا می کنید.

ابتدا اسکریپت را در دستگاه محلی خود دانلود کنید:

curl -fsSL -o install.sh https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh

این دستور از curl برای دانلود اسکریپت نصب Homebrew از مخزن Homebrew’s Git در GitHub استفاده می کند.

بیایید از طریق پرچم هایی که با دستور curl مرتبط هستند عبور کنیم:

  • پرچم -f یا –fail به پوسته می گوید که هیچ خروجی سند HTML روی خطاهای سرور ارائه نکند.
  • پرچم -s یا –silent کرل را بی صدا می کند تا متر پیشرفت را نشان ندهد و همراه با پرچم -S یا –show-error این اطمینان را ایجاد می کند که curl در صورت عدم موفقیت، پیام خطا را نشان می دهد.
  • پرچم -L یا –location به curl می گوید که تغییر مسیرها را مدیریت کند. اگر سرور گزارش دهد که صفحه درخواستی به مکان دیگری منتقل شده است، به طور خودکار درخواست را دوباره با استفاده از مکان جدید اجرا می کند.
  • سوئیچ -o نام فایل محلی را برای فایل مشخص می کند. سوئیچ -o به جای نمایش محتویات روی صفحه، محتویات را در فایلی که شما مشخص کرده اید ذخیره می کند.

قبل از اجرای اسکریپتی که از اینترنت دانلود کرده اید، باید محتویات آن را بررسی کنید تا بدانید اسکریپت چه کاری انجام می دهد. از دستور less برای بررسی اسکریپت نصب استفاده کنید تا بفهمید چه کاری انجام خواهد داد.

less install.sh

هنگامی که با محتوای اسکریپت راحت شدید، اسکریپت را با دستور bash اجرا کنید:

/bin/bash install.sh

اسکریپت نصب توضیح می دهد که چه کاری انجام می دهد و از شما می خواهد تأیید کنید که می خواهید آن را انجام دهید. این به شما امکان می دهد قبل از اینکه اجازه دهید Homebrew دقیقاً چه کاری با سیستم شما انجام دهد. همچنین تضمین می کند که پیش نیازهای لازم را قبل از ادامه آن دارید.

از شما خواسته می شود که رمز عبور خود را در طول فرآیند وارد کنید. اگر امتیازات sudo ندارید، می توانید به جای آن Ctrl+D را فشار دهید تا این دستور را دور بزنید و Homebrew با مجوزهای محدودتر نصب می شود. می توانید این گزینه را در مستندات Homebrew مرور کنید.

هر زمان که از شما خواسته شد تا نصب را تأیید کنید، حرف y را برای “بله” فشار دهید.

پس از تکمیل، خروجی نصب Homebrew شامل مراحل بعدی نیز می شود تا محیط پوسته خود را برای کار با بسته های Homebrew پیکربندی کنید. این پیکربندی تضمین می کند که ابزار Homebrew به نفع ابزارهای ارائه شده توسط مدیر بسته سیستم استفاده می شود. دستورات را از خروجی خود کپی و جایگذاری کنید تا مسیرهای پیکربندی صحیح در سیستم شما شناسایی شود. مثال زیر از bash است:

 

Output

==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    echo 'eval "$(/home/sammy/.linuxbrew/bin/brew shellenv)"' >> /home/sammy/.profile
    eval "$(/home/sammy/.linuxbrew/bin/brew shellenv)"

هنگامی که این دو دستور را اجرا کنید، تغییراتی که در متغیر محیطی PATH پوسته خود ایجاد کرده اید اعمال می شود. هنگامی که در آینده دوباره وارد سیستم شوید، آنها به درستی تنظیم می شوند، زیرا فایل پیکربندی پوسته شما به طور خودکار با باز کردن یک جلسه جدید اجرا می شود.

اکنون بررسی کنید که Homebrew به درستی تنظیم شده است. این دستور را اجرا کنید:

brew doctor

اگر در این زمان نیازی به به‌روزرسانی نیست، خروجی زیر را دریافت خواهید کرد:

 

Output

Your system is ready to brew.

در غیر این صورت، ممکن است برای اطمینان از به روز بودن نصب Homebrew، اخطاری برای اجرای دستور دیگری مانند به‌روزرسانی brew دریافت کنید. هر دستورالعمل روی صفحه را دنبال کنید تا پیکربندی محیط خود را قبل از حرکت به پایان برسانید.

مرحله 3 – نصب، ارتقا و حذف بسته ها

اکنون که Homebrew نصب شده است، از آن برای دانلود یک بسته استفاده کنید. دستور درخت به شما امکان می دهد یک درخت دایرکتوری گرافیکی را ببینید و از طریق Homebrew در دسترس است.

درخت را با دستور brew install نصب کنید:

brew install tree

Homebrew لیست بسته های خود را به روز می کند و سپس دستور درخت را دانلود و نصب می کند:

 

Output

. . .
==> Downloading https://ghcr.io/v2/homebrew/core/tree/manifests/2.0.2
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:e1d7569f6930271d694e739e93eb026aac1e8b386
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:e1d7569f6930271d694e739
######################################################################## 100.0%
==> Pouring tree--2.0.2.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/tree/2.0.2: 8 files, 162.4KB
==> Running `brew cleanup tree`...

Homebrew فایل‌ها را به‌طور پیش‌فرض در /home/linuxbrew/.linuxbrew/bin/ نصب می‌کند، بنابراین با به‌روزرسانی‌های آینده لینوکس تداخلی ندارند. با نمایش مکان دستور با کدام دستور تأیید کنید که درخت نصب شده است:

which tree

خروجی نشان می دهد که درخت در /home/linuxbrew/.linuxbrew/bin/ قرار دارد:

 

Output

/home/linuxbrew/.linuxbrew/bin/tree

برای مشاهده نسخه، دستور درخت را اجرا کنید:

tree –version

نسخه روی صفحه چاپ می شود و نشان می دهد که نصب شده است:

 

Output

tree v2.0.2 (c) 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro

گاهی اوقات، شما می خواهید یک بسته موجود را ارتقا دهید. از دستور brew upgrade و به دنبال آن نام بسته استفاده کنید:

brew upgrade tree

می‌توانید برای ارتقای همه برنامه‌ها و بسته‌هایی که Homebrew مدیریت می‌کند، بدون هیچ استدلال اضافی، ارتقاء دم را اجرا کنید.

هنگامی که نسخه جدیدی را نصب می کنید، Homebrew نسخه قدیمی را در اطراف نگه می دارد. پس از مدتی، ممکن است بخواهید فضای دیسک را با حذف این کپی‌های قدیمی‌تر بازیابی کنید. برای حذف تمام نسخه‌های قدیمی نرم‌افزار مدیریت شده توسط Homebrew خود، Brew cleanup را اجرا کنید.

برای حذف بسته‌ای که دیگر از آن استفاده نمی‌کنید، از brew uninstall استفاده کنید. برای حذف دستور درخت، این دستور را اجرا کنید:

brew uninstall tree

خروجی نشان می دهد که بسته حذف شده است:

 

Output

Uninstalling /home/linuxbrew/.linuxbrew/Cellar/tree/2.0.2... (8 files, 162.4KB)

مرحله 4 – حذف نصب Homebrew

اگر دیگر نیازی به Homebrew ندارید، می توانید از اسکریپت حذف نصب آن استفاده کنید.

دانلود اسکریپت حذف با curl:

curl -fsSL -o uninstall.sh https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh

مثل همیشه، محتویات اسکریپت را با دستور less برای تایید محتویات اسکریپت مرور کنید:

less uninstall.sh

هنگامی که اسکریپت را تأیید کردید، اسکریپت را با پرچم –help اجرا کنید تا گزینه های مختلفی را که می توانید استفاده کنید مشاهده کنید:

bash uninstall.sh –help

گزینه هایی که روی صفحه نمایش داده می شوند:

 

Output

Homebrew Uninstaller
Usage: uninstall.sh [options]
    -p, --path=PATH  Sets Homebrew prefix. Defaults to /usr/local.
        --skip-cache-and-logs
                     Skips removal of HOMEBREW_CACHE and HOMEBREW_LOGS.
    -f, --force      Uninstall without prompting.
    -q, --quiet      Suppress all output.
    -d, --dry-run    Simulate uninstall but don't remove anything.
    -h, --help       Display this message.

از پرچم -d استفاده کنید تا ببینید اسکریپت چه کاری انجام می دهد:

bash uninstall.sh -d

اسکریپت همه چیزهایی را که حذف می کند فهرست می کند:

 

Output

Warning: This script would remove:
/home/linuxbrew/.linuxbrew/Caskroom/
/home/linuxbrew/.linuxbrew/Cellar/
/home/linuxbrew/.linuxbrew/Homebrew/
/home/linuxbrew/.linuxbrew/Homebrew/.dockerignore
/home/linuxbrew/.linuxbrew/Homebrew/.editorconfig
. . .

وقتی آماده حذف همه چیز هستید، اسکریپت را بدون هیچ پرچمی اجرا کنید:

bash uninstall.sh

این کار Homebrew و هر برنامه ای را که با آن نصب کرده اید حذف می کند.

نتیجه

در این آموزش شما Homebrew را در محیط لینوکس نصب و استفاده کردید. اکنون می توانید از Homebrew برای نصب ابزارهای خط فرمان، زبان های برنامه نویسی و سایر ابزارهایی که برای توسعه نرم افزار به آنها نیاز دارید استفاده کنید.

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:Homebrew در لینوکسVPS یا سرور مجازیاتصال به سرور مجازی لینوکسخرید سرور مجازیخرید سرور مجازی آمریکاخرید سرور مجازی فرانسهنصب کامپایلرنصب و راه اندازی Homebrew

 

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه تنظیم سهمیه های سیستم فایل در اوبونتو 20.04

ورود به سایت

معرفی

سهمیه ها برای محدود کردن مقدار فضای دیسکی که یک کاربر یا گروه می تواند در یک سیستم فایل استفاده کند استفاده می شود. بدون چنین محدودیت‌هایی، کاربر می‌تواند دیسک دستگاه را پر کند و برای سایر کاربران و خدمات مشکل ایجاد کند.

در این آموزش شما ابزارهای خط فرمان را برای ایجاد و بررسی سهمیه های دیسک نصب می کنید، سپس یک سهمیه برای یک کاربر نمونه تعیین می کنید.

پیش نیازها

این آموزش فرض می‌کند که شما وارد سرور اوبونتو 20.04 شده‌اید، با یک کاربر غیر ریشه و دارای sudo فعال، همانطور که در راه‌اندازی سرور اولیه با اوبونتو 20.04 توضیح داده شده است. تکنیک‌های این آموزش معمولاً باید روی توزیع‌های لینوکس به غیر از اوبونتو کار کنند، اما ممکن است نیاز به تطبیق داشته باشند.

مرحله 1 – نصب Quota Tools

برای تنظیم و بررسی سهمیه ها، ابتدا باید ابزارهای خط فرمان سهمیه را با استفاده از apt نصب کنید. ابتدا لیست بسته را به روز کنید، سپس بسته را نصب کنید:

sudo apt update
sudo apt install quota

با اجرای دستور quota و درخواست اطلاعات نسخه آن، می توانید تأیید کنید که ابزارها نصب شده اند:

quota –version

 

Output

Quota utilities version 4.05.
. . .

اگر خروجی شما شماره نسخه کمی متفاوت را نشان دهد خوب است.

بعد مطمئن شوید که ماژول های هسته مناسب برای نظارت بر سهمیه ها را دارید.

مرحله 2 – ماژول Quota Kernel را نصب کنید

اگر روی یک سرور مجازی مبتنی بر ابر هستید، نصب پیش‌فرض لینوکس اوبونتو ممکن است ماژول‌های هسته مورد نیاز برای پشتیبانی از مدیریت سهمیه را نداشته باشد. برای بررسی، از find برای جستجوی ماژول های quota_v1 و quota_v2 در فهرست /lib/modules/… استفاده می کنید:

find /lib/modules/ -type f -name ‘*quota_v*.ko*’

 

Output

/lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v2.ko
/lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v1.ko

نسخه هسته خود را – که در مسیرهای فایل بالا مشخص شده است – یادداشت کنید زیرا در مرحله بعد به آن نیاز خواهید داشت. احتمالاً متفاوت خواهد بود، اما تا زمانی که دو ماژول در لیست هستند، همه چیز آماده است و می توانید بقیه این مرحله را رد کنید.

اگر هیچ خروجی از دستور بالا دریافت نکردید، بسته linux-image-extra-virtual را نصب کنید:

sudo apt install linux-image-extra-virtual

مرحله 3 – گزینه های نصب فایل سیستم را به روز کنید

برای فعال کردن سهمیه ها در یک فایل سیستم خاص، باید آن را با چند گزینه مرتبط با سهمیه مشخص شده نصب کنید. می توانید این کار را با به روز رسانی ورودی سیستم فایل در فایل پیکربندی /etc/fstab انجام دهید. آن فایل nano یا ویرایشگر متن دلخواه خود را باز کنید:

sudo nano /etc/fstab

محتویات این فایل مشابه موارد زیر خواهد بود:

/etc/fstab

LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
LABEL=UEFI      /boot/efi       vfat    defaults        0 0

این فایل fstab از یک سرور مجازی است. یک رایانه رومیزی یا لپ تاپ احتمالاً fstab کمی متفاوت خواهد داشت، اما در بیشتر موارد شما یک فایل سیستم / یا root خواهید داشت که تمام فضای دیسک شما را نشان می دهد.

خط برجسته نام دستگاه نصب شده، محل نصب آن، نوع سیستم فایل و گزینه های نصب مورد استفاده را نشان می دهد. صفر اول نشان می دهد که هیچ نسخه پشتیبان تهیه نمی شود و صفر دوم نشان می دهد که هیچ بررسی خطا در هنگام بوت انجام نمی شود.

با جایگزین کردن گزینه پیش فرض با گزینه های هایلایت شده زیر، خطی را که به سیستم فایل ریشه اشاره می کند، به روز کنید:

/etc/fstab

LABEL=cloudimg-rootfs   /        ext4   usrquota,grpquota        0 0
. . .

این تغییر به ما این امکان را می دهد که سهمیه های کاربر (usrquota) و گروهی (grpquota) را در سیستم فایل فعال کنیم. اگر فقط به یکی یا دیگری نیاز دارید، ممکن است گزینه استفاده نشده را کنار بگذارید. اگر در خط fstab شما از قبل به جای پیش‌فرض گزینه‌های فهرست شده بود، باید گزینه‌های جدید را به انتهای هر چیزی که از قبل وجود دارد اضافه کنید، مطمئن شوید که همه گزینه‌ها را با کاما و بدون فاصله از هم جدا کنید.

برای اعمال گزینه های جدید، فایل سیستم را مجدداً نصب کنید:

sudo mount -o remount /

در اینجا از پرچم -o برای عبور از گزینه remount استفاده می شود.

 

Output

mount: /etc/fstab: parse error

می توانید با مشاهده فایل /proc/mounts بررسی کنید که از گزینه های جدید برای نصب فایل سیستم استفاده شده است. در اینجا، از grep استفاده کنید تا فقط ورودی سیستم فایل ریشه در آن فایل را نشان دهید:

cat /proc/mounts | grep ‘ / ‘

 

Output

/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota 0 0

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

مرحله 4 – فعال کردن سهمیه ها

قبل از اینکه در نهایت سیستم سهمیه را روشن کنید، باید یک بار دستور quotacheck را به صورت دستی اجرا کنید:

sudo quotacheck -ugm /

این دستور فایل های /aquota.user و /aquota.group را ایجاد می کند. این فایل‌ها حاوی اطلاعاتی درباره محدودیت‌ها و استفاده از سیستم فایل هستند و قبل از روشن کردن نظارت بر سهمیه باید وجود داشته باشند. پارامترهای quotacheck مورد استفاده عبارتند از:

u: مشخص می کند که یک فایل سهمیه مبتنی بر کاربر باید ایجاد شود
g: نشان می دهد که یک فایل سهمیه مبتنی بر گروه باید ایجاد شود
m: نصب مجدد فایل سیستم را به عنوان فقط خواندنی در حین انجام محاسبه اولیه سهمیه ها غیرفعال می کند. نصب مجدد فایل سیستم به‌عنوان فقط خواندنی، در صورتی که کاربر به طور فعال فایل‌ها را در طول فرآیند ذخیره کند، نتایج دقیق‌تری به دست می‌دهد، اما در این راه‌اندازی اولیه ضروری نیست.
اگر نیازی به فعال کردن سهمیه‌های مبتنی بر کاربر یا گروه ندارید، می‌توانید گزینه quotacheck مربوطه را کنار بگذارید.

می توانید با فهرست کردن دایرکتوری ریشه تأیید کنید که فایل های مناسب ایجاد شده اند:

ls /

 

Output

aquota.group  bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv  tmp  var      vmlinuz.old
aquota.user   boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  sys  usr  vmlinuz

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

بعد، باید ماژول های سهمیه را به هسته لینوکس اضافه کنید. از طرف دیگر، می توانید برای انجام همان کار، سرور خود را مجددا راه اندازی کنید. در غیر این صورت، آنها را به صورت دستی اضافه کنید و نسخه هسته برجسته شده را با نسخه موجود در مرحله 2 جایگزین کنید:

sudo modprobe quota_v1 -S 5.4.0-99-generic
sudo modprobe quota_v2 -S 5.4.0-99-generic

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

sudo quotaon -v /

 

quotaon Output

/dev/vda1 [/]: group quotas turned on
/dev/vda1 [/]: user quotas turned on

سرور شما اکنون در حال نظارت و اجرای سهمیه ها است، اما ما هنوز هیچ کدام را تنظیم نکرده ایم! در مرحله بعد یک سهمیه دیسک برای یک کاربر تعیین می کنید.

مرحله 5 – پیکربندی سهمیه ها برای یک کاربر

چند راه برای تعیین سهمیه برای کاربران یا گروه ها وجود دارد. در اینجا، نحوه تنظیم سهمیه ها با هر دو دستور edquota و setquota را بررسی خواهید کرد.

استفاده از edquota برای تعیین سهمیه کاربر

از دستور edquota برای ویرایش سهمیه ها استفاده کنید. بیایید سهمیه کاربر سامی نمونه شما را ویرایش کنیم:

sudo edquota -u sammy

گزینه -u مشخص می کند که این سهمیه کاربری است که شما در حال ویرایش آن هستید. اگر می خواهید سهمیه یک گروه را به جای آن ویرایش کنید، از گزینه -g در جای خود استفاده کنید.

با این کار، فایلی در ویرایشگر متن پیش‌فرض شما باز می‌شود، مشابه اینکه crontab -e یک فایل موقت را برای ویرایش شما باز می‌کند. فایل شبیه به این خواهد بود:

Disk quotas for user sammy (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        40          0          0         13        0        0

این نام کاربری و uid، سیستم‌های فایلی که سهمیه‌هایی را روی آن‌ها فعال کرده‌اند، و محدودیت‌ها و محدودیت‌های مبتنی بر بلوک و inode را فهرست می‌کند. تعیین یک سهمیه مبتنی بر inode تعداد فایل‌ها و دایرکتوری‌هایی را که کاربر می‌تواند ایجاد کند، بدون توجه به میزان فضای دیسکی که استفاده می‌کند، محدود می‌کند. اکثر مردم سهمیه های مبتنی بر بلوک را می خواهند، که به طور خاص استفاده از فضای دیسک را محدود می کند. این چیزی است که شما پیکربندی خواهید کرد.

هر نوع سهمیه به شما امکان می دهد هم حد نرم و هم حد سخت را تعیین کنید. هنگامی که کاربر از حد نرمال فراتر می رود، بیش از سهمیه است، اما فوراً از مصرف فضای بیشتر یا inode جلوگیری نمی شود. در عوض، مقداری آزادی عمل داده می‌شود: کاربر به‌طور پیش‌فرض هفت روز فرصت دارد تا استفاده از دیسک خود را تحت محدودیت نرم‌افزاری بازگرداند. در پایان مهلت هفت روزه، اگر کاربر همچنان از حد نرمال فراتر باشد، به عنوان محدودیت سخت تلقی می شود. محدودیت سخت کمتر بخشنده است: تمام ایجاد بلوک ها یا اینودهای جدید بلافاصله با رسیدن به حد سخت مشخص شده متوقف می شود. این به گونه‌ای عمل می‌کند که گویی فضای دیسک کاملاً خالی است: نوشتن با مشکل مواجه می‌شود، فایل‌های موقت ایجاد نمی‌شوند و کاربر هنگام انجام کارهای رایج هشدارها و خطاها را مشاهده می‌کند.

بیایید کاربر سامی شما را به‌روزرسانی کنیم تا سهمیه بلوکی با محدودیت نرم افزاری 100 مگابایتی و محدودیت سخت 110 مگابایتی داشته باشد:

Disk quotas for user sammy (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        40       100M       110M         13        0        0

ذخیره کنید و فایل را ببندید. برای بررسی سهمیه جدید می توانید از دستور quota استفاده کنید:

sudo quota -vs sammy

 

Output

Disk quotas for user sammy (uid 1000):
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/vda1     40K    100M    110M              13       0       0

این فرمان وضعیت سهمیه فعلی شما را خروجی می دهد و نشان می دهد که سهمیه شما 100M است در حالی که حد شما 110M است. این به ترتیب با محدودیت های نرم و سخت مطابقت دارد.

استفاده از setquota برای تعیین سهمیه کاربر

برخلاف edquota، setquota اطلاعات سهمیه کاربر شما را در یک دستور، بدون مرحله ویرایش تعاملی، به‌روزرسانی می‌کند. شما نام کاربری و محدودیت‌های نرم و سخت را برای سهمیه‌های مبتنی بر بلوک و inode و در نهایت سیستم فایل برای اعمال سهمیه در موارد زیر مشخص خواهید کرد:

sudo setquota -u sammy 200M 220M 0 0 /

دستور بالا محدودیت های سهمیه مبتنی بر بلوک سامی را به 200 مگابایت و 220 مگابایت دوبرابر می کند. 0 0 برای محدودیت های نرم و سخت مبتنی بر inode نشان می دهد که آنها تنظیم نشده باقی می مانند. این مورد نیاز است حتی اگر هیچ سهمیه مبتنی بر inode تنظیم نکنید.

یک بار دیگر از دستور quota برای بررسی کار خود استفاده کنید:

sudo quota -vs sammy

 

Output

Disk quotas for user sammy (uid 1000):
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/vda1     40K    200M    220M              13       0       0

اکنون که مقداری سهمیه تعیین کرده اید، بیایید نحوه تولید یک گزارش سهمیه را دریابیم.

مرحله 6 – ایجاد گزارش های سهمیه

برای ایجاد گزارشی در مورد استفاده از سهمیه فعلی برای همه کاربران در یک فایل سیستم خاص، از دستور repquota استفاده کنید:

sudo repquota -s /

 

Output

*** Report for user quotas on device /dev/vda1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   1696M      0K      0K          75018     0     0
daemon    --     64K      0K      0K              4     0     0
man       --   1048K      0K      0K             81     0     0
nobody    --   7664K      0K      0K              3     0     0
syslog    --   2376K      0K      0K             12     0     0
sammy     --     40K    200M    220M             13     0     0

در این مثال شما در حال تولید یک گزارش برای فایل سیستم / root هستید. دستور -s به repquota می گوید که در صورت امکان از اعداد قابل خواندن توسط انسان استفاده کند. تعداد کمی از کاربران سیستم لیست شده اند که احتمالاً هیچ سهمیه ای به طور پیش فرض ندارند. سامی کاربر شما با مقادیر استفاده شده و محدودیت های نرم و سخت در پایین لیست شده است.

همچنین به Block grace time: 7days callout و ستون grace توجه کنید. اگر کاربر شما بیش از حد نرمال بود، ستون grace نشان می دهد که چقدر زمان برای بازگشت به زیر محدودیت باقی مانده است.

مرحله 7 – پیکربندی یک دوره مهلت برای بیش از حد

می توانید دوره زمانی را که کاربر مجاز است بالاتر از حد نرمال شناور باشد، پیکربندی کنید. برای این کار از دستور setquota استفاده کنید:

sudo setquota -t 864000 864000 /

دستور بالا هر دو زمان grace block و inode را روی 864000 ثانیه یا 10 روز تنظیم می کند. این تنظیم برای همه کاربران اعمال می‌شود و هر دو مقدار باید ارائه شوند حتی اگر از هر دو نوع سهمیه استفاده نمی‌کنید (block در مقابل inode).

توجه داشته باشید که مقادیر باید در ثانیه مشخص شوند.

دوباره repquota را اجرا کنید تا بررسی کنید که آیا تغییرات اعمال شده اند:

sudo repquota -s /

 

Output

Block grace time: 10days; Inode grace time: 10days
. . .

تغییرات باید بلافاصله در خروجی repquota منعکس شود.

نتیجه

در این آموزش شما ابزارهای خط فرمان سهمیه را نصب کردید، تأیید کردید که هسته لینوکس شما می‌تواند سهمیه‌های نظارت را انجام دهد، یک سهمیه مبتنی بر بلوک برای یک کاربر تنظیم کردید، و گزارشی در مورد استفاده از سهمیه سیستم فایل خود ایجاد کردید.

پیوست: پیام های خطای رایج مربوط به سهمیه

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

 

quotaon Output

quotaon: cannot find //aquota.group on /dev/vda1 [/]
quotaon: cannot find //aquota.user on /dev/vda1 [/]

این خطایی است که ممکن است در صورت تلاش برای روشن کردن سهمیه ها (با استفاده از quotaon) قبل از اجرای فرمان quotacheck اولیه، مشاهده کنید. دستور quotacheck فایل های سهمیه یا سهمیه مورد نیاز برای روشن کردن سیستم سهمیه را ایجاد می کند. برای اطلاعات بیشتر به مرحله 4 مراجعه کنید.

 

quotaon Output

quotaon: using //aquota.group on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.
quotaon: using //aquota.user on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.

این خطای quotaon به ما می گوید که هسته شما از سهمیه ها پشتیبانی نمی کند، یا حداقل از نسخه صحیح پشتیبانی نمی کند (هر دو نسخه quota_v1 و quota_v2 وجود دارد). این بدان معناست که ماژول های هسته مورد نیاز شما نصب نشده اند یا به درستی بارگذاری نمی شوند. در سرور اوبونتو، محتمل‌ترین دلیل این امر استفاده از یک تصویر نصب شده بر روی یک سرور مجازی مبتنی بر ابر است.

اگر اینطور است، با نصب بسته لینوکس-تصویر-اکسترا-مجازی با apt قابل رفع است. برای جزئیات بیشتر به مرحله 2 مراجعه کنید.

اگر این خطا پس از نصب ادامه داشت، مرحله 4 را مرور کنید. مطمئن شوید که یا به درستی از دستورات modprobe استفاده کرده اید، یا اگر این گزینه برای شما مناسب است، سرور خود را راه اندازی مجدد کرده اید.

 

quota Output

quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //quota.user: No such file or directory

اگر quota را اجرا کنید و کاربر فعلی شما مجوز خواندن فایل های سهمیه سیستم فایل شما را نداشته باشد، این خطایی است که مشاهده خواهید کرد. شما (یا مدیر سیستم شما) باید مجوزهای فایل را به درستی تنظیم کنید یا هنگام اجرای دستوراتی که نیاز به دسترسی به فایل سهمیه دارند از sudo استفاده کنید.

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:اتصال به سرور مجازیخرید سرور مجازیخرید سرور مجازی فرانسهخرید سرور مجازی قویدستور edquotaسرور اوبونتو 20.04سرور مجازیلینوکسماژول Quota Kernelنصب Quota Tools

 

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه ایجاد قوانین، جدول زمانی، و موارد از رویدادهای Suricata با استفاده از برنامه های SIEM Kibana

ورود به سایت

معرفی

آموزش های قبلی در این مجموعه شما را با نحوه نصب و پیکربندی Suricata راهنمایی کردند. آنها همچنین توضیح دادند که چگونه از Filebeat برای ارسال هشدار از سرور Suricata به سرور Elastic Stack استفاده کنید تا با عملکرد داخلی اطلاعات امنیتی و مدیریت رویداد (SIEM) از آن استفاده کنید.

در این آخرین آموزش در این سری، قوانین سفارشی Kibana را ایجاد می‌کنید و هشدارهایی را در داشبوردهای SIEM Kibana ایجاد می‌کنید. هنگامی که قوانینی را وضع کردید و فهمیدید که کجا و چگونه لاگ های Suricata را با استفاده از Kibana فیلتر کنید، نحوه ایجاد و مدیریت پرونده ها با استفاده از ابزارهای تجزیه و تحلیل جدول زمانی Kibana را بررسی خواهید کرد.

در پایان این آموزش شما یک سیستم SIEM خواهید داشت که می توانید از آن برای ردیابی و بررسی رویدادهای امنیتی در تمام سرورهای شبکه خود استفاده کنید.

پیش نیازها

اگر این مجموعه آموزشی را دنبال کرده اید، باید از قبل یک سرور با حداقل 4 گیگابایت رم و 2 CPU و یک کاربر غیر روت پیکربندی شده داشته باشید. برای اهداف این راهنما، بسته به سیستم عامل انتخابی خود، می‌توانید با پیروی از راهنماهای اولیه راه‌اندازی سرور ما برای Ubuntu 20.04، Debian 11 یا Rocky Linux 8، این را تنظیم کنید.

شما همچنین باید Suricata را روی سرور خود نصب و اجرا کنید. اگر نیاز به نصب Suricata بر روی سرور خود دارید، می توانید با استفاده از یکی از آموزش های زیر بسته به سیستم عامل خود این کار را انجام دهید:

اوبونتو 20.04: نحوه نصب Suricata در اوبونتو 20.04
Debian 11: نحوه نصب Suricata در Debian 11
راکی لینوکس 8: نحوه نصب Suricata در راکی ​​لینوکس 8
همچنین به سروری نیاز دارید که Elastic Stack را اجرا کرده و پیکربندی شده باشد تا Filebeat بتواند گزارش‌ها را از سرور Suricata شما به Elasticsearch ارسال کند. اگر نیاز به ایجاد یک سرور Elastic Stack دارید، از یکی از آموزش های لیست زیر که با سیستم عامل شما مطابقت دارد استفاده کنید:

اوبونتو 20.04: نحوه ایجاد یک سیستم اطلاعات امنیتی و مدیریت رویداد (SIEM) با Suricata و Elastic Stack در اوبونتو 20.04
دبیان 11: نحوه ایجاد یک سیستم اطلاعات امنیتی و مدیریت رویداد (SIEM) با Suricata و Elastic Stack در Debian 11
Rocky Linux 8: نحوه ایجاد یک سیستم اطلاعات امنیتی و مدیریت رویداد (SIEM) با Suricata و Elastic Stack در Rocky Linux 8
اطمینان حاصل کنید که می توانید در سرور Elasticsearch خود به Kibana وارد شوید و رویدادهایی در داشبوردهای مختلف Suricata Alerts و Events وجود دارد.

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

مرحله 1 – فعال کردن کلیدهای API در Elasticsearch

قبل از ایجاد قوانین، هشدارها و جدول زمانی در Kibana، باید تنظیمات ماژول امنیتی xpack را فعال کنید.

فایل /etc/elasticsearch/elasticsearch.yml خود را با nano یا ویرایشگر دلخواه خود باز کنید.

sudo nano /etc/elasticsearch/elasticsearch.yml

خط هایلایت شده زیر را به انتهای فایل اضافه کنید:

/etc/elasticsearch/elasticsearch.yml

. . .
discovery.type: single-node
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

پس از اتمام ویرایش فایل را ذخیره کرده و ببندید. اگر از نانو استفاده می‌کنید، می‌توانید این کار را با CTRL+X انجام دهید، سپس Y و ENTER را تأیید کنید.

اکنون Elasticsearch را مجددا راه اندازی کنید تا تنظیمات جدید اعمال شود.

sudo systemctl restart elasticsearch.service

اکنون آماده پیکربندی قوانین، بررسی هشدارها و ایجاد جدول زمانی و موارد در Kibana هستید.

مرحله 2 – اضافه کردن قوانین به Kibana

برای استفاده از عملکرد SIEM Kibana با داده‌های رویداد Suricata، باید قوانینی ایجاد کنید که هشدارهایی درباره رویدادهای دریافتی ایجاد کند. برای ایجاد یا وارد کردن قوانین، از داشبورد قوانین در صفحه برنامه امنیتی Kibana دیدن کنید.

برای اهداف این آموزش، ما از امضاهای زیر برای شناسایی ترافیک هدایت شده به سرور در پورت های ناهمخوان (به ترتیب ترافیک SSH، HTTP و TLS) استفاده خواهیم کرد:

Example Suricata Signature

alert ssh any any -> 203.0.113.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)

alert http any any -> 203.0.113.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000003;)

alert tls any any -> 203.0.113.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000004;)
alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000005;)

اگر از امضاهای خود یا از یک مجموعه قوانین استفاده می‌کنید، مطمئن شوید که می‌توانید هشدار ایجاد کنید و می‌توانید به رویدادهای مربوطه در داشبوردهای پیش‌فرض Suricata در Kibana دسترسی داشته باشید.

اکنون به صفحه قوانین در برنامه امنیتی Kibana مراجعه کنید http://localhost:5601/app/security/rules/. روی دکمه ایجاد قانون جدید در سمت راست بالای صفحه کلیک کنید.

مطمئن شوید که کارت نوع قانون پرس و جو سفارشی انتخاب شده است. به قسمت ورودی درخواست سفارشی بروید و موارد زیر را در آن قرار دهید:

Kibana Query Language Input

rule.id: "1000000" or rule.id :"1000001"

مطمئن شوید که مقادیر rule.id شما با مقدار جانبی Suricata برای حمله یا حملاتی که می‌خواهید درباره آن هشدار دهید مطابقت داشته باشد.

پیش‌نمایش سریع Query را به Last Month تغییر دهید و سپس روی Preview Results کلیک کنید. با فرض اینکه رویدادهای منطبقی را در گزارش های Suricata خود داشته باشید، صفحه با نموداری که هشدارهای ماه گذشته را نشان می دهد در جای خود به روز می شود. صفحه شما باید شبیه تصویر زیر باشد:

روی Continue کلیک کنید تا به فیلد Rule Name که برای هر قانون اضافه می‌کنید، نامی اضافه کنید. یک نام به قسمت Rule Name اضافه کنید. در این مثال از توضیحات پیام از قانون Suricata SSH TRAFFIC در پورت غیر SSH استفاده می کنیم. یک توضیح برای قانون نیز اضافه کنید. ما در این مثال از بررسی تلاش برای اتصال SSH در پورت های غیر استاندارد استفاده خواهیم کرد.

همچنین می توانید بخش تنظیمات پیشرفته را گسترش دهید و جزئیات مربوط به قانون را اضافه کنید. به عنوان مثال، می‌توانید توضیحی در مورد نحوه رسیدگی به یک هشدار ایجاد شده توسط قانون اضافه کنید یا به مقاله‌های محقق امنیتی در مورد یک نوع حمله خاص پیوند دهید.

پس از افزودن نام قانون، توضیحات و فیلدهای اضافی اختیاری، روی Continue کلیک کنید تا به مرحله 3 ایجاد قانون بروید.

تنظیمات بعدی قانون زمانبندی را با مقادیر پیش فرض خود رها کنید و روی Continue کلیک کنید.

در نهایت در مرحله Rule actions روی Create & activate rule کلیک کنید.

شما به صفحه جدیدی هدایت می شوید که جزئیات مربوط به قانون را نشان می دهد:

اگر قوانین دیگری از Suricata وجود دارد که می‌خواهید درباره آنها هشدار داده شود، مراحل بالا را تکرار کنید و sid امضا را در قسمت query custom.id Kibana جایگزین کنید.

هنگامی که یک قانون یا قوانین را در اختیار دارید، آماده هستید تا به مرحله بعدی بروید، جایی که هشدارها را بررسی می‌کنید و یک مورد یا مواردی برای مدیریت آنها ایجاد می‌کنید.

مرحله 3 – ایجاد یک جدول زمانی برای ردیابی هشدارهای مربوط به ترافیک SSH

اکنون که قانون یا قوانینی برای ایجاد هشدارها در برنامه SIEM کیبانا پیکربندی شده‌اید، به راهی برای گروه‌بندی و مدیریت بیشتر هشدارها نیاز دارید. برای شروع، از داشبورد هشدارهای Kibana دیدن کنید: http://127.0.0.1:5601/app/security/alerts.

مطمئن شوید که مقداری ترافیک نامعتبر ایجاد کرده اید که با امضای Suricata یا امضاهایی که استفاده می کنید مطابقت دارد. به عنوان مثال، می توانید با اجرای دستوری مانند زیر از دستگاه محلی خود، قانون sid:1000000 Suricata را فعال کنید:

ssh -p 80 your_server_ip

این دستور سعی می کند به جای پورت پیش فرض 22، با استفاده از SSH در پورت 80 به سرور شما متصل شود و باید یک هشدار را راه اندازی کند. ممکن است چند دقیقه طول بکشد تا هشدار در Kibana نشان داده شود، زیرا باید توسط Elasticsearch و قانونی که در Kibana ایجاد کرده‌اید پردازش شود.

در مرحله بعد، فیلد comnunity_id را به جدول هشدارهایی که در پایین صفحه نمایش داده می شود، اضافه می کنید. از اولین آموزش به یاد بیاورید که این فیلد توسط Suricata تولید می شود و نشان دهنده آدرس های IP منحصر به فرد و پورت های موجود در یک جریان شبکه است. روی دکمه فیلدها کلیک کنید و در کادر محاوره‌ای که ظاهر می‌شود، network.community_id را وارد کنید و سپس کادر کنار نام فیلد را علامت بزنید:

مدال را ببندید و فیلد به جدول هشدارها اضافه می شود. اکنون ماوس را روی هر یک از هشدارهایی که دارای همان مقدار community_id هستند نگه دارید و روی نماد بررسی جدول زمانی افزودن کلیک کنید. این اطمینان حاصل می کند که همه هشدارهایی که Community_id را به اشتراک می گذارند که Suricata به رویداد اضافه کرده است برای بررسی بیشتر به یک جدول زمانی اضافه می شود:

سپس روی پیوند Untitled Timeline در پایین سمت چپ مرورگر خود کلیک کنید. این پیوند شما را به صفحه ای می برد که فقط هشدارهایی را با قسمت Suricata community_id نشان می دهد که می خواهید بررسی کنید.

صفحه تایم لاین جزئیات بیشتری را در مورد بسته های فردی که با یک هشدار یا جریان شبکه مرتبط هستند به شما نشان می دهد. می توانید از جدول زمانی استفاده کنید تا ایده بهتری درباره زمان شروع یک جریان شبکه مشکوک، محل شروع آن و مدت زمان ادامه آن بدست آورید.

روی دکمه All data sources در سمت راست صفحه کلیک کنید و دکمه Detection Alerts را انتخاب کنید، سپس روی Save کلیک کنید. این گزینه جدول زمانی را محدود می کند تا فقط هشدارهایی را که Kibana تولید می کند نمایش دهد. بدون این گزینه، هشدارهای Suricata نیز در جدول زمانی گنجانده خواهد شد.

برای ذخیره خط زمانی جدید خود، روی نماد مداد در سمت چپ بالای صفحه تایم لاین کلیک کنید. اسکرین شات زیر محل پیدا کردن نماد مداد و دکمه همه منابع داده را مشخص می کند:

اگر اطلاعات بیشتری وجود دارد که می‌خواهید به خط زمانی اضافه کنید، می‌توانید متنی را به قسمت توضیحات اضافه کنید. پس از اتمام ویرایش نام و توضیحات خط زمانی، روی دکمه ذخیره در سمت راست پایین کادر گفتگو کلیک کنید.

مراحل بالا را برای ایجاد جدول زمانی برای سایر هشدارها که می خواهید بعداً عمیق تر بررسی کنید، تکرار کنید.

در مرحله بعدی، از نماهای جدول زمانی رویدادها برای پیوست کردن هشدارها به اپلیکیشن Kibana’s Cases در مجموعه ابزارهای SIEM استفاده خواهید کرد.

مرحله 4 – ایجاد و مدیریت موارد SIEM

در مرحله قبل، یک جدول زمانی ایجاد کردید تا هشدارها و بسته‌ها را با هم بر اساس فیلد Community_id Suricata گروه‌بندی کنید. در این بخش از آموزش شما یک Case برای ردیابی و مدیریت هشدارها در جدول زمانی خود ایجاد می کنید.

برای ایجاد یک مورد جدید از جدول زمانی خود، مطمئن شوید که در یک صفحه جدول زمانی در مرورگر خود هستید. روی دکمه Attach to case در سمت راست بالای صفحه تایم لاین و سپس دکمه Attach to new case را از لیست ظاهر شده کلیک کنید.

شما به صفحه ای هدایت می شوید که در آن می توانید اطلاعات مربوط به حادثه ای را که در حال بررسی آن هستید وارد کنید. در اسکرین شات مثال زیر، مورد مثال هشدار ترافیک SSH در یک پورت غیر SSH است:

فیلدها را با یک نام توصیفی و تگ یا تگ های اختیاری پر کنید. در این مثال، نام مورد SSH TRAFFIC در پورت غیر SSH از 203.0.113.5 است، زیرا این نوع ترافیک و میزبان خاصی است که ما در حال بررسی آن هستیم. با بسیاری از رویدادها برای بررسی در سیستم SIEM شما، یک طرح نامگذاری مانند این به شما کمک می کند موارد، جدول زمانی و هشدارها را پیگیری کنید زیرا نام با هشدار Kibana و فیلد پیام امضای Suricata مطابقت دارد.

به پایین صفحه بروید و روی دکمه Create case کلیک کنید. مرورگر شما در صفحه ای قرار می گیرد که کیس ذخیره شده را نشان می دهد. شما می توانید نظرات را در قالب Markdown با اطلاعات اضافی اضافه کنید و همچنین مورد را از این صفحه ویرایش کنید.

سپس، روی پیوند در توضیحات کلیک کنید تا به جدول زمانی پرونده که در مرحله قبلی این آموزش اضافه کرده‌اید بروید.

برای هر هشداری که می‌خواهید در کیس قرار دهید، روی نماد اقدامات بیشتر در هشدار کلیک کنید. روی افزودن به پرونده موجود کلیک کنید.

روی نام مورد در حالتی که ظاهر می شود کلیک کنید تا هشدار به پرونده اضافه شود. مطمئن شوید که موردی را انتخاب کنید که با جدول زمانی و هشدارهایی که در حال بررسی آن هستید مطابقت دارد. اضافه کردن هر هشدار در لیست به مورد موجود را تکرار کنید.

اکنون با استفاده از منوی پیمایش در سمت چپ صفحه، دوباره از برنامه Cases در Kibana] (http://localhost:5601/app/security/cases) دیدن کنید. روی پرونده خود کلیک کنید و توجه داشته باشید که چگونه هشدارهایی که اضافه کرده اید در جزئیات پرونده فهرست شده اند:

از اینجا می‌توانید به پایین کیس پیمایش کنید و اطلاعات بیشتری را که می‌خواهید اضافه کنید. به عنوان مثال، هر اقدامی که برای بررسی یک هشدار یا هشدارها انجام داده اید، تغییرات پیکربندی به Suricata مانند یک قانون جدید یا ویرایش شده، افزایش به یکی دیگر از اعضای تیم یا هر چیز دیگری که مربوط به مورد است.

هنگامی که با ایجاد مواردی برای انواع مختلف هشدارهایی که می‌خواهید پیگیری کنید راحت هستید، اکنون می‌توانید از ابزارهای SIEM Kibana برای سازماندهی و هماهنگ کردن بررسی هر هشدار در یک مکان مرکزی استفاده کنید.

نتیجه

در این آموزش شما سیستم Suricata و Elastic Stack SIEM موجود خود را با افزودن قوانینی به Kibana که هشدارهایی را در مورد ترافیک خاص مورد علاقه ایجاد می کند، ساخته اید. شما همچنین یک جدول زمانی یا جدول زمانی ایجاد کردید تا مجموعه ای از هشدارها را بر اساس Community_id گروه بندی کنید. در نهایت، یک مورد ایجاد کردید و جدول زمانی خود را به همراه هشدارهای فردی مورد علاقه به آن مرتبط کردید.

با وجود این سیستم SIEM، اکنون می توانید رویدادهای امنیتی را در سراسر سیستم های خود تقریباً در هر مقیاسی ردیابی کنید. همانطور که با Suricata بیشتر آشنا می شوید و هشدارهایی را که در Kibana SIEM شما ایجاد می کند ردیابی می کنید، می توانید هشدارهای Suricata و اقدامات پیش فرضی را که مطابق با شبکه خاص شما انجام می دهد سفارشی کنید.

برای داشتن یک رابط کاربری سبک تر SIEM، ممکن است به EveBox نیز علاقه مند باشید، که تمام داده های رویداد Suricata و عملکرد SIEM را در یک صفحه ارائه می دهد.

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:Rocky Linux 8اتصال به سرور مجازیاوبونتو 20.04ایجاد سرور مجازیخرید سرورخرید سرور مجازی آمریکاسیستم SIEMمدیریت موارد SIEMنصب و پیکربندی Suricata

  • behnam gol mohamadi
  • ۰
  • ۰

 نحوه استفاده از توابع در PHP

ورود به سایت

معرفی

وقتی متوجه شدید که در حال کپی و چسباندن بلوک های کد برای استفاده مجدد در بخش های مختلف برنامه خود هستید، آماده نوشتن یک تابع هستید. اگر نیاز به تعامل با محتوای یک متغیر دارید – تغییر حروف، پیدا کردن طول، برش یا مرتب‌سازی – احتمالاً یک تابع داخلی برای آن وجود دارد. توابع، بلوک‌های کد مستقل و قابل استفاده مجدد هستند که وظیفه خاصی را انجام می‌دهند. آنها ماژولار بودن را ارائه می دهند و یکی از روش های استفاده مجدد از کد هستند.

یک تابع تا زمانی که فراخوانی نشود غیرفعال است. هنگامی که یک تابع فراخوانی می شود، وظیفه تعریف شده در تابع را انجام می دهد. یک تابع معمولا ورودی می گیرد، یک عمل را انجام می دهد و خروجی حاصل را برمی گرداند. عملی که در داخل یک تابع انجام می شود، رابطه ای بین ورودی و خروجی ایجاد می کند. سه بخش اصلی که هنگام تعامل با یک تابع باید به آن فکر کرد عبارتند از ورودی، رابطه و خروجی. حتی زمانی که ورودی صریح نباشد، معمولاً برخی از داده های ضمنی مربوط به محیط کد وجود دارد: تاریخ، زمان، سیستم، فایل، شماره خط و غیره.

در این آموزش شما با تمام قطعات مختلف یک تابع کار خواهید کرد تا بتوانید از توابع به بهترین شکل برای حل چالش خود استفاده کنید. ما با نوشتن توابع تعریف شده توسط کاربر شروع خواهیم کرد. این توابع تفاوت بین آرگومان‌ها و پارامترها را روشن می‌کنند، متغیرها را بر اساس مقدار و مرجع ارسال می‌کنند، مقادیر پیش‌فرض را تنظیم می‌کنند و از اعلان نوع برای تعیین انواع قابل قبول برای ورودی و خروجی استفاده می‌کنند. با درک دامنه، می توانید بخش خاصی از کد خود را که باید تغییر کند دستکاری کنید و در عین حال سایر بخش ها را دست نخورده باقی بگذارید. هنگامی که جنبه‌های مختلف یک تابع و نحوه تأثیر آن‌ها توسط دامنه را درک کردید، می‌توانید مستندات بسیاری از توابع داخلی را که PHP ارائه می‌کند، بخوانید و درک کنید. شما از توابع داخلی برای انجام کارهای معمول برنامه نویسی بدون زحمت استفاده خواهید کرد.

توابع تعریف شده توسط کاربر

نوشتن کد یکسان در چندین مکان، خواندن و درک یک پروژه را دشوار می کند. یکی از “اصول اصلی” یا اصول اساسی برنامه نویسی “خودت را تکرار نکن” است که اغلب به آن برنامه نویسی DRY می گویند. متغیرها ما را از نوشتن مکرر داده های مشابه باز می دارند. توابع ما را از نوشتن مکرر یک عمل باز می دارند.

ایجاد و فراخوانی توابع

هنگام نوشتن یک تابع، ابتدا ساختار تابع باید ساخته شود. این بلوک کد تا زمانی که فراخوانی یا فراخوانی نشود غیرفعال می ماند. یک تابع با استفاده از کلمه کلیدی تابع به اضافه یک نام انتخاب شده به دنبال پرانتز ایجاد می شود. بدنه تابع توسط پرانتزهای مجعد احاطه شده است و کدی است که عمل را انجام می دهد:

hello.php

<?php
function hello() {
    echo "Hello World!";
}

این تابع که hello نام دارد، غیر فعال می ماند، یعنی هیچ کاری انجام نمی دهد و تا زمانی که تابع فراخوانی نشود، فایل خروجی نخواهد داشت. برای فراخوانی یک تابع، از نام و به دنبال آن پرانتز استفاده می شود:

hello.php

<?php
function hello() {
    echo "Hello World!";
}
hello();

فراخوانی تابع چیزی است که باعث می شود تابع عملکرد خود را انجام دهد. در این حالت، خروجی را نمایش می دهد:

 

Output

Hello World!

این مثال ساده استفاده خوبی از یک تابع نیست، زیرا هیچ ورودی وجود ندارد، به این معنی که هیچ رابطه ای وجود ندارد و فقط خروجی وجود دارد. داده های مورد استفاده در مکان های مختلف باید در یک متغیر ذخیره شوند، مانند این:

hello.php

<?php
$hello = "Hello World!";
echo $hello;

این دو خط نتیجه مشابه تابع و فراخوانی را ارائه می دهند:

 

Output

Hello World!

اجازه دهید تابع مثال را برای پذیرش ورودی گسترش دهیم.

آرگومان ها و پارامترها

برای ایجاد یک تابع hello که رابطه ای بین ورودی و خروجی ایجاد می کند، تابع باید مقداری ورودی را بپذیرد. این ورودی به عنوان یک متغیر بین پرانتزهای تعریف تابع پذیرفته می شود. سپس این متغیر را می توان در بدنه تابع استفاده کرد:

hello.php

<?php
function hello($name) {
    echo "Hello ".$name;
}
hello();

تابع hello اکنون یک پارامتر ذخیره شده در متغیر $name را می پذیرد. سپس این متغیر در بدنه تابع با الحاق رشته “Hello” به متغیر $name با استفاده از . عملگر الحاق رشته ها اکنون تابع نیاز دارد که هنگام فراخوانی تابع، یک ورودی ارسال شود، اما ورودی ارائه نشده است، و باعث می شود PHP با خطا پاسخ دهد:

 

Output

Warning:  Uncaught ArgumentCountError: Too few arguments to function hello(), 0 passed in php shell code on line 1 and exactly 1 expected

هنگامی که تابع hello فراخوانی می شود، برای استفاده به عنوان ورودی نیاز به یک آرگومان دارد که مقدار $name را تعیین می کند. اصطلاح پارامتر زمانی استفاده می شود که بخشی از تعریف تابع باشد و اصطلاح آرگومان زمانی استفاده می شود که بخشی از فراخوانی تابع باشد. هر دو به ورودی یک تابع اشاره دارند. برای ارائه ورودی به تابع، یک آرگومان بین پرانتز فراخوانی تابع ارسال می کنیم:

hello.php

<?php
function hello($name) {
    echo "Hello ".$name;
}
hello("Sammy");

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

 

Output

Hello Sammy

این آرگومان‌های اساسی «آگومان‌های موقعیتی» نامیده می‌شوند زیرا باید به همان ترتیبی که توسط تابع تعریف می‌شوند، ارسال شوند. PHP تعداد پارامترهای جدا شده با کاما را محدود نمی کند، اما یک تابع باید تنها یک عمل را اجرا کند. کمی بعد به اتصال توابع خواهیم پرداخت.

مقادیر پیش فرض اختیاری

به‌طور پیش‌فرض، هر پارامتری که برای تابع تعریف می‌شود، مستلزم ارسال آرگومان با فراخوانی تابع است. این باعث می شود خروجی ما به جای فراخوانی داده های یکسان از یک متغیر منحصر به فرد باشد. گاهی اوقات ما به یک مقدار منحصر به فرد برای همه پارامترهای خود نیاز نداریم. در عوض، اگر فراخوانی تابع شامل آن آرگومان نباشد، می‌توانیم از یک مقدار خاص استفاده کنیم. برای تعیین یک پارامتر به عنوان اختیاری، به پارامتر یک مقدار پیش فرض بدهید. این مقدار زمانی استفاده می شود که آرگومان ارسال نشود. می تواند هر مقدار معتبری باشد، از جمله null:

hello.php

<?php
function hello($name, $greeting = "Hello") {
    echo $greeting." ".$name;
}
hello("Sammy", "Bonjour");

اکنون یک پارامتر دوم به نام $greeting وجود دارد. سپس این متغیر در بدنه تابع برای تغییر مقدار بخش تبریک خروجی استفاده می شود:

 

Output

Bonjour Sammy

پارامتر اول $name مقدار پیش‌فرض ندارد، بنابراین باید با هر فراخوانی تابع، یک آرگومان گنجانده شود. از آنجا که پارامتر دوم دارای یک مقدار پیش فرض است، تابع نیازی به ارسال آرگومان دوم ندارد:

hello.php

<?php
function hello($name, $greeting = "Hello") {
    echo $greeting." ".$name;
}
hello("Sammy");

هنگامی که تنها یک آرگومان ارسال می شود، مقدار متغیر $greeting روی مقدار پیش فرض “Hello” تنظیم می شود:

 

Output

Hello Sammy

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

مقدار تهی اختیاری

زمانی که یک متغیر کاملا اختیاری است و اصلاً نیازی به مقدار ندارد، مقدار پیش‌فرض را می‌توان null تعریف کرد. مقدار null فضایی را برای یک مقدار بدون اضافه کردن یک مقدار اضافی نگه می دارد:

hello.php

<?php
function hello($name, $greeting = "Hello", $punctuation = null) {
    echo $greeting." ".$name.$punctuation;
}
hello("Sammy");

متغیر is “اعلام شده” است، بنابراین هنگام تلاش بدنه تابع برای دسترسی به متغیر، خطایی وجود نخواهد داشت، و با این حال، متغیر “تنظیم نشده” در نظر گرفته می شود، بنابراین خروجی اضافی اضافه نخواهد شد:

 

Output

Hello Sammy

ارزش های بازگشتی

ممکن است همیشه نخواهیم خروجی یک تابع را چاپ کنیم. برای ایجاد انعطاف‌پذیری بیشتر در یک تابع، معمول است که مقدار خروجی را به کدی که در ابتدا فراخوانی تابع را انجام داده است، برگردانید. به جای کلمه کلیدی echo از کلمه کلیدی return استفاده کنید:

hello.php

<?php
function hello($name, $greeting = "Hello", $punctuation = null) {
    return $greeting." ".$name.$punctuation;
}
hello("Sammy");
echo hello("Sammy");

در اولین فراخوانی تابع hello، هیچ کاری با مقدار برگشتی انجام نمی شود، و به نظر می رسد که هیچ اتفاقی نیفتاده است، حتی اگر کد موجود در تابع اجرا شده باشد. در فراخوانی دوم تابع hello، کلمه کلیدی echo قبل از فراخوانی تابع استفاده می‌شود و به PHP می‌گوید نتایج خروجی برگشتی را چاپ کند:

 

Output

Hello Sammy

ما همیشه مجبور نیستیم نتیجه را چاپ کنیم. این نتایج همچنین می توانند در یک متغیر ذخیره شوند یا به عنوان ورودی برای تابع دیگری استفاده شوند.

فراخوانی توابع در یک تابع

توابع بلوک هایی از کد قابل استفاده مجدد هستند. اکثر کدهایی که می توانند خارج از یک تابع نوشته شوند، می توانند در داخل یک تابع نیز نوشته شوند. اما فقط به این دلیل که می توانید، به این معنا نیست که باید. شما هرگز نباید تابعی را در یک تابع دیگر تعریف کنید، مگر در موارد بسیار پیشرفته. با این حال، اغلب یک تابع را از داخل تابع دیگر فراخوانی می کنید. برای تعیین فرمت پیام تبریک خروجی، می توانید از برخی توابع داخلی استفاده کنید:

hello.php

<?php
function hello($name, $greeting = "Hello", $punctuation = null) {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello("SAMMY");

خط اول در تابع hello اکنون مقداری قالب بندی برای مقدار $name اعمال می کند. ابتدا رشته را به حروف کوچک تبدیل می کند. تابع strtolower مقداری را برمی گرداند که بلافاصله در تابع دوم، ucwords استفاده می شود. این حرف اول هر کلمه را به حروف بزرگ تبدیل می کند. تابع hello اکنون بدون در نظر گرفتن ورودی دریافتی، یک خروجی با فرمت ثابت ارائه می دهد:

 

Output

Hello Sammy

اعلانات نوع

PHP یک زبان با تایپ آزاد است، به این معنی که سعی می کند مقدار داده شده را به نوع مناسب برای هر موقعیت تبدیل کند. این می تواند نتایج شگفت انگیز و گاهی اوقات نامطلوب ایجاد کند. یک نام باید یک رشته باشد، اما چه اتفاقی می‌افتد اگر به جای آن یک عدد صحیح ارسال کنیم:

hello.php

<?php
function hello($name, $greeting = "Hello", $punctuation = null) {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello(123);

PHP هیچ گونه مشکلی در شعبده بازی ندارد، که عدد صحیح 123 را به رشته “123” تبدیل می کند، سپس تابع را مانند قبل ادامه می دهد:

 

Output

Hello 123

این خروجی معتبر است، اما احتمالاً این نیز نتیجه مطلوب نیست. بیایید ببینیم وقتی یک آرایه را پاس می کنیم چه اتفاقی می افتد. تابع stringtolower یک خطای متفاوت ایجاد می کند. برای این نمایش، اسلش‌های دوتایی به ابتدای آن خط اضافه می‌شود تا آن را به عنوان یک نظر تبدیل کند، که اجرای آن کد را رد می‌کند:

hello.php

<?php
function hello($name, $greeting = "Hello", $punctuation = null) {
    // $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello(["Sammy", "World"]);

این بار کد یک اطلاعیه ارائه می دهد، اما خیلی واضح نیست. همچنین، بسته به نحوه راه‌اندازی سیستم، اعلان‌ها می‌توانند خاموش یا نادیده گرفته شوند زیرا اجرای کد را متوقف نمی‌کنند. ممکن است متوجه نباشیم که مشکلی وجود دارد، یا ممکن است در تشخیص محل وقوع مشکل با مشکل مواجه شویم. خروجی به نظر می رسد که گویی رشته “Array” به تابع ارسال شده است:

 

Output

Notice: Array to string conversion in php shell code on line 2
Hello Array

توسعه دهندگان زمان بسیار بیشتری را صرف خواندن و اشکال زدایی می کنند تا اینکه واقعاً کد بنویسند، بنابراین هر کدی را که می نویسیم تا حد امکان برای خواندن و اشکال زدایی آسان تر کنیم، در دراز مدت در زمان صرفه جویی می شود. با شروع در PHP 5 و با پشتیبانی قوی تر در PHP 7، اکنون می توانیم انواع مقادیر قابل قبول ورودی و خروجی یک تابع را اعلام یا مشخص کنیم.

اعلان نوع پارامتر

اعلان‌های نوع پارامتر تضمین می‌کنند که مقدار آرگومان که هنگام فراخوانی تابع استفاده می‌شود، با نوع مشخص شده مطابقت دارد. در غیر این صورت، یک TypeError پرتاب می شود. بیایید نوع رشته را به پارامتر $name خود اضافه کنیم و آرگومان های آرایه را دوباره امتحان کنیم. این بار می توانیم خط stringtolower را نگه داریم زیرا به آن کد دسترسی پیدا نمی کند:

hello.php

<?php
function hello(string $name, $greeting = "Hello", $punctuation = null) {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello(["Sammy", "World"]);

این بار فراخوانی تابع باعث ایجاد یک استثنا می شود که اجرای کد را متوقف می کند، بنابراین خروجی معتبری به نظر نمی رسد. پیام همچنین واضح تر است که خطا در واقع وجود دارد:

 

Output

Warning: Uncaught TypeError: Argument 1 passed to hello() must be of the type string, array given

اگر آرگومان به جای آرایه به عدد صحیح برگردد، منطقی است که انتظار خطا داشته باشیم زیرا پارامتر فقط باید مقادیر رشته را بپذیرد. بیایید آن را امتحان کنیم:

hello.php

<?php
function hello(string $name, $greeting = "Hello", $punctuation = null) {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello(123);

به جای ارسال خطا، یک بار دیگر عدد صحیح بدون مشکل به رشته تبدیل می شود و تابع اجرا می شود:

 

Output

Hello 123

این مربوط به این است که PHP یک زبان تایپ آزاد است. PHP هنوز هم برای تبدیل آن به یک رشته، شعبده برداری از نوع را روی عدد صحیح انجام می دهد، سپس اجرا را ادامه می دهد.

انواع سختگیرانه

ممانعت از اجرای «جلوگیری نوع» توسط PHP می‌تواند در آسان‌تر خواندن کد و اشکال‌زدایی مفید باشد. پی اچ پی راهی را برای ما فراهم می کند تا انواع سخت گیرانه را بر اساس هر فایل اعلام کنیم. اعلان را به بالای هر فایلی که باید تایپ دقیق را اعمال کند اضافه کنید:

hello.php

<?php
declare(strict_types=1);
function hello(string $name, $greeting = "Hello", $punctuation = null) {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello(123);

پس از افزودن خط اعلان به بالای فایل، PHP هنگامی که یک عدد صحیح به جای رشته ارسال می شود، یک خطا ایجاد می کند:

 

Output

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to hello() must be of the type string, int given.

انواع Nullable

می‌توانیم پارامتر دوم تابع hello را نیز به عنوان یک رشته اعلام کنیم. چون مقدار پیش‌فرض دارد، نیازی به آرگومان نیست، اما اگر آرگومان ارسال شود، باید از نوع رشته باشد. پارامتر سوم نیز رشته ای با مقدار پیش فرض است. یک مقدار null نیز در این تابع کار می کند:

hello.php

<?php
declare(strict_types=1);
function hello(string $name, string $greeting = "Hello", string $punctuation = null) {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello("SAMMY", "Hola", null);

از آنجایی که مقدار پیش‌فرض پارامتر سوم روی null تنظیم شده است، آرگومان null و همچنین یک رشته مجاز است:

 

Output

Hola Sammy

با این حال، هنگامی که مقدار پیش فرض یک پارامتر به عنوان یک رشته اعلام می شود، دیگر مقدار تهی را نمی پذیرد:

hello.php

<?php
declare(strict_types=1);
function hello(string $name, string $greeting = "Hello", string $punctuation = "!") {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello("SAMMY", "Hola", null);

در عوض TypeError داده می شود:

 

Output

Warning: Uncaught TypeError: hello(): Argument #3 ($punctuation) must be of type string, null given

وقتی مقدار پیش‌فرض یک پارامتر چیزی غیر از null باشد، اما null نیز یک ورودی معتبر باشد، PHP دستور اضافی را برای تعریف آن رابطه با اضافه کردن یک علامت سوال قبل از اعلان نوع ارائه می‌کند:

hello.php

<?php
declare(strict_types=1);
function hello(string $name, string $greeting = "Hello", ?string $punctuation = null) {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello("SAMMY", "Hola", null);

حالا تابع آرگومان سوم null را می پذیرد و همانطور که قبلا پردازش شده است ادامه می دهد:

 

Output

Hola Sammy!

پیشوند علامت سوال با تمام اعلان‌های نوع کار می‌کند، نه فقط رشته‌ها، و نیازی به مقدار پیش‌فرض (مانند ?int $age) ندارد.

اعلامیه های نوع بازگشت

همانطور که می توان نوع پارامتر را اعلام کرد، نوع بازگشتی تابع را نیز می توان اعلام کرد. برای اعلام نوع برگشتی یک تابع، یک دونقطه به همراه نوع بعد از پرانتز بسته شدن تعریف تابع اضافه کنید:

hello.php

<?php
declare(strict_types=1);
function hello(string $name, string $greeting = "Hello", ?string $punctuation = "!"): ?int {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello("SAMMY");

توجه داشته باشید که نوع بازگشتی اعلام شده یک عدد صحیح یا یک مقدار تهی است. این نوع اعلام شده با مقدار بازگشتی آنها مطابقت ندارد و یک استثنا ایجاد می شود:

 

Output

Warning: Uncaught TypeError: hello(): Return value must be of type ?int, string returned

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

hello.php

<?php
declare(strict_types=1);
function hello(string $name, string $greeting = "Hello", ?string $punctuation = "!"): string {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello("SAMMY");

این خروجی را به ما می دهد که قبلاً دیده بودیم:

 

Output

Hello Sammy!

بدون ارزش برگشتی

گاهی اوقات یک تابع عملی را انجام می دهد که به مقدار برگشتی منجر نمی شود. تابع var_dump یک مثال است. اگر به اولین نسخه تابع hello برگردیم، می‌توانیم یک نوع بازگشتی void اضافه کنیم:

hello.php

<?php
function hello(): void {
    echo "Hello World!";
}
$greeting = hello();
var_dump($greeting);

این نشان می دهد که تابع مقداری را بر نمی گرداند. هنگامی که تابع فراخوانی می شود و روی یک متغیر اعمال می شود، خروجی نمایش داده می شود زیرا کلمه کلیدی echo در خود تابع استفاده می شود. با استفاده از var_dump در متغیر $greeting، می‌بینیم که هیچ مقداری برگردانده نشده است و متغیر $greeting روی یک مقدار null تنظیم می‌شود:

 

Output

Hello World!
NULL

نوع void بیشتر هنگام دستکاری خود متغیر و نه فقط یک مقدار استفاده می شود. برای آن، ما باید دامنه را درک کنیم.

محدوده

دامنه فقط یک اصطلاح فنی نیست. در مورد هر چیزی که در آن ما “وسعت منطقه یا موضوعی که چیزی با آن سروکار دارد یا به آن مرتبط است” اندازه گیری می کنیم. به عنوان مثال، دامنه اقیانوس اطلس از قاره آمریکا در غرب به آفریقا و اروپا در شرق و از اقیانوس منجمد شمالی در شمال تا اقیانوس هند در جنوب امتداد دارد. اگر آب از اقیانوس اطلس گرفته شود و به اقیانوس هند ریخته شود، آب بخشی از اقیانوس هند می شود و دیگر هیچ تاثیری بر اقیانوس اطلس ندارد. محدوده اقیانوس اطلس تغییر نکرده است.

در برنامه نویسی، دامنه به نحوه دسترسی قطعات مختلف کد به یکدیگر اشاره دارد. چندین حوزه مختلف در یک برنامه کاربردی وجود دارد. برای هدف توابع، دو مورد از آنها را بررسی می کنیم – دامنه جهانی فایل و محدوده تابع.

به‌طور پیش‌فرض، کد موجود در دامنه جهانی ممکن است هر تابعی را که فایل درباره آن می‌داند فراخوانی کند، اما کد در دامنه جهانی نمی‌تواند مستقیماً به یک تابع برای دسترسی به داده‌ها برسد. باید به مقدار بازگشتی تابع متکی باشد. به‌طور پیش‌فرض، کد موجود در محدوده تابع ورودی را از دامنه جهانی می‌پذیرد و خروجی را به دامنه جهانی برمی‌گرداند. کد در محدوده تابع مستقیماً به دامنه جهانی نمی رسد.

از آنجایی که PHP این دو حوزه را به‌عنوان موجودیت‌های مجزا در نظر می‌گیرد، زمانی که یک متغیر به یک تابع ارسال می‌شود، «مقدار» متغیر ارسال می‌شود و نه خود متغیر. بیایید یک متغیر سراسری تنظیم کنیم تا ببینیم این به چه معناست برای کد:

hello.php

<?php
declare(strict_types=1);
$name = "SAMMY";
function hello(string $name, string $greeting = "Hello", ?string $punctuation = "!"): string {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello($name);
echo $name;

به جای ارسال مستقیم یک رشته، اکنون یک متغیر رشته را ارسال می کنیم. این متغیر به همان شیوه ای عمل می کند که یک رشته را به طور مستقیم ارسال می کند زیرا فقط از مقدار متغیر استفاده می شود. هنگامی که مقدار متغیر $name در تابع تغییر می کند، فقط متغیر $name در تابع تحت تأثیر قرار می گیرد. متغیر $name در دامنه جهانی یک متغیر جداگانه است:

 

Output

Hello Sammy!
SAMMY

خروجی echo hello($name) “Hello Sammy” است، زیرا این مقداری است که توسط تابعی که با آرگومان $name ارائه شده است، برگردانده می شود. حتی پس از فراخوانی تابع، مقدار متغیر $name در محدوده جهانی تغییر نمی کند، بنابراین خروجی echo $name; “SAMMY” است، زیرا متغیر جهانی روی “SAMMY” تنظیم می شود.

دسترسی به گستره جهانی

یک تفاوت بزرگ بین دامنه جهانی و دامنه تابع این است که شما می توانید به یک تابع اجازه دهید تا برای بازیابی داده ها به دامنه جهانی برسد، اما نمی توانید داده ها را مستقیماً از یک تابع در دامنه جهانی بازیابی کنید. کلمه کلیدی جهانی به دامنه جهانی می رسد:

hello.php

<?php
declare(strict_types=1);
$name = "SAMMY";
function hello(string $greeting = "Hello", ?string $punctuation = "!"): string {
    global $name;
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello();
echo $name;

متغیر $name در دامنه جهانی تنظیم شده است، اما به جای ارسال مقدار به تابع، اکنون خط اول تابع برای گرفتن متغیر از دامنه جهانی می رسد. کلمه کلیدی سراسری خود متغیر و نه فقط مقدار آن را می گیرد. قالب‌بندی انجام شده در تابع به دامنه جهانی متغیر اعمال می‌شود که مقدار متغیر خارج از تابع را نیز تغییر می‌دهد:

 

Output

Hello Sammy!
Sammy

استفاده از متغیرهای سراسری عمل بدی در نظر گرفته می‌شود، زیرا ردیابی جایی که ممکن است مقدار یک متغیر تغییر کند دشوار است. هنگامی که تغییر متغیر مورد نظر است، رویکرد بهتر این است که یک مرجع به متغیر منتقل شود.

گذراندن استدلال ها با مرجع

پی اچ پی آرگومان ها را به عنوان مقادیر می خواند. فرقی نمی‌کند که متغیری حاوی رشته «SAMMY» یا خود رشته را پاس کنیم. فقط از مقدار استفاده می شود. عبور از مقدار از همپوشانی دامنه جهانی و دامنه عملکرد جلوگیری می کند. از آنجا که یک تابع ممکن است مقداری را برگرداند، می‌توانیم از آن مقدار برای تنظیم هر متغیری در یک محدوده جداگانه استفاده کنیم، حتی یکی از آن‌ها به عنوان آرگومان استفاده می‌شود. با نوشتن کد به این روش، مدیریت یک متغیر به وضوح در محدوده اصلی نگهداری می شود. مثال‌های قبلی مقدار متغیر $name را با نادیده گرفتن مقدار متغیر برای مطابقت با مقدار بازگشتی برخی از توابع داخلی تغییر داده‌اند. بیایید نگاهی دقیق‌تر به قالب‌بندی ucwords و strtolower بیندازیم:

$name = "SAMMY";
$name = ucwords(strtolower($name));
echo $name;

این مقدار جدید $name اکنون قالب بندی جدیدی دارد:

 

Output

Sammy

در حالی که یک تابع فقط می تواند یک مقدار را برگرداند، یک تابع ممکن است بیش از یک متغیر را تحت تأثیر قرار دهد. در مثال‌هایی که نوشتیم، تابع hello از چندین متغیر استفاده می‌کند اما مقدار آن متغیرها را در محدوده جهانی تغییر نمی‌دهد. PHP راهی را برای تعامل مستقیم با یک متغیر از محدوده دیگر، با ارسال یک مرجع به خود متغیر، نه فقط مقدار آن، فراهم می کند. آرگومان ها با ارجاع با افزودن علامت (&) به هر پارامتری منتقل می شوند:

hello.php

<?php
declare(strict_types=1);
$name = "SAMMY";
function hello(string &$name, string $greeting = "Hello", ?string $punctuation = "!"): void {
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello($name);
echo $name;

هنگامی که متغیر $name توسط مرجع ارسال می شود، مقدار آن متغیر را در محدوده جهانی تغییر می دهد. پس از فراخوانی تابع، $name قالب بندی را حفظ می کند:

 

Output

Hello Sammy!
Sammy

هنگام عبور از مرجع، آرگومان باید یک متغیر باشد. یک مقدار دیگر پذیرفته نمی شود:

hello.php

<?php
declare(strict_types=1);
function hello(string &$name, string $greeting = "Hello", ?string $punctuation = "!"): string {
    global $name;
    $name = ucwords(strtolower($name));
    return $greeting." ".$name.$punctuation;
}
echo hello("SAMMY");

از آنجایی که هیچ متغیری برای مرجع وجود ندارد، یک خطا داده می شود:

 

Output

Warning: Uncaught Error: hello(): Argument #1 ($name) cannot be passed by reference

توابع داخلی

PHP همچنین شامل بسیاری از توابع داخلی است که ممکن است برای انجام هر تعداد از وظایف رایج در برنامه شما استفاده شود. اینها توابع واقعی هستند که با زبان از قبل بسته بندی شده اند. مانند همه توابع، این توابع داخلی نیاز به استفاده از پرانتز دارند.

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

توابع مدیریت متغیر

توابع مدیریت متغیر جزئیاتی را در مورد یک متغیر مانند نوع یا مقدار آن ارائه می دهند. یکی از رایج ترین توابع مدیریت متغیر var_dump است:

hello.php

<?php
var_dump("Hello World!");

این تابع جزئیات مقادیر داده شده را شامل نوع و اندازه آنها می دهد. رشته “سلام دنیا!” شامل 12 کاراکتر:

 

Output

string(12) "Hello World!"

PHP همچنین توابع اضافی را برای تعامل با مقدار متغیرهای نوع خاص فراهم می کند.

نتیجه

توابع روشی قدرتمند برای نوشتن کدی که ماژولار و قابل استفاده مجدد است ارائه می دهد. توابع ممکن است از توزیع استاندارد PHP یا پسوندهای اضافی که با PHP کامپایل شده اند باشد. توسعه دهندگان فردی همچنین ممکن است توابعی را برای یک پروژه بنویسند یا آنها را در چندین پروژه به اشتراک بگذارند. هنگامی که به یک عمل نیاز دارید که علیه بیش از یک مورد یا مکان انجام شود، توابع ابزار هستند.

اکنون که پایه خوبی برای درک توابع دارید، به بسیاری از توابع داخلی ارائه شده توسط PHP نگاهی بیندازید. نه تنها به شما ایده می‌دهد که این زبان چه کاری می‌تواند انجام دهد، بلکه برخی از چالش‌های رایجی که توسعه‌دهندگان در گذشته با آن‌ها روبرو بوده‌اند و نحوه حل آن‌ها را نیز به شما نشان می‌دهد.

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:serverآرگومان ها و پارامترهااستفاده از توابع در PHPانواع Nullableپی اچ پیتوابع داخلی در phpخرید سرور مجازیخرید سرور مجازی آمریکاسرور مجازیمدیریت توابع متغیر در php

 

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از Ansible برای خودکارسازی تنظیمات اولیه سرور در اوبونتو 20.04

ورود به سایت

معرفی

اتوماسیون سرور در حال حاضر به دلیل ماهیت یکبار مصرف محیط های کاربردی مدرن، نقش اساسی در مدیریت سیستم ایفا می کند. ابزارهای مدیریت پیکربندی مانند Ansible معمولاً برای ساده‌سازی فرآیند نصب خودکار سرور با ایجاد رویه‌های استاندارد برای سرورهای جدید و همچنین کاهش خطای انسانی مرتبط با تنظیمات دستی استفاده می‌شوند.

Ansible یک معماری ساده ارائه می دهد که نیازی به نرم افزار خاصی برای نصب روی گره ها ندارد. همچنین مجموعه ای قوی از ویژگی ها و ماژول های داخلی را ارائه می دهد که نوشتن اسکریپت های اتوماسیون را تسهیل می کند.

این راهنما نحوه استفاده از Ansible را برای خودکارسازی مراحل موجود در راهنمای نصب اولیه سرور برای سرورهای اوبونتو 20.04 توضیح می‌دهد.

پیش نیازها

برای اجرای تنظیمات خودکار ارائه شده توسط playbook در این راهنما، به موارد زیر نیاز دارید:

  • یک گره کنترلی Ansible: یک دستگاه اوبونتو 20.04 با Ansible نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo و فایروال فعال است، همانطور که در راهنمای راه اندازی سرور اولیه ما توضیح داده شده است. برای راه اندازی Ansible، لطفاً راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید.
  • یک سرور راه دور با نصب تمیز اوبونتو 20.04: هیچ تنظیمات قبلی در این سرور مورد نیاز نیست، اما باید از گره کنترل Ansible که در بالا ذکر شد به این سرور دسترسی SSH داشته باشید. این سرور به یک سرور از راه دور میزبان Ansible تبدیل می شود که برای تامین خودکار توسط گره کنترل Ansible هدف قرار می گیرد.

این کتاب بازی چه کاری انجام می دهد؟

این کتاب بازی Ansible جایگزینی برای اجرای دستی از طریق روش مشخص شده در راهنمای راه اندازی اولیه سرور اوبونتو 20.04 و راهنمای تنظیم کلیدهای SSH در اوبونتو 20.04 هر بار که سرور را راه اندازی می کنید ارائه می دهد. یک بار کتاب پخش خود را تنظیم کنید و بعد از آن برای هر سرور از آن استفاده کنید.

اجرای این playbook اقدامات زیر را روی میزبان Ansible شما انجام می دهد:

  • aptitude را نصب کنید که توسط Ansible به عنوان جایگزینی برای مدیر بسته apt ترجیح داده می شود.
  • یک کاربر sudo جدید ایجاد کنید و sudo بدون رمز عبور را راه اندازی کنید.
  • یک کلید عمومی SSH محلی را کپی کنید و آن را در فایل authorized_keys برای کاربر مدیریت جدید در میزبان راه دور قرار دهید.
  • غیرفعال کردن احراز هویت مبتنی بر رمز عبور برای کاربر اصلی.
  • بسته های سیستمی را نصب کنید.
  • فایروال UFW را طوری پیکربندی کنید که فقط به اتصالات SSH اجازه دهد و هر درخواست دیگری را رد کند.

پس از اتمام اجرای کتاب پخش، کاربر جدیدی خواهید داشت که می توانید از آن برای ورود به سرور استفاده کنید.

برای شروع، وارد یک کاربر دارای sudo در سرور گره کنترل Ansible خود شوید.

مرحله 1 – گره کنترل Ansible خود را آماده کنید

در سرور گره کنترل Ansible، IP سرور راه دور میزبان Ansible خود را به فایل موجودی Ansible خود اضافه کنید. استفاده از ویرایشگر متن دلخواه شما:

sudo nano /etc/ansible/hosts

با این کار فایل موجودی Ansible شما باز می شود. IP سرور راه دور میزبان Ansible خود را به بلوک [سرورها] اضافه کنید:

/etc/ansible/hosts

[servers]
server1 ansible_host=your_remote_server_ip

. . .

اکنون اتصال SSH خود را بین این گره کنترلی Ansible و سرور از راه دور میزبان Ansible خود آزمایش و احراز هویت خواهید کرد:

ssh root@your_remote_server_ip

درخواست احراز هویت را بپذیرید و در صورت درخواست رمز عبور خود را وارد کنید. هنگامی که اتصال SSH را تأیید کردید، CTRL+D را فشار دهید تا اتصال بسته شود و به گره کنترل خود بازگردید.

مرحله 2 – آماده کردن Playbook خود

فایل playbook.yml جایی است که تمام وظایف شما در آن تعریف می شود. یک کار کوچکترین واحد عملی است که می توانید با استفاده از کتاب بازی Ansible به طور خودکار انجام دهید. اما ابتدا، فایل playbook خود را با استفاده از ویرایشگر متن دلخواه خود ایجاد کنید:

nano playbook.yml

با این کار یک فایل YAML خالی باز می شود. قبل از اضافه کردن وظایف به کتاب بازی خود، با افزودن موارد زیر شروع کنید:

playbook.yml

---
- hosts: all
  become: true
  vars:
    created_username: sammy

با خیال راحت نام کاربری را با یکی از دلخواه خود جایگزین کنید.

تقریباً هر کتاب بازی که با آن روبرو می شوید با اعلان هایی مشابه این شروع می شود. hosts اعلام می کند که گره کنترل Ansible کدام سرورها را با این کتاب بازی هدف قرار می دهد. تبدیل وضعیت می کند که آیا همه دستورات با امتیازات ریشه افزایش یافته انجام می شوند یا خیر.

vars به شما امکان می دهد داده ها را در متغیرها ذخیره کنید. اگر تصمیم به تغییر این نام کاربری در آینده دارید، فقط باید همین خط را در فایل خود ویرایش کنید.

مرحله 3 – یک کار نصب Aptitude به Playbook خود اضافه کنید

به طور پیش فرض، وظایف به صورت همزمان توسط Ansible به ترتیب از بالا به پایین در کتاب بازی شما اجرا می شوند. این بدان معناست که ترتیب کارها مهم است، و شما می توانید با خیال راحت فرض کنید که اجرای یک کار قبل از شروع کار بعدی به پایان می رسد.

همه وظایف موجود در این کتاب بازی می توانند به تنهایی بایستند و مجدداً در سایر کتاب های بازی شما مورد استفاده قرار گیرند.

اولین کار خود یعنی نصب aptitude را اضافه کنید، ابزاری برای ارتباط با مدیر بسته لینوکس:

playbook.yml

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

در اینجا، شما از ماژول داخلی apt Ansible برای هدایت Ansible برای نصب aptitude استفاده می کنید. ماژول ها در Ansible میانبرهایی برای اجرای عملیاتی هستند که در غیر این صورت باید به عنوان دستورات bash خام اجرا می شدند. در صورتی که استعداد در دسترس نباشد، Ansible با خیال راحت دوباره به گزینه نصب بسته‌ها می‌رود. بنابراین در حالی که این مرحله از نظر فنی اختیاری است، Ansible از نظر تاریخی استعداد را ترجیح داده است.

مرحله 4 – اضافه کردن Sudo User Setup Tasks به Playbook خود

عمل خوبی است که از استفاده گسترده از کاربر ریشه خودداری کنید. می‌توانید ایجاد کاربری را که دارای امتیازات sudo است با اضافه کردن:

playbook.yml

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s' 

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

شما از ماژول lineinfile Ansible برای هدف گیری و جایگزینی یک خط خاص در یک فایل استفاده می کنید. در این مورد، شما از regex برای هدف قرار دادن یک خط خاص در فایل sudoers استفاده می‌کنید و سپس آن را تغییر می‌دهید تا امکان استفاده بدون رمز عبور از sudo را فراهم کنید. شما همچنین از visudo برای تأیید تغییرات خود استفاده می کنید تا از شکستن هر چیزی جلوگیری کنید.

برای استفاده از این مزیت، یک کاربر جدید با ماژول کاربر اضافه می‌کنید. Ansible اطمینان حاصل می کند که اگر این کاربر قبلاً وجود نداشته باشد، ایجاد شده است، که کاربر به گروه sudo تعلق دارد در حالی که از گروه های دیگر حذف نمی شود، و یک فهرست خانه ایجاد می شود.

مرحله 5 – اضافه کردن SSH Key Setup و غیرفعال کردن وظایف رمز عبور ریشه به Playbook شما

Ansible با این فرض عمل می کند که از کلیدهای SSH استفاده می کنید. جفت کردن استفاده از کلید SSH با غیرفعال کردن احراز هویت رمز عبور ریشه اکیداً توصیه می شود و به طور کلی تمرین خوبی است. برای خودکار کردن این، اضافه کنید:

playbook.yml

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

اگر نام کاربری و مکان کلید را وارد کنید، ماژول authorized_key قابل استفاده است. در اینجا، مسیر به سمت کلید شما با استفاده از تابع جستجوی Ansible ساخته می شود.

ماژول lineinfile برای جستجو و جایگزینی یک خط در sshd_config به منظور غیرفعال کردن احراز هویت رمز عبور برای ریشه، محدود کردن دسترسی به امتیازات آن برای افزایش امنیت استفاده می‌شود.

مرحله 6 – یک کار نصب بسته را به Playbook خود اضافه کنید

Ansible می تواند اطمینان حاصل کند که بسته های خاصی همیشه روی سرور شما نصب می شوند. به جای فراخوانی apt install بر روی هر بسته جداگانه، یا تقسیم آن به چندین کار، می‌توانید تمام بسته‌های مورد نظر خود را فهرست کنید:

playbook.yml

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

می توانید بسته ها را به دلخواه خود اضافه یا حذف کنید. این اطمینان حاصل می کند که همه بسته ها نه تنها موجود هستند، بلکه در آخرین نسخه نیز وجود دارند و پس از فراخوانی به روز رسانی با apt انجام می شود.

مرحله 7 – افزودن یک کار راه اندازی فایروال به Playbook خود

فایروال برای هر سروری که با اینترنت روبرو است ضروری است. می‌توانید از Ansible اطمینان حاصل کنید که UFW (دیوار آتش بدون عارضه) به درستی پیکربندی شده است با اضافه کردن:

playbook.yml

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

ماژول ufw ابتدا اطمینان حاصل می کند که دسترسی SSH از طریق آن مجاز است. سپس، این ماژول فایروال شما را فعال می کند در حالی که به طور پیش فرض تمام ترافیک دیگر به سرور شما را رد می کند.

مرحله 8 – کتاب راهنمای کامل خود را مرور کنید

کتاب بازی شما باید تقریباً شبیه شکل زیر باشد، با تفاوت های جزئی بسته به سفارشی سازی های شما:

playbook.yml

---
- hosts: all
  become: true
  vars:
    created_username: sammy

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s'

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

هنگامی که از کتاب بازی خود راضی شدید، می توانید از ویرایشگر متن خود خارج شده و ذخیره کنید.

مرحله 9 – Playbook خود را برای اولین بار اجرا کنید

اکنون آماده اجرای این کتاب بازی در یک یا چند سرور هستید. اکثر کتاب‌های پخش به‌طور پیش‌فرض پیکربندی شده‌اند که در هر سرور موجود در فهرست شما اجرا شوند، اما شما این بار سرور خود را مشخص می‌کنید.

برای اجرای playbook فقط در server1 که به صورت root متصل می شود، می توانید از دستور زیر استفاده کنید:

ansible-playbook playbook.yml -l server1 -u root -k

پرچم -l سرور شما را مشخص می‌کند و پرچم -u مشخص می‌کند که کدام کاربری در سرور راه دور وارد شود. از آنجایی که هنوز سرور راه دور خود را راه اندازی نکرده اید، root تنها گزینه شماست. پرچم -k در اولین اجرای playbook شما بسیار مهم است، زیرا به شما امکان می دهد رمز عبور SSH خود را وارد کنید.

خروجی مشابه این دریافت خواهید کرد:

 

Output

. . .

TASK [UFW - Allow SSH connections] ***************************************************************************************************************************************************************************************************************************
changed: [server1]

TASK [UFW - Enable and deny by default] **********************************************************************************************************************************************************************************************************************
changed: [server1]

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************
server1                    : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

این نشان می دهد که راه اندازی سرور شما کامل شده است! خروجی شما نباید دقیقاً یکسان باشد، اما مهم این است که هیچ شکستی نداشته باشید.

اکنون که اولین راه‌اندازی را برای کتاب پخش خود انجام داده‌اید، همه تماس‌های انتساب‌پذیر بعدی را می‌توان با کاربر sammy و بدون پرچم -k انجام داد:

ansible-playbook playbook.yml -l server1 -u sammy

همچنین می توانید با استفاده از:

 

ssh sammy@your_remote_server_ip

 

به یاد داشته باشید که sammy را با کاربر تعریف شده توسط متغیر create_username و server_host_or_IP را با نام میزبان یا آدرس IP سرور خود جایگزین کنید.

پس از ورود به سرور، می‌توانید قوانین فعال فایروال UFW را بررسی کنید تا تأیید کنید که به درستی پیکربندی شده است:

sudo ufw status

شما باید خروجی مشابه این بگیرید:

 

Output

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             

این بدان معناست که فایروال UFW با موفقیت فعال شده است. از آنجایی که این آخرین کار در playbook بود، تأیید می کند که playbook به طور کامل در این سرور اجرا شده است.

نتیجه

خودکار کردن تنظیمات اولیه سرور می تواند در زمان شما صرفه جویی کند، در حالی که مطمئن شوید سرورهای شما از یک پیکربندی استاندارد پیروی می کنند که می تواند بهبود یابد و مطابق با نیازهای شما سفارشی شود. با ماهیت توزیع شده برنامه های کاربردی مدرن و نیاز به سازگاری بیشتر بین محیط های صحنه سازی مختلف، اتوماسیون مانند این به یک ضرورت تبدیل می شود.

در این راهنما، نحوه استفاده از Ansible را برای خودکارسازی کارهای اولیه که باید در یک سرور تازه اجرا شوند، مانند ایجاد یک کاربر غیر ریشه با دسترسی sudo، فعال کردن UFW و غیرفعال کردن ورود به سیستم ریشه مبتنی بر رمز عبور از راه دور، نشان دادید.

برای اطلاعات بیشتر در مورد نحوه اجرای کتاب های بازی Ansible، راهنمای برگه تقلب Ansible ما را بررسی کنید.

اگر می‌خواهید برای سفارشی‌سازی بیشتر تنظیمات اولیه سرور خود، وظایف جدیدی را در این کتاب بازی اضافه کنید، لطفاً به راهنمای مقدماتی Ansible Configuration Management 101: Writing Ansible Playbooks مراجعه کنید. همچنین می توانید راهنمای ما در مورد نحوه استفاده از نقش های Ansible برای انتزاع محیط زیرساخت خود را بررسی کنید.

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

اوبونتو 20.04تنظیم کلیدهای SSH در اوبونتو 20.04تنظیمات اولیه سرورتنظیمات اولیه سرور در اوبونتو 20.04خرید سرور مجازیخودکارسازی تنظیمات اولیه سرورراه اندازی اولیه سرورراه اندازی سرور مجازیسرور مجازی آلماننحوه استفاده از Ansible

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از Ansible برای نصب و راه اندازی Docker در اوبونتو 20.04

ورود به سایت

معرفی

اتوماسیون سرور در حال حاضر به دلیل ماهیت یکبار مصرف محیط های کاربردی مدرن، نقش اساسی در مدیریت سیستم ایفا می کند. ابزارهای مدیریت پیکربندی مانند Ansible معمولاً برای ساده‌سازی فرآیند نصب خودکار سرور با ایجاد رویه‌های استاندارد برای سرورهای جدید و همچنین کاهش خطای انسانی مرتبط با تنظیمات دستی استفاده می‌شوند.

Ansible یک معماری ساده ارائه می دهد که نیازی به نرم افزار خاصی برای نصب روی گره ها ندارد. همچنین مجموعه ای قوی از ویژگی ها و ماژول های داخلی را ارائه می دهد که نوشتن اسکریپت های اتوماسیون را تسهیل می کند.

این راهنما نحوه استفاده از Ansible را برای خودکارسازی مراحل موجود در راهنمای ما در مورد نحوه نصب و استفاده از Docker در اوبونتو 20.04 توضیح می دهد. Docker برنامه‌ای است که فرآیند مدیریت کانتینرها، فرآیندهای جدا شده از منابع را که به روشی مشابه ماشین‌های مجازی عمل می‌کنند، اما قابل حمل‌تر، منابع دوست‌تر و بیشتر به سیستم عامل میزبان وابسته هستند، ساده می‌کند.

پیش نیازها

برای اجرای تنظیمات خودکار ارائه شده توسط playbook در این راهنما، به موارد زیر نیاز دارید:

  • یک گره کنترلی Ansible: یک ماشین اوبونتو 20.04 با Ansible نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo و فایروال فعال است، همانطور که در راهنمای راه اندازی سرور اولیه ما توضیح داده شده است.
  • یک یا چند میزبان Ansible: یک یا چند سرور اوبونتو 20.04 راه دور که قبلاً طبق راهنمای نحوه استفاده از Ansible برای خودکارسازی تنظیمات اولیه سرور در اوبونتو 20.04 تنظیم شده است.

این کتاب بازی چه کاری انجام می دهد؟

این کتاب بازی Ansible جایگزینی برای اجرای دستی روشی است که در راهنمای ما در مورد نحوه نصب و استفاده از Docker در اوبونتو 20.04 بیان شده است. Playbook خود را یک بار تنظیم کنید و بعد از هر نصب از آن استفاده کنید.

اجرای این کتاب بازی، اقدامات زیر را روی میزبان های Ansible شما انجام می دهد:

  • aptitude را نصب کنید که توسط Ansible به عنوان جایگزینی برای مدیر بسته apt ترجیح داده می شود.
  • بسته های سیستمی مورد نیاز را نصب کنید.
  • کلید Docker GPG APT را نصب کنید.
  • مخزن رسمی Docker را به منابع apt اضافه کنید.
  • Docker را نصب کنید.
  • ماژول Python Docker را از طریق پیپ نصب کنید.
  • تصویر پیش‌فرض مشخص‌شده توسط default_container_image را از Docker Hub بکشید.
  • تعداد کانتینرهای تعریف شده توسط متغیر container_count را ایجاد کنید، هر کدام با استفاده از تصویر تعریف شده توسط default_container_image، و دستور تعریف شده در default_container_command را در هر کانتینر جدید اجرا کنید.

پس از اتمام اجرای کتاب بازی، تعدادی کانتینر بر اساس گزینه هایی که در متغیرهای پیکربندی خود تعریف کرده اید ایجاد خواهید کرد.

برای شروع، وارد یک کاربر دارای sudo در سرور گره کنترل Ansible خود شوید.

مرحله 1 – آماده کردن Playbook خود

فایل playbook.yml جایی است که تمام وظایف شما در آن تعریف می شود. یک کار کوچکترین واحد عملی است که می توانید با استفاده از کتاب بازی Ansible به طور خودکار انجام دهید. اما ابتدا، فایل playbook خود را با استفاده از ویرایشگر متن دلخواه خود ایجاد کنید:

nano playbook.yml

با این کار یک فایل YAML خالی باز می شود. قبل از اضافه کردن وظایف به کتاب بازی خود، با افزودن موارد زیر شروع کنید:

playbook.yml

---
- hosts: all
  become: true
  vars:
    container_count: 4
    default_container_name: docker
    default_container_image: ubuntu
    default_container_command: sleep 1

تقریباً هر کتاب بازی که با آن روبرو می شوید با اعلان هایی مشابه این شروع می شود. hosts اعلام می کند که گره کنترل Ansible کدام سرورها را با این کتاب بازی هدف قرار می دهد. تبدیل وضعیت می کند که آیا همه دستورات با امتیازات ریشه افزایش یافته انجام می شوند یا خیر.

vars به شما امکان می دهد داده ها را در متغیرها ذخیره کنید. اگر تصمیم به تغییر این موارد در آینده دارید، فقط باید این خطوط را در فایل خود ویرایش کنید. در اینجا توضیح مختصری در مورد هر متغیر آورده شده است:

  • container_count: تعداد کانتینرهایی که باید ایجاد شوند.
  • default_container_name: نام کانتینر پیش‌فرض.
  • default_container_image: تصویر پیش‌فرض Docker برای استفاده در هنگام ایجاد کانتینرها.
  • default_container_command: دستور پیش فرض برای اجرا در کانتینرهای جدید.

مرحله 2 – افزودن وظایف نصب بسته ها به Playbook خود

به طور پیش فرض، وظایف به صورت همزمان توسط Ansible به ترتیب از بالا به پایین در کتاب بازی شما اجرا می شوند. این بدان معناست که ترتیب کارها مهم است، و شما می توانید با خیال راحت فرض کنید که اجرای یک کار قبل از شروع کار بعدی به پایان می رسد.

همه وظایف موجود در این کتاب بازی می توانند به تنهایی بایستند و مجدداً در سایر کتاب های بازی شما مورد استفاده قرار گیرند.

اولین وظایف خود یعنی نصب aptitude، ابزاری برای ارتباط با مدیر بسته لینوکس و نصب بسته های سیستم مورد نیاز را اضافه کنید. Ansible اطمینان حاصل می کند که این بسته ها همیشه بر روی سرور شما نصب می شوند:

playbook.yml

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Install required system packages
      apt:
        pkg:
          - apt-transport-https
          - ca-certificates
          - curl
          - software-properties-common
          - python3-pip
          - virtualenv
          - python3-setuptools
        state: latest
        update_cache: true

در اینجا، شما از ماژول داخلی apt Ansible برای هدایت Ansible برای نصب بسته های خود استفاده می کنید. ماژول ها در Ansible میانبرهایی برای اجرای عملیاتی هستند که در غیر این صورت باید به عنوان دستورات bash خام اجرا می شدند. اگر aptitude در دسترس نباشد، Ansible با خیال راحت به apt برای نصب بسته ها باز می گردد، اما Ansible از لحاظ تاریخی استعداد را ترجیح داده است.

می توانید بسته ها را به دلخواه خود اضافه یا حذف کنید. این اطمینان حاصل می کند که همه بسته ها نه تنها موجود هستند، بلکه در آخرین نسخه هستند و پس از فراخوانی به روز رسانی با apt انجام می شود.

مرحله 3 – افزودن وظایف نصب Docker به Playbook خود

وظیفه شما آخرین نسخه Docker را از مخزن رسمی نصب می کند. کلید Docker GPG برای تأیید دانلود اضافه می شود، مخزن رسمی به عنوان منبع بسته جدید اضافه می شود و Docker نصب می شود. علاوه بر این، ماژول داکر برای پایتون نیز نصب خواهد شد:

playbook.yml

    - name: Add Docker GPG apt Key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Add Docker Repository
      apt_repository:
        repo: deb https://download.docker.com/linux/ubuntu focal stable
        state: present

    - name: Update apt and install docker-ce
      apt:
        name: docker-ce
        state: latest
        update_cache: true

    - name: Install Docker Module for Python
      pip:
        name: docker

خواهید دید که ماژول‌های Ansible داخلی apt_key و apt_repository ابتدا به آدرس‌های اینترنتی صحیح اشاره می‌کنند، سپس وظیفه دارند از وجود آنها اطمینان حاصل کنند. این امکان نصب آخرین نسخه Docker را به همراه استفاده از پیپ برای نصب ماژول برای پایتون فراهم می کند.

مرحله 4 – افزودن Docker Image و وظایف Container به Playbook خود

ایجاد واقعی کانتینرهای Docker شما از اینجا با کشیدن تصویر Docker مورد نظر شما شروع می شود. به طور پیش فرض، این تصاویر از داکر هاب رسمی می آیند. با استفاده از این تصویر، کانتینرها مطابق با مشخصات تعیین شده توسط متغیرهای اعلام شده در بالای کتاب بازی شما ایجاد می شوند:

playbook.yml

    - name: Pull default Docker image
      community.docker.docker_image:
        name: "{{ default_container_image }}"
        source: pull

    - name: Create default containers
      community.docker.docker_container:
        name: "{{ default_container_name }}{{ item }}"
        image: "{{ default_container_image }}"
        command: "{{ default_container_command }}"
        state: present
      with_sequence: count={{ container_count }}

از docker_image برای کشیدن تصویر Docker که می‌خواهید به عنوان پایه کانتینرهای خود استفاده کنید استفاده می‌شود. docker_container به شما اجازه می دهد تا مشخصات کانتینرهایی را که ایجاد می کنید، به همراه دستوری که می خواهید آنها را ارسال کنید، مشخص کنید.

with_sequence روش Ansible برای ایجاد یک حلقه است و در این حالت ایجاد کانتینرهای شما را با توجه به تعداد تعیین شده شما حلقه می کند. این یک حلقه شمارش اولیه است، بنابراین متغیر آیتم در اینجا عددی را ارائه می دهد که تکرار حلقه فعلی را نشان می دهد. این شماره در اینجا برای نامگذاری ظروف شما استفاده می شود.

مرحله 5 – کتاب راهنمای کامل خود را مرور کنید

کتاب بازی شما باید تقریباً شبیه شکل زیر باشد، با تفاوت های جزئی بسته به سفارشی سازی های شما:

playbook.yml

---
- hosts: all
  become: true
  vars:
    container_count: 4
    default_container_name: docker
    default_container_image: ubuntu
    default_container_command: sleep 1d

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Install required system packages
      apt:
        pkg:
          - apt-transport-https
          - ca-certificates
          - curl
          - software-properties-common
          - python3-pip
          - virtualenv
          - python3-setuptools
        state: latest
        update_cache: true

    - name: Add Docker GPG apt Key
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Add Docker Repository
      apt_repository:
        repo: deb https://download.docker.com/linux/ubuntu focal stable
        state: present

    - name: Update apt and install docker-ce
      apt:
        name: docker-ce
        state: latest
        update_cache: true

    - name: Install Docker Module for Python
      pip:
        name: docker

    - name: Pull default Docker image
      community.docker.docker_image:
        name: "{{ default_container_image }}"
        source: pull

    - name: Create default containers
      community.docker.docker_container:
        name: "{{ default_container_name }}{{ item }}"
        image: "{{ default_container_image }}"
        command: "{{ default_container_command }}"
        state: present
      with_sequence: count={{ container_count }}

با خیال راحت این کتاب راهنما را طوری تغییر دهید که مطابق با نیازهای فردی شما در جریان کار خود باشد. برای مثال، می‌توانید از ماژول docker_image برای فشار دادن تصاویر به Docker Hub یا ماژول docker_container برای راه‌اندازی شبکه‌های کانتینری استفاده کنید.

مرحله 6 – اجرای Playbook خود

اکنون آماده اجرای این کتاب بازی در یک یا چند سرور هستید. اکثر کتاب‌های پخش به‌طور پیش‌فرض پیکربندی شده‌اند که در هر سرور موجود در فهرست شما اجرا شوند، اما شما این بار سرور خود را مشخص می‌کنید.

برای اجرای playbook فقط در server1 که به صورت sammy متصل می شود، می توانید از دستور زیر استفاده کنید:

ansible-playbook playbook.yml -l server1 -u sammy

پرچم -l سرور شما را مشخص می‌کند و پرچم -u مشخص می‌کند که کدام کاربر در سرور راه دور وارد شود. خروجی مشابه این دریافت خواهید کرد:

این نشان می دهد که راه اندازی سرور شما کامل شده است! خروجی شما نباید دقیقاً یکسان باشد، اما مهم این است که هیچ شکستی نداشته باشید.

پس از اتمام اجرا، از طریق SSH به سروری که توسط Ansible ارائه شده است وارد شوید تا بررسی کنید که آیا کانتینرها با موفقیت ایجاد شده اند یا خیر.

وارد سرور راه دور با:

ssh sammy@your_remote_server_ip

و ظروف Docker خود را در سرور راه دور فهرست کنید:

sudo docker ps -a

شما باید خروجی مشابه این را ببینید:

 

Output

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a3fe9bfb89cf        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker4
8799c16cde1e        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker3
ad0c2123b183        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker2
b9350916ffd8        ubuntu              "sleep 1d"          5 minutes ago       Created                                 docker1

این بدان معناست که کانتینرهای تعریف شده در playbook با موفقیت ایجاد شده اند. از آنجایی که این آخرین کار در playbook بود، همچنین تأیید می کند که playbook به طور کامل در این سرور اجرا شده است.

نتیجه

تنظیم خودکار زیرساخت شما نه تنها می تواند در وقت شما صرفه جویی کند، بلکه کمک می کند تا اطمینان حاصل شود که سرورهای شما از یک پیکربندی استاندارد پیروی می کنند که می تواند مطابق با نیازهای شما سفارشی شود. با ماهیت توزیع شده برنامه های مدرن و نیاز به سازگاری بین محیط های مرحله بندی مختلف، اتوماسیون مانند این به یک جزء اصلی در فرآیندهای توسعه بسیاری از تیم ها تبدیل شده است.

در این راهنما، نحوه استفاده از Ansible برای خودکار کردن فرآیند نصب و راه‌اندازی Docker در یک سرور راه دور را نشان دادید. از آنجایی که هر فرد معمولاً هنگام کار با کانتینر نیازهای متفاوتی دارد، توصیه می کنیم برای اطلاعات بیشتر و موارد استفاده از ماژول docker_container Ansible، اسناد رسمی Ansible را بررسی کنید.

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:VPS یا سرور مجازیآماده کردن Playbookافزودن Docker Imageانواع سرور مجازیاوبونتو 20.04ایجاد سرور مجازیبه روز رسانی سرورخرید سرور مجازیکتاب بازی Ansible

  • behnam gol mohamadi
  • ۰
  • ۰

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

ورود به سایت

معرفی

Discourse که توسط یکی از بنیانگذاران StackOverflow ایجاد شده است، یک پلتفرم گفتگوی منبع باز است. گفتمان می تواند یک انجمن آنلاین، یک لیست پستی، یک اتاق گفتگو و موارد دیگر را تقویت کند.

Discourse با استفاده از نصب با یک کلیک vpsgol روی یک Droplet به خوبی کار می کند، اما با رشد جامعه شما، می تواند از یک Droplet بیشتر شود. اگر یکی از قطره‌های شما آفلاین شود، استفاده از چند قطره به جامعه شما انعطاف‌پذیری می‌دهد. هر قطره همچنین پهنای باند شما را افزایش می دهد. هنگام استفاده از چند قطره، یک Load Balancer می تواند به گسترش استقرار شما کمک کند و دسترسی بالا را به برنامه وب شما بیاورد. در نهایت، یک نمونه پایگاه داده مدیریت شده تجربه کاربری ثابتی را در چندین قطره تضمین می کند.

پس از تکمیل این آموزش، شما یک استقرار Discourse بسیار در دسترس و به راحتی مقیاس پذیر خواهید داشت که در vpsgol اجرا می شود. شما با یک قطره جدید اوبونتو 20.04 شروع می‌کنید و با یک نصب گفتمان مقیاس‌پذیر افقی که شامل یک Load Balancer، Managed PostgreSQL cluster، Redis instance (اختیاری) و Droplet‌های اضافی است، به پایان می‌رسانید.

پیش نیازها

برای دنبال کردن این آموزش، شما نیاز دارید:

  • یک سرور اوبونتو 20.04 با حداقل 2 گیگابایت رم پیکربندی شده با یک کاربر غیر ریشه با امتیازات sudo و فایروال، که می توانید با دنبال کردن راهنما، راه اندازی اولیه سرور با اوبونتو 20.04، این کار را انجام دهید.
  • Discourse بر روی سرور شما نصب و پیکربندی شده است که می توانید با دنبال کردن آموزش نحوه نصب Discourse در اوبونتو 20.04 این کار را انجام دهید.
  • نام دامنه ای که سوابق DNS آن توسط vpsgol مدیریت می شود، که می توانید با دنبال کردن آموزش نحوه اشاره به سرورهای نام vpagol  از ثبت کننده های دامنه رایج، این کار را انجام دهید. هنگام تنظیم Discourse بر روی سرور خود، مطمئن شوید که از نام دامنه اصلی و نه یک زیر دامنه استفاده کنید (به عنوان مثال، به جای discourse.yoursite.com از yoursite.com استفاده کنید).
  • آشنایی با Docker که می توانید از آموزش The Docker Ecosystem: An Introduction to Common Components به دست آورید.

مرحله 1 – اضافه کردن یک متعادل کننده بار vpsgol به یک سرور گفتمان

در این مرحله شما یک vpsgol Load Balancer را به سرور Discourse که در پیش نیازها ایجاد کرده اید اضافه می کنید. به کنترل پنل vpsgol خود دسترسی پیدا کنید، روی Networking، سپس Load Balancers، و سپس روی Create Load Balancer کلیک کنید.

شما باید یک منطقه مرکز داده را برای متعادل کننده بار خود انتخاب کنید. حتماً همان منطقه ای را که برای قطره گفتمان انتخاب کرده اید انتخاب کنید. Load Balancer با Droplet شما با استفاده از شبکه خصوصی آن ارتباط برقرار می کند، بنابراین هر دو Droplet و Load Balancer شما باید در یک منطقه باشند.

سپس، Droplet خود را با تایپ کردن نام Droplet در قسمت متن به Load Balancer اضافه کنید.

Discourse معمولاً با صدور گواهی رایگان Let’s Encrypt در طول فرآیند نصب، HTTPS را برای شما مدیریت می کند. با این حال، وقتی Droplet شما پشت Load Balancer قرار دارد، Let’s Encrypt نمی تواند گواهی شما را تمدید کند زیرا آدرس IP دامنه شما با IP Droplet شما مطابقت ندارد.

خوشبختانه، vpsgol Load Balancer می تواند گواهی ها را برای شما مدیریت کند. فقط باید یک قانون حمل و نقل برای HTTPS به Load Balancer خود اضافه کنید. یک قانون حمل و نقل به Load Balancer می گوید که نوع خاصی از ترافیک را به Droplet شما ارسال کند.

شما به دو قانون ارسال نیاز دارید، یکی برای HTTP و دیگری برای HTTPS. با افزودن یک قانون حمل و نقل برای HTTPS، vpsgol می تواند به طور خودکار یک گواهی را برای شما ایجاد و تمدید کند. پشتیبانی HTTPS برای امنیت و سئوی سایت شما نیز مهم است.

از آنجایی که دامنه خود را به عنوان بخشی از پیش نیازها به vpsgol اضافه کردید، افزودن پشتیبانی HTTPS فقط چند کلیک طول می کشد. در قسمت Forwarding rules یک قانون جدید به نام HTTPS اضافه کنید که می توانید آن را از لیست کشویی انتخاب کنید. حالا Certificate و سپس + New Certificate را بزنید.

نام دامنه خود را در فیلد متنی تایپ کنید، که باید به صورت خودکار برای شما پر شود. سپس به گواهینامه خود یک نام بدهید و روی Generate Certificate کلیک کنید تا vpsgol درخواست داشته باشد و یک گواهی را برای شما مدیریت کند.

تقریباً راه اندازی Load Balancer خود را تمام کرده اید. روی دکمه Edit Advanced Settings کلیک کنید و کادر با عنوان Enable Proxy Protocol را علامت بزنید. هنگامی که پروتکل PROXY فعال است، Load Balancer اطلاعات مشتری مانند آدرس IP کاربر را به Droplets پشت Load Balancer ارسال می کند. بدون پروتکل PROXY، Discourse فکر می‌کرد که تمام ترافیک آن از یک کاربر منفرد (Load Balancer) می‌آید، و همه گزارش‌ها نشانی IP Load Balancer را به جای آدرس‌های IP واقعی کاربران شما نشان می‌دهند.

در نهایت یک نام برای Load Balancer خود انتخاب کنید و روی Create Load Balancer کلیک کنید.

اکنون که Load Balancer را راه اندازی کرده اید، باید فایل های پیکربندی Discourse خود را تغییر دهید.

مرحله 2 – اصلاح فایل های پیکربندی گفتمان

در این مرحله، فایل‌های پیکربندی پیش‌فرض موجود در Discourse را تغییر می‌دهید. SSH را به Droplet خود وارد کنید و با استفاده از این دستور به فهرست /var/discourse بروید:

cd /var/discourse

با استفاده از nano یا ویرایشگر متن مورد علاقه خود، یک فایل جدید به نام loadbalancer.template.yml در فهرست قالب ها ایجاد و باز کنید:

sudo nano templates/loadbalancer.template.yml

پوشه templates فایل هایی را برای پیکربندی Discourse شما نگهداری می کند. در اینجا، شما در حال اضافه کردن یک الگوی سفارشی جدید برای فعال کردن پشتیبانی از پروتکل PROXY برای نصب Discourse خود هستید.

در loadbalancer.template.yml، خطوط زیر را وارد کنید:

run:
– exec: “sed -i ‘s:listen 80: listen 80 proxy_protocol:g’ /etc/nginx/conf.d/discourse.conf”
– exec: “sed -i ‘s:$remote_addr:$proxy_protocol_addr:g’ /etc/nginx/conf.d/discourse.conf”
– exec: “sed -i ‘s:X-Forwarded-For $proxy_add_x_forwarded_for:X-Forwarded-For $proxy_protocol_addr:g’ /etc/nginx/conf.d/discourse.conf”

خط اول پیکربندی Discourse Nginx را برای فعال کردن پشتیبانی از پروتکل PROXY تغییر می‌دهد. اگر پروتکل PROXY در Load Balancer فعال باشد اما در Nginx فعال نباشد، Discourse یک خطای سرور را برمی‌گرداند.

خط دوم یافتن و جایگزینی را انجام می‌دهد و همه رخدادهای $remote_addr را با $proxy_protocol_addr جایگزین می‌کند. $proxy_protocol_addr حاوی آدرس IP مشتری است که از Load Balancer ارسال شده است. $remote_addr معمولاً آدرس IP کاربر را نشان می دهد، اما از آنجایی که Discourse پشت Load Balancer قرار دارد، آدرس IP Load Balancer را نشان می دهد.

خط آخر همه موارد X-Forwarded-For $proxy_add_x_forwarded_for را با X-Forwarded-For $proxy_protocol_addr جایگزین می‌کند و اطمینان حاصل می‌کند که هدر X-Forwarded-For آدرس IP مشتری را به درستی ثبت می‌کند و نه آدرس IP Load Balancer.

با فشار دادن CTRL+X و سپس y فایل را ذخیره کرده و ببندید.

آخرین کاری که باید انجام دهید این است که قالب را در Discourse بارگذاری کنید و Discourse را بازسازی کنید.

با استفاده از nano یا ویرایشگر متن مورد علاقه خود، فایلی به نام app.yml را در فهرست کانتینرها ویرایش کنید:

sudo nano containers/app.yml

ابتدا قالبی را که ایجاد کرده اید اضافه می کنید. در زیر الگوها، خط برجسته شده را مانند شکل اضافه کنید:

containers/app.yml

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/loadbalancer.template.yml"

حتماً الگوی جدید را در یک خط زیر templates/web.template.yml اضافه کنید.

در مرحله بعد، مطمئن شوید که دو خط web.ssl.template.yml و templates/web.letsencrypt.ssl.template.yml هر دو با اضافه کردن یک علامت پوند [#] همانطور که نشان داده شده است، توضیح داده شده اند:

containers/app.yml

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/loadbalancer.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"

در نهایت چند خط پایین بروید تا expose را ببینید. خط “443:443” # https را با اضافه کردن علامت پوند [#] همانطور که نشان داده شده است، نظر دهید:

containers/app.yml

...
expose:
  - "80:80"   # http
# - "443:443" # https

اکنون وقتی Discourse را بازسازی می کنید، HTTPS در Discourse غیرفعال می شود. اتصال HTTPS در Load Balancer خاتمه می یابد و Load Balancer با Droplet شما از طریق شبکه خصوصی امن vpsgol ارتباط برقرار می کند، بنابراین نیازی به راه اندازی HTTPS در سرور Discourse خود ندارید.

با فشار دادن CTRL+X و سپس y فایل را ذخیره کرده و ببندید.

برای اعمال پیکربندی و بازسازی Discourse، دستور زیر را اجرا کنید:

sudo ./launcher rebuild app

این دستور به امتیازات فوق کاربر نیاز دارد، به همین دلیل است که با sudo اضافه شده است.

در این مرحله، پیکربندی Discourse و Load Balancer را به پایان رسانده اید. در مرحله بعد، نام دامنه خود را به آدرس IP Load Balancer نشان می دهید.

مرحله 3 – به روز رسانی DNS

در این مرحله، دامنه خود را به جای آدرس IP Droplet به آدرس IP Load Balancer اشاره می‌کنید.

اگر از میزبانی DNS vpsgol استفاده می کنید، به کنترل پنل بروید و روی Networking کلیک کنید. روی نام دامنه خود کلیک کنید، سپس به دنبال رکورد A باشید که به Droplet شما اشاره می کند. منوی بیشتر رکورد را برای تغییر رکورد انتخاب کنید. مقدار این رکورد را از آدرس IP Droplet خود به آدرس IP Load Balancer تغییر دهید.

سرور Discourse شما پشت یک  vpsgol Load Balancer اجرا می شود و شما مجبور نخواهید بود گواهینامه های SSL خود را مدیریت کنید زیرا vpsgol این کار را برای شما انجام می دهد.

با مراجعه به نام دامنه خود، نصب Discourse خود را تست کنید. شما باید صفحه ای را ببینید که شبیه به این است:

اکنون که دامنه شما به Load Balancer اشاره می کند، یک نمونه پایگاه داده مدیریت شده را برای ایجاد یک تجربه ثابت برای کاربران خود اضافه می کنید.

مرحله 4 – افزودن یک پایگاه داده مدیریت شده vpsgol

در این مرحله، یک نمونه vpsgol Managed PostgreSQL ایجاد می‌کنید و آن را به استقرار Discourse خود اضافه می‌کنید.

مزیت اصلی Load Balancer تقسیم ترافیک شما بین چند قطره است. تا به حال، پایگاه داده، سرور Redis و وب سرور شما همگی بر روی یک Droplet اجرا می شدند. اگر نمونه دوم Discourse را اضافه کنید، پایگاه داده، سرور Redis و وب سرور خود را خواهد داشت و مانند یک وب سایت کاملاً متفاوت عمل می کند. بازدیدکنندگان شما ممکن است احساس کنند که به وب‌سایت‌های دیگر با پست‌ها و کاربران متفاوت می‌روند، زیرا به پایگاه‌های داده متفاوتی متصل خواهند شد. شما می توانید این مشکل را با استفاده از یکی از نمونه های مدیریت شده PostgreSQL vpsgol حل کنید، به جای اینکه یک پایگاه داده جداگانه در هر قطره گفتمان اجرا شود.

با رفتن به کنترل پنل vpsgol یک نمونه PostgreSQL مدیریت شده vpsgol را تنظیم کنید. روی Databases کلیک کنید، سپس Create Database Cluster، در نهایت PostgresSQL را انتخاب کنید، منطقه را مطابق با مکان Droplet خود تنظیم کنید و روی Create a Database Cluster کلیک کنید.

در حالی که پایگاه داده شما در حال تهیه است، Droplet خود را به عنوان منبع قابل اعتماد به پایگاه داده خود اضافه کنید. این به Droplet شما اجازه می دهد تا با استفاده از شبکه خصوصی امن vpsgol با پایگاه داده شما ارتباط برقرار کند.

در صفحه بعدی شبکه VPC را انتخاب کنید و مقادیر میزبان پایگاه داده، نام کاربری، رمز عبور و پورت را یادداشت کنید، زیرا باید آنها را به فایل containers/app.yml خود اضافه کنید.

هنگامی که کلاستر پایگاه داده شما ایجاد شد، باید پیکربندی Discourse را به روز کنید. باز کردن containers/app.yml:

sudo nano containers/app.yml

در بخش الگوها، خط را نظر دهید – templates/postgres.template.yml همانطور که نشان داده شده است:

containers/app.yml

templates:
# - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/loadbalancer.template.yml"

این باعث می‌شود Discourse هنگام بازسازی، سرور Postgres خود را فراهم نکند.

سپس به دنبال بخش env از containers/app.yml بگردید و خطوط زیر را اضافه کنید و مقادیر خود را برای نام کاربری پایگاه داده، رمز عبور، میزبان، نام و پورت جایگزین کنید.

containers/app.yml

env:
    DISCOURSE_DB_USERNAME: your_db_username
    DISCOURSE_DB_PASSWORD: your_db_password
    DISCOURSE_DB_HOST: your_db_host
    DISCOURSE_DB_NAME: your_db_name
    DISCOURSE_DB_PORT: your_db_port

این متغیرهای اضافی به Droplet شما اجازه می دهد تا به پایگاه داده خارجی شما متصل شود.

فایل را با فشار دادن CTRL+X و سپس y ذخیره کنید.

اگر یک نصب Discourse از قبل موجود دارید، باید آن را به عنوان پشتیبان صادر کنید. می توانید این کار را با رفتن به قسمت مدیریت سایت خود، روی Backups و سپس روی Backup کلیک کنید.

برای اعمال پیکربندی و بازسازی Discourse، دستور زیر را اجرا کنید:

sudo ./launcher rebuild app

حتی اگر سایت خود را صادر کرده باشید، باید دوباره نصب وب Discourse را انجام دهید تا یک حساب کاربری جدید ایجاد کنید. اکنون که به پایگاه داده جدید خود متصل هستید، می توانید از این حساب برای بازیابی Discourse استفاده کنید.

در نهایت، یک تنظیم را تغییر می‌دهید تا اطمینان حاصل کنید که کاربران هنگام بازدید از سایت، در همان Droplet باقی می‌مانند.

به تنظیمات Load Balancer خود در کنترل پنل vpsgol برگردید. به Networking، سپس Load Balancers، سپس Settings بروید و به دنبال Sticky Sessions بگردید. روی Edit کلیک کنید.

Sticky Sessions را از None به Cookie تغییر دهید و روی Save کلیک کنید.

Sticky Sessions تضمین می‌کند که هر کاربری که از طریق Load Balancer از وب‌سایت شما بازدید می‌کند، در طول مدت بازدید خود به همان Droplet متصل می‌ماند. این مهم است زیرا هر قطره هنوز هم نمونه Redis خود را دارد و Redis این است که چگونه Discourse کاربر را هنگام ورود به سیستم ردیابی می کند. بدون Sticky Sessions، کاربر می تواند در یک Droplet وارد شود، سپس از یک صفحه جدید بازدید کند و (ناشناس به آنها) با قطره دیگری که در آن وارد نشده‌اند تعویض شود. Sticky Sessions با نگه داشتن کاربر در همان Droplet از این امر جلوگیری می کند.

همانطور که ما با پایگاه داده انجام دادیم، می توانید Redis را به نمونه اختصاصی خود منتقل کنید و سپس به Sticky Sessions نیازی نخواهید داشت. می توانید این را در مرحله بعدی امتحان کنید.

مرحله 5 – (اختیاری) افزودن یک نمونه Redis مدیریت شده vpsgol

این مرحله اختیاری است و به یک نمونه vpsgol Managed Redis نیاز دارد. تا این مرحله، نمونه Redis در Droplet در پشت Load Balancer قرار می‌گرفت، که برای اطمینان از ورود کاربران به سیستم، نیاز به جلسات چسبنده دارد. با این حال، در تنظیم قبلی، کاربران پس از تغییر Droplet از سیستم خارج می شدند زیرا اطلاعات جلسه آنها در Droplet ذخیره می شود.

افزودن یک سرور Redis خارجی به Droplets می تواند این مشکل را برطرف کند. این به طور موثر وضعیت Discourse را از Droplets شما دور می کند. اگر Droplet آفلاین شود، کاربران شما از سیستم خارج نمی‌شوند – در واقع، آنها حتی متوجه نمی‌شوند.

شما می توانید یک سرور Redis مدیریت شده vpsgol را به همان روشی که پایگاه داده مدیریت شده PostgreSQL خود را ایجاد کردید راه اندازی کنید. به کنترل پنل vpsgol بروید. روی Databases، سپس Create، سپس Database کلیک کنید و Redis را برای موتور پایگاه داده خود انتخاب کنید. همان منطقه را با سایر منابع خود انتخاب کنید تا مطمئن شوید که آنها در همان شبکه VPC هستند. به سرور خود یک نام بدهید و روی Create a database cluster کلیک کنید.

درست مانند زمانی که پایگاه داده Postgres خود را ایجاد می کنید، یک صفحه خوش آمدگویی با چند مرحله شروع خواهید دید. روی Secure this database cluster کلیک کنید، نام Droplet خود را وارد کنید و سپس روی Allow these inbound sources only کلیک کنید. این تضمین می کند که فقط Droplet شما می تواند به Redis متصل شود.

اکنون باید سیاست تخلیه را برای سرور Redis خود انتخاب کنید. allkeys-lru را انتخاب کنید. این خط مشی به این معنی است که اگر سرور Redis شما پر شود، شروع به حذف قدیمی ترین ورودی های خود می کند. با این کار کاربرانی که مدتی است از وب سایت شما استفاده نکرده اند، از سیستم خارج می شود، اما بهتر از این است که Redis خطاها را بازگرداند و کار را متوقف کند.

سیاست اخراج خود را ذخیره کنید. مانند پایگاه داده PostgreSQL خود، در صفحه جزئیات اتصال، شبکه VPC را انتخاب کنید.

هنگامی که نمونه Redis ایجاد شد، باید پیکربندی Discourse خود را به روز کنید. باز کردن containers/app.yml با استفاده از nano:

sudo nano containers/app.yml

همانطور که در اینجا نشان داده شده است، جزئیات اتصال Redis را به بخش env اضافه کنید. حتما متن هایلایت شده را با اطلاعات خود جایگزین کنید. (نیازی به وارد کردن قسمت نام کاربری ندارید.)

containers/app.yml

env:
    DISCOURSE_REDIS_HOST: your_redis_host
    DISCOURSE_REDIS_PASSWORD: your_redis_password
    DISCOURSE_REDIS_PORT: your_redis_port
    DISCOURSE_REDIS_USE_SSL: true

در مرحله بعد، در بخش templates، روی خط نظر دهید – templates/redis.template.yml همانطور که نشان داده شده است:

containers/app.yml

templates:
# - "templates/postgres.template.yml"
# - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/loadbalancer.template.yml"

این امر از Discourse از ایجاد نمونه Redis خود جلوگیری می کند.

با فشار دادن CTRL+X و سپس y فایل را ذخیره کرده و ببندید.

برای اعمال پیکربندی و بازسازی Discourse، دستور زیر را اجرا کنید:

برنامه بازسازی sudo ./launcher
با یک نمونه Redis مدیریت شده، دیگر نیازی به Sticky Sessions ندارید. در صورت تمایل می توانید آن گزینه را خاموش کنید، اما کاربران شما تفاوتی را در هر دو صورت متوجه نمی شوند.

اکنون که پایگاه داده های مدیریت شده را به پیکربندی خود اضافه کرده اید، برای افزودن قطره های بیشتر، عکس های فوری از سرور Discourse خود ایجاد می کنید.

مرحله 6 – اضافه کردن قطرات اضافی

در این مرحله، شما یک عکس فوری از Discourse Droplet خود ایجاد می کنید که ایجاد سرورهای جدید را آسان تر می کند. یک عکس فوری یک کپی کامل از یک Droplet موجود را ارائه می دهد و می توانید از آنها برای ایجاد قطرات جدید با همان محتوا استفاده کنید.

با رفتن به کنترل پنل vpsgol یک عکس فوری جدید ایجاد کنید. روی Droplets کلیک کنید، Droplet خود را پیدا کنید و روی Snapshots کلیک کنید. برای عکس فوری خود یک نام بگذارید و روی Take snapshot زنده کلیک کنید.

شما می توانید از این عکس فوری برای اضافه کردن قطرات اضافی پشت Load Balancer و افزایش ظرفیت وب سایت خود استفاده کنید.

هر بار که یک Droplet جدید ایجاد می کنید، باید منابع مورد اعتماد را در سرورهای Postgres و Redis خود به روز کنید، که می توانید از طریق کنترل پنل انجام دهید. همانطور که در مرحله قبل انجام دادید، نمونه پایگاه داده‌ای را که می‌خواهید تغییر دهید انتخاب کنید، به نمای کلی بروید و سپس Secure this database cluster. آدرس های IP جدید Droplet خود را به لیست منابع قابل اعتماد اضافه کنید.

در این مرحله، از Snapshot برای ایجاد قطره‌های اضافی استفاده کردید و آنها را به عنوان منابع قابل اعتماد به نمونه‌های PostgreSQL و Redis خود اضافه کردید.

نتیجه

در این آموزش، شما یک سرور Discourse را در پشت یک vpsgol Load Balancer راه اندازی می کنید. برای کمک به مقیاس‌بندی استقرار خود، یک پایگاه داده مدیریت‌شده PostgreSQL و نمونه مدیریت‌شده Redis را نیز اضافه کرده‌اید. در نهایت، با استفاده از عکس های فوری و کنترل پنل، قطرات بیشتری اضافه کردید. با استفاده از کنترل پنل، می توانید منابع بیشتری را با رشد جامعه خود اضافه کنید.

اکنون که یک Load Balancer راه‌اندازی کرده‌اید، می‌توانید موارد استفاده دیگر را برای vpsgol Load Balancer مانند Canary Deployments بررسی کنید. همچنین می توانید با دنبال کردن آموزش نحوه اتصال به یک نمونه Redis مدیریت شده از طریق TLS با Stunnel و redis-cli، با استفاده از خط فرمان به نمونه Redis خود متصل شوید. در نهایت، می‌توانید با استفاده از مستندات پایگاه‌های داده مدیریت شده و آموزش، استخرهای اتصال پایگاه‌های داده مدیریت‌شده و بنچمارک PostgreSQL با استفاده از pgbench، درباره پایگاه‌های داده vpsgol و عملکرد آن‌ها اطلاعات بیشتری کسب کنید.

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:استقرار Discourseبه روز رسانی DNSپیکربندی Discourseخرید سرور مجازیخرید سرور مجازی آمریکاسرور Discourseسرور Redisهاست خرید

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از PostgreSQL با برنامه جنگو در اوبونتو 20.04

ورود به سایت

معرفی

جنگو یک چارچوب انعطاف پذیر برای ایجاد سریع برنامه های پایتون است. به طور پیش فرض، برنامه های جنگو برای ذخیره داده ها در یک فایل پایگاه داده سبک وزن SQLite پیکربندی شده اند. در حالی که این کار در برخی از بارها به خوبی کار می کند، یک سیستم مدیریت پایگاه داده سنتی تر می تواند عملکرد در تولید را بهبود بخشد.

در این راهنما، PostgreSQL (که اغلب به آن Postgres گفته می شود) را برای استفاده در برنامه های جنگو نصب و پیکربندی می کنید. شما نرم افزار لازم را نصب می کنید، اعتبار پایگاه داده را برای برنامه ما ایجاد می کنید و سپس یک پروژه جنگو جدید را برای استفاده از این باطن شروع و پیکربندی می کنید.

پیش نیازها

  • شما به یک نمونه سرور اوبونتو 20.04 تمیز با یک کاربر غیر ریشه که با امتیازات sudo پیکربندی شده نیاز دارید. با دنبال کردن راهنمای اولیه راه اندازی سرور ما، نحوه تنظیم این را بیاموزید.

وقتی برای ادامه آماده شدید، به عنوان کاربر sudo خود وارد شوید.

مرحله 1 – نصب کامپوننت ها از مخازن اوبونتو

ابتدا اجزای ضروری را نصب خواهید کرد. این شامل pip، مدیر بسته پایتون برای نصب و مدیریت اجزای پایتون، و همچنین نرم‌افزار پایگاه داده با کتابخانه‌های مرتبط آن است.

شما از پایتون 3 استفاده خواهید کرد که با اوبونتو 20.04 عرضه می شود. نصب را با تایپ کردن شروع کنید:

sudo apt update
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

با پایان نصب، می توانید به پایگاه داده بروید.

مرحله 2 – ایجاد یک پایگاه داده و کاربر پایگاه داده

به طور پیش فرض، Postgres از یک طرح احراز هویت به نام “تأیید هویت همتا” برای اتصالات محلی استفاده می کند. اساساً، این بدان معنی است که اگر نام کاربری سیستم عامل کاربر با نام کاربری معتبر Postgres مطابقت داشته باشد، آن کاربر می تواند بدون احراز هویت بیشتر وارد شود.

در طول نصب Postgres، یک کاربر سیستم عامل به نام postgres ایجاد شد تا با کاربر مدیریت PostgreSQL مطابقت داشته باشد. برای انجام کارهای اداری باید از این کاربر استفاده کنید. با گزینه -u می توانید از sudo و pass در نام کاربری استفاده کنید.

با تایپ کردن، وارد یک جلسه تعاملی Postgres شوید:

sudo -u postgres psql

ابتدا یک پایگاه داده برای پروژه جنگو ایجاد خواهید کرد. هر پروژه به دلایل امنیتی باید پایگاه داده جدا شده خود را داشته باشد. ما در این راهنما پایگاه داده را myproject می نامیم، اما همیشه بهتر است چیزی توصیفی تر را انتخاب کنید:

CREATE DATABASE myproject;

در مرحله بعد، یک کاربر پایگاه داده ایجاد می کنید که از آن برای اتصال و تعامل با پایگاه داده استفاده می کنید. رمز عبور را روی چیزی قوی و امن تنظیم کنید:

CREATE USER myprojectuser WITH PASSWORD ‘password’;

پس از آن، تعدادی از پارامترهای اتصال را برای کاربری که ایجاد کرده‌اید تغییر می‌دهید. این کار باعث سرعت بخشیدن به عملیات پایگاه داده می شود به طوری که هر بار که یک اتصال برقرار می شود نیازی به جستجو و تنظیم مقادیر صحیح نباشد.

ALTER ROLE myprojectuser SET client_encoding TO ‘utf8’;
ALTER ROLE myprojectuser SET default_transaction_isolation TO ‘read committed’;
ALTER ROLE myprojectuser SET timezone TO ‘UTC’;

شما کدگذاری پیش‌فرض را روی UTF-8 تنظیم می‌کنید که جنگو انتظار دارد. شما همچنین طرح پیش‌فرض جداسازی تراکنش را روی «خواندن تعهد» تنظیم می‌کنید که خواندن تراکنش‌های غیرمتعهد را مسدود می‌کند. در نهایت، شما در حال تنظیم منطقه زمانی هستید. به‌طور پیش‌فرض، پروژه‌های جنگو شما برای استفاده از UTC تنظیم می‌شوند. اینها همه توصیه هایی از خود پروژه جنگو هستند.

اکنون، تنها کاری که باید انجام دهید این است که حقوق دسترسی کاربر پایگاه داده خود را به پایگاه داده ای که ایجاد کرده اید بدهید:

GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

برای بازگشت به جلسه پوسته کاربر postgres از اعلان SQL خارج شوید:

\q

جنگو را در یک محیط مجازی نصب کنید

اکنون که پایگاه داده شما راه اندازی شده است، می توانید جنگو را نصب کنید. برای انعطاف‌پذیری بهتر، جنگو و تمام وابستگی‌های آن را در یک محیط مجازی پایتون نصب خواهید کرد. بسته virtualenv به شما این امکان را می دهد که این محیط ها را به راحتی ایجاد کنید.

برای نصب virtualenv تایپ کنید:

sudo pip3 install virtualenv

برای نگهداری پروژه جنگو خود، دایرکتوری بسازید و به آن منتقل کنید:

mkdir ~/myproject

cd ~/myproject

شما می توانید با تایپ کردن یک محیط مجازی برای ذخیره نیازمندی های Python پروژه جنگو خود ایجاد کنید:

python3 -m virtualenv myprojectenv

این یک کپی محلی از پایتون و یک دستور pip محلی را در فهرستی به نام myprojectenv در فهرست پروژه شما نصب می کند.

قبل از نصب اپلیکیشن ها در محیط مجازی، باید آن را فعال کنید. می توانید این کار را با تایپ کردن انجام دهید:

source myprojectenv/bin/activate

اعلان شما تغییر می کند تا نشان دهد که اکنون در محیط مجازی کار می کنید. چیزی شبیه این (myprojectenv)user@host:~/myproject$ خواهد بود.

هنگامی که محیط مجازی شما فعال شد، می توانید نسخه رسمی جنگو را با pip نصب کنید. شما همچنین بسته psycopg2 را نصب خواهید کرد که به ما امکان می دهد از پایگاه داده Postgres که پیکربندی کرده اید استفاده کنیم:

pip install Django psycopg2

اکنون می توانید یک پروژه جنگو را در پوشه myproject شروع کنید. این یک دایرکتوری فرزند به همین نام ایجاد می کند تا خود کد را نگه دارد و یک اسکریپت مدیریتی در دایرکتوری فعلی ایجاد می کند. مطمئن شوید که نقطه را در انتهای دستور اضافه کنید تا به درستی تنظیم شود:

django-admin startproject myproject .

تنظیمات پایگاه داده جنگو را پیکربندی کنید

اکنون که یک پروژه دارید، باید آن را برای استفاده از پایگاه داده ای که ایجاد کرده اید پیکربندی کنید.

فایل اصلی تنظیمات پروژه جنگو را که در دایرکتوری پروژه فرزند قرار دارد باز کنید:

nano ~/myproject/myproject/settings.py

در پایین فایل، یک بخش DATABASES را مشاهده خواهید کرد که به شکل زیر است:

~/myproject/myproject/settings.py

. . .

DATABASES = {
    'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

. . .

این در حال حاضر برای استفاده از SQLite به عنوان پایگاه داده پیکربندی شده است. شما باید این را تغییر دهید تا پایگاه داده PostgreSQL شما به جای آن استفاده شود.

ابتدا موتور را طوری تغییر دهید که به جای آداپتور sqlite3 از آداپتور postgresql استفاده کند. برای NAME، از نام پایگاه داده خود (myproject در این مثال) استفاده کنید. همچنین باید اعتبار ورود به سیستم را اضافه کنید. برای اتصال به نام کاربری، رمز عبور و میزبان نیاز دارید. گزینه پورت را اضافه کرده و آن را خالی می گذارید تا پیش فرض انتخاب شود:

~/myproject/myproject/settings.py

. . .

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

. . .

وقتی اینجا هستید، باید دستورالعمل ALLOWED_HOSTS را نیز تنظیم کنید. این یک لیست سفید از آدرس‌ها یا نام‌های دامنه مجاز به اتصال به نمونه جنگو را تعیین می‌کند. هر درخواست دریافتی با هدر Host که در این لیست نیست یک استثنا ایجاد می کند. جنگو نیاز دارد که این را تنظیم کنید تا از یک کلاس آسیب‌پذیری امنیتی جلوگیری کنید.

در قطعه زیر، چند نمونه نظر داده شده برای نشان دادن وجود دارد:

~/myproject/myproject/settings.py

. . .
# The simplest case: just add the domain name(s) and IP addresses of your Django server
# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
# To respond to 'example.com' and any subdomains, start the domain with a dot
# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
ALLOWED_HOSTS = ['your_server_domain_or_IP']

در پرانتز، آدرس‌های IP یا نام‌های دامنه مرتبط با سرور جنگو را فهرست کنید. هر مورد باید در نقل قول با ورودی های جدا شده با کاما ذکر شود. اگر می‌خواهید برای کل دامنه و هر زیر دامنه‌ای درخواست کنید، یک نقطه برای شروع ورودی قرار دهید.

وقتی کارتان تمام شد، فایل را ذخیره و ببندید.

پایگاه داده را مهاجرت کنید و پروژه خود را آزمایش کنید.

اکنون که تنظیمات جنگو پیکربندی شده است، می توانید ساختارهای داده خود را به پایگاه داده خود منتقل کرده و سرور را آزمایش کنید.

می توانید با ایجاد و اعمال مهاجرت به پایگاه داده خود شروع کنید. از آنجایی که هنوز هیچ داده واقعی ندارید، این به سادگی ساختار پایگاه داده اولیه را تنظیم می کند:

cd ~/myproject

python manage.py makemigrations

python manage.py migrate

پس از ایجاد ساختار پایگاه داده، می توانید با تایپ کردن یک حساب مدیریتی ایجاد کنید

python manage.py createsuperuser

از شما خواسته می شود یک نام کاربری انتخاب کنید، یک آدرس ایمیل ارائه دهید، و یک رمز عبور برای حساب کاربری انتخاب و تایید کنید.

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

با تایپ کردن:

sudo ufw allow 8000

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

python manage.py runserver 0.0.0.0:8000

در مرورگر وب خود، از نام دامنه یا آدرس IP سرور خود و به دنبال آن :8000 دیدن کنید تا به صفحه ریشه پیش فرض جنگو برسید:

http://server_domain_or_IP:8000

شما باید صفحه فهرست پیش فرض را ببینید:

/admin را به انتهای URL اضافه کنید و باید بتوانید به صفحه ورود به رابط مدیریت دسترسی داشته باشید:

نام کاربری و رمز عبوری که به تازگی با دستور createsuperuser ایجاد کرده اید را وارد کنید. سپس به رابط مدیریت هدایت خواهید شد:

پس از اتمام بررسی، می توانید با زدن CTRL-C در پنجره ترمینال، سرور توسعه را متوقف کنید.

با دسترسی به رابط مدیریت، تأیید کرده‌اید که پایگاه داده شما اطلاعات حساب کاربری شما را ذخیره کرده است و می‌توان به آن دسترسی مناسب داشت.

نتیجه

در این راهنما، نحوه نصب و پیکربندی PostgreSQL را به عنوان پایگاه داده پشتیبان برای پروژه جنگو نشان داده اید. در حالی که SQLite می‌تواند به راحتی بار را در طول توسعه و استفاده از تولید سبک تحمل کند، اکثر پروژه‌ها از پیاده‌سازی یک سیستم مدیریت پایگاه داده کامل‌تر بهره می‌برند.

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:اوبونتو 20.04برنامه جنگوبرنامه های پایتونخرید سرورخرید سرور مجازیخرید سرور مجازی آمریکاسرور اوبونتو 20.04نحوه استفاده از PostgreSQLنرم‌افزار پایگاه داده

  • behnam gol mohamadi
  • ۰
  • ۰

مقدمه ای بر اوبونتو 20.04: راهنمای مبتدی

ورود به سایت

اوبونتو چیست؟

اوبونتو یک سیستم عامل منبع باز توزیع لینوکس محبوب است که توسط Canonical اداره می شود. Canonical برای هر نسخه از اوبونتو به‌روزرسانی‌های امنیتی و پشتیبانی می‌کند و بر توسعه مداوم آن نظارت می‌کند. اوبونتو دارای چندین نسخه از جمله هسته، سرور و دسکتاپ است که به آن اجازه می دهد در انواع مختلف ماشین ها اجرا شود. می توان از آن در رایانه های شخصی، سرورها، ابر رایانه ها، در رایانش ابری و غیره استفاده کرد.

چرا از اوبونتو استفاده کنیم؟

اوبونتو به دلایل مختلفی محبوب است و برای سازندگانی که به یک راه حل رایگان و منبع باز نیاز دارند که امن و آسان برای استفاده باشد، جذاب است. محبوبیت نرم افزار همراه با ماهیت مشترک منبع باز به این معنی است که اوبونتو در جامعه Canonical به خوبی پشتیبانی می شود. سیستم عامل کاربر پسند و قابل تنظیم است و اوبونتو امنیت بیشتری را در سیستم عامل خود ارائه می دهد.

نصب اوبونتو

نصب اوبونتو نسبتاً ساده است و راه اندازی اولیه سرور شما را می توان در چند مرحله آسان تکمیل کرد.

ابتدا باید به عنوان root وارد سرور شوید و یک کاربر جدید ایجاد کنید. برای انجام این کار، باید آدرس IP عمومی سرور خود و رمز عبور آن یا کلید خصوصی حساب کاربر اصلی را بدانید (اگر یک کلید SSH برای احراز هویت نصب کرده باشید). هنگامی که به عنوان root وارد سیستم شدید، می توانید حساب کاربری جدید را اضافه کنید و امتیازات مدیریتی را اختصاص دهید. همچنین در صورت نیاز می خواهید دسترسی SSH را برای کاربر جدید خود پیکربندی کنید. پس از ایجاد یک کاربر معمولی برای استفاده روزانه، می‌خواهید دسترسی خارجی را برای کاربر معمولی خود فعال کنید و مطمئن شوید که می‌توانید مستقیماً وارد حساب کاربری خود شوید.

بعد، شما می خواهید یک فایروال راه اندازی کنید. سرورهای اوبونتو 20.04 با فایروال بدون عارضه (UFW) از پیش نصب شده اند تا مطمئن شوند که فقط اتصالات به برخی خدمات مجاز است. اگر سرورهای شما رویvpsgol اجرا می شوند، می توانید به جای UFW از فایروال های vpsgol Cloud استفاده کنید. توصیه می کنیم در هر بار فقط از یک فایروال استفاده کنید تا از قوانین متناقضی که ممکن است اشکال زدایی آنها دشوار باشد جلوگیری کنید.

در نهایت، شما آماده هستید تا هر نرم افزاری را که نیاز دارید بر روی سرور خود نصب کنید!

آشنایی با خط فرمان اوبونتو

اگر در لینوکس تازه کار هستید، باید با ترمینال آشنا شوید. ترمینال روش معمولی برای تعامل با سرور لینوکس است و دانستن اصول ترمینال لینوکس و اجرای دستورات از طریق خط فرمان یک راه عالی برای شروع است. از آنجایی که اکثر مردم از یک سیستم عامل با رابط کاربری گرافیکی (GUI) برای نیازهای روزمره رایانه خود استفاده می کنند، لینوکس دارای یک شبیه ساز ترمینال است، که برنامه ای است که به ترمینال اجازه می دهد در یک محیط گرافیکی استفاده شود.

در سیستم لینوکس، پوسته یک رابط خط فرمان است که دستورات و فایل‌های اسکریپت کاربر را تفسیر می‌کند و به سیستم عامل سرور می‌گوید که با آنها چه کند. پس از ورود به سرور خود با SSH، به یک پوسته راه دور یا خط فرمان متصل خواهید شد، جایی که می توانید دستورات را به سرور صادر کنید.

دستورات با مشخص کردن نام یک برنامه داده می‌شوند و بسیاری از ابزارهای استاندارد لینوکس به صورت پیش‌فرض در اوبونتو 20.04 نصب شده‌اند. برخی از ابزارها برای پیمایش در سیستم فایل هستند، برخی دیگر برای نصب بسته های نرم افزاری و برخی دیگر برای پیکربندی سیستم و برنامه ها استفاده می شوند. اجرای دستور به عنوان یک فرآیند شناخته می شود و روش های مختلفی برای اجرای دستورات وجود دارد. برای نمونه هایی که اصول اجرای دستورات را پوشش می دهد، این آموزش را بررسی کنید.

نمونه هایی از تنظیمات سرور اوبونتو

دو راه متداول برای راه اندازی سرورهای اوبونتو از طریق کلیدهای SSH یا نصب وبمین روی سرور اوبونتو است. SSH یا پوسته امن یک پروتکل رمزگذاری شده است که برای مدیریت و برقراری ارتباط با سرورها استفاده می شود. نصب Webmin به شما امکان می دهد سرور خود را از طریق یک رابط مبتنی بر مرورگر مدیریت کنید، به راحتی حساب های کاربری را مدیریت کنید، تنظیمات DNS را پیکربندی کنید و موارد دیگر.

نصب نرم افزار در اوبونتو 20.04

هنگامی که دسترسی از راه دور به سرور خود را از طریق SSH تنظیم کردید و یک فایروال را پیکربندی کردید، می توانید شروع به نصب نرم افزار روی سرور خود کنید. در اینجا ما شما را از طریق چندین نرم افزار رایج که ممکن است هنگام شروع با اوبونتو 20.04 مفید باشند، آشنا می کنیم:

محاسبات شبکه مجازی یا VNC یک سیستم اتصال است که به شما امکان می دهد از صفحه کلید و ماوس خود برای تعامل با محیط دسکتاپ گرافیکی روی یک سرور راه دور استفاده کنید. مدیریت فایل‌ها، نرم‌افزارها و تنظیمات روی سرور راه دور را برای کاربرانی که هنوز با خط فرمان راحت نیستند، آسان‌تر می‌کند. نصب VNC روی سرور اوبونتو 20.04 مستلزم راه اندازی سرور VNC با TightVNC و اتصال ایمن از طریق یک تونل SSH است. سپس، از یک برنامه مشتری VNC در دستگاه محلی خود برای تعامل با سرور خود استفاده خواهید کرد.

اگر در حال توسعه یا استقرار برنامه شخصی خود بر روی سرور خود هستید، می توانید آن را در محیط های ایزوله و سبک که به عنوان کانتینر شناخته می شوند، اجرا کنید. یک مثال از این رویکرد استفاده از Docker Compose برای کانتینری کردن یک برنامه Laravel برای توسعه است. محیط‌های کانتینری قابل حمل، تکرارپذیر و یکبار مصرف هستند و می‌توان از آنها برای توسعه، آزمایش و استقرار برنامه‌های کاربردی در تولید استفاده کرد.

اگر می خواهید محتوای شخصی خود را مانند اسناد و تصاویر در مکانی متمرکز ذخیره کنید، Nextcloud را روی سرور اوبونتو 20.04 خود نصب کنید. همه ویژگی های Nextcloud منبع باز هستند و این نرم افزار به شما امکان می دهد داده های حساس خود را ایمن و کنترل کنید.

TensorFlow یک کتابخانه نرم افزار یادگیری ماشین منبع باز است. اغلب از TensorFlow برای آموزش شبکه های عصبی استفاده می شود. TensorFlow را بر روی سرور اوبونتو 20.04 خود نصب کنید تا شروع به ساخت پروژه های بینایی کامپیوتری، پردازش زبان طبیعی (NLP) و مدل سازی دنباله کنید.

Postfix یک عامل انتقال نامه منبع باز محبوب (MTA) است. Postfix را روی سرور اوبونتو 20.04 خود نصب کنید تا ایمیل را در یک سیستم لینوکس مسیریابی و تحویل دهید.

پشته نرم افزار LEMP را روی سرور اوبونتو 20.04 خود نصب کنید تا صفحات وب پویا و برنامه های کاربردی وب نوشته شده با PHP را ارائه دهد. با LEMP، صفحات وب توسط سرور Nginx ارائه می شوند، داده های Backend در پایگاه داده MySQL ذخیره می شوند و پردازش پویا توسط PHP انجام می شود. یک پشته “LAMP” را روی سرور اوبونتو 20.04 خود نصب کنید تا یک سرور بتواند میزبان وب سایت های پویا و برنامه های وب نوشته شده به زبان PHP باشد. داده های سایت در پایگاه داده MySQL ذخیره می شود و محتوای پویا توسط PHP پردازش می شود.

پایتون یک زبان برنامه نویسی انعطاف پذیر و همه کاره است که دارای نقاط قوت در اسکریپت نویسی، اتوماسیون، تجزیه و تحلیل داده ها، یادگیری ماشینی و توسعه back-end است. نحوه نصب پایتون بر روی سرور اوبونتو 20.04 و همچنین راه اندازی یک محیط برنامه نویسی را با این آموزش بیاموزید.

Elastic Stack مجموعه‌ای از نرم‌افزار متن‌باز است که توسط Elastic تولید شده است که امکان ثبت متمرکز را فراهم می‌کند. Elastic Stack را روی سرور Ubuntu 20.04 خود نصب کنید تا لاگ های تولید شده از هر منبع و با هر فرمتی را جستجو، تجزیه و تحلیل و تجسم کنید.

به طور کلی، اگر به دنبال سیستم عاملی هستید که به خوبی توسط ارائه دهندگان ابر پشتیبانی می شود، فوق العاده همه کاره است و منابع موجود از یک جامعه بزرگ را در اختیار دارد، اوبونتو یک انتخاب فوق العاده است. برای منابع بیشتر توسعه دهندگان مرتبط با اوبونتو 20.04، مقالات انجمن ما را بررسی کنید.

برچسب‌ها:اوبونتو 20.04اوبونتو چیستتنظیمات سرور اوبونتوخرید سرور لینوکسخرید سرورهای مجازیسرور Ubuntu 20.04سرور اوبونتو 20.04فروش سرورلینوکسنصب اوبونتو

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

  • behnam gol mohamadi