سرور مجازی

۶ مطلب با کلمه‌ی کلیدی «خرید سرور مجازی فرانسه» ثبت شده است

  • ۰
  • ۰

نحوه نصب متابیس در اوبونتو 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
  • ۰
  • ۰

نحوه راه اندازی پلتفرم Eclipse Theia Cloud IDE در vpsgol Kubernetes

ورود به سایت

معرفی

با حرکت ابزارهای توسعه‌دهنده به سمت ابر، ایجاد و پذیرش پلت‌فرم‌های Cloud IDE (محیط توسعه یکپارچه) در حال رشد است. Cloud IDE ها از هر نوع دستگاه مدرن از طریق مرورگرهای وب قابل دسترسی هستند و مزایای متعددی را برای سناریوهای همکاری بلادرنگ ارائه می دهند. کار در یک IDE ابری یک محیط توسعه و آزمایش یکپارچه را برای شما و تیمتان فراهم می کند، در حالی که ناسازگاری های پلت فرم را به حداقل می رساند. از آنجایی که آنها به طور بومی مبتنی بر فناوری‌های ابری هستند، می‌توانند از خوشه برای دستیابی به وظایفی استفاده کنند که می‌تواند تا حد زیادی از قدرت و قابلیت اطمینان یک کامپیوتر توسعه‌دهنده فراتر رود.

Eclipse Theia یک IDE ابری توسعه پذیر است که روی یک سرور راه دور اجرا می شود و از یک مرورگر وب قابل دسترسی است. از نظر بصری، به گونه‌ای طراحی شده است که شبیه به Microsoft Visual Studio Code به نظر برسد و رفتاری مشابه داشته باشد، به این معنی که از بسیاری از زبان‌های برنامه‌نویسی پشتیبانی می‌کند، طرح‌بندی انعطاف‌پذیری دارد و ترمینال یکپارچه دارد. آنچه Eclipse Theia را از سایر نرم افزارهای Cloud IDE جدا می کند، توسعه پذیری آن است. می توان آن را با استفاده از پسوندهای سفارشی تغییر داد، که به شما امکان می دهد یک IDE ابری متناسب با نیازهای خود ایجاد کنید.

در این آموزش، شما نسخه پیش‌فرض پلت‌فرم Eclipse Theia ابری IDE را در خوشه vpsgol Kubernetes خود راه‌اندازی می‌کنید و آن را در دامنه خود، با گواهی‌های Let’s Encrypt ایمن می‌کنید و از بازدیدکننده برای احراز هویت می‌خواهد. در پایان، Eclipse Theia را خواهید داشت که روی خوشه Kubernetes شما از طریق HTTPS در دسترس است و بازدیدکننده را ملزم به ورود به سیستم می‌کند.

پیش نیازها

  • یک خوشه vpsgol Kubernetes با اتصال شما به عنوان پیش فرض kubectl پیکربندی شده است. دستورالعمل های مربوط به نحوه پیکربندی kubectl در مرحله اتصال به خوشه خود هنگام ایجاد خوشه نشان داده می شود.
  • مدیریت بسته Helm 3 بر روی دستگاه محلی شما نصب شده است.
  • Nginx Ingress Controller با استفاده از Helm برای استفاده از ExternalDNS با منابع Ingress بر روی خوشه شما نصب شده است.
  • یک نام دامنه کاملاً ثبت شده این آموزش از theia.your_domain در سرتاسر استفاده خواهد کرد. می توانید یک نام دامنه را در Namecheap خریداری کنید، یک نام دامنه را به صورت رایگان در Freenom دریافت کنید، یا از ثبت کننده دامنه انتخابی خود استفاده کنید.

مرحله 1 – نصب و نمایش Eclipse Theia

برای شروع، Eclipse Theia را در خوشه vpsgol Kubernetes خود نصب خواهید کرد. سپس با استفاده از Nginx Ingress آن را در دامنه مورد نظر خود در معرض دید قرار خواهید داد.

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

kubectl delete -f hello-kubernetes-ingress.yaml

kubectl delete -f hello-kubernetes-first.yaml

kubectl delete -f hello-kubernetes-second.yaml

برای این آموزش، پیکربندی استقرار را در دستگاه محلی خود در فایلی به نام eclipse-theia.yaml ذخیره خواهید کرد. با استفاده از دستور زیر آن را ایجاد کنید:

nano eclipse-theia.yaml

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

eclipse-theia.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
---
apiVersion: v1
kind: Service
metadata:
 name: theia-next
 namespace: theia
spec:
 ports:
 - port: 80
   targetPort: 3000
 selector:
   app: theia-next
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: theia-next
  name: theia-next
  namespace: theia
spec:
  selector:
    matchLabels:
      app: theia-next
  replicas: 1
  template:
    metadata:
      labels:
        app: theia-next
    spec:
      containers:
      - image: francoisvans/theia-docker-test
        imagePullPolicy: Always
        name: theia-next
        ports:
        - containerPort: 3000

این پیکربندی یک فضای نام، یک استقرار، یک سرویس و یک ورودی را تعریف می کند. فضای نام تیا نامیده می شود و شامل تمام اشیای Kubernetes مربوط به Eclipse Theia است که از بقیه خوشه جدا شده اند. استقرار شامل یک نمونه از تصویر Theia Docker است که پورت 3000 روی کانتینر قرار دارد. این سرویس به دنبال Deployment می‌گردد و پورت کانتینر را به پورت HTTP معمولی 80 تغییر می‌دهد و به Eclipse Theia اجازه دسترسی درون خوشه‌ای را می‌دهد.

Ingress حاوی قانونی برای ارائه سرویس در پورت 80 به صورت خارجی در دامنه مورد نظر شما است. در حاشیه نویسی آن، شما مشخص می کنید که Nginx Ingress Controller باید برای پردازش درخواست استفاده شود. به یاد داشته باشید که دامنه مورد نظر خود را که به Load Balancer کلاستر خود اشاره کرده اید جایگزین theia.your_domain کنید، سپس فایل را ذخیره کرده و ببندید.

فایل را ذخیره کرده و از آن خارج شوید.

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

kubectl apply -f eclipse-theia.yaml

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

 

Output

namespace/theia created
ingress.networking.k8s.io/theia-next created
service/theia-next created
deployment.apps/theia-next created

می‌توانید با اجرای زیر، ایجاد غلاف Eclipse Theia را تماشا کنید:

kubectl get pods -w -n theia

خروجی به شکل زیر خواهد بود:

 

Output

