سرور مجازی

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

  • ۰
  • ۰

نحوه نصب Nginx در اوبونتو 20.04

ورود به سایت

معرفی

Nginx یکی از محبوب ترین وب سرورها در جهان است و مسئولیت میزبانی برخی از بزرگترین و پربازدیدترین سایت های اینترنت را بر عهده دارد. این یک انتخاب سبک وزن است که می تواند به عنوان وب سرور یا پروکسی معکوس استفاده شود.

در این راهنما، نحوه نصب Nginx بر روی سرور اوبونتو 20.04، تنظیم فایروال، مدیریت فرآیند Nginx و راه اندازی بلوک های سرور برای میزبانی بیش از یک دامنه از یک سرور واحد را مورد بحث قرار خواهیم داد.

پیش نیازها

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

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

مرحله 1 – نصب Nginx

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

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

sudo apt update

sudo apt install nginx

پس از پذیرش رویه، apt Nginx و هر گونه وابستگی مورد نیاز را روی سرور شما نصب خواهد کرد.

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

قبل از آزمایش Nginx، نرم افزار فایروال باید تنظیم شود تا امکان دسترسی به سرویس فراهم شود. Nginx پس از نصب خود را به عنوان یک سرویس در ufw ثبت می‌کند و اجازه دسترسی به Nginx را آسان می‌کند.

پیکربندی های برنامه ای را که ufw می داند چگونه با آنها کار کند با تایپ کردن فهرست کنید:

sudo ufw app list

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

 

Output

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

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

  • Nginx Full: این نمایه هم پورت 80 (ترافیک وب عادی و رمزگذاری نشده) و هم پورت 443 (ترافیک رمزگذاری شده TLS/SSL) را باز می کند.
  • Nginx HTTP: این نمایه فقط پورت 80 را باز می کند (ترافیک وب عادی و رمزگذاری نشده)
  • Nginx HTTPS: این نمایه فقط پورت 443 را باز می کند (ترافیک رمزگذاری شده TLS/SSL)

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

شما می توانید این را با تایپ کردن فعال کنید:

sudo ufw allow ‘Nginx HTTP’

می توانید با تایپ کردن این تغییر را تأیید کنید:

sudo ufw status

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

 

Output

Status: active

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

مرحله 3 – وب سرور خود را بررسی کنید

در پایان مراحل نصب، اوبونتو 20.04 Nginx را راه اندازی می کند. وب سرور باید از قبل راه اندازی شده باشد.

می‌توانیم با تایپ کردن:

systemctl status nginx

 

Output

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-20 16:08:19 UTC; 3 days ago
     Docs: man:nginx(8)
 Main PID: 2369 (nginx)
    Tasks: 2 (limit: 1153)
   Memory: 3.5M
   CGroup: /system.slice/nginx.service
           ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─2380 nginx: worker process

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

می‌توانید با پیمایش به آدرس IP سرور خود، به صفحه فرود پیش‌فرض Nginx دسترسی پیدا کنید تا تأیید کنید که نرم‌افزار به درستی اجرا می‌شود. اگر آدرس IP سرور خود را نمی دانید، می توانید آن را با استفاده از ابزار icanhazip.com پیدا کنید، که آدرس IP عمومی شما را همانطور که از مکان دیگری در اینترنت دریافت کرده اید به شما می دهد:

curl -4 icanhazip.com

وقتی آدرس IP سرور خود را دارید، آن را در نوار آدرس مرورگر خود وارد کنید:

http://your_server_ip

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

اگر در این صفحه هستید، سرور شما به درستی کار می کند و آماده مدیریت است.

مرحله 4 – مدیریت فرآیند Nginx

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

برای متوقف کردن وب سرور خود، تایپ کنید:

sudo systemctl stop nginx

برای راه اندازی وب سرور در صورت توقف، تایپ کنید:

sudo systemctl start nginx

برای توقف و سپس شروع مجدد سرویس، تایپ کنید:

sudo systemctl restart nginx

اگر فقط تغییرات پیکربندی را انجام می دهید، Nginx اغلب می تواند بدون حذف اتصالات، بارگیری مجدد کند. برای انجام این کار، تایپ کنید:

sudo systemctl reload nginx

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

sudo systemctl disable nginx

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

sudo systemctl enable nginx

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

مرحله 5 – راه اندازی بلوک های سرور (توصیه می شود)

هنگام استفاده از وب سرور Nginx، بلوک های سرور (مشابه میزبان های مجازی در آپاچی) می توانند برای کپسوله کردن جزئیات پیکربندی و میزبانی بیش از یک دامنه از یک سرور استفاده شوند. ما دامنه ای به نام your_domain راه اندازی خواهیم کرد، اما شما باید آن را با نام دامنه خود جایگزین کنید.

Nginx در اوبونتو 20.04 دارای یک بلوک سرور است که به طور پیش فرض فعال شده است که برای ارائه اسناد خارج از دایرکتوری در /var/www/html پیکربندی شده است. در حالی که این برای یک سایت خوب کار می کند، اگر چندین سایت را میزبانی کنید، می تواند سخت شود. به جای تغییر /var/www/html، بیایید یک ساختار دایرکتوری در /var/www برای سایت your_domain خود ایجاد کنیم، و در صورت عدم مطابقت با درخواست مشتری، /var/www/html را به عنوان دایرکتوری پیش‌فرض باقی می‌گذاریم تا ارائه شود. سایت های دیگر

دایرکتوری برای your_domain به صورت زیر ایجاد کنید، با استفاده از پرچم -p برای ایجاد هر دایرکتوری والد ضروری:

sudo mkdir -p /var/www/your_domain/html

سپس، مالکیت دایرکتوری را با متغیر محیطی $USER اختصاص دهید:

sudo chown -R $USER:$USER /var/www/your_domain/html

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

sudo chmod -R 755 /var/www/your_domain

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

nano /var/www/your_domain/html/index.html

در داخل، نمونه HTML زیر را اضافه کنید:

/var/www/your_domain/html/index.html

<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

با فشار دادن Ctrl+X برای خروج، فایل را ذخیره کرده و ببندید، سپس وقتی از شما خواسته شد که ذخیره کنید، Y و سپس Enter را فشار دهید.

برای اینکه Nginx بتواند این محتوا را ارائه دهد، لازم است یک بلوک سرور با دستورالعمل های صحیح ایجاد کنید. به جای اینکه مستقیماً فایل پیکربندی پیش‌فرض را تغییر دهیم، بیایید یک فایل جدید در /etc/nginx/sites-available/your_domain ایجاد کنیم:

sudo nano /etc/nginx/sites-available/your_domain

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

/etc/nginx/sites-available/your_domain

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

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

توجه داشته باشید که ما پیکربندی root را به دایرکتوری جدید خود و server_name را به نام دامنه خود به روز کرده ایم.

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

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

اکنون دو بلوک سرور برای پاسخگویی به درخواست‌ها بر اساس دستورالعمل‌های listen و server_name فعال و پیکربندی شده‌اند (شما می‌توانید در مورد نحوه پردازش Nginx این دستورالعمل‌ها را در اینجا بیشتر بخوانید):

your_domain: به درخواست های your_domain و www.your_domain پاسخ می دهد.
پیش فرض: به هر درخواستی در پورت 80 که با دو بلوک دیگر مطابقت ندارد پاسخ می دهد.
برای جلوگیری از مشکل احتمالی حافظه سطل هش که ممکن است در اثر افزودن نام سرور اضافی ایجاد شود، لازم است یک مقدار واحد را در فایل /etc/nginx/nginx.conf تنظیم کنید. فایل را باز کنید:

sudo nano /etc/nginx/nginx.conf

دستور server_names_hash_bucket_size را پیدا کنید و برای لغو نظر خط، نماد # را بردارید. اگر از nano استفاده می‌کنید، می‌توانید با فشردن CTRL و w به سرعت کلمات موجود در فایل را جستجو کنید.

/etc/nginx/nginx.conf

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

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

در مرحله بعد، آزمایش کنید تا مطمئن شوید که در هیچ یک از فایل های Nginx شما خطای نحوی وجود ندارد:

sudo nginx -t

اگر مشکلی وجود ندارد، Nginx را مجددا راه اندازی کنید تا تغییرات شما فعال شود:

sudo systemctl restart nginx

Nginx اکنون باید نام دامنه شما را ارائه دهد. می توانید این را با رفتن به http://your_domain آزمایش کنید، جایی که باید چیزی شبیه به این را ببینید:

مرحله 6 – آشنایی با فایل ها و دایرکتوری های مهم Nginx

اکنون که می دانید چگونه خود سرویس Nginx را مدیریت کنید، باید چند دقیقه وقت بگذارید تا با چند فهرست و فایل مهم آشنا شوید.

محتوا

/var/www/html: محتوای واقعی وب، که به طور پیش‌فرض فقط از صفحه پیش‌فرض Nginx تشکیل شده است که قبلاً دیده‌اید، خارج از فهرست /var/www/html ارائه می‌شود. این را می توان با تغییر فایل های پیکربندی Nginx تغییر داد.

پیکربندی سرور

  • /etc/nginx: دایرکتوری پیکربندی Nginx. همه فایل های پیکربندی Nginx در اینجا قرار دارند.
  • /etc/nginx/nginx.conf: فایل پیکربندی اصلی Nginx. این را می توان برای ایجاد تغییرات در پیکربندی جهانی Nginx تغییر داد.
  • /etc/nginx/sites-available/: فهرستی که می‌توان بلوک‌های سرور هر سایت را در آن ذخیره کرد. Nginx از فایل های پیکربندی موجود در این دایرکتوری استفاده نمی کند مگر اینکه به دایرکتوری فعال شده سایت ها پیوند داده شده باشند. به طور معمول، تمام پیکربندی بلوک سرور در این دایرکتوری انجام می شود و سپس با پیوند دادن به دایرکتوری دیگر فعال می شود.
  • /etc/nginx/sites-enabled/: فهرستی که در آن بلوک‌های سرور فعال در هر سایت ذخیره می‌شوند. به طور معمول، این ها با پیوند دادن به فایل های پیکربندی موجود در فهرست سایت های موجود ایجاد می شوند.
  • /etc/nginx/snippets: این دایرکتوری شامل قطعات پیکربندی است که می تواند در جای دیگری از پیکربندی Nginx گنجانده شود. بخش‌های پیکربندی بالقوه تکرارپذیر، کاندیدهای خوبی برای تبدیل مجدد به قطعه‌ها هستند.

گزارش های سرور

  • /var/log/nginx/access.log: هر درخواست به سرور وب شما در این فایل گزارش ثبت می‌شود، مگر اینکه Nginx به گونه‌ای دیگر پیکربندی شده باشد.
  • /var/log/nginx/error.log: هر گونه خطای Nginx در این گزارش ثبت می شود.

نتیجه

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

 


 

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/

 

 

برچسب‌ها:Nginx در اوبونتو 20.04خرید سرورخرید سرور لینوکسخرید سرور مجازیراه اندازی وب سرورسرور اوبونتو 20.04سرور مجازی آمریکانحوه نصب Nginxوب سرور

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه نصب و مدیریت Supervisor

ورود به سایت

معرفی

در بسیاری از محیط‌های VPS، معمولاً تعدادی برنامه کوچک خواهید داشت که می‌خواهید دائماً اجرا کنید، چه اسکریپت‌های پوسته کوچک، برنامه‌های Node.js یا هر بسته‌ای با اندازه بزرگ.

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

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

پیش نیازها

برای تکمیل این راهنما، شما نیاز دارید:

  • یک سرور لینوکس و یک کاربر غیر ریشه با امتیازات sudo.

مرحله 1 – نصب

با نصب Supervisor شروع کنید:

sudo apt install supervisor

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

sudo systemctl status supervisor

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

 

Output

● supervisor.service - Supervisor process control system for UNIX
     Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago

اکنون که Supervisor را نصب کرده ایم، می توانیم اولین برنامه های خود را اضافه کنیم.

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

بهترین روش برای کار با Supervisor نوشتن یک فایل پیکربندی برای هر برنامه ای است که مدیریت می کند.

به منظور نشان دادن عملکرد Supervisor، ما یک اسکریپت پوسته ایجاد می کنیم که کاری جز تولید یک خروجی قابل پیش بینی در ثانیه انجام نمی دهد، اما به طور مداوم در پس زمینه اجرا می شود تا زمانی که به صورت دستی متوقف شود. با استفاده از nano یا ویرایشگر متن مورد علاقه خود، فایلی به نام idle.sh را در فهرست اصلی خود باز کنید:

nano ~/idle.sh

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

~/idle.sh

#!/bin/bash
while true
do
    # Echo current date to stdout
    echo `date`
    # Echo 'error!' to stderr
    echo 'error!' >&2
    sleep 1
done

ذخیره کنید و فایل را ببندید. اگر از nano استفاده می کنید، Ctrl+X را فشار دهید، سپس وقتی از شما خواسته شد، Y و Enter را فشار دهید.

بعد، اسکریپت خود را قابل اجرا کنید:

chmod +x ~/idle.sh