NAME                          READY   STATUS    RESTARTS   AGE
theia-next-6f6b98dd4f-qknhb   1/1     Running   0          2m30s

پس از مدتی، وضعیت به RUNNING تبدیل می‌شود، به این معنی که Eclipse Theia را با موفقیت در کلاستر خود نصب کرده‌اید.

در مرورگر خود به دامنه خود بروید. رابط کاربری گرافیکی ویرایشگر Eclipse Theia پیش‌فرض را خواهید دید:

 

شما Eclipse Theia را در خوشه vpsgol Kubernetes خود مستقر کرده اید و با یک Ingress آن را در دامنه مورد نظر خود قرار داده اید. در مرحله بعد، با فعال کردن احراز هویت ورود، دسترسی به استقرار Eclipse Theia خود را ایمن خواهید کرد.

مرحله 2 – فعال کردن احراز هویت ورود به سیستم برای دامنه شما

در این مرحله، احراز هویت نام کاربری و رمز عبور را برای استقرار Eclipse Theia خود فعال می‌کنید. ابتدا با تنظیم لیستی از ترکیبات ورود معتبر با استفاده از ابزار htpasswd به این مهم دست خواهید یافت. سپس، یک راز Kubernetes حاوی آن لیست ایجاد می‌کنید و Ingress را برای احراز هویت بازدیدکنندگان بر اساس آن پیکربندی می‌کنید. در پایان، دامنه شما تنها زمانی قابل دسترسی خواهد بود که بازدیدکننده یک ترکیب نام کاربری و رمز عبور معتبر وارد کند. این امر از دسترسی مهمانان و سایر بازدیدکنندگان ناخواسته به Eclipse Theia جلوگیری می کند.

ابزار htpasswd از وب سرور آپاچی می آید و برای ایجاد فایل هایی استفاده می شود که لیست هایی از ترکیبات ورود را ذخیره می کنند. فرمت فایل‌های htpasswd یک نام کاربری: ترکیب hashed_password در هر خط است، که فرمتی است که Nginx Ingress Controller انتظار دارد لیست با آن مطابقت داشته باشد.

ابتدا حافظه پنهان بسته منیجر را به روز کنید:

sudo apt update

سپس htpasswd را با اجرای دستور زیر بر روی سیستم خود نصب کنید:

sudo apt install apache2-utils -y

شما لیست را در فایلی به نام auth ذخیره خواهید کرد. آن را با اجرا ایجاد کنید:

touch auth

این فایل باید auth نامیده شود زیرا کنترلر ورودی Nginx انتظار دارد که رمز حاوی کلیدی به نام data.auth باشد. اگر از دست رفته باشد، کنترل‌کننده وضعیت HTTP 503 Service Unavailable را برمی‌گرداند.

با اجرای دستور زیر یک ترکیب نام کاربری و رمز عبور به aut اضافه کنید:

htpasswd auth username

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

پس از اتمام کار، با اجرای دستور زیر یک راز جدید در Kubernetes با محتویات فایل ایجاد کنید:

kubectl create secret generic theia-basic-auth –from-file=auth -n theia

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

kubectl get secret theia-basic-auth -o yaml -n theia

خروجی به صورت زیر خواهد بود:

 

Output

apiVersion: v1
data:
  auth: ...
kind: Secret
metadata:
  creationTimestamp: "2021-12-31T17:16:29Z"
  name: theia-basic-auth
  namespace: theia
  resourceVersion: "32437"
  uid: 47461e23-e281-411b-acfd-cea82fcde41b
type: Opaque

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

nano eclipse-theia.yaml

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

eclipse-theia.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

ابتدا در حاشیه نویسی auth-type مشخص می کنید که نوع احراز هویت اولیه است. این بدان معنی است که Nginx از کاربر می خواهد که نام کاربری و رمز عبور را وارد کند. سپس، در auth-secret، مشخص می‌کنید که راز حاوی لیست ترکیبات معتبر theia-basic-auth است که به تازگی ایجاد کرده‌اید. حاشیه نویسی قلمرو اعتبار باقی مانده پیامی را مشخص می کند که به عنوان توضیحی در مورد اینکه چرا احراز هویت لازم است به کاربر نشان داده می شود. می توانید پیام موجود در این قسمت را به دلخواه تغییر دهید.

ذخیره کنید و فایل را ببندید.

برای انتشار تغییرات در کلاستر خود، دستور زیر را اجرا کنید:

kubectl apply -f eclipse-theia.yaml

خروجی را خواهید دید:

 

Output

namespace/theia unchanged
ingress.networking.k8s.io/theia-next configured
service/theia-next unchanged
deployment.apps/theia-next unchanged

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

شما احراز هویت اولیه ورود به سیستم را در Ingress خود با پیکربندی آن برای استفاده از رمز حاوی ترکیب نام کاربری و رمز عبور هش شده فعال کرده اید. در مرحله بعدی، با افزودن گواهی‌های TLS، دسترسی بیشتری را ایمن می‌کنید تا ترافیک بین شما و استقرار Eclipse Theia رمزگذاری شده باقی بماند.

مرحله 3 – اعمال مجوزهای HTTPS Let’s Encrypt

در مرحله بعد، نصب Eclipse Theia خود را با اعمال گواهینامه های Let’s Encrypt در Ingress خود، که Cert-Manager به طور خودکار ارائه می کند، ایمن می کنید. پس از تکمیل این مرحله، نصب Eclipse Theia شما از طریق HTTPS قابل دسترسی خواهد بود.

برای ویرایش eclipse-theia.yaml را باز کنید:

nano eclipse-theia.yaml

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

eclipse-theia.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - theia.your_domain
    secretName: theia-prod
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

ابتدا، letsencrypt-prod ClusterIssuer را که ایجاد کرده اید به عنوان بخشی از پیش نیازها به عنوان صادرکننده مشخص می کنید که برای ارائه گواهینامه برای این ورود استفاده می شود. سپس، در بخش tls، دامنه دقیقی را که باید ایمن شود، و همچنین نامی برای رازی که این گواهینامه ها را نگه می دارد، مشخص می کنید.

فایل را ذخیره کرده و از آن خارج شوید.

با اجرای دستور زیر تغییرات را در کلاستر خود اعمال کنید:

kubectl apply -f eclipse-theia.yaml

خروجی به صورت زیر خواهد بود:

 

Output

namespace/theia unchanged
ingress.networking.k8s.io/theia-next configured
service/theia-next unchanged
deployment.apps/theia-next unchanged

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

kubectl describe certificate theia-prod -n theia

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

 

Output

...
Events:
  Type    Reason        Age   From          Message
  ----    ------        ----  ----          -------
  Normal  GeneratedKey  42m   cert-manager  Generated a new private key
  Normal  Requested     42m   cert-manager  Created new CertificateRequest resource "theia-prod-3785736528"
  Normal  Issued        42m   cert-manager  Certificate issued successfully

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

شما Ingress را برای استفاده از گواهی‌های Let’s Encrypt پیکربندی کرده‌اید، بنابراین استقرار Eclipse Theia را ایمن‌تر می‌کنید. اکنون می توانید رابط کاربری پیش فرض Eclipse Theia را بررسی کنید.

مرحله 4 – استفاده از رابط Eclipse Theia

در این بخش، برخی از ویژگی های رابط Eclipse Theia را بررسی خواهید کرد.

در سمت چپ IDE، یک ردیف عمودی از چهار دکمه وجود دارد که متداول‌ترین ویژگی‌های مورد استفاده را در یک پانل کناری باز می‌کند.

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

پس از ایجاد یک فایل جدید از طریق منوی File، یک فایل خالی را خواهید دید که در یک تب جدید باز می شود. پس از ذخیره، می توانید نام فایل را در پانل کناری Explorer مشاهده کنید. برای ایجاد پوشه، روی نوار کناری Explorer راست کلیک کرده و روی New Folder کلیک کنید. می‌توانید یک پوشه را با کلیک کردن روی نام آن و همچنین کشیدن و رها کردن فایل‌ها و پوشه‌ها به قسمت‌های بالای سلسله مراتب گسترش دهید تا آنها را به مکان جدیدی منتقل کنید.

گزینه بعدی دسترسی به قابلیت جستجو و جایگزینی را فراهم می کند. به دنبال آن، مورد بعدی نمایی از سیستم های کنترل منبعی را که ممکن است از آنها استفاده می کنید، مانند Git ارائه می دهد.

نمای بعدی گزینه debugger است که تمام اقدامات رایج برای رفع اشکال در پنل را ارائه می دهد. می توانید پیکربندی های اشکال زدایی را در فایل launch.json ذخیره کنید.

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

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

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

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

kubectl delete -f eclipse-theia.yaml

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

نتیجه

اکنون Eclipse Theia، یک IDE ابری همه کاره، را روی خوشه vpsgol Kubernetes خود نصب کرده اید. شما آن را با یک گواهی رایگان Let’s Encrypt TLS ایمن کرده اید و نمونه ای را برای نیاز به ورود از بازدیدکننده تنظیم کرده اید. می توانید روی کد منبع و اسناد خود به صورت جداگانه کار کنید یا با تیم خود همکاری کنید.

 

 

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/

برچسب‌ها:ایجاد سرور مجازیخرید سرور مجازیخرید سرور مجازی فرانسهراه اندازی سرور مجازیسرور مجازینحوه راه اندازی پلتفرم Eclipse Theia Cloud IDEنصب Eclipse Theia

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده و اعتبارسنجی فرم های وب با Flask-WTF

ورود به سایت

معرفی

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

Flask یک چارچوب وب سبک وزن پایتون است که ابزارها و ویژگی های مفیدی را برای ایجاد برنامه های کاربردی وب در زبان پایتون ارائه می دهد. برای رندر و اعتبارسنجی فرم‌های وب به روشی ایمن و انعطاف‌پذیر در Flask، از Flask-WTF استفاده خواهید کرد، که یک پسوند Flask است که به شما کمک می‌کند از کتابخانه WTForms در برنامه Flask خود استفاده کنید.

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

WTForms همچنین از یک توکن CSRF برای محافظت در برابر حملات CSRF استفاده می کند، حملاتی که به مهاجم اجازه می دهد تا اقدامات ناخواسته را روی یک برنامه وب که در آن کاربر احراز هویت شده است، انجام دهد. یک حمله موفق CSRF می‌تواند کاربر را مجبور به انجام درخواست‌های تغییر حالت مانند انتقال وجه به حساب بانکی مهاجم در یک برنامه بانکی، تغییر آدرس ایمیل کاربر و غیره کند. اگر قربانی یک حساب کاربری مدیریتی باشد، CSRF می تواند کل برنامه وب را در معرض خطر قرار دهد.

در این آموزش، یک برنامه وب کوچک می سازید که نحوه رندر و اعتبارسنجی فرم های وب با استفاده از Flask-WTF را نشان می دهد. برنامه دارای صفحه ای برای نمایش دوره هایی است که در لیست پایتون ذخیره شده اند و صفحه فهرست دارای فرمی برای وارد کردن عنوان دوره، توضیحات، قیمت، در دسترس بودن و سطح آن (مبتدی، متوسط ​​یا پیشرفته) خواهد بود.

پیش نیازها

  • یک محیط برنامه نویسی محلی Python 3.
  • درک مفاهیم پایه فلاسک، مانند مسیرها، توابع مشاهده، و الگوها.
  • درک مفاهیم اولیه HTML برای آگاهی از پیشینه،
  • (اختیاری) درک استفاده از فرم های وب اولیه در Flask.

مرحله 1 – نصب Flask و Flask-WTF

در این مرحله، Flask و Flask-WTF را نصب می‌کنید که کتابخانه WTForms را نیز به صورت خودکار نصب می‌کند.

با فعال شدن محیط مجازی، از pip برای نصب Flask و Flask-WTF استفاده کنید:

pip install Flask Flask-WTF

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

Successfully installed Flask-2.0.2 Flask-WTF-1.0.0 Jinja2-3.0.3 MarkupSafe-2.0.1 WTForms-3.0.0 Werkzeug-2.0.2 click-8.0.3 itsdangerous-2.0.1

همانطور که می بینید، کتابخانه WTForms نیز به عنوان وابستگی بسته Flask-WTF نصب شده است. بقیه بسته ها وابسته به Flask هستند.

اکنون که بسته‌های پایتون مورد نیاز را نصب کرده‌اید، در مرحله بعد یک فرم وب راه‌اندازی می‌کنید.

مرحله 2 – تنظیم فرم ها

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

شما فیلدهای زیر را تنظیم خواهید کرد:

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

ابتدا یک فایل جدید به نام forms.py در پوشه flask_app خود باز کنید. این فایل دارای فرم هایی است که در برنامه شما نیاز دارید:

nano forms.py

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

flask_app/forms.py