فایل های پیکربندی هر برنامه برای برنامه های Supervisor در دایرکتوری /etc/supervisor/conf.d قرار دارند، معمولاً یک برنامه در هر فایل اجرا می شود و به .conf ختم می شود. ما یک فایل پیکربندی برای این اسکریپت به عنوان`/etc/supervisor/conf.d/idle.conf ایجاد می کنیم:

sudo nano /etc/supervisor/conf.d/idle.conf

این مطالب را اضافه کنید:

/etc/supervisor/conf.d/idle.conf

command=/home/ubuntu/idle.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

این را خط به خط مرور می کنیم:

command=/home/ubuntu/idle.sh

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

autostart=true
autorestart=true

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

گزینه autostart به Supervisor می گوید که این برنامه باید هنگام بوت شدن سیستم راه اندازی شود. تنظیم این مورد روی false به شروع دستی پس از خاموش شدن سیستم نیاز دارد.

autorestart تعریف می کند که چگونه Supervisor باید برنامه را در صورت خروج از آن مدیریت کند:

false به Supervisor می‌گوید که پس از خروج برنامه هرگز آن را مجددا راه‌اندازی نکند.
true به Supervisor می گوید که همیشه برنامه را پس از خروج مجدداً راه اندازی کند.
unexpected به Supervisor می گوید که فقط در صورتی برنامه را مجدداً راه اندازی کند که با یک کد خطای غیرمنتظره (به طور پیش فرض هر چیزی غیر از کدهای 0 یا 2) خارج شود. برای کسب اطلاعات بیشتر در مورد کدهای خطا، به دستور errno نگاه کنید.

stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

دو خط پایانی مکان دو فایل لاگ اصلی را برای برنامه مشخص می کند. همانطور که توسط نام گزینه پیشنهاد می شود، stdout و stderr به ترتیب به مکان های stdout_logfile و stderr_logfile هدایت می شوند. دایرکتوری های مشخص شده باید از قبل وجود داشته باشند، زیرا Supervisor سعی نخواهد کرد هیچ دایرکتوری گمشده ای ایجاد کند.

پیکربندی که ما در اینجا ایجاد کرده ایم یک الگوی حداقلی برای یک برنامه Supervisor است. اسناد Supervisor بسیاری از گزینه های پیکربندی اختیاری دیگر را فهرست می کند که برای تنظیم نحوه اجرای برنامه ها در دسترس هستند.

هنگامی که فایل پیکربندی ما ایجاد و ذخیره شد، می توانیم از طریق دستور supervisorctl برنامه جدید خود را به Supervisor اطلاع دهیم. ابتدا به Supervisor می‌گوییم که به دنبال تنظیمات برنامه جدید یا تغییر یافته در فهرست /etc/supervisor/conf.d با استفاده از:

sudo supervisorctl reread

 

Output

idle: available

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

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

sudo tail /var/log/idle.out.log

 

Output

Sat Nov 20 22:21:22 UTC 2021
Sat Nov 20 22:21:23 UTC 2021
Sat Nov 20 22:21:24 UTC 2021
Sat Nov 20 22:21:25 UTC 2021
Sat Nov 20 22:21:26 UTC 2021
Sat Nov 20 22:21:27 UTC 2021
Sat Nov 20 22:21:28 UTC 2021
Sat Nov 20 22:21:29 UTC 2021
Sat Nov 20 22:21:30 UTC 2021
Sat Nov 20 22:21:31 UTC 2021

در مرحله بعد، برخی دیگر از کاربردهای Supervisor را پوشش خواهیم داد.

مرحله 3 – مدیریت برنامه ها

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

برای وارد شدن به حالت تعاملی، supervisorctl را بدون آرگومان اجرا کنید:

sudo supervisorctl

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

supervisor> help

 

Output

default commands (type help <topic>):
=====================================
add    clear  fg        open  quit    remove  restart   start   stop  update
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version

شما می توانید یک برنامه را با دستورات مرتبط به دنبال نام برنامه شروع یا متوقف کنید:

supervisor> stop idle

 

Output

idle: stopped

supervisor> start idle

 

Output

idle: started

با استفاده از دستور tail، می‌توانید آخرین ورودی‌های فهرست‌های stdout و stderr را برای برنامه خود مشاهده کنید:

supervisor> tail idle

 

Output

Sun Nov 21 00:36:10 UTC 2021
Sun Nov 21 00:36:11 UTC 2021
Sun Nov 21 00:36:12 UTC 2021
Sun Nov 21 00:36:13 UTC 2021
Sun Nov 21 00:36:14 UTC 2021
Sun Nov 21 00:36:15 UTC 2021
Sun Nov 21 00:36:17 UTC 2021

supervisor> tail idle stderr

 

Output

error!
error!
error!
error!
error!
error!
error!

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

supervisor> status

 

Output

idle                      STOPPED    Nov 21 01:07 AM

در نهایت، می‌توانید با Ctrl+C یا با وارد کردن quit در فرمان از supervisorctl خارج شوید:

supervisor> quit

نتیجه

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

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

 

 

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/

برچسب‌ها:Supervisorبرنامه supervisorctlپیکربندی Nginxخرید vpsخرید سرور مجازیراه اندازی سرور مجازیسرور مجازیسرور مجازی آمریکا

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه وارد کردن و گرفتن خروجی پایگاه داده در MySQL یا MariaDB

ورود به سایت

معرفی

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

در این آموزش، شما با داده های پایگاه داده در MySQL یا MariaDB کار خواهید کرد (دستورات قابل تعویض هستند). به طور خاص، شما یک پایگاه داده را صادر می کنید و سپس آن پایگاه داده را از فایل dump وارد می کنید.

پیش نیازها

برای وارد کردن یا صادر کردن پایگاه داده MySQL یا MariaDB، به موارد زیر نیاز دارید:

  • یک ماشین مجازی با کاربر sudo غیر روت.
  • MySQL یا MariaDB نصب شده است.
  • یک پایگاه داده نمونه ایجاد شده در سرور پایگاه داده شما.

مرحله 1 – گرفتن خروجی یک پایگاه داده MySQL یا MariaDB

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

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

mysqldump -u username -p database_name > data-dump.sql

  • نام کاربری نام کاربری است که می توانید با آن وارد پایگاه داده شوید
  • database_name نام پایگاه داده برای صادرات است
  • data-dump.sql فایلی در دایرکتوری فعلی است که خروجی را ذخیره می کند.

این دستور هیچ خروجی بصری تولید نمی کند، اما می توانید محتویات data-dump.sql را بررسی کنید تا بررسی کنید که آیا یک فایل dump قانونی SQL است یا خیر.

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

head -n 5 data-dump.sql

بالای فایل باید شبیه به این به نظر برسد، و یک داپ MySQL را برای پایگاه داده ای به نام database_name نشان می دهد.

مرحله 2 – وارد کردن یک پایگاه داده MySQL یا MariaDB

برای وارد کردن یک فایل dump موجود به MySQL یا MariaDB، باید یک پایگاه داده جدید ایجاد کنید. این پایگاه داده ها را ذخیره می کند.

ابتدا به عنوان root یا کاربر دیگری با امتیازات کافی برای ایجاد پایگاه داده جدید وارد MySQL شوید:

mysql -u root -p

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

CREATE DATABASE new_database;

این خروجی را خواهید دید که ایجاد پایگاه داده را تأیید می کند..

 

Output

Query OK, 1 row affected (0.00 sec)

سپس با فشار دادن CTRL+D از پوسته MySQL خارج شوید. از خط فرمان معمولی، می توانید فایل dump را با دستور زیر وارد کنید:

mysql -u username -p new_database < data-dump.sql

  • نام کاربری نام کاربری است که می توانید با آن وارد پایگاه داده شوید
  • newdatabase نام پایگاه داده تازه ایجاد شده است
  • data-dump.sql فایل تخلیه داده ای است که باید وارد شود و در فهرست فعلی قرار دارد

اگر دستور با موفقیت اجرا شود، هیچ خروجی تولید نمی کند. اگر در طول فرآیند خطایی رخ دهد، mysql آنها را در ترمینال چاپ می کند. برای بررسی موفقیت آمیز بودن وارد کردن، وارد پوسته MySQL شوید و داده ها را بررسی کنید. انتخاب پایگاه داده جدید با USE new_database و سپس استفاده از SHOW TABLES. یا یک دستور مشابه برای مشاهده برخی از داده ها.

نتیجه

در این آموزش شما یک پایگاه داده از پایگاه داده MySQL یا MariaDB ایجاد کردید. سپس آن داده‌ها را به یک پایگاه داده جدید وارد کردید. mysqldump دارای تنظیمات اضافی است که می توانید از آنها برای تغییر نحوه ایجاد تخلیه اطلاعات توسط سیستم استفاده کنید.

 

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/

 

MySQL or MariaDBایجاد پایگاه دادهخرید سرور مجازیسرور مجازیگرفتن خروجی از mysqlوارد کردن اطلاعات در پایگاه داده

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استایل دادن به عناصر HTML با حاشیه ها، سایه ها و خطوط در CSS

ورود به سایت

معرفی

کار با سایه‌ها، حاشیه‌ها و خطوط کلی یکی از اجزای کلیدی توسعه وب است و می‌تواند تعریف بصری پیرامون عناصر HTML و آیتم‌های متنی ارائه دهد. ظاهر حاشیه ها و سایه ها را می توان از طریق پنج ویژگی اصلی CSS دستکاری کرد: border، border-radius، box-shadow، text-shadow و outline. سایه ها عمق را فراهم می کنند و به عناصر کمک می کنند تا برجسته شوند، در حالی که ویژگی های حاشیه می توانند عملکردهای بصری مختلفی را انجام دهند، از ایجاد یک تقسیم کننده خطی بین محتوا تا تعریف فضای یک شبکه. ویژگی border-radius گوشه های گردی را روی جعبه ها ایجاد می کند و حتی می تواند یک شکل دایره ای ایجاد کند. در نهایت، outline یک ویژگی است که اغلب نادیده گرفته می شود که بسیاری از عملکردهای مشابه ویژگی مرزی را بدون ایجاد اختلال در جریان محتوا ارائه می دهد.

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

پیش نیازها

  • درک درستی از ویژگی‌های آبشار و ویژگی‌های CSS، که می‌توانید با خواندن نحوه اعمال سبک‌های CSS در HTML با Cascade و Specificity به آن دست پیدا کنید.
  • آشنایی با انتخابگرهای نوع، انتخابگرهای ترکیب‌کننده و گروه‌های انتخابگر، که می‌توانید در نحوه انتخاب عناصر HTML به سبک با CSS بیابید.
  • آشنایی با خواص رنگ در CSS برای اطلاعات بیشتر، نحوه استفاده از مقادیر رنگ با CSS را ببینید.
    آشنایی با گرادیان های CSS با ویژگی های پس زمینه. نحوه اعمال سبک‌های پس‌زمینه به عناصر HTML با CSS را بررسی کنید تا تجربه ایجاد پس‌زمینه گرادیان را به دست آورید.
  • یک فایل HTML خالی که در دستگاه محلی شما به عنوان index.html ذخیره شده است که می توانید از ویرایشگر متن و مرورگر وب انتخابی خود به آن دسترسی داشته باشید. برای شروع، آموزش نحوه تنظیم پروژه HTML خود را بررسی کنید و نحوه استفاده و درک عناصر HTML را برای دستورالعمل‌هایی در مورد نحوه مشاهده HTML خود در مرورگر خود دنبال کنید. اگر در HTML تازه کار هستید، کل نحوه ساخت یک وب سایت در سری HTML را امتحان کنید.

راه اندازی پایه HTML و CSS

در این بخش، پایه HTML را برای تمام سبک های بصری که در طول آموزش می نویسید، تنظیم می کنید. شما همچنین فایل styles.css خود را ایجاد کرده و سبک هایی را اضافه می کنید که طرح بندی محتوا را تنظیم می کند.

با باز کردن index.html در ویرایشگر متن خود شروع کنید. سپس HTML زیر را به فایل اضافه کنید:

index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Travel Disclosure - Destination: Moon</title>
    <link href="styles.css" rel="stylesheet" />
  </head>
  <body>
  </body>
</html>

تنظیمات صفحه زیادی در عنصر <head> تعریف شده است. اولین عنصر <meta> مجموعه کاراکتری را برای استفاده از متن تعریف می کند. به این ترتیب اکثر کاراکترهای خاص، مانند علائم تاکیدی، بدون کدهای HTML خاص ارائه می شوند. عنصر دوم <meta> به مرورگرها و به ویژه مرورگرهای تلفن همراه می گوید که چگونه با عرض محتوا رفتار کنند. در غیر این صورت، مرورگر عرض دسکتاپ 960 پیکسلی را شبیه سازی می کند. عنصر <title> عنوان صفحه را در اختیار مرورگر قرار می دهد. عنصر <link> فایل CSS را بارگیری می کند که در آن استایل های خود را در طول این آموزش می نویسید.

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

در ویرایشگر متن خود به index.html برگردید و HTML برجسته شده را از بلوک کد زیر اضافه کنید:

index.html

<!doctype html>
<html>
  ...
  <body>
    <section class="disclosure-alert">
      <header class="disclosure-header">
        <h2  class="disclosure-title"><em>Destination: Moon</em> Travel Disclosure</h2>
      </header>
      <div class="disclosure-content">
        <p>Although space travel is routine practice, there are many unknown possibilities that any traveller must be aware of before traveling with <em>Destination: Moon</em>. Agreeing to this disclosure of knowns is required prior to purchase of tickets with <em>Destination: Moon</em>. PLEASE, READ AND AGREE TO THE FOLLOWING DISCLOSURE OF TRAVEL UNKNOWNS BEFORE PROCEEDING TO PURCHASE.</p>
        <div class="legal-contents">
          <p>Effect of Termination. Upon termination, You agree not to use it under the terms of Sections 4(a) through 4(e) for that Covered Code, or any third party. Description of Modifications.<p>
          <p>You must make sure that you know you can do these things. To make sure the requirements of this Agreement. REQUIREMENTS A Contributor may participate in any way. Notwithstanding the foregoing, if applicable law or agreed to in writing, the Copyright Holder, but only to the terms applicable to Covered Code. Inability to Comply Due to Statute or Regulation.</p>
          <p>If it is impossible for You to the Recipient retains any such Additional Terms. Versions of This License. If you are re-using, b) a hyperlink (where possible) or URL to the terms of Sections 4(a) through 4(e) for that Work shall terminate if it fails to comply with the exception of content that is granting the License. License Terms 1.</p>
          <p>Grant of Patent Infringement. If you have knowledge of patent infringement litigation, then the only applicable Base Interpreter is a "commercial item" as defined in 48 C.F.R. Consistent with 48 C.F.R.</p>
          <p>U.S. Government End Users acquire Covered Code (Original Code and/or as part of a Larger Work; and b) allow the Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Distributor in writing of such Contributor, if any, to grant more extensive warranty protection to some or all of these conditions: (a) You must make it clear that any Modifications made by such Respondent, or (ii) withdraw Your litigation claim is resolved (such as Wikimedia-internal copying), it is Recipient's responsibility to secure any other exploitation. Program, and in any of the provisions set forth in Section 4(b), you shall terminate if it fails to comply with.</p>
          <p>Please note that these licenses do allow commercial uses of your company or organization, to others outside of this License Agreement), provided that You meet the following terms which differ from this License) and (b) You must duplicate the notice in Exhibit A in each changed file stating how and when you changed the files and the definitions are repeated for your past or future use of the Original Code; or 3) for infringements caused by: i) third party against the drafter will not be used as a handle): 1895.22/1011. This Agreement shall be held by the terms of this agreement. If any provision of this license which gives you legal permission to modify NetHack, or otherwise using this software in source and binary forms, with or without modification in printed materials or in related documentation, stating that you provide a service, including but not limited to the terms under which you distribute, wherever you describe the origin or ownership of such termination, the Recipient a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6b1 or any part of Derivative Works. If You initiate litigation by asserting a patent infringement against You in that instance.</p>
          <p>Effect of New York and the like. While this license document the following disclaimer in the Work contain all the conditions listed in Clause 6 above, concerning changes from the Work. If you created a Modification, you may at your option offer warranty protection to some or all of the Licensed Program as a product of your Modifications available to others outside of this License.</p>
          <p>Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted to Licensor for inclusion in the documentation and/or other rights consistent with this program; if not, write to the modified files to carry prominent notices stating that You distribute, all copyright, patent, trademark, and attribution notices from the Public Domain or from the Original Code; 2) separate from the Public Domain or from the Work, you may distribute a Compiled Work on their system exactly as it is being maintained, then ask the Current Maintainer to update their communication data within one month. If the program is free software; you can change the License will not have to defend and indemnify every other Contributor to control, and cooperate with the Source Code version of the Licensed Program, or any Contributor.</p>
        </div>
        <div class="button-group">
          <a href="#" class="button button-primary">
            Agree
          </a>
          <a href="#" class="button button-secondary">
            Disagree
          </a>
        </div>
      </div>
    </section>
  </body>
</html>

تغییرات خود را در index.html ذخیره کنید و سپس مرورگر وب خود را باز کنید. آیتم منوی File را انتخاب کنید و سپس گزینه Open را انتخاب کنید و فایل index.html خود را در مرورگر بارگذاری کنید. تصویر زیر نحوه نمایش این HTML در مرورگر را نشان می دهد:

یک فایل جدید به نام styles.css در همان دایرکتوری index.html ایجاد کنید، سپس آن را در ویرایشگر متن خود باز کنید. این فایل شامل تمام سبک های استفاده شده در طول آموزش است. اولین مجموعه از سبک ها یک زیبایی شناسی کلی را اعمال می کند که شما از آن خواهید ساخت. CSS را از بلوک کد زیر در فایل styles.css خود اعمال کنید:

styles.css

html, body {
  height: 100%;
}

body {
  display: flex;
  margin: 0;
  font: 100% / 1.5 sans-serif;
  background: url("images/moon-bg.jpg") no-repeat fixed center / cover black;
}
.disclosure-alert {
  background-color: hsl(0, 0%, 95%);
  width: 85%;
  max-width: 48rem;
  margin: auto;
  color: hsl(0, 0%, 20%);
}
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
}
.disclosure-title {
  margin: 0;
  font-size: 2rem;
  line-height: 1.25;
}
.disclosure-content {
  margin: 1.5rem;
}
.legal-contents {
  margin-top: 1.5rem;
  background-color: white;
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
.button-group {
  margin-top: 1.5rem;
  display: flex;
  justify-content: center;
}
.button {
  display: inline-block;
  text-align: center;
  padding: 0.5rem 1rem;
  background: black;
  text-decoration: none;
  color: white;
  width: 50%;
  max-width: 8rem;
}
.button + .button {
  margin-left: 1.5rem;
}
.button-primary {
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
}
.button-primary:hover {
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
}
.button-secondary {
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
}
.button-secondary:hover {
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
}

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

برای نمایش تصویر پیوند شده در ویژگی پس‌زمینه مجموعه قوانین بدن، به تصویر پس‌زمینه ماه نیاز دارید. ابتدا یک پوشه images در همان پوشه فایل index.html خود بسازید:

mkdir images

از مرورگر خود برای دانلود این فایل در فهرست تصاویر جدید خود استفاده کنید یا از دستور curl زیر برای دانلود آن از طریق خط فرمان استفاده کنید:

curl -sL https://assets.digitalocean.com/articles/68102/moon-bg.jpg -o images/moon-bg.jpg

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

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

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

styles.css

...
.legal-contents {
  height: 50vh;
  max-height: 20rem;
  overflow: auto;
  margin-top: 1.5rem;
  background-color: white;
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
...

در این کد، یک ویژگی height را در بلوک انتخابگر محتوای قانونی ایجاد کردید، سپس مقدار آن را روی 50vh تنظیم کردید، یعنی 50 درصد از ارتفاع پنجره viewport. شما همچنین یک ویژگی max-height ایجاد کردید که مقدار آن روی 20rem تنظیم شده است. در نهایت، یک ویژگی سرریز با مقدار خودکار اضافه کردید، که در صورت سرریز شدن محتوا از ظرف، نوار اسکرول ایجاد می‌کند.

این موارد اضافه شده را در فایل styles.css خود ذخیره کنید، سپس به مرورگر خود بازگردید و index.html را بازخوانی کنید. ارتفاع کامل صفحه و ظرف اصلی متراکم شده است. اکنون، همانطور که در انیمیشن زیر نشان داده شده است، کپی Legal Ipsum را می توان در داخل ظرف تعیین شده خود پیمایش کرد:

در سراسر این بخش، HTML اصلی را تنظیم می کنید که برای بقیه آموزش استفاده خواهید کرد. شما همچنین یک فضای قابل پیمایش را با ویژگی overflow تنظیم می کنید. در قسمت بعدی با خاصیت border برای اعمال حاشیه بر روی این کانتینرها کار خواهید کرد.

با استفاده از مرز Property

ویژگی border یکی از روش های اصلی اعمال سبک ها در لبه های عناصر است. یک خط به هر رنگی در محیط بیرونی ظرف اعمال می کند. ارزش ملک از سه جزء تشکیل شده است: ضخامت، سبک و رنگ. ویژگی border این مقادیر را برای هر چهار طرف یک عنصر اعمال می کند. می‌توانید تک تک طرف‌ها را با تغییرات جهت حاشیه مشخص کنید، مانند ویژگی border-top، که فقط برای بالای یک عنصر اعمال می‌شود.

برای شروع کار با ویژگی border، styles.css را در ویرایشگر متن خود باز کنید و به انتخابگر کلاس .disclosure-alert بروید. در بلوک انتخابگر، همانطور که در بلوک کد زیر مشخص شده است، یک ویژگی مرزی با مقدار 1px solid hsl (0، 0٪، 0%) اضافه کنید:

styles.css

...
.disclosure-alert {
  background-color: hsl(0, 0%, 95%);
  width: 85%;
  max-width: 48rem;
  margin: auto;
  color: hsl(0, 0%, 20%);
  border: 1px solid hsl(0, 0%, 0%);
}
...

این ویژگی مرزی یک ویژگی مختصر است، یعنی مقدار آن ترکیبی از مقادیر دیگر است. در این مورد، ضخامت 1px مقدار خاصیت عرض حاشیه را نشان می دهد. این مقدار می تواند هر مقدار عددی با یک واحد همراه با چند مقدار نامگذاری شده باشد: نازک، متوسط و ضخیم. در مرحله بعد، solid مقدار به سبک مرزی است که نحوه ظاهر شدن خط اطراف عنصر را مشخص می کند، در این مورد به عنوان یک خط پیوسته و پیوسته. سایر مقادیر برای سبک حاشیه عبارتند از: نقطه چین، چین، دوتایی و هیچ. مقدار نهایی خاصیت border-color را مشخص می کند که می تواند هر مقدار رنگ معتبری باشد.

تغییرات خود را در styles.css ذخیره کنید، سپس index.html را در یک مرورگر وب باز کنید. محفظه محتوای اصلی اکنون دارای یک حاشیه سیاه نازک در اطراف خود خواهد بود، که بیشتر مشهود است زیرا تصویر پس‌زمینه ماه را پوشانده است. تصویر زیر نحوه نمایان شدن حاشیه در قسمت محتوای اصلی را نشان می دهد:

 

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

در ویرایشگر متن خود به styles.css برگردید، سپس به بلوک انتخابگر کلاس .disclosure-header بروید. خطی-gradient() در ویژگی پس زمینه یک گرادیان بنفش تیره را تعریف می کند که به یک سایه کمی تیره تر تبدیل می شود. برای ایجاد عمق بیشتر از گرادیان به تنهایی، حاشیه را با کد زیر تنظیم کنید:

 

styles.css

 
...
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
}
...
 

شما یک ویژگی border-top با مقدار 1px solid hsl (300، 50٪، 35%) اضافه کردید، که کمی سبکتر از مقدار گرادیان شروع است. سپس، یک ویژگی حاشیه-پایین را با مقدار 1px solid hsl (300، 50٪، 5%) ایجاد کردید، که کمی تیره تر از انتهای گرادیان است.

تغییرات خود را در styles.css ذخیره کنید، سپس به مرورگر بازگردید و index.html را بازخوانی کنید. پس‌زمینه هدر بنفش اکنون کمی برجسته از رنگ بنفش در بالای سرصفحه و سایه‌ای جزئی در امتداد پایین دارد. تصویر زیر نشان می دهد که چگونه در مرورگر ظاهر می شود:

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

برای شروع کار با border-color، styles.css را در ویرایشگر متن خود باز کنید. در بلوک انتخاب کننده برای دکمه، یک ویژگی حاشیه با مقدار 1px جامد اضافه کنید، سپس یک ویژگی border-color برای .button-primary و .button-secondary اضافه کنید:

styles.css

...
.button {
  ...
  border: 1px solid;
}
...
.button-primary {
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
  border-color: hsl(200, 100%, 15%);
}
.button-primary:hover {
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
  border-color: hsl(200, 100%, 10%);
}
.button-secondary {
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
  border-color: hsl(200, 10%, 15%);
}
.button-secondary:hover {
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
  border-color: hsl(200, 10%, 10%);
}

این یک حاشیه به سبک جامد با عرض 1 پیکسل برای هر دو دکمه تعریف می کند. سپس، یک ویژگی حاشیه رنگ برای سفارشی کردن رنگ‌ها برای انتخابگرهای حالت .button-primary، .button-secondary و مرتبط با آنها اضافه کردید.

این تغییرات را در styles.css ذخیره کنید، سپس صفحه را در مرورگر وب خود بازخوانی کنید. همانطور که در تصویر زیر نشان داده شده است، دکمه‌ها اکنون با یک حاشیه رنگ تیره‌تر منطبق، تعریف کمی دارند:

در نهایت، هر جهت مرزی نیز مختصری است. این به این معنی است که -width، -style و -color هر کدام می‌توانند برای یک ویژگی جهت اعمال شوند. برای مثال، ویژگی longhand border-right-color فقط یک رنگ را در حاشیه سمت راست اعمال می کند.

برای کار با این ویژگی های حاشیه longhand جهت دار، در ویرایشگر متن خود به styles.css بازگردید. به بلوک انتخابگر .legal-contents بروید و عرض و سبک را برای هر چهار طرف حاشیه تنظیم کنید، سپس رنگ‌های هر طرف را سفارشی کنید:

styles.css

...
.legal-contents {
  height: 50vh;
  max-height: 20rem;
  margin-top: 1.5rem;
  overflow: auto;
  background-color: white;
  border: 1px solid;
  border-top-color: hsl(0, 0%, 65%);
  border-bottom-color: hsl(0, 0%, 100%);
  border-right-color: hsl(0, 0%, 80%);
  border-left-color: hsl(0, 0%, 80%);
  padding: 0.75rem;
  font-family: "Times New Roman", serif;
}
...

در این کد، حاشیه: 1px جامد را به انتهای فایل اضافه کردید. پس از آن، ویژگی های حاشیه-بالا-رنگ، رنگ حاشیه-پایین، رنگ حاشیه-راست-رنگ و رنگ حاشیه-چپ را نیز ایجاد کردید. برای مقادیر، از مقادیر مختلف hsl() برای خاکستری استفاده کردید.

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

در این قسمت از ویژگی border و تغییرات طولانی آن استفاده کردید. شما چندین حاشیه ایجاد کردید که در صورت نیاز به طرف های مختلف اعمال شد. در بخش بعدی، با ویژگی border-radius کار خواهید کرد که اجازه می دهد گوشه های کانتینرها گرد شوند.

اعمال یکborder-radius

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

برای شروع کار با ویژگی border-radius، styles.css را در ویرایشگر متن خود باز کنید. به بلوک انتخابگر .disclosure-alert و ویژگی border-radius بروید. سپس، مقدار را روی 1.5rem قرار دهید، که این مقدار را در هر چهار گوشه ویژگی اعمال می کند. CSS هایلایت شده در بلوک کد زیر نشان می دهد که چگونه این نوشته شده است:

styles.css

...
.disclosure-alert {
  ...
  border: 1px solid hsl(0, 0%, 0%);
  border-radius: 1.5rem;
}
...

این افزونه را در styles.css ذخیره کنید و سپس index.html را در یک مرورگر وب باز کنید یا به‌روزرسانی کنید. فقط دو گوشه پایینی گرد به نظر می رسد، در حالی که دو گوشه بالایی لبه های نوک تیز باقی می مانند. تصویر زیر نشان می دهد که چگونه این در مرورگر رندر می شود:

 

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

برای تنظیم گوشه های همپوشانی، به styles.css در ویرایشگر متن خود بازگردید. به بلوک انتخابگر .disclosure-header بروید و ویژگی border-radius را اضافه کنید. از آنجایی که فقط دو گوشه بالا نیاز به تنظیم دارند، مقدار 1.5rem 1.5rem 0 0 خواهد بود:

styles.css

...
.disclosure-header {
  ...
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
  border-radius: 1.5rem 1.5rem 0 0;
}
...

فرمت توسعه‌یافته این مقدار یک منحنی 1.5 میلی‌متری را در گوشه‌های بالا-چپ و بالا-راست اعمال می‌کند.

تغییرات خود را در styles.css ذخیره کنید و index.html را در مرورگر بازخوانی کنید. هدر بنفش اکنون گوشه ای گرد دارد و ظرف اصلی را نمی پوشاند. یک مشکل جدید ظاهر شده است، همانطور که در تصویر بزرگنمایی شده زیر نشان داده شده است، زیرا یک برش سفید از ظرف اصلی از پشت سرصفحه بنفش به اوج می رسد:

گوشه های هر دو .disclosure-alert و .disclosure-header به اندازه 1.5rem هستند، اما عرض آنها تفاوت اندازه دارند. این تفاوت اندازه ناشی از حاشیه سمت چپ و راست عنصر .disclosure-alert است. از آنجایی که عرض حاشیه در هر دو طرف 1px است، تفاوت اندازه آن 2px یا 0.125rem است. برای مطابقت دادن منحنی ها، شعاع مرزی برای .disclosure-header باید 0.125 rem کوچکتر از آنچه در حال حاضر است باشد. همانطور که در بلوک کد زیر مشخص شده است، مقادیر حاشیه 1.5rem را به 1.375rem تغییر دهید:

styles.css

...
.disclosure-header {
  background: linear-gradient(hsl(300, 50%, 20%), hsl(300, 50%, 10%));
  padding: 2rem 0.5rem;
  text-align: center;
  color: hsl(300, 50%, 95%);
  border-top: 1px solid hsl(300, 50%, 35%);
  border-bottom: 1px solid hsl(300, 50%, 5%);
  border-radius: 1.375rem 1.375rem 0 0;
}
...

این تغییر را در styles.css ذخیره کنید و سپس صفحه را در مرورگر وب بازخوانی کنید. برش سفید اکنون از بین رفته است و منحنی های دو عنصر در مکان مناسب به هم می رسند. تصویر بزرگنمایی شده زیر نشان می‌دهد که این منحنی‌ها چگونه کنار هم قرار می‌گیرند:

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

برای ایجاد دکمه ای به شکل قرص، styles.css را در ویرایشگر متن خود باز کنید. در بلوک انتخابگر دکمه، ویژگی border-radius را اضافه کنید و سپس مقدار را روی 2rem قرار دهید. این عدد می‌تواند یک عدد دلخواه باشد تا زمانی که بزرگتر از ارتفاع محاسبه‌شده، ترکیبی از اندازه قلم، ارتفاع خط، لایه‌بندی و عرض حاشیه باشد که می‌تواند بر ارتفاع کلی یک عنصر تاثیر بگذارد. CSS هایلایت شده در بلوک کد زیر نشان می دهد که کجا باید این ویژگی را اضافه کرد:

styles.css

...
.button {
  ...
  border: 1px solid;
  border-radius: 2rem;
}
...

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

تغییرات خود را در styles.css ذخیره کنید، سپس به مرورگر بازگردید و index.html را بازخوانی کنید. این صفحه اکنون دو دکمه مستطیلی به شکل قرص را نمایش می دهد، همانطور که در تصویر زیر نشان داده شده است:

در سرتاسر این بخش، شما از ویژگی border-radius برای اعمال گوشه های گرد به چندین عنصر استفاده کردید، و متوجه شدید که یک border-radius مانع از خروج عناصر نزولی از فضای منحنی نمی شود. شما همچنین مقدار شعاع حاشیه را طوری تنظیم کردید که با عرض یک عنصر مطابقت داشته باشد، زمانی که چندین عنصر گرد روی هم قرار می گیرند. در بخش بعدی، از ویژگی text-shadow برای اعمال سایه های در حال پخش بر روی محتوای متن استفاده می کنید.

با استفاده از ویژگی text-shadow

اعمال سایه روی متن کاربردهای زیادی در توسعه روزمره وب دارد. سایه‌ها می‌توانند عمق، جلوه درخشش ایجاد کنند، یا در مکان‌هایی که ممکن است نادیده گرفته شوند، به برجسته‌تر شدن متن کمک کنند. در سرتاسر این بخش، text-shadow را به چندین عنصر برای ایجاد جلوه های بصری مختلف اعمال می کنید.

ویژگی text-shadow حداکثر از چهار مقدار تشکیل شده است: offset محور x، offset محور y، blur radius و color. به عنوان مثال، مقادیر می توانند به این شکل باشند: 2px 4px 10px قرمز. از این چهار مقدار، فقط مقادیر افست مورد نیاز است. رنگ سایه به طور پیش فرض رنگ متن است.

برای شروع کار با text-shadow، با ایجاد یک افکت درخشش در هدر شروع می‌کنید. styles.css را در ویرایشگر متن خود باز کنید و به انتخابگر کلاس .disclosure-header بروید. در بلوک انتخابگر، ویژگی text-shadow زیر را اضافه کنید:

styles.css

...
.disclosure-header {
  ...
  border-radius: 1.375rem 1.375rem 0 0;
  text-shadow: 0 0 0.375rem hsl(300, 50%, 50%);
}
...

جلوه درخشش به این معنی است که رنگ از هر لبه متن بیرون می‌آید، بنابراین مقادیر افست محور x و y در اینجا روی 0 تنظیم می‌شوند. شما تاری برای درخشش را روی 0.375 rem (معادل 6 پیکسل) تنظیم می‌کنید تا کمی ظریف باشد. هاله رنگ به متن در نهایت، مقدار رنگ کمی تیره تر از ویژگی رنگ تنظیم شد: hsl (300، 50٪، 50%).

این افزودنی را در فایل styles.css خود ذخیره کنید. بعد، index.html را در یک مرورگر وب باز کنید. متن عنوان پررنگ در پس‌زمینه گرادیان بنفش اکنون درخششی از بنفش میانی در اطراف خود دارد. تصویر زیر نحوه نمایش این افکت در مرورگر را نشان می دهد:

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

برای ایجاد یک جلوه برجسته، به styles.css در ویرایشگر متن خود بازگردید. افکت به دکمه های پایین ظرف اضافه می شود. برای انتخابگرهای .button-primary، .button-primary:hover، .button-secondary و .button-secondary:hover یک ویژگی text-shadow اضافه کنید. CSS هایلایت شده را در بلوک کد زیر برای مقادیر بررسی کنید:

styles.css

...
.button-primary {
  border: 1px solid hsl(200, 100%, 5%);
  background: linear-gradient(to bottom, hsl(200, 100%, 30%), hsl(200, 100%, 20%));
  text-shadow: 0 1px hsl(200, 100%, 50%),
               0 -1px hsl(200, 100%, 5%);
}
.button-primary:hover {
  border: 1px solid hsl(200, 100%, 0%);
  background: linear-gradient(to bottom, hsl(200, 100%, 25%), hsl(200, 100%, 15%));
  text-shadow: 0 1px hsl(200, 100%, 45%),
               0 -1px hsl(200, 100%, 0%);
}
.button-secondary {
  border: 1px solid hsl(200, 10%, 5%);
  background: linear-gradient(to bottom, hsl(200, 10%, 30%), hsl(200, 10%, 20%));
  text-shadow: 0 1px hsl(200, 10%, 50%),
               0 -1px hsl(200, 10%, 5%);
}
.button-secondary:hover {
  border: 1px solid hsl(200, 10%, 0%);
  background: linear-gradient(to bottom, hsl(200, 10%, 25%), hsl(200, 10%, 15%));
  text-shadow: 0 1px hsl(200, 10%, 45%),
               0 -1px hsl(200, 10%, 0%);
}

سایه اول یک برجسته روشن تر از پایین است. این کار با آفست 0 1px و سپس نسخه روشن‌تر رنگ‌های گرادیان پس‌زمینه انجام می‌شود. در مرحله بعد، سایه بالای متن را با آفست 0 -1 پیکسل ایجاد کردید، که سایه را 1 پیکسل به بالا می کشد و از تنوع تیره تری از رنگ های پس زمینه استفاده می کند.

این تغییرات را در styles.css ذخیره کنید، سپس صفحه را در مرورگر وب خود بازخوانی کنید. اکنون متن داخل دکمه‌ها دارای یک برجسته‌سازی جزئی در زیر متن و یک سایه کمی در بالای متن است. ترکیب این مقادیر متن-سایه افکت برجسته را همانطور که در تصویر زیر ارائه می شود ایجاد می کند:

در این بخش، ویژگی text-shadow را روی چند عنصر اعمال کردید. شما یک افکت درخشش روی هدر و یک جلوه برجسته با سایه های متعدد روی دکمه ها ایجاد کردید. در بخش بعدی، سایه هایی را با ویژگی box-shadow به عناصر HTML اعمال می کنید.

افزودن box-shadow به عناصر

همانطور که ویژگی text-shadow به محتوای متن اجازه می دهد سایه داشته باشد، ویژگی box-shadow نیز به عناصر و کانتینرها اجازه می دهد سایه داشته باشند. box-shadow دارای دو ویژگی اضافی است که در این بخش بررسی خواهید کرد، از جمله توانایی کنترل گسترش تاری و تنظیم سایه در داخل عنصر.

برای شروع کار با ویژگی box-shadow، styles.css را در ویرایشگر متن خود باز کنید. در بلوک انتخابگر .disclosure-alert، ویژگی box-shadow را اضافه کنید. درست مانند text-shadow، مقادیر افست محور x و y مورد نیاز است و اگر رنگی ارائه نشده باشد، از مقدار ویژگی رنگ استفاده می شود. برای اولین کادر سایه، offset ها را روی 0، blur را روی 0.5rem، و رنگ را روی یک hsl تیره (300، 40٪، 5%) تنظیم کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.disclosure-alert {
  ...
  border-radius: 1.5rem;
  text-shadow: 0 0 0.375rem hsl(300, 50%, 50%);
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%);
}
...

تغییرات را در styles.css ذخیره کنید و صفحه را در مرورگر وب خود بازخوانی کنید. اکنون یک سایه سیاه تقریباً از ظرف پخش شده است. همچنین توجه داشته باشید که سایه به منحنی هایی که با ویژگی border-radius ایجاد کرده اید احترام گذاشته و از آنها پیروی می کند. تصویر زیر نشان می دهد که چگونه این در مرورگر ارائه می شود:

در مرحله بعد، به styles.css بازگردید و با افزودن دو افکت درخشش بزرگ اضافی به box-shadow شروع به ایجاد یک افکت پیچیده تر کنید. بین هر سایه جدید یک کاما اضافه کنید، و هر کدام را به گونه‌ای تنظیم کنید که آفست محور y 0.5rem باشد. سپس تاری های بزرگ را تنظیم کنید و از تغییرات کم رنگ آبی و بنفش از پالت رنگ استفاده کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.disclosure-alert {
  ...
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%),
              0 0.5rem 6rem hsl(200, 40%, 30%),
              0 0.5rem 10rem hsl(300, 40%, 30%);
}
...

ترتیب این سایه ها مهم است. اولین سایه با رنگ تقریبا مشکی در بالای سایه های جدید ارائه می شود و هر سایه بعدی پشت سایه بعدی اضافه می شود.

تغییرات خود را در styles.css ذخیره کنید و صفحه را در مرورگر خود بازخوانی کنید. همانطور که در تصویر زیر نشان داده شده است، ترکیب سایه های متعدد جلوه ای منحصر به فرد را ارائه می دهد:

ویژگی گسترش تاری ویژگی box-shadow را می توان برای ایجاد احساس عمق استفاده کرد. ارزش اسپرد هر دو ارزش مثبت و منفی را می پذیرد. گسترش ارزش منفی همراه با یک افست قوی و تاری سایه ای ایجاد می کند که دور و دور از ظرف منبع ایجاد می کند.

برای شروع، به styles.css در ویرایشگر متن خود بازگردید. بین سایه کوچک تیره و سایه آبی بزرگتر در انتخابگر .disclosure-alert، CSS هایلایت شده زیر را از بلوک کد اضافه کنید:

styles.css

...
.disclosure-alert {
  ...
  box-shadow: 0 0 0.5rem hsl(300, 40%, 5%),
              0 6rem 4rem -2rem hsl(300, 40%, 5%),
              0 0.5rem 6rem hsl(200, 40%, 30%),
              0 0.5rem 10rem hsl(300, 40%, 30%);
}
...

این اضافه شدن به مجموعه سایه، افست محور x را روی 0 نگه می دارد، اما محور y را به طور قابل توجهی به 6rem می رساند. بعد، تاری به اندازه درخشش بزرگ نیست، اما در اندازه مناسب 4 rem است. سپس به مقدار گسترش blur می رسد که در این حالت روی -2rem تنظیم می شود. مقدار پیش فرض اسپرد 0 است که برابر با ظرف است. در -2rem، گسترش از ظرف به سمت داخل متراکم می شود تا جلوه بصری عمق ایجاد کند.

تغییرات خود را در styles.css ذخیره کنید، سپس index.html را در مرورگر بازخوانی کنید. سایه یک رنگ بنفش تیره است که این حس را ایجاد می کند که جعبه محتوای اصلی به خوبی بالای سطح ماه شناور است، همانطور که در تصویر زیر نشان داده شده است:

یکی دیگر از موارد استفاده از box-shadow ایجاد یک هایلایت و افکت مخروطی سایه است، همانطور که قبلاً با ویژگی border در هدر انجام دادید. مزیت استفاده از box-shadow به جای حاشیه این است که بر مدل جعبه تأثیر نمی گذارد، که باعث تغییر در جریان محتوا می شود. همچنین می توان از آن در ارتباط با حاشیه استفاده کرد. هنگام استفاده از این افکت با حاشیه، مقدار inset باید به box-shadow اضافه شود تا سایه در داخل ظرف باشد.

برای شروع استفاده از مقدار inset در box-shadow، styles.css را در ویرایشگر متن خود باز کنید. این افکت به دکمه‌ها اضافه می‌شود، بنابراین شما این استایل‌ها را در .button-primary، .button-primary:hover، .button-secondary و .button-secondary:hover اعمال خواهید کرد. مانند text-shadow، این شامل یک ترکیب افست 0 1px و 0 -1px خواهد بود. تفاوت این است که کلمه inset را می توان به ابتدا یا انتهای مقدار اضافه کرد، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.button-primary {
  ...
  text-shadow: 0 1px hsl(200, 100%, 50%),
               0 -1px hsl(200, 100%, 5%);
  box-shadow: inset 0 1px hsl(200, 100%, 50%),
              inset 0 -1px hsl(200, 100%, 15%);
}
.button-primary:hover {
  ...
  text-shadow: 0 1px hsl(200, 100%, 45%),
               0 -1px hsl(200, 100%, 0%);
  box-shadow: inset 0 1px hsl(200, 100%, 45%),
              inset 0 -1px hsl(200, 100%, 10%);
}
.button-secondary {
  ...
  text-shadow: 0 1px hsl(200, 10%, 50%),
               0 -1px hsl(200, 10%, 5%);
  box-shadow: inset 0 1px hsl(200, 10%, 50%),
              inset 0 -1px hsl(200, 10%, 15%);
}
.button-secondary:hover {
  ...
  text-shadow: 0 1px hsl(200, 10%, 45%),
               0 -1px hsl(200, 10%, 0%);
  box-shadow: inset 0 1px hsl(200, 10%, 45%),
              inset 0 -1px hsl(200, 10%, 10%);
}

این تغییرات را در styles.css ذخیره کنید و سپس index.html را در مرورگر خود refresh کنید. اکنون دکمه ها دارای یک برجسته و یک سایه هستند، شبیه به متن. این ترکیب با پس‌زمینه گرادیان، جلوه‌ای ساده و در عین حال متمایز برای دکمه‌ها ایجاد می‌کند. تصویر زیر نشان می دهد که چگونه این در مرورگر ارائه می شود:

 

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

برای شروع ایجاد این افکت، styles.css را در ویرایشگر متن خود باز کنید. به انتخابگر کلاس .legal-contents بروید و یک ویژگی box-shadow اضافه کنید. این سایه از سه سایه تشکیل خواهد شد. اولی یک سایه کوتاه در اطراف داخل کل ظرف ایجاد می کند و دو مورد بعدی یک سایه روشن دراز در بالا و پایین عنصر ایجاد می کند. CSS هایلایت شده در بلوک کد زیر نحوه تنظیم این را نشان می دهد:

styles.css

...
.legal-contents {
  ...
  font-family: "Times New Roman", serif;
  box-shadow: 0 0 0.25rem hsl(0, 0%, 80%) inset,
              0 4rem 2rem -4rem hsl(0, 0%, 85%) inset,
              0 -4rem 2rem -4rem hsl(0, 0%, 85%) inset;
}
...

تغییرات خود را در styles.css ذخیره کنید، سپس صفحه را در مرورگر بازخوانی کنید. اکنون سایه‌ها جلوه‌ای ایجاد می‌کنند که باعث می‌شود متن قانونی مانند پنجره‌ای به داخل ظرف ظاهر شود. سایه ها همچنین به تقویت رنگ های حاشیه ای که روی این عنصر اعمال شده اند کمک می کند. تصویر زیر نشان می دهد که چگونه این در مرورگر رندر می شود:

در این قسمت ویژگی box-shadow را عملی می کنید. شما همچنین از ویژگی‌های پخش تاری و درج کردن جعبه سایه استفاده کردید تا گزینه‌های یک ظاهر طراحی بیشتری داشته باشید. در بخش آخر، ویژگی outline را پیاده سازی می کنید، سپس از box-shadow برای ایجاد یک طرح کلی همه کاره تر استفاده می کنید.

با استفاده از ویژگی طرح کلی

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

برای مشاهده پیش فرض مرورگر حالت :focus، index.html را در مرورگر خود باز کنید. از کلید TAB برای پیمایش در صفحه استفاده کنید تا زمانی که یکی از دکمه های پایین فوکوس شود. بسته به اینکه از چه مرورگری استفاده می کنید، ممکن است نتوانید سبک های پیش فرض :focus را ببینید. به عنوان مثال، فایرفاکس یک طرح کلی با نقطه سفید را نشان می دهد، اما در پس زمینه خاکستری روشن قابل درک نیست. تصویر زیر از چپ به راست نشان می دهد که چگونه سبک فوکوس پیش فرض در فایرفاکس، سافاری و کروم ظاهر می شود:

برای شروع سفارشی کردن حالت :focus خود با ویژگی outline، styles.css را در ویرایشگر متن خود باز کنید. به انتخابگر کلاس .button بروید و ویژگی outline را اضافه کنید:

styles.css

...
.button {
  ...
}
.button:focus {
  outline: 0.25rem solid hsl(200, 100%, 50%);
}
...

همانند ویژگی border، مقدار طرح کلی شامل یک مقدار عرض، سبک و رنگ است. از آنجایی که هدف یک حالت فوکوس جلب توجه به یک عنصر است، عرض به 0.25rem افزایش می یابد که معادل 4px است. در مرحله بعد، استایل را روی حالت جامد قرار می دهید تا حالت فوکوس بیشتر شبیه سافاری و کروم باشد. در نهایت، رنگ را با hsl (200، 100، 50%) روی آبی تیره قرار می دهید.

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

در هر سه مرورگر، ویژگی outline کاملاً متفاوت نمایش داده می شود. فایرفاکس دور کل شکل گرد دکمه را محکم نگه می دارد. سافاری یک کادر با زاویه راست ایجاد می کند، اما لبه های دکمه را لمس می کند. کروم شبیه سافاری است، اما فضای اضافی بین دکمه و طرح کلی اضافه می کند.

برای ایجاد سبکی که در همه مرورگرها شبیه به فایرفاکس باشد، به جای طرح کلی، باید از box-shadow استفاده کنید.

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

styles.css

...
.button {
  ...
}
.button:focus {
  outline: none;
}
...

سپس، به انتخابگرهای button-primary:hover و button-secondary:hover بروید و یک کاما به دنبال آن یک تغییر حالت :focus اضافه کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...

.button-primary {
  ...
}
.button-primary:hover,
.button-primary:focus {
  ...
}
.button-secondary {
  ...
}
.button-secondary:hover,
.button-secondary:focus {
  ...
}

در نهایت، دو انتخابگر جدید برای هر دکمه ایجاد کنید: فوکوس، .button-primary: focus، و .button-secondary:focus. در داخل بلوک‌های انتخابگر جدید، یک ویژگی box-shadow جدید با همان سایه‌های داخلی از همتای :hover، :focus آن‌ها اضافه کنید. سپس، سایه دیگری را با offset ها به مجموعه اضافه کنید و همه را روی 0 تار کنید. پس از آن، یک اسپرد 0.25rem اضافه کنید، که یک خط ثابت و غیر تار در اطراف عنصر ایجاد می کند. در نهایت رنگ یکسان را به هر دو نمونه اضافه کنید. CSS هایلایت شده در بلوک کد زیر نشان می دهد که چگونه این نوشته شده است:

styles.css

...

.button-primary {
  ...
}
.button-primary:hover,
.button-primary:focus {
  ...
}
.button-primary:focus {
  box-shadow: inset 0 1px hsl(200, 100%, 45%),
              inset 0 -1px hsl(200, 100%, 10%),
              0 0 0 0.25rem hsl(200, 100%, 50%);
}
.button-secondary {
  ...
}
.button-secondary:hover,
.button-secondary:focus<^> {
  ...
}
.button-secondary:focus {
  box-shadow: inset 0 1px hsl(200, 10%, 45%),
              inset 0 -1px hsl(200, 10%, 10%),
              0 0 0 0.25rem hsl(200, 100%, 50%);
}

این تغییرات را در styles.css ذخیره کنید و برای بازخوانی index.html به مرورگر خود بازگردید. اکنون، همانطور که از کلید TAB برای پیمایش در صفحه استفاده می کنید. صرف نظر از مرورگر، سبک :focus روی دکمه ها اکنون یکسان به نظر می رسد. تصویر زیر نشان می دهد که چگونه نسخه box-shadow یک طرح کلی به همراه کل صفحه در مرورگر ظاهر می شود:

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

نتیجه

سبک دادن به لبه های عناصر به طراحی یک وب سایت اجازه می دهد تا تنوع و توجه را به خود جلب کند. ویژگی border می تواند به ارائه تعریف و تفکیک بین محتوا کمک کند. ویژگی حاشیه-شعاع زیبایی شناسی را نرم می کند و به تعریف نگرش طرح کمک می کند. سایه های روی متن و جعبه ها عمق می بخشد و به جلب توجه به محتوا کمک می کند. در نهایت، ویژگی outline راه‌های در دسترس را برای جلب توجه به عناصر با فوکوس صفحه کلید فراهم می‌کند. در این آموزش، شما از تمام این ویژگی ها برای ایجاد یک صفحه وب از نظر بصری جالب و قابل استفاده استفاده کردید. درک هر یک از این ویژگی ها و نحوه و زمان استفاده از آنها به حل انواع مشکلات رابط فرانت اند و ایجاد تجربیات جدید کمک می کند.

 

 

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/

 

برچسب‌ها:CSSVPS یا سرور مجازیآشنایی با خواص رنگ در CSSایجاد سرور مجازیایجاد یکborder-radiusخرید سرور مجازیراه اندازی پایه HTMLراه اندازی پایه HTML و CSSسرورمجازیسرورمجازی آمریکا

  • behnam gol mohamadi
  • ۰
  • ۰

 نحوه استقرار یک برنامه React در پلتفرم اپلیکیشن vpsgol

ورود به سایت

 

معرفی

پلتفرم برنامه vpsgol یک محصول پلتفرم به عنوان سرویس (PaaS) است که به شما امکان می دهد برنامه ها را از یک مخزن منبع پیکربندی و استقرار دهید. پس از پیکربندی برنامه شما، vpsgol برنامه را با هر تغییری ایجاد و مستقر می کند و به شما از مزایای یک وب سرور کامل و خط لوله استقرار با حداقل پیکربندی می دهد. این می تواند یک راه سریع و کارآمد برای استقرار برنامه های React شما باشد، و اگر از React برای ساختن سایتی بدون باطن استفاده می کنید، می توانید از لایه رایگان App Platform استفاده کنید.

در این آموزش، یک برنامه React را با استفاده از لایه Starter رایگان در پلتفرم برنامه vpsgol اجرا می‌کنید. با Create React App یک برنامه می‌سازید، کد را به یک مخزن GitHub فشار می‌دهید، سپس برنامه را به عنوان یک برنامه vpsgol پیکربندی می‌کنید. شما برنامه را به کد منبع خود متصل می کنید و پروژه را به عنوان مجموعه ای از فایل های ثابت اجرا می کنید.

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

پیش نیازها

  • در ماشین محلی خود، به یک محیط توسعه نیاز دارید که Node.js را اجرا کند. این آموزش بر روی Node.js نسخه 10.22.0 و npm نسخه 6.14.6 تست شده است.
  • Git روی دستگاه محلی شما نصب شده است.
  • یک حساب vpsgol.
  • یک حساب کاربری در GitHub که می توانید با رفتن به صفحه Create your Account ایجاد کنید.

مرحله 1 – ایجاد یک پروژه React

در این مرحله، یک برنامه React با استفاده از Create React App ایجاد می‌کنید و یک نسخه قابل استقرار از آن می‌سازید.

برای شروع، یک برنامه جدید با استفاده از Create React App در دستگاه محلی خود ایجاد کنید. در ترمینال، دستور ساخت اپلیکیشنی به نام vpsgol-app را اجرا کنید:

npx create-react-app vpsgol-app

دستور npx یک بسته Node را بدون بارگیری در دستگاه شما اجرا می کند. اسکریپت create-react-app همه وابستگی ها را نصب می کند و یک پروژه پایه را در فهرست راهنمای دیجیتال-اقیانوس-برنامه می سازد. برای اطلاعات بیشتر در مورد Create React App، آموزش نحوه راه اندازی یک پروژه React با ایجاد برنامه React را بررسی کنید.

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

 

Output

Success! Created vpsgol-app at your_file_path/vpsgol-app
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd vpsgol-app
  npm start

Happy hacking!

اکنون که یک پروژه پایه دارید، آن را به صورت محلی اجرا کنید تا بتوانید نحوه نمایش پروژه در سرور را آزمایش کنید. ابتدا به دایرکتوری تغییر دهید:

cd vpsgol-app

پروژه را با استفاده از اسکریپت شروع npm اجرا کنید:

npm start

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

 

Output

Compiled successfully!

You can now view vpsgol-app in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://192.168.1.110:3000

Note that the development build is not optimized.
To create a production build, use npm build.

یک مرورگر به http://localhost:3000 باز کنید و پروژه خود را پیدا خواهید کرد:

پروژه را با تایپ کردن CTRL+C یا ⌘+C در ترمینال متوقف کنید.

اکنون که یک برنامه React در حال کار دارید، می توانید کد را به یک مخزن GitHub فشار دهید.

مرحله 2 – فشار دادن کد به GitHub

برای استقرار برنامه شما، App Platform کد منبع شما را از یک مخزن کد میزبانی شده بازیابی می کند. در این مرحله، کد برنامه React خود را به یک مخزن GitHub فشار می‌دهید تا App Platform بتواند بعداً به آن دسترسی داشته باشد.

به حساب GitHub خود وارد شوید. پس از ورود به سیستم، یک مخزن جدید به نام vpsgol-app ایجاد کنید. می توانید مخزن را خصوصی یا عمومی کنید:

Create React App به طور خودکار پروژه شما را با git مقداردهی اولیه می کند، بنابراین می توانید تنظیم کنید تا کد را مستقیماً به GitHub فشار دهید. ابتدا مخزن مورد نظر خود را با دستور زیر اضافه کنید:

git remote add origin https://github.com/your_name/vpsgol-app.git

 

در مرحله بعد، اعلام کنید که می‌خواهید با موارد زیر به شاخه اصلی بروید:

git branch -M main

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

git push -u origin main

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

هنگامی که کد را فشار می دهید یک پیام موفقیت آمیز دریافت خواهید کرد. پیام شما کمی متفاوت خواهد بود:

 

Output

Counting objects: 22, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (22/22), 187.50 KiB | 6.94 MiB/s, done.
Total 22 (delta 0), reused 0 (delta 0)
To github.com:your_name/vpsgol-app.git
   4011c66..647d2e1  main -> main

اکنون کد خود را در مخزن GitHub کپی کرده اید.

در این مرحله، پروژه خود را به GitHub هل دادید تا بتوانید با استفاده از vpsgol Apps به آن دسترسی داشته باشید. در مرحله بعد، با استفاده از پروژه خود یک برنامه vpsgol جدید ایجاد می کنید و استقرار خودکار را تنظیم می کنید.

مرحله 3 – استقرار در پلتفرم برنامه vpsgol

در این مرحله، یک برنامه React را در پلتفرم اپلیکیشن vpsgol مستقر خواهید کرد. شما مخزن GitHub خود را به vpsgol متصل می کنید، پروژه را برای ساخت پیکربندی می کنید و پروژه اولیه خود را می سازید. پس از اجرای پروژه، هر تغییر باعث ایجاد یک ساخت و به روز رسانی جدید می شود.

در پایان این مرحله، می‌توانید برنامه‌ای را با تحویل مداوم درvpsgol اجرا کنید.

برای شروع، وارد حساب vpsgol خود شوید و دکمه Create را فشار دهید، سپس Apps را انتخاب کنید:

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

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

پس از انتخاب مخزن، دوباره به رابط vpsgol متصل خواهید شد. vpsgol-app را از لیست مخازن انتخاب کنید، سپس Next را فشار دهید. این برنامه شما را مستقیماً به مخزن GitHub متصل می کند:

اکنون که مخزن خود را انتخاب کرده اید، باید اپلیکیشن vpsgol را پیکربندی کنید. در این مثال، سرور با انتخاب نیویورک در قسمت Region، در آمریکای شمالی مستقر خواهد شد و شاخه استقرار اصلی خواهد بود. برای برنامه خود، منطقه ای را انتخاب کنید که به موقعیت مکانی فیزیکی شما نزدیک است:.

برای این آموزش، تغییرات کد Autodeploy را بررسی می کنید. هر بار که کد را به‌روزرسانی می‌کنید، این به طور خودکار برنامه شما را بازسازی می‌کند.

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

در مرحله بعد، نوع برنامه ای را که اجرا می کنید انتخاب کنید. از آنجایی که React دارایی های استاتیک را می سازد، Static Site را از منوی کشویی در قسمت Type انتخاب کنید.

توجه: Create React App یک تولیدکننده سایت ایستا مانند گتسبی نیست، اما شما از دارایی های ثابت استفاده می کنید، زیرا سرور نیازی به اجرای کدهای سمت سرور مانند Ruby یا PHP ندارد. برنامه از Node برای اجرای مراحل نصب و ساخت استفاده می کند، اما کد برنامه را در لایه آزاد اجرا نمی کند.

شما همچنین می توانید از یک اسکریپت ساخت سفارشی استفاده کنید. اما در این حالت، می‌توانید از دستور پیش‌فرض npm run build استفاده کنید. اگر اسکریپت ساخت متفاوتی برای تضمین کیفیت (QA) یا یک محیط تولید دارید، ممکن است بخواهید یک اسکریپت ساخت سفارشی ایجاد کنید:

Next را فشار دهید تا به صفحه نهایی و راه اندازی بروید.

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

دکمه Launch Starter App را فشار دهید و vpsgol شروع به ساخت برنامه شما می کند.

این برنامه اسکریپت های ساخت npm ci و npm را در مخزن شما اجرا می کند. این همه وابستگی ها را دانلود می کند و فهرست ساخت را با یک نسخه کامپایل شده و کوچک شده از همه جاوا اسکریپت، فایل های HTML و سایر دارایی های شما ایجاد می کند. همچنین می توانید یک اسکریپت سفارشی در package.json خود ایجاد کنید و دستورات را در تب Components برنامه خود در App Platform به روز کنید.

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

برای دسترسی به پروژه خود در مرورگر، Live App را فشار دهید. این پروژه مانند پروژه ای است که به صورت محلی آزمایش کرده اید، اما با یک URL ایمن در وب به صورت زنده نمایش داده می شود:

 

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

در این مرحله، یک برنامه vpsgol جدید در پلتفرم App ایجاد کردید. شما حساب GitHub خود را متصل کردید و برنامه را برای ساخت شعبه اصلی پیکربندی کردید. پس از پیکربندی برنامه، متوجه شدید که برنامه پس از هر تغییر، یک بیلد جدید را مستقر می کند.

نتیجه

پلتفرم برنامه vpsgol ابزاری سریع برای استقرار برنامه ها در اختیار شما قرار می دهد. با یک تنظیم اولیه کوچک، برنامه شما به طور خودکار پس از هر تغییر مستقر می شود. این می‌تواند همراه با React برای راه‌اندازی سریع برنامه وب شما استفاده شود.

برچسب‌ها:App PlatformNode.jsاتصال به سرور مجازی لینوکسایجاد سرور مجازیبرنامه Reactخرید سرور مجازیسرور مجازیسرویس (PaaS)

 

 

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

نحوه استفاده از Vuls به عنوان یک اسکنر آسیب پذیری در اوبونتو 18.04

ورود به سایت

معرفی

Vuls یک اسکنر آسیب‌پذیری منبع باز و بدون عامل است که در Go نوشته شده است. تجزیه و تحلیل آسیب پذیری امنیتی نرم افزار نصب شده بر روی یک سیستم را خودکار می کند، که می تواند برای مدیران سیستم به صورت دستی در یک محیط تولید کار سنگینی باشد. Vuls از چندین پایگاه داده آسیب‌پذیری معروف مانند پایگاه داده ملی آسیب‌پذیری (NVD) استفاده می‌کند. با توجه به منابع، Vuls این توانایی را دارد که چندین سیستم را به طور همزمان اسکن کند و گزارش ها را از طریق ایمیل یا Slack ارسال کند. دارای سه حالت اسکن (سریع، سریع روت و عمیق) است که می توانید با توجه به شرایط آن را انتخاب کنید.

Vuls یک اسکنر امنیتی فناوری اطلاعات گسترده نیست. به عنوان مثال، ترافیک شبکه را کنترل نمی کند یا در برابر حملات brute-force لاگین محافظت نمی کند. با این حال، Vuls راهی برای خودکار کردن گزارش آسیب‌پذیری برای بسته‌های لینوکس ارائه می‌کند. هنگامی که پایگاه‌های داده‌ای که Vuls استفاده می‌کند از رفع آسیب‌پذیری‌های خاص مطلع می‌شوند، Vuls این اطلاعات اصلاحی را نیز در گزارش‌های خود می‌آورد. هنگام تولید گزارش ها، Vuls با استفاده از سیستم رتبه بندی ایجاد شده از پایگاه داده، فوری ترین آسیب پذیری ها را اولویت بندی می کند.

در این آموزش، Vuls را در سرور اوبونتو 18.04 مستقر خواهید کرد. این شامل ساخت Vuls و وابستگی‌های آن از کد منبع، پیکربندی اسکن و گزارش‌دهی به Slack و اتصال اختیاری آن به ماشین‌های هدف برای فعال کردن اسکن از راه دور است. در پایان، شما یک سیستم خودکار گزارش‌دهی آسیب‌پذیری خواهید داشت که به شما در مورد آسیب‌پذیری‌ها هشدار می‌دهد و نیاز به بررسی دستی را از بین می‌برد.

پیش نیازها

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

  • سروری با حداقل 2 گیگابایت رم که اوبونتو 18.04 را با دسترسی روت اجرا می کند و یک حساب ثانویه غیر روت.
  • فضای کاری Slack که شما عضو آن هستید.
  • (اختیاری) چندین سرور در حال اجرا (ترجیحا) Ubuntu 18.04 با دسترسی ریشه و یک حساب ثانویه و غیر ریشه، اگر می‌خواهید Vuls را برای اسکن از راه دور تنظیم کنید.

مرحله 1 – نصب Dependencies

در این بخش، پوشه ای برای ذخیره داده های Vuls ایجاد می کنید، آخرین نسخه زبان برنامه نویسی Go را نصب می کنید و سایر بسته های مورد نیاز Vuls و وابستگی های آن را نصب می کنید.

برای این آموزش، تمام داده های مربوط به Vuls را در پوشه /usr/share/vuls-data ذخیره می کنید. با اجرای دستور زیر آن را ایجاد کنید:

sudo mkdir /usr/share/vuls-data

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

sudo chown -R sammy /usr/share/vuls-data

اکنون پوشه vuls-data را ایجاد کرده اید که فضای کاری شما خواهد بود. قبل از ادامه نصب بسته‌های مورد نیاز، ابتدا حافظه پنهان بسته منیجر را به‌روزرسانی کنید:

sudo apt update

برای دانلود و کامپایل وابستگی ها، git، gcc، make، sqlite، debian-goodies و wget را نصب خواهید کرد.

sqlite یک سیستم پایگاه داده است که در اینجا برای ذخیره اطلاعات آسیب پذیری از آن استفاده خواهید کرد. debian-goodies حاوی ابزار checkrestart است که اطلاعاتی را در مورد اینکه چه بسته هایی می توانند و باید در هر لحظه از زمان راه اندازی مجدد شوند را ارائه می دهد.

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

sudo apt install sqlite git debian-goodies gcc make wget -y

اکنون بسته های مورد نیاز را نصب کرده اید. سپس با اجرای دستور زیر، Go را با استفاده از مدیریت بسته snap نصب کنید:

sudo snap install go –classic

شما از snap برای نصب Go استفاده می‌کنید زیرا آخرین نسخه زبان را نصب می‌کند، برخلاف apt، که ممکن است نسخه قدیمی‌تر را نصب کند. کار با نسخه قدیمی توصیه نمی شود و ممکن است شما را از تکمیل این آموزش باز دارد.

برای کار کردن، Go به چند متغیر محیطی نیاز دارد که شما آنها را تنظیم خواهید کرد: GOPATH و PATH. GOPATH دایرکتوری کاری Go را مشخص می کند. PATH که شامل دایرکتوری هایی است که برنامه ها در آنها قرار می گیرند، باید گسترش یابد تا به سیستم بگوید که خود Go را کجا پیدا کند.

این متغیرهای محیطی باید هر بار که کاربر وارد سیستم می شود تنظیم شود. برای خودکار کردن این کار، یک فایل اجرایی جدید به نام go-env.sh در زیر /etc/profile.d ایجاد خواهید کرد. این باعث می شود که هر بار که کاربر وارد می شود دایرکتوری اجرا شود.

go-env.sh را با استفاده از ویرایشگر متن خود ایجاد کنید:

sudo nano /etc/profile.d/go-env.sh

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

/etc/profile.d/go-env.sh

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin:/snap/bin

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

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

در حال حاضر، go-env.sh قابل اجرا نیست. برای رفع این مشکل، با اجرای دستور زیر آن را به عنوان قابل اجرا علامت گذاری کنید:

sudo chmod +x /etc/profile.d/go-env.sh

برای جلوگیری از ورود مجدد به سیستم، می توانید go-env.sh را با اجرای:

source /etc/profile.d/go-env.sh

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

در این بخش، زبان Go را نصب کرده‌اید، متغیرهای محیطی آن را تنظیم کرده‌اید و بسته‌هایی را نصب کرده‌اید که بعداً به آنها نیاز خواهید داشت. در مراحل بعدی، برنامه های Go را که Vuls نیاز دارد دانلود و کامپایل خواهید کرد. این برنامه‌ها go-cve-dictionary و goval-dictionary هستند که Vuls از آنها برای جستجو در پایگاه‌های داده آسیب‌پذیری استفاده می‌کند.

مرحله 2 – نصب و اجرای go-cve-dictionary

در این بخش، go-cve-dictionary را دانلود و کامپایل می‌کنید، یک بسته Go که دسترسی به NVD (پایگاه ملی آسیب‌پذیری) را فراهم می‌کند. سپس، آن را اجرا می‌کنید و داده‌های آسیب‌پذیری را برای Vuls واکشی می‌کنید تا از آن استفاده کند. NVD مخزن آسیب‌پذیری‌های امنیت سایبری گزارش‌شده عمومی توسط دولت ایالات متحده است که حاوی شناسه‌های آسیب‌پذیری (CVE – آسیب‌پذیری‌های رایج و مواجهه‌ها)، خلاصه‌ها و تجزیه و تحلیل تأثیر است و در قالب قابل خواندن توسط ماشین در دسترس است.

برو بسته‌ها را تحت $GOPATH/src/ ذخیره می‌کند. شما می توانید این را با استفاده از زیر شاخه ها برای یادداشت مبدا گسترش دهید. به عنوان مثال، بسته‌های GitHub که توسط کاربر مثال کاربر ساخته شده است، در $GOPATH/src/github.com/example-user ذخیره می‌شوند.

ابتدا go-cve-dictionary را با شبیه سازی بسته Go از GitHub و سپس کامپایل کردن آن نصب خواهید کرد.

با ایجاد یک دایرکتوری برای ذخیره آن، مطابق مسیر مثال، شروع کنید:

mkdir -p $GOPATH/src/github.com/vulsio

با اجرای زیر به آن بروید:

cd $GOPATH/src/github.com/vulsio

اکنون با اجرای:

git clone https://github.com/vulsio/go-cve-dictionary.git

سپس به ریشه بسته بروید:

cd go-cve-dictionary

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

make install

به خاطر داشته باشید که اتمام این دستور ممکن است کمی طول بکشد. برای در دسترس قرار دادن آن در سطح سیستم، آن را در /usr/local/bin کپی کنید:

sudo cp $GOPATH/bin/go-cve-dictionary /usr/local/bin

go-cve-dictionary نیاز به دسترسی به دایرکتوری خروجی log دارد و به طور پیش فرض /var/log/vuls است. آن را با اجرا ایجاد کنید:

sudo mkdir /var/log/vuls

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

sudo chmod 700 /var/log/vuls

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

sudo chmod 700 /var/log/vuls

تنظیم پرچم های مجوز روی 700 دسترسی فقط به مالک را محدود می کند.

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

sudo chown -R sammy /var/log/vuls

اکنون، داده‌های آسیب‌پذیری را از NVD دریافت کرده و در فضای کاری Vuls خود ذخیره می‌کنید (/usr/share/vuls-data):

go-cve-dictionary fetch nvd –dbpath /usr/share/vuls-data/cve.sqlite3

این دستور داده‌های آسیب‌پذیری NVD را از سال 2002 تا سال جاری دریافت می‌کند و آن‌ها را در پایگاه داده تحت /usr/share/vuls-data ذخیره می‌کند.

در این مرحله، go-cve-dictionary را دانلود و نصب کرده‌اید و داده‌های NVD را برای Vuls برای استفاده بعدی واکشی کرده‌اید. در بخش بعدی، goval-dictionary را دانلود و نصب می‌کنید و داده‌های OVAL را برای اوبونتو واکشی می‌کنید.

مرحله 3 – نصب و اجرای Goval-Dictionary

در این بخش، goval-dictionary را دانلود و کامپایل می‌کنید، یک بسته Go که دسترسی به پایگاه داده OVAL را برای اوبونتو فراهم می‌کند. سپس آن را اجرا می‌کنید و داده‌های آسیب‌پذیری را برای استفاده Vuls واکشی می‌کنید. OVAL مخفف Open Vulnerability and Assessment Language است که یک زبان باز است که برای بیان بررسی‌ها برای تعیین اینکه آیا آسیب‌پذیری‌های نرم‌افزاری در یک سیستم خاص وجود دارد یا خیر استفاده می‌شود.

به پوشه $GOPATH/src/github.com/vulsio بروید:

cd $GOPATH/src/github.com/vulsio

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

git clone https://github.com/vulsio/goval-dictionary.git

وارد پوشه بسته شوید:

cd goval-dictionary

آن را با make کامپایل و نصب کنید:

make install

برای دسترسی جهانی آن را در /usr/local/bin کپی کنید:

sudo cp $GOPATH/bin/goval-dictionary /usr/local/bin

سپس، با اجرای دستور زیر، داده های OVAL را برای Ubuntu 18.x واکشی کنید:

sudo goval-dictionary fetch ubuntu –dbpath=/usr/share/vuls-data/oval.sqlite3 18

در این مرحله، goval-dictionary را دانلود و نصب کرده اید و داده های OVAL را برای Ubuntu 18.x واکشی کرده اید. در مرحله بعدی، gost را دانلود و نصب می‌کنید و داده‌های ردیاب امنیتی Debian را واکشی می‌کنید.

مرحله 4 – نصب و اجرای gost

در این بخش، gost را دانلود و کامپایل می‌کنید، بسته Go که دسترسی به ردیاب اشکال امنیتی دبیان را فراهم می‌کند. سپس آن را اجرا می‌کنید و داده‌های آسیب‌پذیری را برای Vuls واکشی می‌کنید تا از آن استفاده کند. ردیاب امنیتی اوبونتو تمام اطلاعات مربوط به وضعیت آسیب پذیری بسته های توزیع شده با اوبونتو را جمع آوری می کند.

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

cd $GOPATH/src/github.com/vulsio

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

git clone https://github.com/vulsio/gost.git

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

cd gost

آن را با make کامپایل و نصب کنید:

make install

برای دسترسی جهانی آن را در /usr/local/bin کپی کنید:

sudo cp $GOPATH/bin/gost /usr/local/bin

سپس یک فهرست فایل log برای gost ایجاد کنید:

sudo mkdir /var/log/gost

با دستور زیر دسترسی کاربر فعلی را محدود کنید:

sudo chmod 700 /var/log/gost

همانطور که قبلاً ذکر شد، تنظیم پرچم های مجوز روی 700 دسترسی فقط به مالک را محدود می کند.

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

sudo chown -R sammy /var/log/gost

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

gost fetch ubuntu –dbpath=/usr/share/vuls-data/gost.sqlite3

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

در این مرحله شما gost را دانلود و نصب کرده اید و داده ها را برای دبیان واکشی کرده اید. در مرحله بعد، Vuls را دانلود و نصب خواهید کرد.

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

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

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

mkdir -p $GOPATH/src/github.com/future-architect

به آن بروید:

cd $GOPATH/src/github.com/future-architect

با اجرای دستور زیر، Vuls را از GitHub کلون کنید:

git clone https://github.com/future-architect/vuls.git

وارد پوشه بسته شوید:

cd vuls

کامپایل و همزمان با اجرای:

make install

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

برای دسترسی جهانی آن را در /usr/local/bin کپی کنید:

sudo cp $GOPATH/bin/vuls /usr/local/bin

اکنون، یک فایل پیکربندی برای Vuls ایجاد خواهید کرد. به /usr/share/vuls-data برگردید:

cd /usr/share/vuls-data

Vuls پیکربندی خود را در یک فایل TOML ذخیره می کند که شما آن را config.toml می نامید. آن را با استفاده از ویرایشگر متن خود ایجاد کنید:

sudo nano config.toml

پیکربندی زیر را وارد کنید:

/usr/share/vuls-data/config.toml

[cveDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/cve.sqlite3"

[ovalDict]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/oval.sqlite3"

[gost]
type = "sqlite3"
SQLite3Path = "/usr/share/vuls-data/gost.sqlite3"

[servers]

[servers.localhost]
host = "localhost"
port = "local"
scanMode = [ "fast" ]
#scanMode = ["fast", "fast-root", "deep", "offline"]

 

دو بخش اول این پیکربندی (cveDict و ovalDict) Vuls را به پایگاه‌های آسیب‌پذیری که در دو مرحله آخر ایجاد کردید، نشان می‌دهند. بخش بعدی (سرورها) شروع اطلاعات مربوط به سرور را نشان می دهد. بخش های جداگانه اطلاعات مربوط به هر سرور را گروه بندی می کند. تنها سروری که Vuls با این پیکربندی مشخص شده اسکن می‌کند، سرور محلی (localhost) است.

Vuls چهار حالت اسکن را ارائه می دهد:

  • حالت سریع (پیش‌فرض): بدون دسترسی ریشه اسکن می‌کند، وابستگی ندارد و روی سرور مورد نظر بسیار سبک است.
  • حالت ریشه سریع: با امتیازات ریشه اسکن می کند و می تواند فرآیندهای ارتقا یافته، اما هنوز راه اندازی مجدد نشده را شناسایی کند.
  • حالت اسکن عمیق: مانند حالت روت سریع، اما تغییرات لاگ را بررسی می کند، که می تواند منجر به بار زیاد روی سرور مورد نظر شود.
  • حالت آفلاین: دستگاه را بدون دسترسی به اینترنت اسکن می کند و می تواند همراه با حالت های دیگر استفاده شود.
    ذخیره کنید و فایل را ببندید.

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

vuls configtest

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

 

Output

[Dec 14 09:07:28]  INFO [localhost] vuls-v0.19.0-build-20211214_090234_2b7294a
[Dec 14 09:07:28]  INFO [localhost] Validating config...
[Dec 14 09:07:28]  INFO [localhost] Detecting Server/Container OS...
[Dec 14 09:07:28]  INFO [localhost] Detecting OS of servers...
[Dec 14 09:07:28]  INFO [localhost] (1/1) Detected: localhost: ubuntu 18.04
[Dec 14 09:07:28]  INFO [localhost] Detecting OS of containers...
[Dec 14 09:07:28]  INFO [localhost] Checking Scan Modes...
[Dec 14 09:07:28]  INFO [localhost] Checking dependencies...
[Dec 14 09:07:28]  INFO [localhost] Dependencies... Pass
[Dec 14 09:07:28]  INFO [localhost] Checking sudo settings...
[Dec 14 09:07:28]  INFO [localhost] sudo ... No need
[Dec 14 09:07:28]  INFO [localhost] It can be scanned with fast scan mode even if warn or err messages are displayed due to lack of dependent packages or sudo settings in fast-root or deep scan mode
[Dec 14 09:07:28]  INFO [localhost] Scannable servers are below...
localhost

شما پیکربندی را به درستی وارد کرده اید و Vuls تشخیص داده است که می تواند سرور محلی را اسکن کند.

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

مرحله 6 – اجرای یک اسکن محلی

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

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

vuls scan

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

[Dec 14 09:07:47]  INFO [localhost] vuls-v0.19.0-build-20211214_090234_2b7294a
[Dec 14 09:07:47]  INFO [localhost] Start scanning
[Dec 14 09:07:47]  INFO [localhost] config: /usr/share/vuls-data/config.toml
[Dec 14 09:07:47]  INFO [localhost] Validating config...
[Dec 14 09:07:47]  INFO [localhost] Detecting Server/Container OS...
[Dec 14 09:07:47]  INFO [localhost] Detecting OS of servers...
[Dec 14 09:07:47]  INFO [localhost] (1/1) Detected: localhost: ubuntu 18.04
[Dec 14 09:07:47]  INFO [localhost] Detecting OS of containers...
[Dec 14 09:07:47]  INFO [localhost] Checking Scan Modes...
[Dec 14 09:07:47]  INFO [localhost] Detecting Platforms...
[Dec 14 09:07:47]  INFO [localhost] (1/1) localhost is running on other
[Dec 14 09:07:47]  INFO [localhost] Scanning OS pkg in fast mode
[Dec 14 09:07:47]  INFO [localhost] Scanning listen port...
[Dec 14 09:07:47]  INFO [localhost] Using Port Scanner: Vuls built-in Scanner


Scan Summary
================
localhost       ubuntu18.04     539 installed


To view the detail, vuls tui is useful.
To send a report, run vuls report -h.

Vuls کارهایی که در این فرآیند انجام داده را ثبت کرده است. برای مشاهده گزارشی از آسیب پذیری هایی که شناسایی کرده است، اجرا کنید:

vuls tui

Vuls نمای گزارش را به چهار پانل تقسیم می کند:

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

می توانید با فشار دادن ENTER مکان نما را در پانل ها بچرخانید و با فلش های صفحه کلید حرکت کنید. وقتی کارتان تمام شد، CTRL+C را برای خروج فشار دهید.

در این مرحله، یک اسکن محلی را اجرا کرده و نتایج را بررسی کردید. در بخش بعدی (اختیاری)، Vuls را برای اسکن چندین ماشین هدف پیکربندی خواهید کرد.

مرحله 7 – (اختیاری) پیکربندی ماشین‌های هدف چندگانه

در این بخش، Vuls را برای اسکن چندین ماشین هدف پیکربندی می‌کنید. این مستلزم پیکربندی /etc/sudoers روی هدف و پیکربندی Vuls برای اسکن هدف است.

در مرحله قبل، Vuls را برای اسکن ماشین محلی (localhost) پیکربندی کردید. شما می توانید هر تعداد سرور که می خواهید اضافه کنید، به شرطی که موارد زیر را داشته باشید:

  • IP سرور مورد نظر
  • دسترسی ریشه به سرور مورد نظر
  • یک حساب کاربری موجود در سرور مورد نظر

شما فقط می توانید از یک حساب کاربری غیر ریشه در سرور مورد نظر برای اسکن در حالت سریع استفاده کنید. برای فعال کردن اسکن در حالت‌های روت سریع و عمیق، باید فایل /etc/sudoers را در ماشین(های) مورد نظر ویرایش کنید. فایل sudoers کنترل می کند که کاربران می توانند چه دستوراتی را اجرا کنند و همچنین اینکه آیا برای دستورات مشخص شده به رمز عبور نیاز دارید یا خیر.

از آنجایی که visudo ابزاری برای تعریف قوانین برای دسترسی و دسترسی ممتاز است، شما فقط می توانید آن را به صورت root اجرا کنید. به دلیل اهمیت sudoers، فایل بدون دادن اخطار با خطا خارج نمی شود.

در سرور هدف، به عنوان root وارد شوید و با اجرای visudo، sudoers را برای ویرایش باز کنید:

visudo

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

/etc/sudoers

sammy-shark ALL=(ALL) NOPASSWD: /usr/bin/apt-get update, /usr/bin/stat *, /usr/sbin/checkrestart

این خط به sudo دستور می دهد تا به کاربر sammy-shark اجازه دهد تا آپدیت apt-get، checkrestart و هر دستوری که از stat در دسترس است را بدون ارائه رمز عبور اجرا کند.

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

Vuls از ابزار checkrestart برای بررسی بسته هایی که به روز شده اند، اما نیاز به راه اندازی مجدد دارند، استفاده می کند. برای اطمینان از اینکه سرور هدف آن را دارد، با اجرای دستور زیر آن را نصب کنید:

apt install debian-goodies -y

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

برای افزودن یک سرور جدید برای اسکن، config.toml را باز کنید و خطوط زیر را زیر علامت [سرورها] اضافه کنید:

/usr/share/vuls-data/config.toml

[servers.target_name]
host = "target_ip"
port = "22"
user = "account_username"
keyPath = "/home/sammy/.ssh/id_rsa"
scanMode = [ "deep" ] # "fast", "fast-root" or "deep"

خطوط بالا به عنوان الگویی برای افزودن سرورهای جدید عمل می کنند. به یاد داشته باشید که target_name را با نام دلخواه، target_ip را با IP سرور مورد نظر، account_username را با نام کاربری جایگزین کنید و مسیر کلید RSA خصوصی خود را ارائه دهید. Vuls از احراز هویت رمز عبور SSH پشتیبانی نمی کند، بنابراین تعیین یک مسیر کلیدی ضروری است.

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

در مرحله بعد، برای هر سرور هدفی که اضافه کرده اید، کلیدهای RSA را در دستگاه محلی تأیید خواهید کرد. برای رسیدن به این هدف، از اولین سرور خود با کلید مناسب وارد سرور مورد نظر می شوید، مانند:

ssh sammy-shark@target_ip -i /home/sammy/.ssh/id_rsa

به یاد داشته باشید که مسیر کلید RSA خصوصی خود را وارد کنید. وقتی از شما پرسیده شد که آیا می خواهید به اتصال ادامه دهید، بله را وارد کنید، سپس با فشار دادن CTRL + D از سیستم خارج شوید.

اگر در مورد باز بودن مجوزهای کلیدی با خطا مواجه شدید، با اجرای دستور زیر آنها را روی 600 تنظیم کنید:

chmod 600 account_rsa_key

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

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

vuls configtest

خروجی جزئیات همه چیزهایی را که Vuls بررسی کرده است، مانند وابستگی‌ها، دسترسی ابرکاربر و نسخه‌های سیستم‌عامل نشان می‌دهد. اگر خطایی وجود دارد، config.toml خود را با تنظیمات موجود در آموزش بررسی کنید.

در این مرحله، سرورهای هدف بیشتری را به پیکربندی Vuls خود اضافه کردید، بنابراین آنها را برای اسکن علامت گذاری کردید. در بخش بعدی، Vuls را برای اسکن دوره ای و ارسال گزارش ها به یک فضای کاری پیکربندی شده Slack پیکربندی می کنید.

مرحله 8 – پیکربندی اسکن دوره ای و گزارش به Slack

در این بخش، Vuls را پیکربندی می‌کنید تا گزارش‌ها را به Slack ارسال کند و یک cron job برای اجرای دوره‌ای اسکن Vuls ایجاد کنید.

برای استفاده از ادغام Slack، باید یک وب هوک ورودی در Slack برای فضای کاری خود داشته باشید. وب هوک های ورودی یک راه ساده برای یک برنامه کاربردی برای ارائه اطلاعات بلادرنگ از سایر برنامه ها است. در این مورد، Vuls را برای گزارش به کانال Slack خود پیکربندی می‌کنید.

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

به صفحه تنظیمات برنامه جدید هدایت خواهید شد. روی Incoming Webhooks در نوار ناوبری سمت چپ کلیک کنید.

با چرخاندن دکمه سوئیچ در کنار عنوان فعال سازی وب هوک های ورودی، وب هوک ها را فعال کنید.

بخش جدیدی در پایین صفحه باز خواهد شد. به پایین بروید و روی دکمه Add New Webhook to Workspace کلیک کنید. در صفحه بعد کانالی که می خواهید گزارش ها به آن ارسال شود را انتخاب کنید و روی Allow کلیک کنید.

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

سپس، config.toml را برای ویرایش باز کنید:

sudo nano config.toml

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

/usr/share/vuls-data/config.toml

[slack]
hookURL      = "your_hook_url"
channel      = "#your_channel_name"
authUser     = "your_username"
#notifyUsers  = ["@username"]

your_hook_URL را با URL webhook که قبلاً ذکر کردید، your_channel_name را با نام کانال مورد نظر، و your_username را با نام کاربری که وب‌هوک را ایجاد کرده است، جایگزین کنید. ذخیره کنید و فایل را ببندید.

برای آزمایش ادغام، می‌توانید با اجرای گزارش vuls گزارشی مانند زیر ایجاد کنید:

sudo vuls report -to-slack

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

می توانید برنامه Slack را بررسی کنید و تأیید کنید که Vuls با موفقیت گزارش را ارسال کرده است.

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

فایل crontab فعلی را با اجرای دستور زیر باز کنید:

crontab -e

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

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

0 0 * * * vuls scan -config=/usr/share/vuls-data/config.toml; vuls report -config=/usr/share/vuls-data/config.toml > /dev/null 2>&1

خط بالا به cron دستور می دهد که اسکن vuls و گزارش vuls را با پیکربندی داده شده هر روز در ظهر اجرا کند (در نحو cron با 0 0 * * * مشخص می شود).

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

در این مرحله، Vuls را به فضای کاری Slack خود متصل کرده‌اید و cron را برای اجرای اسکن Vuls و گزارش هر روز در ظهر پیکربندی کرده‌اید.

نتیجه

شما اکنون با موفقیت Vuls را با اسکن و گزارش خودکار روی سرور اوبونتو 18.04 راه اندازی کرده اید.

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

برچسب‌ها:VPS یا سرور مجازیVulsاوبونتو 18.04خرید سرور مجازیراهنمای سرور مجازیسرور اوبونتو 18.04سرور مجازی آمریکافایروال با Vulsنحوه استفاده از Vuls

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه نصب Node.js در اوبونتو 18.04

ورود به سایت

معرفی

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

پیش نیازها

این راهنما فرض می کند که از اوبونتو 18.04 استفاده می کنید. قبل از شروع، باید یک حساب کاربری غیر ریشه با امتیازات sudo روی سیستم خود تنظیم کنید.

نصب Node.js از مخازن پیش فرض با Apt

اوبونتو 18.04 حاوی نسخه‌ای از Node.js در مخازن پیش‌فرض خود است که می‌توان از آن برای ارائه یک تجربه ثابت در چندین سیستم استفاده کرد. در زمان نگارش، نسخه موجود در مخازن 8.10.0 است. این آخرین نسخه نخواهد بود، اما باید پایدار و برای آزمایش سریع زبان کافی باشد.

برای دریافت این نسخه می توانید از apt package manager استفاده کنید. فهرست بسته محلی خود را تازه کنید:

sudo apt update

حالا Node.js را نصب کنید:

sudo apt install nodejs

تأیید کنید که Node.js را با موفقیت نصب کرده‌اید، با جستجو در node برای شماره نسخه آن:

node -v

 

Output

v8.10.0

اگر بسته موجود در مخازن با نیازهای شما مطابقت دارد، این تنها کاری است که برای راه اندازی Node.js باید انجام دهید. در بیشتر موارد، شما همچنین می خواهید npm، مدیر بسته Node.js را نیز نصب کنید. می توانید بسته npm را با apt نصب کنید:

sudo apt install npm

این به شما امکان می دهد ماژول ها و بسته هایی را برای استفاده با Node.js نصب کنید.

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

نصب Node.js با Apt با استفاده از NodeSource PPA

برای نصب نسخه جدیدتر Node.js می توانید PPA (بایگانی بسته شخصی) را که توسط NodeSource نگهداری می شود اضافه کنید. این نسخه‌های به‌روز Node.js را نسبت به مخازن رسمی اوبونتو خواهد داشت و به شما امکان می‌دهد بین چندین نسخه موجود پلتفرم یکی را انتخاب کنید.

ابتدا PPA را نصب کنید تا به محتویات آن دسترسی داشته باشید. از فهرست اصلی خود، از curl برای بازیابی اسکریپت نصب نسخه دلخواه خود استفاده کنید، مطمئن شوید که 17.x را با رشته نسخه ترجیحی خود جایگزین کنید (در صورت متفاوت بودن):

cd ~
curl -sL https://deb.nodesource.com/setup_17.x -o nodesource_setup.sh

برای اطلاعات بیشتر در مورد نسخه های موجود می توانید به مستندات NodeSource مراجعه کنید.

در صورت تمایل، می توانید محتوای این اسکریپت را با nano (یا ویرایشگر متن دلخواه خود) بررسی کنید:

nano nodesource_setup.sh

هنگامی که از اجرای امن اسکریپت راضی شدید، از ویرایشگر متن خارج شوید. اگر از nano استفاده می‌کنید، می‌توانید با فشار دادن CTRL + X خارج شوید. سپس اسکریپت را با sudo اجرا کنید:

sudo bash nodesource_setup.sh

PPA به پیکربندی شما اضافه می شود و کش بسته محلی شما به طور خودکار به روز می شود. اکنون می توانید بسته Node.js را مانند قسمت قبل نصب کنید:

sudo apt install nodejs

با اجرای گره با پرچم -v، تأیید کنید که نسخه جدید را نصب کرده اید:

node -v

 

Output

v17.3.0

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

npm از یک فایل پیکربندی در فهرست اصلی شما برای پیگیری به‌روزرسانی‌ها استفاده می‌کند. اولین باری که npm را اجرا می کنید ایجاد می شود. برای اطمینان از نصب بودن npm و ایجاد فایل پیکربندی، دستور زیر را اجرا کنید:

npm -v

 

Output

8.3.0

برای اینکه برخی از بسته های npm کار کنند (مثلاً آنهایی که نیاز به کامپایل کد از منبع دارند)، باید بسته build-essential را نصب کنید:

sudo apt install build-essential

اکنون ابزارهای لازم برای کار با بسته های npm را دارید که نیاز به کامپایل کد از منبع دارند.

در این بخش، Node.js و npm را با استفاده از apt و NodeSource PPA با موفقیت نصب کردید. در مرحله بعد، از Node Version Manager برای نصب و مدیریت چندین نسخه Node.js استفاده خواهید کرد.

نصب Node با استفاده از Node Version Manager

یک جایگزین برای نصب Node.js استفاده از ابزاری به نام nvm، Node Version Manager (NVM) است. nvm به جای کار در سطح سیستم عامل، در سطح دایرکتوری مستقل در فهرست اصلی شما کار می کند. این بدان معناست که می‌توانید چندین نسخه مستقل Node.js را بدون تأثیر بر کل سیستم نصب کنید.

کنترل محیط خود با nvm به شما امکان می دهد به جدیدترین نسخه های Node.js دسترسی داشته باشید و نسخه های قبلی را حفظ و مدیریت کنید. با این حال، این یک ابزار متفاوت از apt است، و نسخه‌هایی از Node.js که با آن مدیریت می‌کنید با نسخه‌هایی که با apt مدیریت می‌کنید متمایز هستند.

برای نصب NVM در دستگاه اوبونتو 18.04، از صفحه GitHub پروژه بازدید کنید. دستور curl را از فایل README که در صفحه اصلی نمایش داده می شود کپی کنید تا آخرین نسخه اسکریپت نصب را دریافت کنید.

قبل از انتقال فرمان به bash، همیشه ایده خوبی است که اسکریپت را بررسی کنید تا مطمئن شوید که کاری را انجام نمی دهد که با آن موافق نیستید. با حذف | می توانید این کار را انجام دهید بخش bash در انتهای دستور curl:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh

خروجی را مرور کنید و مطمئن شوید که با تغییراتی که ایجاد می کند راحت هستید. پس از رضایت، همان دستور را با | اجرا کنید bash در انتها اضافه شده است. URL مورد استفاده شما بسته به آخرین نسخه NVM تغییر می کند، اما از هم اکنون، اسکریپت را می توان با اجرای موارد زیر دانلود و اجرا کرد:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

این اسکریپت nvm را در حساب کاربری شما نصب می کند. برای استفاده از آن، ابتدا فایل .bashrc را سورس کنید:

source ~/.bashrc

با نصب nvm، می توانید نسخه های ایزوله Node.js را نصب کنید. ابتدا از nvm بپرسید که چه نسخه هایی از Node موجود است:

nvm ls-remote

 

Output

...
        v14.18.2   (Latest LTS: Fermium)
        v15.0.0
        v15.0.1
        v15.1.0
        v15.2.0
        v15.2.1
        v15.3.0
        v15.4.0
        v15.5.0
        v15.5.1
        v15.6.0
        v15.7.0
        v15.8.0
        v15.9.0
       v15.10.0
       v15.11.0
       v15.12.0
       v15.13.0
       v15.14.0
        v16.0.0
        v16.1.0
        v16.2.0
        v16.3.0
        v16.4.0
        v16.4.1
        v16.4.2
        v16.5.0
        v16.6.0
        v16.6.1
        v16.6.2
        v16.7.0
        v16.8.0
        v16.9.0
        v16.9.1
       v16.10.0
       v16.11.0
       v16.11.1
       v16.12.0
       v16.13.0   (LTS: Gallium)
       v16.13.1   (Latest LTS: Gallium)
        v17.0.0
        v17.0.1
        v17.1.0
        v17.2.0
        v17.3.0

این یک لیست بسیار طولانی است، اما می توانید با وارد کردن هر یک از نسخه های منتشر شده لیست، نسخه ای از Node را نصب کنید. به عنوان مثال، برای دریافت نسخه v16.13.1، موارد زیر را اجرا کنید:

nvm install v16.13.1

Output
Now using node v16.13.1 (npm v8.1.2)

گاهی اوقات nvm به استفاده از آخرین نسخه نصب شده تغییر می کند. اما می‌توانید به nvm بگویید از نسخه‌ای که دانلود کرده‌اید استفاده کند (اگر متفاوت است):

nvm use v16.13.1

 

Output

Now using node v16.13.1 (npm v8.1.2)

گاهی اوقات nvm به استفاده از آخرین نسخه نصب شده تغییر می کند. اما می‌توانید به nvm بگویید از نسخه‌ای که دانلود کرده‌اید استفاده کند (اگر متفاوت است):

nvm use v16.13.1

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

node -v

 

Output

v16.13.1

اگر چندین نسخه Node را نصب کرده‌اید، می‌توانید ls را اجرا کنید تا لیستی از آنها را دریافت کنید:

nvm ls

 

Output

->     v16.13.1
         system
default -> v16.13.1
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.13.1) (default)
stable -> 16.13 (-> v16.13.1) (default)
lts/* -> lts/gallium (-> v16.13.1)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.8 (-> N/A)
lts/fermium -> v14.18.2 (-> N/A)
lts/gallium -> v16.13.1

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

nvm alias default 16.13.1

 

Output

default -> 16.13.1 (-> v16.13.1)

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

nvm use default

 

Output

Now using node v16.13.1 (npm v8.1.2)

هر نسخه از Node بسته های خود را پیگیری می کند و npm برای مدیریت آنها در دسترس است.

همچنین می توانید بسته های نصب npm را در دایرکتوری ./node_modules پروژه Node.js داشته باشید. برای نصب ماژول اکسپرس از دستور زیر استفاده کنید:

npm install express

 

Output

added 50 packages, and audited 51 packages in 4s

2 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 8.1.2 -> 8.3.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.3.0
npm notice Run npm install -g npm@8.3.0 to update!
npm notice

اگر می‌خواهید ماژول را به صورت سراسری نصب کنید و آن را با استفاده از نسخه مشابه Node.js برای پروژه‌های دیگر در دسترس قرار دهید، می‌توانید پرچم -g را اضافه کنید:

npm install -g express

 

Output

added 50 packages, and audited 51 packages in 1s

2 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

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

~/.nvm/versions/node/16.13.1/lib/node_modules/express

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

npm link express

با اجرای موارد زیر می‌توانید درباره گزینه‌های موجود با nvm اطلاعات بیشتری کسب کنید:

nvm help

شما با استفاده از Node Version Manager، nvm، Node را با موفقیت نصب کرده اید تا نسخه های مختلف Node را نصب و مدیریت کنید.

حذف Node.js

بسته به نسخه ای که می خواهید هدف بگیرید، می توانید Node.js را با استفاده از apt یا nvm حذف نصب کنید. برای حذف نسخه پیش فرض مخزن، از apt در سطح سیستم استفاده خواهید کرد. این دستور بسته را حذف می کند و فایل های پیکربندی را حفظ می کند. اگر قصد دارید در آینده بسته را دوباره نصب کنید، این کار مفید است:

sudo apt remove nodejs

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

sudo apt purge nodejs

به عنوان آخرین مرحله، می‌توانید بسته‌های استفاده‌نشده را که به‌طور خودکار با بسته حذف شده نصب شده‌اند حذف کنید:

sudo apt autoremove

برای حذف نصب نسخه‌ای از Node.js که با استفاده از nvm فعال کرده‌اید، ابتدا مشخص کنید نسخه‌ای که می‌خواهید حذف کنید، نسخه فعال فعلی است یا خیر:

nvm current

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

nvm uninstall node_version

 

Output

Uninstalled node node_version

این دستور نسخه انتخاب شده Node.js را حذف نصب می کند.

اگر نسخه ای که می خواهید حذف کنید نسخه فعال فعلی است، ابتدا باید nvm را غیرفعال کنید تا تغییرات خود را فعال کنید:

nvm deactivate

اکنون می توانید نسخه فعلی را با استفاده از دستور uninstall که قبلاً استفاده شده است، حذف نصب کنید. با این کار همه فایل‌های مرتبط با نسخه هدفمند Node.js به جز فایل‌های کش که می‌توانند برای نصب مجدد استفاده شوند، حذف می‌شوند.

نتیجه

راه‌های زیادی برای راه‌اندازی و اجرای Node.js در سرور اوبونتو 18.04 وجود دارد. شرایط شما تعیین می کند که کدام یک از روش ها برای نیازهای شما بهترین است. در حالی که استفاده از نسخه بسته بندی شده در مخزن اوبونتو یک روش است، استفاده از nvm یا NodeSource PPA انعطاف پذیری بیشتری را ارائه می دهد.

 

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/

 

برچسب‌ها:UbuntuUbuntu 18.04اتصال به سرور مجازیانواع سرور مجازیاوبونتو 18.04پلت فرم جاوا اسکریپتجاوا اسکریپتخرید سرور مجازینصب Node.js

  • behnam gol mohamadi
  • ۰
  • ۰

 نحوه کار با فایل های فشرده در Node.js

ورود به سایت

 

معرفی

کار با فایل ها یکی از کارهای رایج در بین توسعه دهندگان است. با افزایش حجم فایل های شما، فضای قابل توجهی روی هارد دیسک شما اشغال می شود. دیر یا زود ممکن است لازم باشد فایل ها را به سرورهای دیگر منتقل کنید یا چندین فایل را از دستگاه محلی خود به سیستم عامل های مختلف آپلود کنید. برخی از این پلتفرم ها محدودیت اندازه فایل دارند و فایل های بزرگ را نمی پذیرند. برای حل این مشکل، می توانید فایل ها را در یک فایل ZIP گروه بندی کنید. فایل ZIP یک فرمت آرشیو است که فایل ها را با الگوریتم فشرده سازی بدون اتلاف فشرده و فشرده می کند. الگوریتم می تواند داده ها را بدون از دست دادن داده ها بازسازی کند. در Node.js، می توانید از ماژول adm-zip برای ایجاد و خواندن آرشیوهای ZIP استفاده کنید.

در این آموزش از ماژول adm-zip برای فشرده سازی، خواندن و از حالت فشرده خارج کردن فایل ها استفاده خواهید کرد. ابتدا چندین فایل را با استفاده از adm-zip در یک آرشیو ZIP ترکیب می‌کنید. سپس محتویات بایگانی ZIP را فهرست می کنید. پس از آن، یک فایل را به یک بایگانی ZIP موجود اضافه می‌کنید و در نهایت، یک بایگانی ZIP را در یک فهرست استخراج می‌کنید.

پیش نیازها

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

  • نصب Node.js روی محیط محلی یا سرور شما
  • آشنایی با نحوه نوشتن یک برنامه Node.js
  • درک اولیه از برنامه نویسی ناهمزمان در جاوا اسکریپت.
  • آشنایی با نحوه کار با فایل ها در Node.js.

مرحله 1 – راه اندازی پروژه

در این مرحله، دایرکتوری پروژه خود را ایجاد کرده و adm-zip را به عنوان یک وابستگی نصب می‌کنید. این دایرکتوری جایی است که شما فایل های برنامه خود را نگه می دارید. همچنین دایرکتوری دیگری حاوی فایل های متنی و تصویر ایجاد خواهید کرد. شما این فهرست را در بخش بعدی بایگانی خواهید کرد.

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

  • mkdir zip_app

با دستور cd به پوشه جدید ایجاد شده بروید:

cd zip_app

در داخل دایرکتوری، یک فایل package.json برای مدیریت وابستگی های پروژه ایجاد کنید:

npm init -y

گزینه -y یک فایل پیش فرض package.json ایجاد می کند.

بعد، adm-zip را با دستور npm install نصب کنید:

npm install adm-zip

پس از اجرای دستور، npm adm-zip را نصب کرده و فایل package.json را به روز می کند.

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

mkdir test && cd test

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

file1.txt را ایجاد کنید و با استفاده از دستور زیر آن را با محتوای ساختگی پر کنید:

yes “dummy content” | head -n 100000 > file1.txt

دستور yes محتوای ساختگی رشته را به طور مکرر ثبت می کند. با استفاده از دستور pipe |، خروجی را از دستور yes ارسال می کنید تا به عنوان ورودی دستور head استفاده شود. دستور head بخشی از ورودی داده شده را در خروجی استاندارد چاپ می کند. گزینه -n تعداد خطوطی که باید در خروجی استاندارد نوشته شود را مشخص می کند. در نهایت، خروجی سر را با استفاده از > به فایل جدید file1.txt هدایت می‌کنید.

یک فایل دوم با رشته “محتوای ساختگی” تکرار شده 300000 خط ایجاد کنید:

yes “dummy content” | head -n 300000 > file2.txt

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

yes “dummy content” | head -n 600000 > file3.txt

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

curl -O https://assets.vpsgol.net/how-to-process-images-in-node-js-with-sharp/underwater.png

با دستور زیر به دایرکتوری اصلی پروژه برگردید:

cd ..

.. شما را به دایرکتوری والد که zip_app است منتقل می کند.

اکنون دایرکتوری پروژه را ایجاد کرده اید، adm-zip را نصب کرده اید و یک دایرکتوری با فایل ها برای بایگانی ایجاد کرده اید. در مرحله بعدی، یک دایرکتوری را با استفاده از ماژول adm-zip بایگانی خواهید کرد.

مرحله 2 – ایجاد یک آرشیو ZIP

در این مرحله از adm-zip برای فشرده سازی و بایگانی دایرکتوری که در قسمت قبل ایجاد کرده اید استفاده می کنید.

برای بایگانی دایرکتوری، ماژول adm-zip را وارد کرده و از روش addLocalFolder() ماژول برای اضافه کردن دایرکتوری به شی ZIP ماژول adm-zip استفاده می کنید. پس از آن، از متد writeZip() ماژول برای ذخیره آرشیو در سیستم محلی خود استفاده خواهید کرد.

یک فایل جدید createArchive.js در ویرایشگر متن دلخواه خود ایجاد و باز کنید. این آموزش از nano، یک ویرایشگر متن خط فرمان استفاده می کند:

nano createArchive.js

سپس، در ماژول adm-zip در فایل createArchive.js خود نیاز دارید:

zip_app/createArchive.js

const AdmZip = require("adm-zip");

ماژول adm-zip کلاسی را ارائه می دهد که حاوی متدهایی برای ایجاد آرشیو ZIP است.

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

در فایل createArchive.js خود، کد هایلایت شده زیر را اضافه کنید:

zip_app/createArchive.js

const AdmZip = require("adm-zip");

async function createZipArchive() {
  const zip = new AdmZip();
  const outputFile = "test.zip";
  zip.addLocalFolder("./test");
  zip.writeZip(outputFile);
  console.log(`Created ${outputFile} successfully`);
}

createZipArchive();

 

createZipArchive یک تابع ناهمزمان است که یک آرشیو ZIP از یک دایرکتوری مشخص ایجاد می کند. چیزی که آن را ناهمزمان می کند، کلمه کلیدی async است که قبل از برچسب تابع تعریف کرده اید. در داخل تابع، نمونه‌ای از ماژول adm-zip ایجاد می‌کنید که روش‌هایی را ارائه می‌کند که می‌توانید برای خواندن و ایجاد آرشیو استفاده کنید. هنگامی که یک نمونه ایجاد می کنید، adm-zip یک ZIP درون حافظه ایجاد می کند که در آن می توانید فایل ها یا دایرکتوری ها را اضافه کنید.

در مرحله بعد، نام بایگانی را تعریف کرده و آن را در متغیر outputDir ذخیره می کنید. برای افزودن دایرکتوری آزمایشی به آرشیو درون حافظه، متد addLocalFolder() را از adm-zip با مسیر دایرکتوری به عنوان آرگومان فراخوانی می کنید.

پس از اضافه شدن دایرکتوری، شما متد writeZip() را از adm-zip با متغیری حاوی نام آرشیو ZIP فراخوانی می کنید. متد writeZip() آرشیو را در دیسک محلی شما ذخیره می کند.

پس از انجام این کار، console.log() را فراخوانی کنید تا ثبت کنید که فایل ZIP با موفقیت ایجاد شده است.

در نهایت، تابع createZipArchive() را فراخوانی می کنید.

قبل از اجرای فایل، کد را در یک بلوک try…catch بپیچید تا خطاهای زمان اجرا را مدیریت کنید:

zip_app/createArchive.js

const AdmZip = require("adm-zip");

async function createZipArchive() {
  try {
    const zip = new AdmZip();
    const outputFile = "test.zip";
    zip.addLocalFolder("./test");
    zip.writeZip(outputFile);
    console.log(`Created ${outputFile} successfully`);
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

createZipArchive();

در داخل بلوک try، کد سعی می کند یک بایگانی ZIP ایجاد کند. در صورت موفقیت آمیز بودن، تابع ()createZipArchive با پرش از بلوک catch خارج می شود. اگر ایجاد یک بایگانی ZIP باعث خطا شود، اجرا به بلوک catch پرش می‌کند و خطا را در کنسول ثبت می‌کند.

با CTRL+X فایل را در نانو ذخیره کرده و از آن خارج شوید. برای ذخیره تغییرات، y را وارد کنید و با فشار دادن ENTER در ویندوز یا کلید RETURN در مک، فایل را تأیید کنید.

فایل createArchive.js را با استفاده از دستور node اجرا کنید:

node createArchive.js

خروجی زیر را دریافت خواهید کرد:

 

Output

Created test.zip successfully

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

ls

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

 

Output

createArchive.js  node_modules  package-lock.json
package.json  test  test.zip

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

اندازه دایرکتوری تست را با استفاده از دستور du بررسی کنید:

du -h test

پرچم -h به du دستور می دهد که اندازه فهرست را در قالبی قابل خواندن توسط انسان نشان دهد.

پس از اجرای دستور، خروجی زیر را دریافت خواهید کرد:

 

Output

15M test

سپس، اندازه فایل بایگانی test.zip را بررسی کنید:

du -h test.zip

دستور du خروجی زیر را ثبت می کند:

 

Output

760K    test.zip

همانطور که می بینید، ایجاد فایل ZIP اندازه دایرکتوری را از 15 مگابایت (مگابایت) به 760 کیلوبایت (KB) کاهش داده است، که یک تفاوت بزرگ است. فایل ZIP قابل حمل تر و اندازه کوچکتر است.

اکنون که یک بایگانی ZIP ایجاد کردید، آماده فهرست کردن محتویات در یک فایل ZIP هستید.

مرحله 3 – فهرست کردن فایل ها در آرشیو ZIP

در این مرحله، با استفاده از adm-zip، تمام فایل‌های موجود در آرشیو ZIP را می‌خوانید و فهرست می‌کنید. برای انجام این کار، ماژول adm-zip را با مسیر آرشیو ZIP خود نمونه سازی می کنید. سپس متد ()getEntries ماژول را فراخوانی می کنید که آرایه ای از اشیاء را برمی گرداند. هر شی اطلاعات مهمی در مورد یک آیتم در آرشیو ZIP دارد. برای فهرست کردن فایل‌ها، روی آرایه تکرار می‌کنید و از شی به نام فایل دسترسی پیدا می‌کنید و آن را در کنسول وارد می‌کنید.

readArchive.js را در ویرایشگر متن دلخواه خود ایجاد و باز کنید:

nano readArchive.js

در readArchive.js خود، کد زیر را برای خواندن و فهرست کردن محتویات یک بایگانی ZIP اضافه کنید:

zip_app/readArchive.js

const AdmZip = require("adm-zip");

async function readZipArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);

    for (const zipEntry of zip.getEntries()) {
      console.log(zipEntry.toString());
    }
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

readZipArchive("./test.zip");

ابتدا به ماژول adm-zip نیاز دارید.

در مرحله بعد، تابع readZipArchive() را تعریف می کنید که یک تابع ناهمزمان است. در داخل تابع، یک نمونه از adm-zip با مسیر فایل ZIP که می‌خواهید بخوانید ایجاد می‌کنید. مسیر فایل توسط پارامتر filepath ارائه می شود. adm-zip فایل را می خواند و آن را تجزیه می کند.

پس از خواندن بایگانی، یک عبارت for…of تعریف می کنید که روی اشیاء در آرایه ای تکرار می شود که متد getEntries() از adm-zip هنگام فراخوانی آن را برمی گرداند. در هر تکرار، شی به متغیر zipEntry اختصاص داده می شود. در داخل حلقه، شما شی را به رشته ای تبدیل می کنید که شی را با استفاده از متد Node.js toString() نشان می دهد، سپس با استفاده از متد console.log() آن را در کنسول وارد می کنید.

در نهایت، تابع readZipArchive() را با مسیر فایل آرشیو ZIP به عنوان آرگومان فراخوانی می کنید.

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

node readArchive.js

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

 

Output

{
    "entryName": "file1.txt",
    "name": "file1.txt",
    "comment": "",
    "isDirectory": false,
    "header": {
        ...
    },
    "compressedData": "<27547 bytes buffer>",
    "data": "<null>"
}
...

کنسول چهار شی را ثبت می کند. سایر اشیاء ویرایش شده اند تا آموزش مختصر بماند.

هر فایل در بایگانی با یک شی شبیه به آنچه در خروجی قبلی است نشان داده می شود. برای دریافت نام فایل برای هر فایل، باید به ویژگی name دسترسی داشته باشید.

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

zip_app/readArchive.js

const AdmZip = require("adm-zip");

async function readZipArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);

    for (const zipEntry of zip.getEntries()) {
      console.log(zipEntry.name);
    }
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

readZipArchive("./test.zip");

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

node readArchive.js

با اجرای فایل خروجی زیر حاصل می شود:

 

Output

file1.txt
file2.txt
file3.txt
underwater.png

اکنون خروجی نام فایل هر فایل را در آرشیو ZIP ثبت می کند.

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

مرحله 4 – افزودن یک فایل به یک بایگانی موجود

در این مرحله، یک فایل ایجاد می‌کنید و بدون استخراج آن، آن را به بایگانی ZIP که قبلا ایجاد کرده‌اید، اضافه می‌کنید. ابتدا، با ایجاد یک نمونه adm-zip، آرشیو ZIP را می خوانید. دوم، شما از متد ()addFile ماژول برای اضافه کردن فایل در ZIP استفاده می کنید. در نهایت، بایگانی ZIP را در سیستم محلی ذخیره خواهید کرد.

یک فایل file4.txt با محتوای ساختگی که 600000 خط تکرار شده است ایجاد کنید:

yes “dummy content” | head -n 600000 > file4.txt

updateArchive.js را در ویرایشگر متن خود ایجاد و باز کنید:

nano updateArchive.js

در ماژول adm-zip و ماژول fs که به شما امکان می دهد با فایل های موجود در فایل updateArchive.js خود کار کنید، نیاز دارید:

const AdmZip = require("adm-zip");
const fs = require("fs").promises;

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

سپس در فایل updateArchive.js خود، کد برجسته شده زیر را برای افزودن یک فایل جدید به بایگانی ZIP اضافه کنید:

zip_app/updateArchive.js

const AdmZip = require("adm-zip");
const fs = require("fs").promises;

async function updateZipArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);

    content = await fs.readFile("./file4.txt");
    zip.addFile("file4.txt", content);
    zip.writeZip(filepath);
    console.log(`Updated ${filepath} successfully`);
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

updateZipArchive("./test.zip");

updateZipArchive یک تابع ناهمزمان است که یک فایل را در سیستم فایل می خواند و آن را به یک ZIP موجود اضافه می کند. در تابع، شما یک نمونه از adm-zip را با مسیر فایل آرشیو ZIP در مسیر فایل به عنوان پارامتر ایجاد می کنید. در مرحله بعد، متد readFile() ماژول fs را برای خواندن فایل در سیستم فایل فراخوانی می کنید. متد readFile() یک وعده را برمی‌گرداند که با کلمه کلیدی await حل می‌کنید (wait فقط در توابع ناهمزمان معتبر است). پس از حل شدن، متد یک شی بافر را برمی گرداند که حاوی محتویات فایل است.

در مرحله بعد، متد addFile() را از adm-zip فراخوانی می کنید. این روش دو آرگومان می گیرد. آرگومان اول نام فایلی است که می خواهید به آرشیو اضافه کنید و آرگومان دوم شی بافر حاوی محتویات فایلی است که متد readFile() می خواند.

پس از آن، متد writeZip ماژول adm-zip را برای ذخیره و نوشتن تغییرات جدید در آرشیو ZIP فراخوانی می‌کنید. پس از انجام این کار، متد console.log() را برای ثبت یک پیام موفقیت آمیز فراخوانی می کنید.

در نهایت، تابع updateZipArchive() را با مسیر فایل آرشیو Zip به عنوان آرگومان فراخوانی می کنید.

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

node updateArchive.js

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

 

Output

Updated ./test.zip successfully

اکنون، تأیید کنید که آرشیو ZIP حاوی فایل جدید است. فایل readArchive.js را اجرا کنید تا محتویات آرشیو ZIP را با دستور زیر فهرست کنید:

node readArchive.js

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

 

Output

Updated ./test.zip successfully

اکنون، تأیید کنید که آرشیو ZIP حاوی فایل جدید است. فایل readArchive.js را اجرا کنید تا محتویات آرشیو ZIP را با دستور زیر فهرست کنید:

node readArchive.js

خروجی زیر را دریافت خواهید کرد:

file1.txt
file2.txt
file3.txt
file4.txt
underwater.png

این تایید می کند که فایل به ZIP اضافه شده است.

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

مرحله 5 – استخراج یک بایگانی فشرده

در این مرحله، تمام محتویات یک بایگانی ZIP را می خوانید و در یک دایرکتوری استخراج می کنید. برای استخراج بایگانی ZIP، adm-zip را با مسیر فایل بایگانی نمونه‌سازی می‌کنید. پس از آن، متد ()extractAllTo ماژول را با نام دایرکتوری که می‌خواهید محتوای ZIP استخراج‌شده شما در آن قرار گیرد، فراخوانی می‌کنید.

ExtractArchive.js را در ویرایشگر متن خود ایجاد و باز کنید:

nano extractArchive.js

در ماژول adm-zip و ماژول مسیر در فایل extractArchive.js خود نیاز دارید:

zip_app/extractArchive.js

const AdmZip = require("adm-zip");
const path = require("path");

ماژول مسیر روش های مفیدی را برای برخورد با مسیرهای فایل ارائه می دهد.

هنوز در فایل extractArchive.js خود، کد هایلایت شده زیر را برای استخراج آرشیو اضافه کنید:

zip_app/extractArchive.js

const AdmZip = require("adm-zip");
const path = require("path");

async function extractArchive(filepath) {
  try {
    const zip = new AdmZip(filepath);
    const outputDir = `${path.parse(filepath).name}_extracted`;
    zip.extractAllTo(outputDir);

    console.log(`Extracted to "${outputDir}" successfully`);
  } catch (e) {
    console.log(`Something went wrong. ${e}`);
  }
}

extractArchive("./test.zip");

ExtractArchive() یک تابع ناهمزمان است که پارامتری حاوی مسیر فایل بایگانی ZIP را می گیرد. در داخل تابع، adm-zip را با مسیر فایل بایگانی ZIP ارائه شده توسط پارامتر filepath، نمونه سازی می کنید.

بعد، شما یک الگو را به معنای واقعی کلمه تعریف می کنید. در داخل مکان‌نمای تحت اللفظی الگو (${})، متد parse() را از ماژول path با مسیر فایل فراخوانی می‌کنید. متد parse() یک شی را برمی گرداند. برای دریافت نام فایل ZIP بدون پسوند فایل، ویژگی name را به شیئی که متد parse() برمی گرداند اضافه می کنید. هنگامی که نام بایگانی برگردانده شد، الگو به معنای واقعی کلمه مقدار را با رشته _extracted درون یابی می کند. سپس مقدار در متغیر outputDir ذخیره می شود. این نام دایرکتوری استخراج شده خواهد بود.

در مرحله بعد، متد ExtractAllTo ماژول adm-zip را با نام دایرکتوری ذخیره شده در outputDir برای استخراج محتویات در دایرکتوری فراخوانی می کنید. پس از آن، برای ثبت یک پیام موفقیت آمیز، console.log() را فراخوانی می کنید.

در نهایت، تابع extractArchive() را با مسیر آرشیو ZIP فراخوانی می کنید.

فایل خود را ذخیره کنید و از ویرایشگر خارج شوید، سپس فایل extractArchive.js را با دستور زیر اجرا کنید:

node extractArchive.js

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

 

Output

Extracted to "test_extracted" successfully

تأیید کنید که دایرکتوری حاوی محتویات ZIP ایجاد شده است:

ls

خروجی زیر را دریافت خواهید کرد:

 

Output

createArchive.js   file4.txt   package-lock.json
readArchive.js  test.zip        updateArchive.js
extractArchive.js  node_modules  package.json
test           test_extracted

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

cd test_extracted

فهرست مطالب در دایرکتوری:

ls

خروجی زیر را دریافت خواهید کرد:

 

Output

file1.txt  file2.txt  file3.txt  file4.txt  underwater.png

اکنون می توانید ببینید که دایرکتوری دارای تمام فایل هایی است که در دایرکتوری اصلی بودند.

شما اکنون محتوای آرشیو ZIP را در یک فهرست استخراج کرده اید.

نتیجه

در این آموزش، شما یک بایگانی ZIP ایجاد کردید، محتویات آن را فهرست کردید، یک فایل جدید به آرشیو اضافه کردید و تمام محتوای آن را با استفاده از ماژول adm-zip در یک فهرست استخراج کردید. این به عنوان پایه خوبی برای کار با آرشیوهای ZIP در Node.js خواهد بود.

 

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/

 

برچسب‌ها:Node.jsپلتفرم جاواجاواخرید سرور مجازیسرورسرور مجازیفشرده سازی در Node.jsنصب Node.js

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه نصب Nginx در اوبونتو 18.04

ورود به سایت

 

معرفی

Nginx یکی از محبوب ترین سرورهای وب در جهان است و وظیفه میزبانی برخی از بزرگترین و پر بازدیدترین سایت های اینترنتی را بر عهده دارد. در بیشتر موارد از Apache بیشتر منابع دوستانه است و می تواند به عنوان وب سرور یا پروکسی معکوس استفاده شود.

در این راهنما ، نحوه نصب Nginx را روی سرور Ubuntu 18.04 و فایل ها و فهرستهای مهم Nginx خواهید آموخت.

پیش نیازها

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

هنگامی که یک حساب کاربری در دسترس دارید ، برای شروع به عنوان کاربر غیر ریشه خود وارد شوید.

مرحله 1 – نصب Nginx

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

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

sudo apt update
sudo apt install nginx

پس از قبول روند ، apt Nginx و هرگونه وابستگی مورد نیاز به سرور شما را نصب می کند.

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

قبل ازتست Nginx ، نرم افزار فایروال باید تنظیم شود تا دسترسی به سرویس امکان پذیر باشد. Nginx هنگام نصب خود را به عنوان یک سرویس با ufw ثبت می کند و دسترسی به Nginx را ساده می کند.

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

sudo ufw app list

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

 

Output

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

این لیست سه نمایه موجود برای Nginx را نمایش می دهد:

  • Nginx Full: این نمایه هم پورت 80 (ترافیک معمولی و رمزگذاری نشده وب) و هم پورت 443 (ترافیک رمزگذاری شده TLS/SSL) را باز می کند.
  • Nginx HTTP: این نمایه فقط پورت 80 را باز می کند (ترافیک وب معمولی و رمزگذاری نشده)
  • Nginx HTTPS: این نمایه فقط پورت 443 را باز می کند (ترافیک رمزگذاری شده TLS/SSL)

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

با تایپ موارد زیر می توانید این مورد را فعال کنید:

sudo ufw allow ‘Nginx HTTP’

سپس ، تغییر را تأیید کنید:

sudo ufw status

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

 

Output

Status: active

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

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

مرحله 3 – بررسی سرور وب خود

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

برای اطمینان از اینکه سرویس در حال اجرا است ، با سیستم systemd init تماس بگیرید:

systemctl status nginx

 

Output

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
   Active: active (running) since Fri 2021-10-01 21:36:15 UTC; 35s ago
     Docs: man:nginx(8)
 Main PID: 9039 (nginx)
    Tasks: 2 (limit: 1151)
   CGroup: /system.slice/nginx.service
           ├─9039 nginx: master process /usr/sbin/nginx -g daemon on; master_pro
           └─9041 nginx: worker process

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

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

سعی کنید موارد زیر را در خط فرمان سرور خود تایپ کنید:

ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s/\/.*$//’

چند خط دریافت خواهید کرد. می توانید هر کدام را در مرورگر وب خود امتحان کنید که آیا کار می کند یا خیر.

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

curl -4 icanhazip.com

وقتی آدرس IP سرور خود را دارید ، آن را در نوار آدرس مرورگر خود وارد کنید:

http://your_server_ip

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

این صفحه شامل Nginx است تا از صحت عملکرد سرور اطمینان حاصل شود.

مرحله 4 – مدیریت فرایند Nginx

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

برای توقف سرور وب ، موارد زیر را تایپ کنید:

sudo systemctl stop nginx

برای راه اندازی وب سرور در صورت توقف ، موارد زیر را تایپ کنید:

sudo systemctl start nginx

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

sudo systemctl restart nginx

اگر به سادگی تغییرات پیکربندی را انجام می دهید ، اغلب می توانید Nginx را بدون قطع اتصال به جای راه اندازی مجدد بارگیری مجدد کنید. برای این کار موارد زیر را تایپ کنید:

sudo systemctl reload nginx

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

sudo systemctl disable nginx

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

sudo systemctl enable nginx

هنگامی که سرور دوباره بوت می شود ، Nginx باید به طور خودکار شروع به کار کند.

مرحله 5 – راه اندازی بلوک های سرور (توصیه می شود)

هنگام استفاده از وب سرور Nginx ، می توان از بلوک های سرور (مشابه میزبان مجازی در Apache) برای درج جزئیات پیکربندی و میزبانی بیش از یک دامنه از یک سرور استفاده کرد. ما یک دامنه به نام your_domain ایجاد می کنیم ، اما شما باید نام دامنه خود را جایگزین آن کنید. برای کسب اطلاعات بیشتر در مورد تنظیم نام دامنه با vpsgol ، به مقدمه ما در vpsgol DNS مراجعه کنید.

Nginx در اوبونتو 18.04 دارای یک بلوک سرور است که به طور پیش فرض فعال است و پیکربندی شده است تا اسناد خارج از فهرست را در/var/www/html ارائه دهد. اگرچه این کار برای یک سایت واحد خوب عمل می کند ، اما اگر از چندین سایت میزبانی می کنید ، ممکن است مشکل باشد. به جای تغییر/var/www/html ، بیایید یک ساختار فهرست در/var/www برای سایت your_domain ایجاد کنیم ، در صورتی که درخواست مشتری با هیچ یک مطابقت نداشته باشد ،/var/www/html را به عنوان دایرکتوری پیش فرض در جای خود قرار دهیم.

با استفاده از پرچم -p برای ایجاد هر دایرکتوری اصلی لازم ، دایرکتوری را برای domain_s خود به شرح زیر ایجاد کنید:

sudo mkdir -p /var/www/your_domain/html

سپس ، مالکیت دایرکتوری را با متغیر محیط USER $ تعیین کنید:

sudo chown -R $USER:$USER /var/www/your_domain/html

اگر مقدار umask خود را تغییر نداده اید ، مجوز ریشه های وب شما باید صحیح باشد ، اما می توانید با تایپ موارد زیر مطمئن شوید:

sudo chmod -R 755 /var/www/your_domain

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

nano /var/www/your_domain/html/index.html

 

داخل ، نمونه HTML زیر را اضافه کنید:

/var/www/your_domain/html/index.html

<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success! The your_domain server block is working!</h1>
    </body>
</html>

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

برای اینکه Nginx این محتوا را ارائه دهد ، لازم است یک بلوک سرور با دستورالعمل های صحیح ایجاد کنید. به جای تغییر مستقیم فایل پیکربندی پیش فرض ، یک فایل جدید در آدرس/etc/nginx/sites-available/your_domain قرار دهید:

sudo nano /etc/nginx/sites-available/your_domain

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

/etc/nginx/sites-available/your_domain

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

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain.com www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

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

در مرحله بعد ، فایل را با ایجاد پیوندی از آن به فهرست راهنمای سایتها فعال کنید ، که Nginx هنگام راه اندازی آن را می خواند:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

دو بلوک سرور در حال حاضر فعال و پیکربندی شده است تا به درخواست ها بر اساس دستورات listen و server_name آنها پاسخ دهد (در مورد نحوه پردازش این دستورالعمل ها توسط Nginx در اینجا بیشتر بخوانید):

  • your_domain: به درخواست های مربوط به دامنه و www.your_domain شما پاسخ می دهد.
  • پیش فرض: به هرگونه درخواست در پورت 80 که با دو بلوک دیگر مطابقت ندارد پاسخ می دهد.

برای جلوگیری از مشکل احتمالی حافظه سطل هش که ممکن است از افزودن نام سرور اضافی بوجود آید ، لازم است یک مقدار واحد در فایل /etc/nginx/nginx.conf تنظیم شود. فایل را باز کنید:

sudo nano /etc/nginx/nginx.conf

دستور server_names_hash_bucket_size را پیدا کرده و علامت # را حذف کنید تا خط را کامنت نگذارید:

/etc/nginx/nginx.conf

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

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

در مرحله بعد ، آزمایش کنید تا مطمئن شوید هیچ خطای نحوی در هیچ یک از فایل های Nginx شما وجود ندارد:

sudo nginx -t

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

sudo systemctl restart nginx

Nginx اکنون باید به نام دامنه شما خدمت کند. می توانید این مورد را با حرکت به http: // your_domain ، جایی که باید چیزی شبیه به این را مشاهده کنید ، آزمایش کنید:

مرحله 6 – آشنایی با فایلها و فهرستهای مهم Nginx

اکنون که می دانید چگونه سرویس Nginx را مدیریت کنید ، باید چند دقیقه وقت بگذارید تا با چند فهرست و فایل مهم آشنا شوید.

محتوا

  • /var/www/html: محتوای واقعی وب ، که به طور پیش فرض فقط شامل صفحه پیش فرض Nginx است که قبلاً مشاهده کردید ، از فهرست/var/www/html ارائه نمی شود. با تغییر پرونده های پیکربندی Nginx می توانید این مورد را تغییر دهید.

پیکربندی سرور

  • /etc/nginx: فهرست پیکربندی Nginx. همه فایلهای پیکربندی Nginx در اینجا قرار دارند.
  • /etc/nginx/nginx.conf: فایل اصلی پیکربندی Nginx. این می تواند برای ایجاد تغییر در پیکربندی جهانی Nginx اصلاح شود.
  • /etc/nginx/sites-available/: دایرکتوری ای که می توان بلوک های سرور هر سایت را در آن ذخیره کرد. Nginx از فایلهای پیکربندی موجود در این پوشه استفاده نمی کند مگر اینکه آنها به فهرست راهنمای سایتها پیوند خورده باشند. به طور معمول ، تمام پیکربندی بلوک سرور در این فهرست انجام می شود و سپس با پیوند دادن به فهرست دیگر فعال می شود.
  • /etc/nginx/sites-enabled/: دایرکتوری ای که بلوک های سرور فعال شده در سایت ذخیره می شوند. به طور معمول ، اینها با پیوند دادن به فایلهای پیکربندی موجود در فهرست سایتهای موجود ایجاد می شوند.
  • /etc/nginx/snippets: این فهرست شامل قطعات پیکربندی است که می توان آنها را در جاهای دیگر پیکربندی Nginx قرار داد. بخشهای پیکربندی به طور بالقوه قابل تکرار ، کاندیدهای خوبی برای تغییر شکل در قطعات هستند.

Server Logs

  • /var/log/nginx/access.log: هر درخواستی از سرور وب شما در این فایل لاگ ثبت می شود مگر اینکه Nginx به گونه دیگری پیکربندی شده باشد.
  • /var/log/nginx/error.log: هرگونه خطای Nginx در این گزارش ثبت می شود.

نتیجه

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

برچسب‌ها:Ubuntu 18.04اوبونتوخرید سرور مجازیسرور Nginxسرور Ubuntu 18.04سرور اوبونتو 18.04سرور لینوکسفروش سرورنصب Nginx

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه راه اندازی WireGuard در Rocky Linux 8

ورود به سایت

 

معرفی

WireGuard یک شبکه خصوصی مجازی سبک (VPN) است که از اتصالات IPv4 و IPv6 پشتیبانی می کند. VPN به شما امکان می دهد شبکه های غیرقابل اعتماد را مانند یک شبکه خصوصی پشت سر بگذارید. این به شما این آزادی را می دهد که از طریق تلفن هوشمند یا لپ تاپ خود با خیال راحت و ایمن به اینترنت متصل شوید ، وقتی به یک شبکه غیرقابل اعتماد متصل هستید ، مانند WiFi در هتل یا کافی شاپ.

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

در مقایسه ، سایر نرم افزارهای VPN مانند OpenVPN و IPSec از امنیت لایه انتقال (TLS) و گواهینامه ها برای احراز هویت و ایجاد تونل های رمزگذاری شده بین سیستم ها استفاده می کنند. نسخه های مختلف TLS شامل پشتیبانی از صدها مجموعه و الگوریتم رمزنگاری مختلف است ، و در حالی که این امر انعطاف پذیری بالایی را برای پشتیبانی از مشتریان مختلف امکان پذیر می کند ، همچنین پیکربندی VPN ای را که از TLS وقت گیرتر ، پیچیده تر و مستعد خطا است ، ایجاد می کند.

در این آموزش ، شما WireGuard را روی سرور Rocky Linux 8 راه اندازی می کنید و سپس دستگاه دیگری را پیکربندی می کنید تا با استفاده از هر دو اتصال IPv4 و IPv6 (که معمولاً به عنوان اتصال دو پشته نامیده می شود) به آن به صورت همتا متصل شود. همچنین می توانید نحوه هدایت ترافیک اینترنتی همتا را از طریق سرور WireGuard در پیکربندی دروازه ، علاوه بر استفاده از VPN برای یک تونل peer-to-peer رمزگذاری شده ، یاد بگیرید.

برای اهداف این آموزش ، ما سیستم Rocky Linux 8 دیگری را به عنوان همکار (که به آن مشتری نیز گفته می شود) در سرور WireGuard پیکربندی می کنیم. آموزش های بعدی این مجموعه نحوه نصب و اجرای WireGuard را در سیستم ها و دستگاه های Windows ، macOS ، Android و iOS توضیح می دهد.

پیش نیازها

برای پیگیری این آموزش ، شما نیاز دارید:

  • یک سرور Rocky Linux 8 با یک کاربر sudo غیر روت و فایروال فعال است. برای تنظیم این ، می توانید راه اندازی سرور اولیه ما را با آموزش Rocky Linux 8 دنبال کنید. ما در این راهنما از این به عنوان سرور WireGuard یاد می کنیم.
  • شما به یک ماشین مشتری نیاز دارید که از آن برای اتصال به سرور WireGuard خود استفاده کنید. در این آموزش ما به این دستگاه به عنوان WireGuard Peer اشاره می کنیم. برای اهداف این آموزش ، توصیه می شود از دستگاه محلی خود به عنوان WireGuard Peer استفاده کنید ، اما در صورت تمایل می توانید از سرورهای راه دور یا تلفن های همراه به عنوان مشتری استفاده کنید. اگر از سیستم از راه دور استفاده می کنید ، حتماً در قسمت های بعدی این آموزش ، تمام قسمت های اختیاری را دنبال کنید ، در غیر این صورت ممکن است خود را از سیستم خارج کنید.
  • برای استفاده از WireGuard با IPv6 ، همچنین باید اطمینان حاصل کنید که سرور شما پیکربندی شده است تا از این نوع ترافیک پشتیبانی کند. اگر می خواهید پشتیبانی IPv6 را با WireGuard فعال کنید و از قطره vpsgol استفاده می کنید ، لطفاً به این صفحه مستندات نحوه فعال کردن IPv6 در Droplets مراجعه کنید. هنگام ایجاد Droplet یا پس از آن با استفاده از دستورالعمل های آن صفحه ، می توانید پشتیبانی IPv6 را اضافه کنید.

مرحله 1 – نصب WireGuard و ایجاد یک جفت کلید

اولین قدم در این آموزش نصب WireGuard روی سرور شماست. برای شروع ، باید دو مخزن نرم افزار اضافی به فهرست بسته سرور خود ، epel و elrepo اضافه کنید. برای نصب آنها دستور زیر را اجرا کنید. توجه داشته باشید اگر در این جلسه برای اولین بار است که از sudo استفاده می کنید ، از شما خواسته می شود که رمز عبور کاربر sudo خود را ارائه دهید:

sudo dnf install elrepo-release epel-release

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

sudo dnf install kmod-wireguard wireguard-tools

اکنون که WireGuard را نصب کرده اید ، گام بعدی ایجاد تعمیر کلید خصوصی و عمومی برای سرور است. برای ایجاد کلیدها از دستورات wg genkey و wg pubkey استفاده می کنید و سپس کلید خصوصی را به فایل پیکربندی WireGuard اضافه می کنید.

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

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

umask 077

umask 077 اطمینان می دهد که فقط صاحب یک دایرکتوری می تواند در آن وارد شود و فقط صاحب یک فایل می تواند آن را بخواند یا بنویسد. مجدداً توجه داشته باشید که وقتی از پوسته خود خارج می شوید و دوباره وارد سیستم می شوید ، umask شما به مقدار پیش فرض 022 بازنشانی می شود ، که به شما اجازه می دهد فایل های جدیدی را که در سیستم ایجاد شده است بخوانید.

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

wg genkey | sudo tee /etc/wireguard/private.key

شما باید یک خط خروجی کدگذاری base64 دریافت کنید که کلید خصوصی است. یک کپی از خروجی نیز در فایل /etc/wireguard/private.key برای مرجع بعدی توسط قسمت tee فرمان ذخیره می شود. کلید خصوصی خروجی را با دقت یادداشت کنید زیرا بعداً در این بخش باید آن را به فایل پیکربندی WireGuard اضافه کنید.

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

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

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

  • sudo cat /etc/wireguard/private.key: این دستور فایل کلید خصوصی را می خواند و آن را به جریان خروجی استاندارد منتقل می کند.
  • wg pubkey: فرمان دوم خروجی فرمان اول را به عنوان ورودی استاندارد خود می گیرد و برای تولید یک کلید عمومی پردازش می کند.
  • sudo tee /etc/wireguard/public.key: آخرین فرمان خروجی فرمان تولید کلید عمومی را می گیرد و آن را به پرونده ای با نام /etc/wireguard/public.key هدایت می کند.

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

مرحله 2 – انتخاب آدرس های IPv4 و IPv6

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

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

مرحله 2 (الف) – انتخاب محدوده IPv4

اگر از سرور WireGuard خود با همتایان IPv4 استفاده می کنید ، سرور نیاز به طیف وسیعی از آدرس های IPv4 خصوصی دارد که برای مشتریان و رابط تونل آن استفاده می شود. شما می توانید طیف وسیعی از آدرس های IP را از بلوک های آدرس رزرو شده زیر انتخاب کنید (اگر می خواهید درباره نحوه تخصیص این بلوک ها از مشخصات RFC 1918 بیشتر بدانید):

  • 10.0.0.0 to 10.255.255.255 (10/8 prefix)
  • 172.16.0.0 to 172.31.255.255 (172.16/12 prefix)
  • 192.168.0.0 to 192.168.255.255 (192.168/16 prefix)

برای اهداف این آموزش ، از 10.8.0.0/24 به عنوان یک بلوک آدرس IP از اولین محدوده IP های رزرو شده استفاده خواهیم کرد. این محدوده تا 255 اتصال مختلف مختلف را امکان پذیر می کند ، و به طور کلی نباید آدرس های متداخل یا متناقض با سایر محدوده های IP خصوصی داشته باشد. اگر این محدوده مثال با شبکه های شما سازگار نیست ، می توانید طیف وسیعی از آدرس هایی را انتخاب کنید که با پیکربندی شبکه شما کار می کند.

سرور WireGuard از یک آدرس IP واحد برای آدرس IPv4 تونل خصوصی خود استفاده می کند. ما از 10.8.0.1/24 در اینجا استفاده می کنیم ، اما از هر آدرسی در محدوده 10.8.0.1 تا 10.8.0.255 می توان استفاده کرد. اگر از چیزی متفاوت از 10.8.0.1/24 استفاده می کنید ، آدرس IP مورد نظر خود را یادداشت کنید. شما این آدرس IPv4 را به فایل پیکربندی که در مرحله 3 تعریف کرده اید – ایجاد پیکربندی سرور WireGuard اضافه می کنید

مرحله 2 (ب) – انتخاب محدوده IPv6

اگر از WireGuard با IPv6 استفاده می کنید ، باید پیشوند آدرس منحصر به فرد IPv6 محلی منحصر به فرد را بر اساس الگوریتم RFC 4193 ایجاد کنید. آدرس هایی که با WireGuard استفاده می کنید با یک رابط مجازی تونل مرتبط خواهند بود. برای ایجاد یک پیشوند تصادفی و منحصر به فرد IPv6 در بلوک رزرو شده fd00 ::/8 آدرسهای خصوصی IPv6 ، باید چند مرحله را تکمیل کنید.

طبق RFC ، راه توصیه شده برای به دست آوردن یک پیشوند IPv6 منحصر به فرد این است که زمان روز را با یک مقدار شناسایی منحصر به فرد از یک سیستم مانند شماره سریال یا شناسه دستگاه ترکیب کنید. سپس این مقادیر هش شده و کوتاه می شوند و در نتیجه مجموعه ای از بیت ها را می توان به عنوان آدرس منحصر به فرد در بلوک IP های خصوصی fd00 ::/8 رزرو شده استفاده کرد.

برای شروع تولید محدوده IPv6 برای سرور WireGuard ، یک علامت زمان 64 بیتی را با استفاده از ابزار date با دستور زیر جمع آوری کنید:

date +%s%N

از سال 1970-01-01 00:00:00 UTC ترکیبی با هم ، عددی مانند زیر دریافت خواهید کرد ، که تعداد ثانیه ها (٪ s در دستور date) و نانو ثانیه (٪ N) است:

 

Output

1628101352127592197

مقدار را برای استفاده بعداً در این بخش در جایی ثبت کنید. در مرحله بعد ، مقدار id-machine برای سرور خود را از فایل/var/lib/dbus/machine-id کپی کنید. این شناسه مختص سیستم شماست و تا زمانی که سرور وجود دارد نباید تغییر کند.

cat /var/lib/dbus/machine-id

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

 

/var/lib/dbus/machine-id

20086c25853947c7aeee2ca1ea849d7d

اکنون باید زمان بندی را با machine-id ترکیب کرده و مقدار حاصل را با استفاده از الگوریتم SHA-1 هش کنید. دستور از قالب زیر استفاده می کند:

printf <timestamp><machine-id> | sha1sum

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

printf 162810135212759219720086c25853947c7aeee2ca1ea849d7d | sha1sum

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

 

Output

4f267c51857d6dc93a0bca107bca2f0d86fac3bc  -

توجه داشته باشید که خروجی دستور sha1sum بصورت هگزا دسیمال است ، بنابراین خروجی از دو کاراکتر برای نشان دادن یک بایت داده استفاده می کند. به عنوان مثال 4f و 26 در خروجی مثال دو بایت اول داده های هش شده هستند.

الگوریتم موجود در RFC فقط به حداقل 40 بیت یا 5 بایت خروجی هش شده نیاز دارد. از دستور cut برای چاپ 5 بایت رمزگذاری شده هگزا دسیمال از هش استفاده کنید:

printf 4f267c51857d6dc93a0bca107bca2f0d86fac3bc | cut -c 31-

آرگومان -c به دستور cut می گوید که فقط مجموعه مشخصی از کاراکترها را انتخاب کنید. آرگومان 31 به cut می گوید که همه کاراکترها را از موقعیت 31 تا انتهای خط ورودی چاپ کنید.

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

 

Output

0d86fac3bc

در این خروجی مثال ، مجموعه بایت ها عبارتند از: 0d 86 fa c3 bc.

اکنون می توانید پیشوند شبکه IPv6 منحصر به فرد خود را با افزودن 5 بایت ایجاد شده با پیشوند fd بسازید و هر 2 بایت را با یک: colon برای خوانایی جدا کنید. از آنجا که هر زیر شبکه در پیشوند منحصر به فرد شما می تواند در مجموع 18،446،744،073،709،551،616 آدرس IPv6 احتمالی را در خود جای دهد ، می توانید برای سادگی زیر شبکه را به اندازه استاندارد 64 /محدود کنید.

با استفاده از بایت هایی که قبلاً با اندازه زیر شبکه /64 ایجاد شده بود ، پیشوند به شرح زیر خواهد بود:

 

Unique Local IPv6 Address Prefix

fd0d:86fa:c3bc::/64

این محدوده fd0d: 86fa: c3bc ::/64 چیزی است که شما برای اختصاص آدرس IP جداگانه به واسط های تونل WireGuard خود در سرور و همکاران استفاده خواهید کرد. برای اختصاص IP برای سرور ، 1 را پس از نویسه های نهایی :: اضافه کنید. آدرس حاصله fd0d: 86fa: c3bc :: 1/64 خواهد بود. همسالان می توانند از هر IP در محدوده استفاده کنند ، اما به طور معمول هر بار که یک همتا اضافه می کنید ، مقدار را به یک افزایش می دهید ، به عنوان مثال fd0d: 86fa: c3bc :: 2/64. IP را یادداشت کرده و پیکربندی WireGuard Server را در قسمت بعدی این آموزش انجام دهید.

مرحله 3 – ایجاد پیکربندی سرور WireGuard

قبل از ایجاد پیکربندی سرور WireGuard ، به اطلاعات زیر نیاز دارید:

  1. مطمئن شوید که کلید خصوصی موجود در مرحله 1 را دارید – نصب WireGuard و ایجاد یک جفت کلید.
  2. اگر از WireGuard با IPv4 استفاده می کنید ، به آدرس IP ای که در مرحله 2 (a) برای سرور انتخاب کرده اید نیاز دارید – انتخاب محدوده IPv4 ، که در این مثال 10.8.0.1/24 است.
  3. اگر از WireGuard با IPv6 استفاده می کنید ، به آدرس IP سروری که در مرحله 2 (ب) ایجاد کرده اید – انتخاب محدوده IPv6) نیاز دارید. در این مثال IP fd0d: 86fa: c3bc :: 1/64 است.

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

sudo vi /etc/wireguard/wg0.conf

خطوط زیر را به فایل اضافه کنید و کلید خصوصی خود را به جای مقدار مشخص شده base64_encoded_private_key_goes_here و آدرس (های) IP در خط آدرس جایگزین کنید. اگر می خواهید WireGuard در پورت دیگری در دسترس باشد ، می توانید خط ListenPort را تغییر دهید.

i را فشار دهید تا vi وارد حالت درج شود و سپس خطوط زیر را اضافه کنید:

 

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = base64_encoded_private_key_goes_here
Address = 10.8.0.1/24, fd0d:86fa:c3bc::1/64
ListenPort = 51820
SaveConfig = true

خط SaveConfig تضمین می کند که وقتی رابط WireGuard خاموش می شود ، هرگونه تغییر در فایل پیکربندی ذخیره می شود.

پس از اتمام اعمال تغییرات ، ESC و سپس: wq را فشار دهید تا تغییرات را در فایل بنویسید و خارج شوید. شما در حال حاضر پیکربندی اولیه سرور را دارید که می توانید بسته به نحوه استفاده از سرور WireGuard VPN خود ، بر اساس آن اقدام کنید.

مرحله 4 – تنظیم پیکربندی شبکه WireGuard Server

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

برای پیکربندی حمل و نقل ، فایل /etc/sysctl.conf را با استفاده از vi یا ویرایشگر دلخواه خود باز کنید:

sudo vi /etc/sysctl.conf

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

/etc/sysctl.conf

net.ipv4.ip_forward=1

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

/etc/sysctl.conf

net.ipv6.conf.all.forwarding=1

اگر از IPv4 و IPv6 استفاده می کنید ، مطمئن شوید که هر دو خط را وارد کرده اید. پس از اتمام کار فایل را ذخیره و ببندید.

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

sudo sysctl -p

 

Output

net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1

اکنون سرور WireGuard شما می تواند ترافیک ورودی را از دستگاه مجازی اترنت VPN به سرورهای دیگر و از آنجا به اینترنت عمومی هدایت کند. استفاده از این پیکربندی به شما امکان می دهد تمام ترافیک وب را از WireGuard Peer خود از طریق آدرس IP سرور خود مسیریابی کنید و آدرس IP عمومی مشتری شما به طور م hiddenثر پنهان می شود.

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

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

در این بخش پیکربندی WireGuard Server را ویرایش می کنید تا قوانین فایروال cmd فایروال را اضافه کنید که باعث می شود ترافیک به سمت سرور و کلاینت ها به درستی مسیریابی شود. مانند بخش قبل ، اگر از WireGuard VPN خود برای اتصال دستگاه به دستگاه برای دسترسی به منابع محدود شده برای VPN خود استفاده می کنید ، این مرحله را رد کنید.

برای افزودن قوانین فایروال به سرور WireGuard ، برخی از قوانین دائمی را ایجاد می کنید که از پیکربندی صحیح سرور در هنگام راه اندازی مجدد اطمینان حاصل می کند. برای دسترسی به سرویس WireGuard در پورت UDP 51820 موارد زیر را اجرا کنید:

sudo firewall-cmd –zone=public –add-port=51820/udp –permanent

در مرحله بعد باید دستگاه wg0 را به منطقه داخلی اضافه کنید ، که به ترافیک رابط VPN اجازه می دهد تا به رابط های دیگر در سرور WireGuard برسد. اگر از سرور به عنوان دروازه VPN برای تمام ترافیک اینترنت Peer استفاده می کنید ، این تنظیم بسیار مهم است. اگر در آینده تونل های WireGuard بیشتری به سرور خود اضافه می کنید ، حتماً دستگاه های آنها را به منطقه داخلی یا مورد اطمینان نیز اضافه کنید.

برای افزودن رابط wg0 به منطقه داخلی موارد زیر را اجرا کنید:

sudo firewall-cmd –zone=internal –add-interface=wg0 –permanent

در نهایت ، اگر از سرور WireGuard به عنوان دروازه VPN استفاده می کنید ، باید یک قانون ماسکراس را به منطقه عمومی اضافه کنید. Masquerading برای بازنویسی ترافیکی که در یک رابط داخلی وارد می شود (در این مورد wg0) استفاده می شود تا به نظر برسد که مستقیماً از آدرس های عمومی IPv4 یا IPv6 سرور WireGuard سرچشمه می گیرد.

دستورات زیر را برای فعال کردن مخفی سازی ، جایگزینی در محدوده شبکه IPv4 و IPv6 خود به جای مقادیر برجسته ، اجرا کنید:

sudo firewall-cmd –zone=public –add-rich-rule=’rule family=ipv4 source address=10.8.0.0/24 masquerade’ –permanent
sudo firewall-cmd –zone=public –add-rich-rule=’rule family=ipv6 source address=fd0d:86fa:c3bc::/64 masquerade’ –permanent

اکنون فایروال را مجدداً بارگذاری کنید تا تغییرات اعمال شده و از دائمی بودن آنها اطمینان حاصل کنید:

sudo firewall-cmd –reload

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

sudo firewall-cmd –zone=public –list-all

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

 

Output

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 51820/udp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
    rule family="ipv4" source address="10.8.0.0/24" masquerade
    rule family="ipv6" source address="fd0d:86fa:c3bc::/64" masquerade

مقادیر برجسته شده حاکی از قاعده ای است که اجازه می دهد ترافیک UDP در پورت 51820 موجود باشد و مخفی سازی برای هر یک از شبکه های ذکر شده فعال است.

همچنین می توانید با استفاده از دستور زیر تأیید کنید که قانون ارسال داخلی وجود دارد:

sudo firewall-cmd –zone=internal –list-interfaces

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

 

Output

wg0

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

مرحله 6 – راه اندازی سرور WireGuard

WireGuard را می توان پیکربندی کرد تا با استفاده از اسکریپت wg-quick خود به عنوان یک سرویس systemd اجرا شود. در حالی که می توانید به صورت دستی از دستور wg برای ایجاد تونل در هر زمان که می خواهید از VPN استفاده کنید استفاده کنید ، انجام این کار یک فرآیند دستی است که تکراری و مستعد خطا می شود. در عوض ، می توانید از systemctl برای مدیریت تونل با کمک اسکریپت wg-quick استفاده کنید.

استفاده از سرویس systemd به این معنی است که می توانید WireGuard را برای راه اندازی در هنگام راه اندازی پیکربندی کنید تا بتوانید در هر زمان که سرور در حال اجرا است به VPN خود متصل شوید. برای انجام این کار ، سرویس wg-quick را برای تونل wg0 که با افزودن آن به systemctl تعریف کرده اید ، فعال کنید:

sudo systemctl enable wg-quick@wg0.service

توجه داشته باشید که فرمان نام تونل wg0 را به عنوان بخشی از نام سرویس مشخص می کند. این نام به فایل پیکربندی /etc/wireguard/wg0.conf مربوط می شود. این رویکرد برای نامگذاری به این معنی است که می توانید هر تعداد دلخواه که از سرور خود استفاده می کنید تونل VPN جداگانه ایجاد کنید. هر تونل می تواند شامل IPv4 ، IPv6 و تنظیمات فایروال مشتری باشد.

حالا سرویس را شروع کنید:

sudo systemctl start wg-quick@wg0.service

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

sudo systemctl status wg-quick@wg0.service

 

Output

● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
   Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; vendor preset: disabled)
   Active: active (exited) since Fri 2021-09-17 19:58:14 UTC; 6 days ago
     Docs: man:wg-quick(8)
           man:wg(8)
           https://www.wireguard.com/
           https://www.wireguard.com/quickstart/
           https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
           https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
 Main PID: 22924 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 11188)
   Memory: 0B
   CGroup: /system.slice/system-wg\x2dquick.slice/wg-quick@wg0.service

Sep 17 19:58:14 wg0 systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip link add wg0 type wireguard
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] wg setconf wg0 /dev/fd/63
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip -6 address add fd0d:86fa:c3bc::1/64 dev wg0
Sep 17 19:58:14 wg0 wg-quick[22924]: [#] ip link set mtu 1420 up dev wg0
Sep 17 19:58:14 wg0 systemd[1]: Started WireGuard via wg-quick(8) for wg0.

توجه کنید که چگونه خروجی دستورات ip را که برای ایجاد دستگاه مجازی wg0 استفاده می شود نشان می دهد و آدرس IPv4 و IPv6 را که به فایل پیکربندی اضافه کرده اید به آن اختصاص می دهد. اگر می خواهید پیکربندی دستی VPN را پیکربندی کنید ، می توانید از این قوانین برای عیب یابی تونل استفاده کنید ، یا با خود دستور wg.

با سرور پیکربندی و اجرا ، گام بعدی این است که دستگاه مشتری خود را به صورت WireGuard Peer پیکربندی کرده و به سرور WireGuard متصل شوید.

مرحله 7 – پیکربندی WireGuard Peer

پیکربندی یک همتای WireGuard مشابه راه اندازی WireGuard Server است. هنگامی که نرم افزار سرویس گیرنده را نصب کردید ، یک جفت کلید عمومی و خصوصی ایجاد می کنید ، در مورد آدرس IP یا آدرس برای همتای خود تصمیم می گیرید ، یک فایل پیکربندی برای همتا تعریف می کنید و سپس با استفاده از اسکریپت wg-quick تونل را راه اندازی می کنید.

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

برای پیکربندی WireGuard Peer ، مطمئن شوید که بسته WireGuard را با استفاده از دستورات dnf زیر نصب کرده اید. در اجرای همکار WireGuard:

sudo dnf install elrepo-release epel-release
sudo dnf install kmod-wireguard wireguard-tools

ایجاد جفت کلید WireGuard Peer’s Key

در مرحله بعد ، باید جفت کلید را در همتا با استفاده از مراحل مشابهی که در سرور استفاده می کنید ایجاد کنید. از دستگاه محلی یا سرور راه دور خود که به عنوان همکار عمل می کند ، دستور زیر را برای تنظیم umask روی 077 اجرا کنید:

umask 077

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

wg genkey | sudo tee /etc/wireguard/private.key

مجدداً یک خط خروجی کد شده base64 دریافت خواهید کرد که کلید خصوصی است. یک نسخه از خروجی نیز در /etc/wireguard/private.key ذخیره می شود. کلید خصوصی خروجی را با دقت یادداشت کنید زیرا بعداً در این بخش باید آن را به فایل پیکربندی WireGuard اضافه کنید.

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

sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

مجدداً یک خط خروجی کد شده base64 دریافت خواهید کرد که کلید عمومی WireGuard Peer شما است. آن را در جایی برای مرجع کپی کنید ، زیرا برای ایجاد یک اتصال رمزگذاری شده ، باید کلید عمومی را در سرور WireGuard توزیع کنید.

ایجاد فایل پیکربندی WireGuard Peer

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

برای فایل پیکربندی به چند قطعه اطلاعات نیاز دارید:

  • base64 کلید خصوصی را که در همتا ایجاد کرده اید رمزگذاری کرد.
  • محدوده آدرس IPv4 و IPv6 که در سرور WireGuard تعریف کرده اید.
  • base64 کلید عمومی را از سرور WireGuard رمزگذاری کرد.
  • آدرس IP عمومی و شماره پورت سرور WireGuard. معمولاً این آدرس IPv4 خواهد بود ، اما اگر سرور شما دارای آدرس IPv6 است و دستگاه سرویس گیرنده شما دارای اتصال IPv6 به اینترنت است ، می توانید به جای IPv4 از این آدرس استفاده کنید.

با تمام این اطلاعات موجود ، یک فایل /etc/wireguard/wg0.conf جدید در دستگاه WireGuard Peer با استفاده از vi یا ویرایشگر دلخواه خود باز کنید:

sudo vi /etc/wireguard/wg0.conf

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

 

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = base64_encoded_peer_private_key_goes_here
Address = 10.8.0.2/24
Address = fd0d:86fa:c3bc::2/64

[Peer]
PublicKey = base64_encoded_server_public_key_goes_here
AllowedIPs = 10.8.0.0/24, fd0d:86fa:c3bc::/64
Endpoint = 203.0.113.1:51820

 

توجه کنید که چگونه اولین خط آدرس از آدرس IPv4 از زیر شبکه 10.8.0.0/24 که قبلاً انتخاب کرده اید استفاده می کند. این آدرس IP می تواند هر چیزی در زیر شبکه باشد مگر اینکه با IP سرور متفاوت باشد. افزایش آدرس ها به میزان 1 در هر بار افزودن یک همتا به طور کلی ساده ترین راه برای تخصیص IP است.

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

بخش قابل توجه دیگر فایل آخرین خط AllowedIPs است. این دو محدوده IPv4 و IPv6 به همکاران دستور می دهند فقط در صورتی ترافیک از طریق VPN ارسال کنند که سیستم مقصد دارای آدرس IP در هر محدوده باشد. با استفاده از دستورالعمل AllowedIPs ، می توانید VPN را بر روی همتا محدود کنید تا فقط به سایر خدمات و خدمات مشابه در VPN متصل شود ، یا می توانید تنظیماتی را انجام دهید که تمام ترافیک VPN را تونل گذاری کرده و از سرور WireGuard به عنوان دروازه استفاده کنید.

اگر فقط از IPv4 استفاده می کنید ، محدوده fd0d: 86fa: c3bc ::/64 (شامل کاما) را حذف کنید. برعکس ، اگر فقط از IPv6 استفاده می کنید ، فقط پیشوند fd0d: 86fa: c3bc ::/64 را وارد کنید و محدوده 10.8.0.0/24 IPv4 را کنار بگذارید.

در هر دو مورد ، اگر می خواهید تمام ترافیک همسالان خود را از طریق VPN ارسال کنید و از سرور WireGuard به عنوان دروازه ای برای همه ترافیک استفاده کنید ، می توانید از 0.0.0.0/0 ، که نشان دهنده کل فضای آدرس IPv4 است ، و :: /0 برای کل فضای آدرس IPv6.

(اختیاری) پیکربندی یک همتا برای مسیریابی تمام ترافیک در تونل

اگر تصمیم گرفته اید تمام ترافیک همکاران خود را از طریق تونل با استفاده از مسیرهای 0.0.0.0/0 یا ::/0 مسیریابی کنید و همتا یک سیستم از راه دور است ، باید مراحل این بخش را تکمیل کنید. اگر همتای شما یک سیستم محلی است ، بهتر است از این بخش صرف نظر کنید.

برای همسالان از راه دور که از طریق SSH یا پروتکل دیگری با استفاده از آدرس IP عمومی به آنها دسترسی پیدا می کنید ، باید برخی قوانین اضافی را به فایل wg0.conf همتا اضافه کنید. این قوانین تضمین می کند که شما هنوز می توانید از خارج از تونل به سیستم متصل شوید. در غیر این صورت ، هنگامی که تونل ایجاد می شود ، تمام ترافیکی که معمولاً در رابط شبکه عمومی انجام می شود ، به درستی جهت دور زدن رابط تونل wg0 هدایت نمی شوند و منجر به یک سیستم از راه دور می شود.

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

ip route list table main default

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

 

Output

default via 203.0.113.1 dev eth0 proto static

به آدرس IP برجسته 203.0.113.1 درگاه برای استفاده بعدی و eth0 دستگاه توجه کنید. ممکن است نام دستگاه شما متفاوت باشد. اگر چنین است ، آن را به جای eth0 در دستورات زیر جایگزین کنید.

سپس با بررسی دستگاه با دستور نشان دادن آدرس IP آدرس عمومی سیستم را بیابید:

ip -brief address show eth0

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

 

Output

eth0             UP             203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

در این خروجی مثال ، IP برجسته 203.0.113.5 (بدون دنباله /20) آدرس عمومی است که به دستگاه eth0 اختصاص داده شده است که باید به پیکربندی WireGuard اضافه کنید.

اکنون فایل /etc/wireguard/wg0.conf WireGuard Peer را با vi یا ویرایشگر دلخواه خود باز کنید.

sudo vi /etc/wireguard/wg0.conf

قبل از خط [Peer] ، 4 خط زیر را اضافه کنید:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

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

  • PostUp = ip rule add table 200 from 203.0.113.5 – این فرمان یک قاعده ایجاد می کند که هنگام ورود IP با آدرس عمومی 203.0.113.5 سیستم ، هرگونه ورودی مسیریابی در جدول شماره 200 را بررسی می کند.
  • PostUp = ip route add table 200 default by 203.0.113.1 – این دستور اطمینان می دهد که هر ترافیکی که توسط جدول 200 پردازش می شود ، به جای رابط WireGuard ، از دروازه 203.0.113.1 برای مسیریابی استفاده می کند.
  • خطوط PreDown هنگام خاموش شدن تونل ، قانون و مسیر سفارشی را حذف می کند.

اگر تمام ترافیک همکاران خود را از طریق VPN مسیریابی می کنید ، مطمئن شوید که در sysctl و firewall-cmd درست در سرور WireGuard در مرحله 4-تنظیم پیکربندی شبکه WireGuard سرور و مرحله 5-پیکربندی فایروال سرور WireGuard پیکربندی کرده اید.

(اختیاری) پیکربندی حل کننده های DNS WireGuard Peer

اگر از سرور WireGuard به عنوان یک دروازه VPN برای همه ترافیک همکاران خود استفاده می کنید ، باید خطی را به بخش [رابط] اضافه کنید که حل کننده های DNS را مشخص می کند. اگر این تنظیم را اضافه نکنید ، ممکن است درخواست های DNS شما توسط VPN محافظت نشود ، یا ممکن است به ارائه دهنده خدمات اینترنت شما یا سایر اشخاص ثالث فاش شود.

اگر فقط از WireGuard برای دسترسی به منابع در شبکه VPN یا پیکربندی peer-to-peer استفاده می کنید ، می توانید این بخش را رد کنید.

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

cat /etc/resolv.conf

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

 

Output

; Created by cloud-init on instance boot automatically, do not edit.
;
nameserver 67.207.67.2
nameserver 67.207.67.3

آدرس های IP خروجی راه حل های DNS هستند که سرور از آنها استفاده می کند. بسته به نیاز خود می توانید از همه یا همه آنها یا فقط IPv4 یا IPv6 استفاده کنید. حل کننده هایی را که استفاده می کنید یادداشت کنید.

در مرحله بعد باید حل کننده های انتخابی خود را به فایل پیکربندی WireGuard Peer اضافه کنید. دوباره به WireGuard Peer برگردید ، فایل /etc/wireguard/wg0.conf را با استفاده از vi یا ویرایشگر دلخواه باز کنید:

sudo vi /etc/wireguard/wg0.conf

قبل از خط [Peer] موارد زیر را اضافه کنید:

DNS = 67.207.67.2 67.207.67.3

[Peer]
. . .

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

در مرحله بعد ، سرویس حل شده با سیستم را در Peer فعال و راه اندازی کنید تا وقتی تونل ایجاد شد ، حل کننده های DNS Peer به روز شود:

sudo systemctl enable systemd-resolved

اگر Rocky Linux و احتمالاً سایر توزیع های مشتق از RedHat مانند CentOS یا Fedora در حال اجرا هستند ، باید سیستم همتای خود را در این مرحله راه اندازی مجدد کنید. اگر آن را راه اندازی مجدد نکنید ، فایل /etc/resolv.conf هنگام راه اندازی تونل به دلیل اشکالی در برنامه های systemd-حل شده یا ابزارهای حفاظتی ، مجوزهای صحیح را تنظیم نمی کند. WireGuard Peer را با دستور زیر راه اندازی مجدد کنید:

sudo reboot

با وجود همه این تنظیمات حل کننده DNS و راه اندازی مجدد همکار ، اکنون آماده هستید که کلید عمومی همکار را به سرور اضافه کنید و سپس تونل WireGuard را روی همتا راه اندازی کنید.

مرحله 8 – افزودن کلید عمومی Peer به سرور WireGuard

قبل از اتصال همتا به سرور ، مهم است که کلید عمومی همتا را به سرور WireGuard اضافه کنید. این مرحله تضمین می کند که می توانید ترافیک را از طریق VPN متصل و مسیریابی کنید. بدون اتمام این مرحله ، سرور WireGuard به همکاران اجازه ارسال یا دریافت ترافیک از طریق تونل را نمی دهد.

با اجرای موارد زیر ، مطمئن شوید که نسخه ای از کلید عمومی کد شده base64 را برای WireGuard Peer در اختیار دارید:

sudo cat /etc/wireguard/public.key

 

Output

PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

حالا وارد سرور WireGuard شده و دستور زیر را اجرا کنید:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd0d:86fa:c3bc::2

توجه داشته باشید که قسمت مجاز-ips فرمان ، لیستی از آدرس های IPv4 و IPv6 را با کاما جدا می کند. اگر می خواهید آدرس IP را که یک همتا می تواند به خود اختصاص دهد محدود کنید یا اگر همسالان شما می توانند از هر آدرس IP در محدوده VPN استفاده کنند ، می توانید IP های فردی را تعیین کنید. همچنین توجه داشته باشید که هیچ یک از همسالان نمی توانند تنظیمات مجاز ips یکسانی داشته باشند.

اگر می خواهید ips مجاز برای یک همکار موجود را به روز کنید ، می توانید دوباره همان فرمان را اجرا کنید ، اما آدرس IP را تغییر دهید. چندین آدرس IP پشتیبانی می شود. به عنوان مثال ، برای تغییر WireGuard Peer که به تازگی اضافه کرده اید و IP ای مانند 10.8.0.100 را به IP های 10.8.0.2 و fd0d: 86fa: c3bc :: 2 موجود اضافه می کنید ، موارد زیر را اجرا کنید:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd0d:86fa:c3bc::2

پس از اجرای دستور افزودن همتا ، وضعیت تونل را روی سرور با استفاده از دستور wg بررسی کنید:

sudo wg

 

Output

interface: wg0
 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 private key: (hidden)
 listening port: 51820

peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 allowed ips: 10.8.0.2/32, fd0d:86fa:c3bc::/128

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

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

مرحله 9 – اتصال WireGuard Peer به Tunnel

اکنون که سرور و همکار شما به گونه ای پیکربندی شده اند که از انتخاب IPv4 ، IPv6 ، ارسال بسته ها و وضوح DNS پشتیبانی می کنند ، زمان آن رسیده است که همتا را به تونل VPN متصل کنید.

از آنجا که ممکن است فقط بخواهید VPN برای موارد خاص استفاده شود ، ما از دستور wg-quick برای ایجاد اتصال بصورت دستی استفاده می کنیم. اگر می خواهید شروع به کار تونل را مانند سرور انجام دهید ، مراحل زیر را در مرحله 6 دنبال کنید-به جای استفاده از دستور wq-quick ، بخش WireGuard Server را راه اندازی کنید.

برای شروع تونل ، موارد زیر را در WireGuard Peer اجرا کنید:

sudo wg-quick up wg0

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

 

Output

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0

آدرس های IPv4 و IPv6 برجسته ای را که به همتای خود اختصاص داده اید ، اضافه کنید.

اگر AllowedIPs را روی همتا روی 0.0.0.0/0 و ::/0 تنظیم کنید (یا از محدوده هایی غیر از محدوده هایی که برای VPN انتخاب کرده اید استفاده کنید) ، خروجی شما شبیه موارد زیر خواهد بود:

 

Output

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] mount `67.207.67.2' /etc/resolv.conf
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] nft -f /dev/fd/63
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63
[#] ip rule add table 200 from 203.0.113.5
[#] ip route add table 200 default via 203.0.113.1

در این مثال ، به مسیرهای برجسته شده ای که فرمان اضافه کرده و مربوط به AllowedIPs در پیکربندی همتا است توجه کنید.

در مرحله بعد ، با استفاده از ping مقداری ترافیک در رابط تونل ایجاد کنید تا یک بسته ICMP (که در دستورات زیر با آرگومان -c 1 مشخص شده است) به سرور WireGuard نشان داده شود:

ping -c 1 10.8.0.1

اگر تمام ترافیک را از طریق VPN مسیریابی می کنید ، می توانید به جای آن از یکی از سرورهای CloudFlare استفاده کنید:

ping -c 1 1.1.1.1

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

sudo wg

 

Output

interface: wg0
 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 private key: (hidden)
 listening port: 49338
 fwmark: 0xca6c

peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 endpoint: 203.0.113.1:51820
 allowed ips: 10.8.0.0/24, fd0d:86fa:c3bc::/64
 latest handshake: 1 second ago
 transfer: 6.50 KiB received, 15.41 KiB sent

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

با استفاده از دستورات مسیر ip و مسیر ip -6 تأیید کنید که همتای شما از VPN استفاده می کند. اگر از VPN به عنوان دروازه ای برای همه ترافیک اینترنت خود استفاده می کنید ، بررسی کنید که کدام رابط برای ترافیک مقصد 1.1.1.1 CloudFlare و 2606: 4700: 4700 :: 1111 DNS وضوح مورد استفاده قرار می گیرد.

ip route get 1.1.1.1

 

Output

1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

توجه داشته باشید که از دستگاه wg0 و آدرس IPv4 10.8.0.2 که به همتای خود اختصاص داده اید استفاده می شود. به همین ترتیب ، اگر از IPv6 استفاده می کنید ، موارد زیر را اجرا کنید:

ip -6 route get 2606:4700:4700::1111

 

Output

2606:4700:4700::1111 dev wg0 table 51820 src fd0d:86fa:c3bc::2 metric 1024 pref medium

دوباره به رابط wg0 و آدرس IPv6 fd0d: 86fa: c3bc :: 2 که به همتای خود اختصاص داده اید توجه کنید.

اگر مرورگر همتای شما نصب شده است ، همچنین می توانید از ipleak.net و ipv6-test.com دیدن کنید تا تأیید کنید که همتای شما ترافیک خود را از طریق VPN مسیریابی می کند.

هنگامی که آماده قطع ارتباط VPN با همکار هستید ، از دستور wg-quick استفاده کنید:

sudo wg-quick down wg0

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

 

Output

[#] ip link delete dev wg0

اگر AllowedIPs را روی همتا روی 0.0.0.0/0 و ::/0 تنظیم کنید (یا از محدوده هایی غیر از محدوده هایی که برای VPN انتخاب کرده اید استفاده کنید) ، خروجی شما شبیه موارد زیر خواهد بود:

 

Output

[#] ip rule delete table 200 from 137.184.109.48
[#] ip route delete table 200 default via 137.184.96.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] umount /etc/resolv.conf
[#] nft -f /dev/fd/63

برای اتصال مجدد به VPN ، دستور wg-quick up wg0 را دوباره روی همتا اجرا کنید. اگر می خواهید پیکربندی همتا را از سرور WireGuard حذف کنید ، می توانید دستور زیر را اجرا کنید ، مطمئن باشید که کلید عمومی صحیح را برای همتایی که می خواهید حذف کنید جایگزین کنید:

sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

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

نتیجه

در این آموزش شما بسته و ابزار WireGuard را روی هر دو سیستم سرور و سرویس گیرنده Rocky Linux 8 نصب کرده اید. شما قوانین فایروال را برای WireGuard تنظیم کرده و تنظیمات هسته را پیکربندی کرده اید تا بتوانید با استفاده از دستور sysctl روی سرور ، ارسال بسته را انجام دهید. شما نحوه تولید کلیدهای رمزگذاری خصوصی و عمومی WireGuard و نحوه پیکربندی سرور و همکاران (یا همتا) برای اتصال به یکدیگر را آموختید.

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

 

  • behnam gol mohamadi