from flask_wtf import FlaskForm
from wtforms import (StringField, TextAreaField, IntegerField, BooleanField,
                     RadioField)
from wtforms.validators import InputRequired, Length

برای ساخت یک فرم وب، یک زیر کلاس از کلاس پایه FlaskForm ایجاد می کنید که آن را از بسته flask_wtf وارد می کنید. همچنین باید فیلدهایی را که در فرم خود استفاده می کنید، که از بسته wtforms وارد می کنید، مشخص کنید.

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

  • StringField: یک ورودی متن.
  • TextAreaField: یک قسمت متنی.
  • IntegerField: فیلدی برای اعداد صحیح.
  • BooleanField: یک فیلد چک باکس.
  • RadioField: فیلدی برای نمایش لیستی از دکمه های رادیویی برای انتخاب کاربر.

در خط از wtforms.validators import InputRequired، Length، اعتبارسنجی‌ها را وارد می‌کنید تا در فیلدها استفاده کنید تا مطمئن شوید که کاربر داده‌های معتبری را ارسال می‌کند. InputRequired اعتبارسنجی است که از آن برای اطمینان از ارائه ورودی استفاده می کنید، و Length برای اعتبارسنجی طول یک رشته است تا اطمینان حاصل شود که دارای حداقل تعداد کاراکتر است یا اینکه از طول خاصی تجاوز نمی کند.

بعد، کلاس زیر را بعد از دستور import اضافه کنید:

flask_app/forms.py

class CourseForm(FlaskForm):
    title = StringField('Title', validators=[InputRequired(),
                                             Length(min=10, max=100)])
    description = TextAreaField('Course Description',
                                validators=[InputRequired(),
                                            Length(max=200)])
    price = IntegerField('Price', validators=[InputRequired()])
    level = RadioField('Level',
                       choices=['Beginner', 'Intermediate', 'Advanced'],
                       validators=[InputRequired()])
    available = BooleanField('Available', default='checked')

ذخیره کنید و فایل را ببندید.

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

شما اعتباردهنده‌ها را برای هر فیلد با ارسال فهرستی از اعتبارسنجی‌هایی که از ماژول wtforms.validators وارد می‌کنید، تعریف می‌کنید. فیلد عنوان، به عنوان مثال، دارای رشته «عنوان» به عنوان یک برچسب، و دو اعتباردهنده است:

  • InputRequired: برای نشان دادن اینکه فیلد نباید خالی باشد.
  • Length: دو آرگومان می گیرد. دقیقه روی 10 تنظیم شده است تا مطمئن شوید که عنوان حداقل 10 کاراکتر است و حداکثر روی 100 تنظیم شده است تا مطمئن شوید که از 100 کاراکتر تجاوز نمی کند.

فیلد ناحیه متن توضیحات دارای یک اعتبارسنجی InputRequired و یک اعتبار سنج طول با حداکثر پارامتر تنظیم شده روی 200 است، بدون مقدار برای پارامتر min، به این معنی که تنها شرط این است که از 200 کاراکتر تجاوز نکند.

به طور مشابه شما یک فیلد عدد صحیح ضروری برای قیمت دوره به نام قیمت تعریف می کنید.

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

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

برای اطلاعات بیشتر در مورد نحوه استفاده از کتابخانه WTForms، به صفحه Crash Course در مستندات WTForms مراجعه کنید. برای بررسی فیلدهای بیشتر به صفحه فیلدها و برای اعتبارسنجی داده‌های فرم به صفحه اعتبارسنجی‌ها برای اعتبارسنجی بیشتر مراجعه کنید.

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

مرحله 3 – نمایش فرم وب و دوره ها

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

با فعال شدن محیط برنامه نویسی و نصب Flask، فایلی به نام app.py را برای ویرایش در دایرکتوری flask_app خود باز کنید:

nano app.py

این فایل کلاس و راهنماهای لازم را از Flask و CourseForm را از فایل forms.py وارد می کند. شما فهرستی از دوره ها را می سازید، سپس فرم را نمونه سازی می کنید و آن را به یک فایل الگو منتقل می کنید. کد زیر را به app.py اضافه کنید:

flask_app/app.py

from flask import Flask, render_template, redirect, url_for
from forms import CourseForm

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your secret key'


courses_list = [{
    'title': 'Python 101',
    'description': 'Learn Python basics',
    'price': 34,
    'available': True,
    'level': 'Beginner'
    }]


@app.route('/', methods=('GET', 'POST'))
def index():
    form = CourseForm()
    return render_template('index.html', form=form)

ذخیره کنید و فایل را ببندید.

در اینجا شما موارد زیر را از Flask وارد می کنید:

  • کلاس Flask برای ایجاد یک نمونه برنامه Flask.
  • تابع render_template() برای رندر کردن قالب ایندکس.
  • تابع redirect() برای هدایت کاربر به صفحه دوره ها پس از اضافه شدن یک دوره جدید.
  • تابع url_for() برای ساخت URL.

ابتدا کلاس CourseForm() را از فایل forms.py وارد می کنید، سپس یک نمونه برنامه Flask به نام app ایجاد می کنید.

شما یک پیکربندی کلید مخفی را برای WTForms تنظیم می کنید تا از آن هنگام تولید یک نشانه CSRF برای ایمن سازی فرم های وب خود استفاده کنید. کلید مخفی باید یک رشته تصادفی طولانی باشد. برای اطلاعات بیشتر در مورد نحوه به دست آوردن یک کلید مخفی، مرحله 3 نحوه استفاده از فرم های وب در یک برنامه Flask را ببینید.

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

شما با استفاده از decorator ()app.route در تابع view index() یک مسیر / اصلی ایجاد می کنید. هر دو روش GET و POST HTTP را در پارامتر متدها می پذیرد. روش‌های GET برای بازیابی داده‌ها هستند و درخواست‌های POST برای ارسال داده‌ها به سرور، برای مثال از طریق یک فرم وب هستند. برای اطلاعات بیشتر، نحوه استفاده از فرم های وب در یک برنامه فلاسک را ببینید.

شما کلاس CourseForm() را که فرم وب را نشان می دهد نمونه سازی می کنید و نمونه را در متغیری به نام فرم ذخیره می کنید. سپس یک فراخوانی به تابع render_template() برمی‌گردانید و یک فایل الگو به نام index.html و نمونه فرم را ارسال می‌کنید.

برای نمایش فرم وب در صفحه فهرست، ابتدا یک الگوی پایه ایجاد می‌کنید که دارای تمام کدهای HTML اولیه است که سایر قالب‌ها نیز برای جلوگیری از تکرار کد استفاده می‌کنند. سپس فایل قالب index.html را که در تابع index() خود رندر کرده اید ایجاد می کنید. برای کسب اطلاعات بیشتر در مورد الگوها، به نحوه استفاده از الگوها در یک برنامه فلاسک مراجعه کنید.

یک پوشه templates در پوشه flask_app خود ایجاد کنید که در آن Flask الگوها را جستجو می کند، سپس یک فایل الگو به نام base.html را باز کنید، که الگوی پایه برای سایر الگوها خواهد بود:

mkdir templates
nano templates/base.html

کد زیر را در فایل base.html اضافه کنید تا الگوی پایه را با یک نوار ناوبری و یک بلوک محتوا ایجاد کنید:

flask_app/templates/base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %} {% endblock %} - FlaskApp</title>
    <style>
        nav a {
            color: #d64161;
            font-size: 3em;
            margin-left: 50px;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <nav>
        <a href="{{ url_for('index') }}">FlaskApp</a>
        <a href="#">About</a>
    </nav>
    <hr>
    <div class="content">
        {% block content %} {% endblock %}
    </div>
</body>
</html>

این الگوی پایه دارای تمام صفحه بخاری HTML است که برای استفاده مجدد در قالب های دیگر خود نیاز دارید. بلوک عنوان برای تعیین عنوان برای هر صفحه جایگزین می شود و بلوک محتوا با محتوای هر صفحه جایگزین می شود. نوار پیمایش دارای دو پیوند است، یکی برای صفحه فهرست که در آن از تابع کمکی url_for() برای پیوند به تابع view index() استفاده می کنید، و دیگری برای صفحه About در صورتی که یکی را در برنامه خود قرار دهید.

ذخیره کنید و فایل را ببندید.

سپس یک قالب به نام index.html باز کنید. این الگوی است که در فایل app.py به آن اشاره کردید:

nano templates/index.html

این فایل دارای فرم وب است که از طریق متغیر فرم به قالب index.html ارسال کرده اید. کد زیر را به آن اضافه کنید:

flask_app/templates/index.html

{% extends 'base.html' %}

{% block content %}
    <h1>{% block title %} Add a New Course {% endblock %}</h1>

    <form method="POST" action="/">
        {{ form.csrf_token }}
        <p>
            {{ form.title.label }}
            {{ form.title(size=20) }}
        </p>

        {% if form.title.errors %}
            <ul class="errors">
                {% for error in form.title.errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}

        <p>
            {{ form.description.label }}
        </p>
        {{ form.description(rows=10, cols=50) }}

        {% if form.description.errors %}
            <ul class="errors">
                {% for error in form.description.errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}

        <p>
            {{ form.price.label }}
            {{ form.price() }}
        </p>

        {% if form.price.errors %}
            <ul class="errors">
                {% for error in form.price.errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}

        <p>
            {{ form.available() }} {{ form.available.label }}
        </p>

        {% if form.available.errors %}
            <ul class="errors">
                {% for error in form.available.errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}

        <p>
            {{ form.level.label }}
            {{ form.level() }}
        </p>

        {% if form.level.errors %}
            <ul class="errors">
                {% for error in form.level.errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}

        <p>
            <input type="submit" value="Add">
        </p>
    </form>

{% endblock %}

ذخیره کنید و فایل را ببندید.

شما قالب پایه را گسترش می دهید و عنوانی را در تگ <h1> تنظیم می کنید. سپس فیلدهای فرم وب را در داخل تگ <form> رندر می‌دهید، روش آن را روی POST و عمل را روی مسیر اصلی / که صفحه فهرست است، تنظیم می‌کنید. ابتدا توکن CSRF را که WTForms برای محافظت از فرم شما در برابر حملات CSRF استفاده می کند با استفاده از خط {{ ​​form.csrf_token }} رندر می کنید. این توکن با بقیه داده های فرم به سرور ارسال می شود. به خاطر داشته باشید که همیشه این نشانه را برای ایمن سازی فرم های خود رندر کنید.

شما هر فیلد را با استفاده از syntax form.field() و برچسب آن را با استفاده از syntax form.field.label رندر می‌دهید. می توانید آرگومان هایی را به فیلد ارسال کنید تا نحوه نمایش آن را کنترل کنید. به عنوان مثال، اندازه فیلد ورودی عنوان را در {{ form.title(size=20) }} تنظیم می‌کنید، و تعداد ردیف‌ها و ستون‌ها را برای ناحیه متن توضیحات از طریق ردیف‌ها و ستون‌های پارامترها به همان شیوه تنظیم می‌کنید. به طور معمول در HTML انجام می شود. می توانید از همین روش برای ارسال ویژگی های اضافی HTML به فیلدی مانند ویژگی class برای تنظیم یک کلاس CSS استفاده کنید.

خطاهای اعتبارسنجی را با استفاده از نحو if form.field.errors بررسی می کنید. اگر فیلدی دارای خطا باشد، آنها را با یک حلقه for حلقه زده و در لیستی در زیر فیلد نمایش می دهید.

در حالی که در دایرکتوری flask_app خود با محیط مجازی فعال هستید، با استفاده از متغیر محیطی FLASK_APP به Flask در مورد برنامه (در این مورد app.py) بگویید. سپس متغیر محیطی FLASK_ENV را روی توسعه تنظیم کنید تا برنامه در حالت توسعه اجرا شود و به دیباگر دسترسی پیدا کنید. برای اطلاعات بیشتر در مورد اشکال زدا Flask، به نحوه رسیدگی به خطاها در یک برنامه فلاسک مراجعه کنید. برای انجام این کار از دستورات زیر استفاده کنید (در ویندوز به جای صادرات از set استفاده کنید):

export FLASK_APP=app
export FLASK_ENV=development

بعد، برنامه را اجرا کنید:

flask run

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

http://127.0.0.1:5000/

فرم وب را در صفحه فهرست نمایش داده می‌شوید:

سعی کنید فرم را بدون پر کردن عنوان ارسال کنید. یک پیغام خطایی خواهید دید که به شما اطلاع می دهد که عنوان مورد نیاز است. با ارسال داده‌های نامعتبر (مانند عنوان کوتاه کمتر از 10 کاراکتر یا توضیحی بیش از 200 نویسه) فرم را آزمایش کنید تا پیام‌های خطای دیگر را مشاهده کنید.

پر کردن فرم با داده های معتبر تا کنون هیچ کاری انجام نمی دهد زیرا کدی ندارید که ارسال فرم را مدیریت کند. بعداً کد آن را اضافه خواهید کرد.

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

سرور توسعه را در حال اجرا بگذارید و پنجره ترمینال دیگری را باز کنید.

سپس، app.py را باز کنید تا مسیر دوره ها را اضافه کنید:

nano app.py

مسیر زیر را در انتهای فایل اضافه کنید:

flask_app/app.py

# ...

@app.route('/courses/')
def courses():
    return render_template('courses.html', courses_list=courses_list)

ذخیره کنید و فایل را ببندید.

این مسیر الگویی به نام courses.html را ارائه می کند و آن را در لیست courses_list قرار می دهد.

سپس قالب courses.html را برای نمایش دوره ها ایجاد کنید:

nano templates/courses.html

کد زیر را به آن اضافه کنید:

flask_app/templates/courses.html

{% extends 'base.html' %}

{% block content %}
    <h1>{% block title %} Courses {% endblock %}</h1>
    <hr>
    {% for course in courses_list %}
        <h2> {{ course['title'] }} </h2>
        <h4> {{ course['description'] }} </h4>
        <p> {{ course['price'] }}$ </p>
        <p><i>({{ course['level'] }})</i></p>
        <p>Availability:
            {% if course['available'] %}
                Available
            {% else %}
                Not Available
            {% endif %}</p>
        <hr>
    {% endfor %}
{% endblock %}

ذخیره کنید و فایل را ببندید.

شما یک عنوان و حلقه را از طریق آیتم های لیست courses_list تنظیم می کنید. عنوان را در تگ <h2>، توضیحات را در تگ <h4> و قیمت و سطح دوره را در تگ <p> نمایش می دهید.
شما بررسی می کنید که آیا دوره با استفاده از شرط اگر دوره[‘available’] در دسترس است یا خیر. اگر دوره در دسترس باشد، متن «در دسترس» و اگر دوره در دسترس نباشد، متن «در دسترس نیست» را نمایش می‌دهید.

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

http://127.0.0.1:5000/courses/

صفحه ای را مشاهده می کنید که یک دوره در آن نمایش داده می شود، زیرا تا کنون فقط یک دوره در لیست دوره های خود دارید:

سپس، base.html را باز کنید تا پیوندی به صفحه دوره ها در نوار پیمایش اضافه کنید:

nano templates/base.html

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

flask_app/templates/base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %} {% endblock %} - FlaskApp</title>
    <style>
        nav a {
            color: #d64161;
            font-size: 3em;
            margin-left: 50px;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <nav>
        <a href="{{ url_for('index') }}">FlaskApp</a>
        <a href="{{ url_for('courses') }}">Courses</a>
        <a href="#">About</a>
    </nav>
    <hr>
    <div class="content">
        {% block content %} {% endblock %}
    </div>
</body>
</html>

ذخیره کنید و فایل را ببندید.

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

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

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

مرحله 4 – دسترسی به داده های فرم

در این مرحله، به داده‌هایی که کاربر ارسال می‌کند دسترسی خواهید داشت، آن‌ها را تأیید می‌کنید و به لیست دوره‌ها اضافه می‌کنید.

برای اضافه کردن کد برای مدیریت داده‌های فرم وب در داخل تابع index() app.py را باز کنید:

nano app.py

تابع index() را به شکل زیر ویرایش کنید:

flask_app/app.py

# ...
@app.route('/', methods=('GET', 'POST'))
def index():
    form = CourseForm()
    if form.validate_on_submit():
        courses_list.append({'title': form.title.data,
                             'description': form.description.data,
                             'price': form.price.data,
                             'available': form.available.data,
                             'level': form.level.data
                             })
        return redirect(url_for('courses'))
    return render_template('index.html', form=form)

ذخیره کنید و فایل را ببندید.
در اینجا، متد ()validate_on_submit را روی شی فرم فراخوانی می‌کنید، که بررسی می‌کند که درخواست یک درخواست POST است و اعتبارسنجی‌هایی را که برای هر فیلد پیکربندی کرده‌اید اجرا می‌کند. اگر حداقل یکی از اعتباردهنده ها خطا را برگرداند، شرط False خواهد بود و هر خطا در زیر فیلدی که باعث آن شده است نمایش داده می شود.

اگر داده های فرم ارسالی معتبر باشد، شرط True است و کد زیر عبارت if اجرا می شود. شما یک فرهنگ لغت دوره می سازید و از روش append برای اضافه کردن دوره جدید به لیست courses_list استفاده می کنید. شما با استفاده از syntax form.field.data به مقدار هر فیلد دسترسی دارید. پس از افزودن فرهنگ لغت دوره جدید به لیست دوره ها، کاربر را به صفحه دوره ها هدایت می کنید.

با اجرای سرور توسعه، از صفحه فهرست بازدید کنید:

http://127.0.0.1:5000/

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

نتیجه

شما یک برنامه Flask ساخته اید که دارای فرم وب است که با استفاده از پسوند Flask-WTF و کتابخانه WTForms ساخته اید. این فرم دارای چندین نوع فیلد برای دریافت داده ها از کاربر، تأیید اعتبار با استفاده از اعتبار سنجی های ویژه WTForms و افزودن آن به یک فروشگاه داده است.

 

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
  • ۰
  • ۰

نحوه پیکربندی Suricata به عنوان یک سیستم پیشگیری از نفوذ (IPS) در راکی لینوکس 8

معرفی

در این آموزش نحوه پیکربندی حالت داخلی سیستم پیشگیری از نفوذ (IPS) Suricata را در راکی ​​لینوکس 8 خواهید آموخت. به طور پیش فرض Suricata به گونه ای پیکربندی شده است که به عنوان یک سیستم تشخیص نفوذ (IDS) اجرا شود، که فقط هشدارها را تولید می کند و ترافیک مشکوک را ثبت می کند. هنگامی که حالت IPS را فعال می کنید، Suricata می تواند به طور فعال ترافیک شبکه مشکوک را علاوه بر ایجاد هشدار برای تجزیه و تحلیل بیشتر، حذف کند.

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

در قسمت اول این آموزش، امضاهایی را که نصب و فعال کرده اید بررسی می کنید. همچنین یاد خواهید گرفت که چگونه امضاهای خود را وارد کنید. هنگامی که بدانید از کدام امضاها می خواهید در حالت IPS استفاده کنید، عملکرد پیش فرض آنها را به حذف یا رد ترافیک تبدیل می کنید. با امضای خود، یاد خواهید گرفت که چگونه ترافیک شبکه را از طریق Suricata با استفاده از netfilter NFQUEUE iptables target ارسال کنید و سپس مقداری ترافیک شبکه نامعتبر ایجاد کنید تا اطمینان حاصل کنید که Suricata آن را همانطور که انتظار می رود حذف می کند.

پیش نیازها

  •  Suricata را روی سرور Rocky Linux 8 اجرا کنید.
  • همچنین باید مجموعه قوانین باز ET را با استفاده از دستور suricata-update دانلود کرده و در امضاهای Suricata خود قرار دهید.
  • خط فرمان jq ابزار پردازش JSON. اگر آن را از آموزش قبلی نصب نکرده اید، می توانید با استفاده از دستور dnf این کار را انجام دهید:

sudo dnf install jq

 

مرحله 1 – شامل امضاهای سفارشی

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

ابتدا، بیایید IP های عمومی سرور خود را پیدا کنیم تا بتوانید از آنها در امضاهای سفارشی خود استفاده کنید. برای پیدا کردن IP های خود می توانید از دستور ip استفاده کنید:

ip -brief address show

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

 
Output
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             203.0.113.0.5/20 10.20.0.5/16 2001:DB8::1/32 fe80::94ad:d4ff:fef9:cee0/64
eth1             UP             10.137.0.2/16 fe80::44a2:ebff:fe91:5187/64

آدرس(های) IP عمومی شما مشابه آی پی های هایلایت شده 203.0.113.0.5 و 2001:DB8::1/32 در خروجی خواهد بود.

اکنون اجازه دهید امضای سفارشی زیر را برای اسکن ترافیک SSH به پورت های غیر SSH ایجاد کنیم و آن را در فایلی به نام /var/lib/suricata/rules/local.rules قرار دهیم. فایل را با nano یا ویرایشگر دلخواه خود باز کنید:

sudo vi /var/lib/suricata/rules/local.rules

امضای زیر را کپی و پیست کنید:

Invalid SSH Traffic Signature
alert ssh any any -> 203.0.113.0.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; flow:to_client, not_established; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; flow:to_client, not_established; classtype: misc-attack; target: dest_ip; sid:1000001;)

آدرس IP عمومی سرور خود را به جای آدرس های 203.0.113.5 و 2001:DB8::1/32 در قانون جایگزین کنید. اگر از IPv6 استفاده نمی کنید، می توانید از افزودن آن امضا در این قوانین و قوانین زیر صرفنظر کنید.

بسته به شبکه و برنامه های خود می توانید به افزودن امضاهای سفارشی به این فایل local.rules ادامه دهید. به عنوان مثال، اگر می خواهید در مورد ترافیک HTTP به پورت های غیر استاندارد هشدار دهید، می توانید از امضاهای زیر استفاده کنید:

HTTP traffic on non-standard port signature
alert http any any -> 203.0.113.0.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000003;)

برای افزودن امضایی که ترافیک TLS را به پورت هایی غیر از 443 پیش فرض برای سرورهای وب بررسی می کند، موارد زیر را اضافه کنید:

TLS traffic on non-standard port signature
alert tls any any -> 203.0.113.0.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000004;)
alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; flow:to_client, not_established; classtype:misc-activity; sid:1000005;)

پس از تکمیل امضا، فایل را ذخیره کرده و ببندید. اگر از vi استفاده می کنید، ESC و سپس 😡 و سپس ENTER را برای ذخیره و خروج فشار دهید.

اکنون که تعدادی امضای سفارشی تعریف کرده‌اید، فایل پیکربندی Suricata /etc/suricata/suricata.yaml را با استفاده از nano یا ویرایشگر دلخواه خود ویرایش کنید تا آنها را در بر بگیرد:

sudo vi /etc/suricata/suricata.yaml

فایل های قانون را پیدا کنید: بخشی از پیکربندی. اگر از vi استفاده می کنید، 1879gg را برای رفتن به خط وارد کنید. مکان دقیق فایل شما ممکن است متفاوت باشد، اما شما باید در ناحیه کلی فایل قرار داشته باشید.

بخش را ویرایش کنید و خط برجسته شده زیر را اضافه کنید – local.rules:

/etc/suricata/suricata.yaml
. . .
rule-files:
  - suricata.rules
  - local.rules
. . .

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

sudo suricata -T -c /etc/suricata/suricata.yaml -v

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

هنگامی که از امضاهایی که با استفاده از ابزار suricata-update ایجاد یا اضافه کرده اید راضی شدید، می توانید به مرحله بعدی بروید، جایی که عملکرد پیش فرض امضاهای خود را از هشدار یا ثبت به حذف فعال ترافیک تغییر دهید.

مرحله 2 – پیکربندی اقدامات امضا

اکنون که امضاهای سفارشی خود را آزمایش کرده‌اید و با Suricata کار می‌کنید، می‌توانید عمل را به حذف یا رد تغییر دهید. وقتی Suricata در حالت IPS کار می کند، این اقدامات به طور فعال ترافیک نامعتبر را برای هر امضای منطبق مسدود می کند.

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

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

فایل /var/lib/suricata/rules/local.rules خود را با استفاده از nano یا ویرایشگر دلخواه خود باز کنید و عمل هشدار را در ابتدای هر خط در فایل تغییر دهید تا رها شود:

sudo vi /var/lib/suricata/rules/local.rules

/var/lib/suricata/rules/local.rules
drop ssh any any -> 203.0.113.0.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
drop ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)

مرحله بالا را برای هر گونه امضا در /var/lib/suricata/rules/suricata.rules که می‌خواهید به حالت رها یا رد تبدیل کنید، تکرار کنید.

هنگامی که همه امضاها را با عملکردی که می خواهید انجام دهند پیکربندی کردید، مرحله بعدی پیکربندی مجدد و سپس راه اندازی مجدد Suricata در حالت IPS است.

مرحله 3 – فعال کردن حالت nfqueue

Suricata به طور پیش فرض در حالت IDS اجرا می شود، به این معنی که به طور فعال ترافیک شبکه را مسدود نمی کند. برای تغییر به حالت IPS، باید فایل پیکربندی /etc/sysconfig/suricata Suricata را ویرایش کنید.

فایل را در nano یا ویرایشگر دلخواه خود باز کنید:

sudo vi /etc/sysconfig/suricata

خط OPTIONS=”-i eth0 –user suricata” را پیدا کنید و با اضافه کردن یک # به ابتدای خط آن را نظر دهید. سپس یک خط جدید OPTIONS=”-q 0 -vvv –user suricata” اضافه کنید که به Suricata می گوید در حالت IPS اجرا شود.

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

/etc/sysconfig/suricata
. . .
# OPTIONS="-i eth0 --user suricata"
OPTIONS="-q 0 -vvv --user suricata"
. . .

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

sudo systemctl restart suricata.service

وضعیت Suricata را با استفاده از systemctl بررسی کنید:

sudo systemctl status suricata.service

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

 
Output
● suricata.service - Suricata Intrusion Detection Service
   Loaded: loaded (/usr/lib/systemd/system/suricata.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-12-14 16:52:07 UTC; 6s ago
     Docs: man:suricata(1)
  Process: 44256 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS)
 Main PID: 44258 (Suricata-Main)
    Tasks: 10 (limit: 11188)
   Memory: 52.8M
   CGroup: /system.slice/suricata.service
           └─44258 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -q 0 -vvv --user suricata

. . .
Dec 14 16:52:07 suricata suricata[44258]: 14/12/2021 -- 16:52:07 - <Notice> - all 4 packet processing threads, 4 management threads initialized, engine started.

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

با این تغییر اکنون در مرحله بعد آماده ارسال ترافیک به Suricata با استفاده از Firewalld هستید.

مرحله 4 – پیکربندی فایروالد برای ارسال ترافیک به Suricata

اکنون که Suricata را برای پردازش ترافیک در حالت IPS پیکربندی کرده اید، گام بعدی هدایت بسته های ورودی به Suricata است. اگر آموزش های پیش نیاز این مجموعه را دنبال کرده اید و از سیستم Rocky Linux 8 استفاده می کنید، باید Firewalld را نصب و فعال کنید.

برای افزودن قوانین لازم برای Suricata به فایروالد، باید دستورات زیر را اجرا کنید:

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter INPUT 0 -p tcp –dport 22 -j NFQUEUE –queue-bypass

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter OUTPUT 0 -p tcp –sport 22 -j NFQUEUE –queue-bypass

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

با استفاده از دستورات زیر قوانین مشابهی را برای IPv6 اضافه کنید:

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter INPUT 0 -p tcp –dport 22 -j NFQUEUE –queue-bypass

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter OUTPUT 0 -p tcp –sport 22 -j NFQUEUE –queue-bypass

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

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter FORWARD 0 -j NFQUEUE

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter FORWARD 0 -j NFQUEUE

دو قانون نهایی INPUT و OUTPUT تمام ترافیک باقیمانده را که ترافیک SSH نیستند برای پردازش به Suricata ارسال می کند.

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter INPUT 1 -j NFQUEUE

sudo firewall-cmd –permanent –direct –add-rule ipv4 filter OUTPUT 1 -j NFQUEUE

دستورات را برای ترافیک IPv6 تکرار کنید:

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter INPUT 1 -j NFQUEUE

sudo firewall-cmd –permanent –direct –add-rule ipv6 filter OUTPUT 1 -j NFQUEUE

اکنون فایروالد را مجدداً بارگیری کنید تا قوانین پایدار بماند:

sudo firewall-cmd –reload

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

آخرین مرحله در این آموزش این است که تأیید کنید Suricata ترافیک را به درستی حذف می کند.

مرحله 5 – تست ترافیک نامعتبر

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

امضای sid:2100498 را از آموزش قبلی به یاد بیاورید، که در این مثال برای رها کردن بسته های منطبق اصلاح شده است:

sid:2100498
drop ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)

قانون را در فایل /var/lib/suricata/rules/suricata.rules خود پیدا کرده و ویرایش کنید تا اگر امضا را در آنجا دارید، از عمل drop استفاده کنید. در غیر این صورت، قانون را به فایل /var/lib/suricata/rules/local.rules خود اضافه کنید.

سیگنال SIGUSR2 را برای Suricata ارسال کنید تا امضاهایش را دوباره بارگیری کند:

sudo kill -usr2 $(pidof suricata)

حالا قانون را با استفاده از curl تست کنید:

curl –max-time 5 http://testmynids.org/uid/index.html

باید خطایی دریافت کنید که زمان درخواست به پایان رسیده است، که نشان می دهد Suricata پاسخ HTTP را مسدود کرده است:

 
Output
curl: (28) Operation timed out after 5000 milliseconds with 0 out of 39 bytes received

می‌توانید تأیید کنید که Suricata پاسخ HTTP را با استفاده از jq برای بررسی فایل eve.log حذف کرده است:

sudo jq ‘select(.alert .signature_id==2100498)’ /var/log/suricata/eve.json

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

 
Output
{
. . .
  "community_id": "1:SbOgFh2T3DZvwsoyMH4xfxOoVas=",
  "alert": {
    "action": "blocked",
    "gid": 1,
    "signature_id": 2100498,
    "rev": 7,
    "signature": "GPL ATTACK_RESPONSE id check returned root",
    "category": "Potentially Bad Traffic",
    "severity": 2,
    "metadata": {
      "created_at": [
        "2010_09_23"
      ],
      "updated_at": [
        "2010_09_23"
      ]
    }
  },
  "http": {
    "hostname": "testmynids.org",
    "url": "/uid/index.html",
    "http_user_agent": "curl/7.61.1",
    "http_content_type": "text/html",
    "http_method": "GET",
    "protocol": "HTTP/1.1",
    "status": 200,
    "length": 39
  },
. . .

خط برجسته “اقدام”: “blocked” تأیید می کند که امضا مطابقت دارد و Suricata درخواست HTTP آزمایشی را رد یا رد کرده است.

نتیجه

در این آموزش شما Suricata را برای مسدود کردن ترافیک شبکه مشکوک با استفاده از حالت IPS داخلی خود در راکی لینوکس 8 پیکربندی کرده‌اید. همچنین امضاهای سفارشی را برای بررسی و مسدود کردن ترافیک SSH، HTTP و TLS در پورت‌های غیر استاندارد اضافه کرده‌اید. برای گره زدن همه چیز به هم، قوانین فایروال را نیز برای هدایت ترافیک از طریق Suricata برای پردازش اضافه کردید.

اکنون که Suricata را در حالت IPS نصب و پیکربندی کرده‌اید و می‌توانید امضاهای خود را بنویسید که ترافیک مشکوک را هشدار می‌دهد یا آن را رها می‌کند، می‌توانید به نظارت بر سرورها و شبکه‌های خود ادامه دهید و امضاهای خود را اصلاح کنید.

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

 

 

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