سرور مجازی

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

  • ۰
  • ۰

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

ورود به سایت

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

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

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

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

نصب اوبونتو

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

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

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

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

آشنایی با خط فرمان اوبونتو

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

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

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

نمونه هایی از تنظیمات سرور اوبونتو

دو راه متداول برای راه اندازی سرورهای اوبونتو از طریق کلیدهای SSH یا نصب وبمین روی سرور اوبونتو است. SSH یا پوسته امن یک پروتکل رمزگذاری شده است که برای مدیریت و برقراری ارتباط با سرورها استفاده می شود. نصب Webmin به شما امکان می دهد سرور خود را از طریق یک رابط مبتنی بر مرورگر مدیریت کنید، به راحتی حساب های کاربری را مدیریت کنید، تنظیمات DNS را پیکربندی کنید و موارد دیگر.

نصب نرم افزار در اوبونتو 20.04

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

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

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

اگر می خواهید محتوای شخصی خود را مانند اسناد و تصاویر در مکانی متمرکز ذخیره کنید، Nextcloud را روی سرور اوبونتو 20.04 خود نصب کنید. همه ویژگی های Nextcloud منبع باز هستند و این نرم افزار به شما امکان می دهد داده های حساس خود را ایمن و کنترل کنید.

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

Postfix یک عامل انتقال نامه منبع باز محبوب (MTA) است. Postfix را روی سرور اوبونتو 20.04 خود نصب کنید تا ایمیل را در یک سیستم لینوکس مسیریابی و تحویل دهید.

پشته نرم افزار LEMP را روی سرور اوبونتو 20.04 خود نصب کنید تا صفحات وب پویا و برنامه های کاربردی وب نوشته شده با PHP را ارائه دهد. با LEMP، صفحات وب توسط سرور Nginx ارائه می شوند، داده های Backend در پایگاه داده MySQL ذخیره می شوند و پردازش پویا توسط PHP انجام می شود. یک پشته “LAMP” را روی سرور اوبونتو 20.04 خود نصب کنید تا یک سرور بتواند میزبان وب سایت های پویا و برنامه های وب نوشته شده به زبان PHP باشد. داده های سایت در پایگاه داده MySQL ذخیره می شود و محتوای پویا توسط PHP پردازش می شود.

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

Elastic Stack مجموعه‌ای از نرم‌افزار متن‌باز است که توسط Elastic تولید شده است که امکان ثبت متمرکز را فراهم می‌کند. Elastic Stack را روی سرور Ubuntu 20.04 خود نصب کنید تا لاگ های تولید شده از هر منبع و با هر فرمتی را جستجو، تجزیه و تحلیل و تجسم کنید.

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

برچسب‌ها:اوبونتو 20.04اوبونتو چیستتنظیمات سرور اوبونتوخرید سرور لینوکسخرید سرورهای مجازیسرور Ubuntu 20.04سرور اوبونتو 20.04فروش سرورلینوکسنصب اوبونتو

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

 

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

 

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

 

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

 

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

 

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

 

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

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه نصب 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
  • ۰
  • ۰

نحوه بازنشانی رمز عبور MySQL یا MariaDB Root در اوبونتو 20.04

ورود به سایت

معرفی

رمز عبور پایگاه داده خود را فراموش کرده اید؟ برای بهترین ما اتفاق می افتد. اگر رمز عبور اصلی پایگاه داده MySQL یا MariaDB خود را فراموش کرده یا گم کرده اید، اگر به سرور و یک حساب کاربری با امتیازات sudo دسترسی دارید، همچنان می توانید دسترسی داشته باشید و رمز عبور را بازنشانی کنید.

این آموزش نشان می دهد که چگونه رمز عبور ریشه برای پایگاه های داده MySQL و MariaDB نصب شده با مدیر بسته apt در اوبونتو 20.04 را بازنشانی کنید. روش تغییر رمز عبور ریشه بسته به اینکه MySQL یا MariaDB را نصب کرده باشید و پیکربندی سیستمی پیش‌فرض که با توزیع یا بسته‌های فروشندگان دیگر ارسال می‌شود، متفاوت است. در حالی که دستورالعمل‌های این آموزش ممکن است با سایر نسخه‌های سرور سیستم یا پایگاه داده کار کند، اما با Ubuntu 20.04 و بسته‌های عرضه‌شده توسط توزیع آزمایش شده‌اند.

پیش نیازها

برای بازیابی رمز عبور ریشه MySQL یا MariaDB، به موارد زیر نیاز دارید:

  • دسترسی به سرور اوبونتو 20.04 در حال اجرا MySQL یا MariaDB با کاربر sudo یا راه دیگری برای دسترسی به سرور با امتیازات ریشه.
  • برای اینکه روش های بازیابی را در این آموزش بدون تاثیر روی سرور تولید خود آزمایش کنید، یک سرور آزمایشی ایجاد کنید و سپس آموزش اولیه راه اندازی سرور ما را دنبال کنید. مطمئن شوید که یک کاربر معمولی و غیر ریشه با امتیازات sudo ایجاد کنید. سپس MySQL را طبق راهنمای ما در مورد نحوه نصب MySQL در اوبونتو 20.04 نصب کنید یا MariaDB را به دنبال نحوه نصب MariaDB در اوبونتو 20.04 نصب کنید.

مرحله 1 – شناسایی نسخه پایگاه داده و توقف سرور

اوبونتو 20.04 یا MySQL یا MariaDB را اجرا می‌کند—یک جایگزین محبوب که با MySQL سازگار است. بسته به اینکه کدام یک از آنها را نصب کرده اید، باید از دستورات مختلفی برای بازیابی رمز عبور root استفاده کنید، بنابراین مراحل این بخش را دنبال کنید تا مشخص کنید کدام سرور پایگاه داده را اجرا می کنید.

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

mysql –version

اگر MariaDB را اجرا می کنید، “MariaDB” را با شماره نسخه در خروجی مشاهده خواهید کرد:

 

MariaDB output

mysql  Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

اگر MySQL را اجرا می کنید، خروجی مانند زیر را خواهید دید:

 

MySQL output

mysql  Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

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

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

sudo systemctl stop mariadb

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

sudo systemctl stop mysql

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

مرحله 2 – راه اندازی مجدد سرور پایگاه داده بدون بررسی مجوز

اجرای MySQL و MariaDB بدون بررسی مجوز امکان دسترسی به خط فرمان پایگاه داده با امتیازات root را بدون ارائه رمز عبور معتبر فراهم می کند. برای انجام این کار، باید پایگاه داده را از بارگیری جداول کمک هزینه، که اطلاعات امتیازات کاربر را ذخیره می کند، متوقف کنید. از آنجایی که این کمی یک خطر امنیتی است، ممکن است بخواهید شبکه را غیرفعال کنید تا از اتصال سایر کلاینت ها به سرور آسیب پذیر موقت جلوگیری کنید.

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

پیکربندی MariaDB برای شروع بدون Grant Tables

برای راه‌اندازی سرور MariaDB بدون جداول کمک هزینه، از فایل unit systemd برای تنظیم پارامترهای اضافی برای سرور MariaDB استفاده می‌کنیم.

دستور زیر را اجرا کنید، که متغیر محیطی MYSQLD_OPTS مورد استفاده توسط MariaDB را هنگام راه اندازی تنظیم می کند. گزینه های –skip-grant-tables و –skip-networking به MariaDB می گویند که بدون بارگیری جداول کمک هزینه یا ویژگی های شبکه راه اندازی شود:

sudo systemctl set-environment MYSQLD_OPTS=”–skip-grant-tables –skip-networking”

سپس سرور MariaDB را راه اندازی کنید:

sudo systemctl start mariadb

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

می توانید مطمئن شوید که با sudo systemctl status mariadb شروع شده است.

اکنون باید بتوانید به عنوان کاربر ریشه MariaDB بدون ارائه رمز عبور به پایگاه داده متصل شوید:

sudo mysql -u root

بلافاصله یک درخواست پوسته پایگاه داده را خواهید دید

اکنون که به سرور پایگاه داده دسترسی دارید، می توانید رمز عبور root را همانطور که در مرحله 3 نشان داده شده است تغییر دهید.

پیکربندی MySQL برای شروع بدون Grant Tables

برای راه‌اندازی سرور MySQL بدون جداول کمکی آن، پیکربندی systemd را برای MySQL تغییر می‌دهید تا هنگام راه‌اندازی، پارامترهای اضافی خط فرمان را به سرور ارسال کنید.

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

sudo systemctl edit mysql

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

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

MySQL service overrides

[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking

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

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

برای اعمال این تغییرات، پیکربندی systemd را دوباره بارگیری کنید:

sudo systemctl daemon-reload

اکنون سرور MySQL را راه اندازی کنید:

sudo systemctl start mysql

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

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

sudo mysql -u root

بلافاصله یک درخواست پوسته پایگاه داده را خواهید دید

اکنون که به سرور دسترسی دارید، می توانید رمز عبور root را تغییر دهید.

مرحله 3 – تغییر رمز عبور ریشه

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

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

FLUSH PRIVILEGES;

اکنون می توانید رمز عبور root را تغییر دهید. روشی که استفاده می کنید بستگی به این دارد که آیا از MariaDB یا MySQL استفاده می کنید.

تغییر رمز عبور MariaDB

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

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’;

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

 

Output

Query OK, 0 rows affected (0.001 sec)

MariaDB امکان استفاده از مکانیزم های احراز هویت سفارشی را فراهم می کند، بنابراین دو عبارت زیر را اجرا کنید تا مطمئن شوید که MariaDB از مکانیسم احراز هویت پیش فرض خود برای رمز عبور جدیدی که به حساب root اختصاص داده اید استفاده می کند:

UPDATE mysql.user SET authentication_string = ” WHERE user = ‘root’;
UPDATE mysql.user SET plugin = ” WHERE user = ‘root’;

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

 

Output

Query OK, 0 rows affected (0.01 sec)

رمز عبور اکنون تغییر کرده است. برای خروج از کنسول MariaDB عبارت exit را تایپ کنید و برای راه اندازی مجدد سرور پایگاه داده در حالت عادی به مرحله 4 بروید.

تغییر رمز عبور MySQL

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

ALTER USER ‘root’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘new_password’;

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

 

Output

Query OK, 0 rows affected (0.01 sec)

رمز عبور اکنون تغییر کرده است. با تایپ exit از کنسول MySQL خارج شوید.

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

مرحله 4 – سرور پایگاه داده خود را به تنظیمات عادی برگردانید

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

برای MariaDB، متغیر محیطی MYSQLD_OPTS را که قبلا تنظیم کرده بودید، از حالت تنظیم خارج کنید:

sudo systemctl unset-environment MYSQLD_OPTS

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

sudo systemctl restart mariadb

برای MySQL، پیکربندی اصلاح شده systemd را حذف کنید:

sudo systemctl revert mysql

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

 

Output

Removed /etc/systemd/system/mysql.service.d/override.conf.
Removed /etc/systemd/system/mysql.service.d.

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

sudo systemctl daemon-reload

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

sudo systemctl restart mysql

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

mysql -u root -p

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

نتیجه

شما دسترسی مدیریتی به سرور MySQL یا MariaDB را بازیابی کرده اید. مطمئن شوید رمز عبور جدیدی که انتخاب کرده اید قوی و ایمن است و آن را در مکانی امن نگه دارید.

 

 

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اوبونتو 20.04بازیابی رمز عبور MariaDBپایگاه داده MySQLپیکربندی MariaDBخرید سرورخرید سرور لینوکسراه اندازی مجدد سرورراه‌اندازی سرور MySQLسرور مجازیفراموش کردن رمز پایگاه دادهنحوه بازنشانی رمز عبور MySQL

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از Opacity و Transparency برای ایجاد یک Modal در CSS

ورود به سایت

معرفی

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

در طول این آموزش، شما از روش‌های مختلفی برای اعمال کدورت و خواص اضافی برای انجام مؤثر جلوه‌های خاص استفاده خواهید کرد. شما یک مودال ایجاد خواهید کرد که با رویکرد بدون جاوا اسکریپت با استفاده از کلاس شبه :target و ویژگی های opacity، pointer-events و transition ظاهر می شود. سپس از هر یک از مقادیر رنگ کانال آلفا برای ایجاد همپوشانی سایه، حاشیه و محتوا استفاده خواهید کرد. شما همچنین از مقدار رنگ شفاف برای کمک به ایجاد شیب متحرک رنگ ها در یک رویداد :hover استفاده خواهید کرد.

پیش نیازها

  • درک درستی از ویژگی‌های آبشار و ویژگی‌های CSS، که می‌توانید با خواندن نحوه اعمال سبک‌های CSS در HTML با Cascade و Specificity به آن دست پیدا کنید.
  • آشنایی با انتخابگرهای نوع، انتخابگرهای ترکیب‌کننده و گروه‌های انتخابگر، که می‌توانید در نحوه انتخاب عناصر HTML به سبک با CSS بیابید.
  • درک خواص رنگ .
  • آشنایی با گرادیان های CSS با ویژگی های پس زمینه. نحوه اعمال سبک‌های پس‌زمینه به عناصر HTML با CSS را بررسی کنید تا تجربه ایجاد پس‌زمینه گرادیان را به دست آورید.
  • ویژگی box-shadow را تجربه کنید،
  • یک فایل 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" />
    <title>Destination: Moon</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=MuseoModerno:wght@400;700&display=swap" rel="stylesheet">
    <link href="styles.css" rel="stylesheet" />
  </head>
  <body>
  </body>
</html>

چندین تنظیمات صفحه در عنصر <head> HTML تعریف شده است. عنصر <meta> مجموعه کاراکتری را برای استفاده از متن تعریف می‌کند، که به مرورگر می‌گوید چگونه کاراکترهای خاص را بدون استفاده از کدهای کاراکتر HTML تفسیر کند. عنصر <title> عنوان صفحه را در اختیار مرورگر قرار می دهد. عناصر <link> در سبک های صفحه بارگیری می شوند. سه مورد اول در فونت، Museo Moderno، از فونت‌های Google بارگیری می‌شوند، و آخرین مورد، سبک‌هایی را که به styles.css اضافه می‌کنید، بارگیری می‌کند.

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

index.html

<!doctype html>
<html>
  <head>
    ...
  </head>
  <body>
    <header class="site-header">
      <h1 class="site-name">Destination: <strong>Moon</strong></h1>
      <nav>
        <ul class="nav-list">
          <li><a href="#" class="nav-link">Base Station</a></li>
          <li><a href="#" class="nav-link">Travel Packages</a></li>
          <li><a href="#" class="nav-link">Accommodations</a></li>
          <li><a href="#" class="nav-link">Plan Your Trip</a></li>
      </ul>
      </nav>
    </header>
    <main>
      <section>
        <h2>Schedule Your Trip</h2>
        <p>Sea of Tranquility great turbulent clouds with pretty stories for which there's little good evidence extraordinary claims require extraordinary evidence. Citizens of distant epochs rings of Uranus intelligent beings birth take root and flourish across the centuries. Corpus callosum invent the universe as a patch of light the only home we've ever known a mote of dust suspended in a sunbeam made in the interiors of collapsing stars. Kindling the energy hidden in matter Orion's sword.</p>
        <p>Vastness is bearable only through love emerged into consciousness not a sunrise but a galaxyrise emerged into consciousness courage of our questions across the centuries and billions upon billions upon billions upon billions upon billions upon billions upon billions.</p>
          <a href="#" class="button">Read the Disclaimer!</a>
      </section>
    </main>
  </body>
</html>

حتما فایل index.html خود را ذخیره کنید و آن را در ویرایشگر متن خود باز بگذارید. سپس یک فایل جدید به نام styles.css ایجاد کنید و آن را در ویرایشگر متن باز کنید. این فایلی است که در عنصر <head> index.html ارجاع داده شده است. در فایل styles.css کد زیر را اضافه کنید:

styles.css

body {
  margin: 0;
  font: 100%/1.5 sans-serif;
}

main {
  margin: 6rem auto;
  width: 75ch;
  font-size: 1.125rem;
}

h2 {
  font: 400 1.875rem/1.25 MuseoModerno, sans-serif;
  color: #6b2d6b;
}

.site-header {
  font: 1.125rem / 1.25 MuseoModerno, sans-serif;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 2rem;
  color: white;
  background: linear-gradient(135deg, #8e3d8e, #230f23);
}

.site-name {
  margin: 0;
  font-size: 1.75rem;
  font-weight: 400;
}

.nav-list {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
  align-items: stretch;
}

.nav-link {
  color: inherit;
  display: block;
  text-decoration: none;
  padding: 1.25rem 1.5rem;
}

.nav-link:hover,
.nav-link:focus {
  color: #230f23;
  background-color: white;
}

.button {
  text-decoration: none;
  display: inline-block;
  padding: 0.5rem 1.25rem;
  color: white;
  background: #4c90b2;
  border: 1px solid #2d566b;
  border-radius: 0.5rem;
}

.button:hover,
.button:focus {
  background-color: #2d566b;
}

این سبک‌ها زیبایی‌شناسی و چیدمان کلی صفحه را با سبک‌های اعمال شده روی بدنه و عناصر اصلی تنظیم می‌کنند. انتخابگرهای .site-header، site-name، .nav-list و .nav-link همگی سبک ها را در سرصفحه صفحه تعریف می کنند. قوانین .button و .button:hover یک عنصر <a> را تغییر می دهند تا مانند یک دکمه بزرگ و قابل کلیک ظاهر شود.

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

CSS که تا به حال نوشته اید یک هدر بنفش در بالای صفحه با عنوان سایت و پیمایش در متن سفید ایجاد می کند. در زیر، محتوا از یک عنوان بنفش و دو پاراگراف متن تشکیل شده است. عرض محتوا به 75 کاراکتر با مقدار ویژگی max-width: 76ch در انتخابگر عنصر اصلی محدود شده است. در نهایت، دکمه آبی با متن Read the Disclaimer! یک عنصر بزرگ و تعاملی در زیر محتوا است.

در سراسر این بخش شما HTML خود را در فایل index.html تنظیم کرده و سبک های پایه را در فایل styles.css ایجاد می کنید. در بخش بعدی، از ویژگی opacity برای ناپدید شدن یک عنصر جدید و ظاهر شدن مجدد با کلاس :target شبه استفاده خواهید کرد.

ایجاد :target State با opacity برای نمایش و پنهان کردن عناصر

یکی از کاربردهای مفید ویژگی opacity این است که باعث محو شدن و محو شدن محتوا در صفحه می شود. یکی از نمونه‌های چنین جلوه‌ای زمانی است که یک مودال، یک عنصر رابط کاربری (که به عنوان جعبه نور نیز شناخته می‌شود) که در جلوی بقیه محتوای صفحه شما ظاهر می‌شود، به نمایش تبدیل می‌شود. می توانید این افکت را با ترکیبی از ویژگی های opacity و pointer-events و شبه کلاس :target ایجاد کنید.

با باز کردن index.html برای ایجاد محتویات مدال شروع کنید. HTML برجسته شده را از بلوک کد زیر بین تگ های بسته </section> و </main> اضافه کنید:

index.html

<!doctype html>
<html>
  <head>
    ...
  </head>
  <body>
    ...
    <main>
      <section>
        ...
      </section>
      <div class="modal-container">
        <section class="modal">
          <header class="modal-header">
            <h2 class="modal-title">Destination: Moon Disclaimer</h2>
            <a href="#" class="modal-close">Close</a>
          </header>
          <div class="modal-content">
            <p><strong>Disclaimer:</strong> Vastness is bearable only through love emerged into consciousness not a sunrise but a galaxyrise emerged into consciousness courage of our questions across the centuries and billions upon billions upon billions upon billions upon billions upon billions upon billions.</p>
          </div>
        </section>
      </div>
    </main>
  </body>
</html>

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

styles.css

...

.button:hover {
  background-color: #2d566b;
}

.modal-container {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1000;
  background-color: black;
  display: flex;
}

.modal {
  margin: auto;
  width: 90%;
  max-width: 40rem;
  background-color: white;
  border-radius: 1.5rem;
}

.modal-header,
.modal-content {
  padding: 1.5rem;
}

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

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

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

برای شروع استفاده از ویژگی opacity، به styles.css در ویرایشگر متن خود بازگردید. در انتخابگر کلاس .modal، یک ویژگی opacity با مقدار 0 اضافه کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.modal-container {
   position: fixed;
   top: 0;
   right: 0;
   bottom: 0;
   left: 0;
   z-index: 1000;
   background-color: black;
   display: flex;
  opacity: 0;
}
...

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

بعد از انتخابگر .modal-container، یک انتخابگر جدید برای .modal-container:target اضافه کنید. در داخل بلوک انتخابگر، یکی دیگر از ویژگی های opacity را به مقدار 1 تنظیم کنید. CSS برجسته شده در بلوک کد زیر، نحوه قالب بندی آن را نشان می دهد:

styles.css

...
.modal-container {
  ...
  opacity: 0;
}

.modal-container:target {
  opacity: 1;
}
...

این تغییرات را در styles.css ذخیره کنید.

:target زمانی که یک عنصر دارای تمرکز URL باشد، نمونه سازی می شود. در مرورگرهای وب، ویژگی id در یک عنصر HTML را می توان در URL همانطور که با نماد پوند یا هش (#) نشان می دهد ارجاع داد. برای اینکه .modal-container:target فعال شود، همان عنصر به یک عنصر id نیاز دارد و صفحه به راهی برای فعال کردن آن URL نیاز دارد.

در ویرایشگر متن خود به index.html برگردید. در عنصر <div class=”modal-container”>، یک مجموعه ویژگی id را به سلب مسئولیت مقدار اضافه کنید. سپس، در عنصر <a href=”#” class=”button”>، مقدار href را از # به #سلب مسئولیت تغییر دهید. برای نحوه نوشتن به HTML برجسته شده در بلوک کد زیر مراجعه کنید:

index.html

<!doctype html>
<html>
  <head>
    ...
  </head>
  <body>
    ...
    <main>
      <section>
         ...
         <a href="#disclaimer" class="button">Read the Disclaimer!</a>
       </section>
       <div id="disclaimer" class="modal-container">
         ...
       </div>
    </main>
  </body>
</html>

تغییر در مقدار href به مرورگر می‌گوید که به عنصری با مقدار شناسه سلب مسئولیت صفحه فعلی برود. هنگامی که #سلب مسئولیت به URL اضافه شد، سپس :target در CSS فعال می شود.

این تغییرات را در index.html ذخیره کنید، سپس به styles.css بازگردید.

همانطور که صفحه اکنون ساختار یافته است، مودال تمام رویدادهای کلیک و لمسی را که از تعامل ماوس یا صفحه لمسی حاصل می شود، ضبط می کند. این به این دلیل است که اگرچه کاملاً شفاف است، اما عنصر مدال هنوز کل صفحه را پوشش می دهد. برای حذف تعامل از عنصر، یک ویژگی pointer-events با مقدار هیچ به انتخابگر .modal-container اضافه می‌کنید. سپس، هنگامی که مدال قابل مشاهده است، باید بتواند دوباره رویدادهای تعامل را دریافت کند. در شبه کلاس :target، اشاره گر رویدادها را به همه اضافه کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.modal-container {
  ...
  opacity: 0;
  pointer-events: none;
}

.modal-container:target {
  opacity: 1;
  pointer-events: all;
}
...

ویژگی pointer-events نحوه تعامل یک عنصر با ماوس یا دستگاه ورودی مبتنی بر لمس را تغییر می دهد. با تنظیم مقدار روی هیچ، این عنصر نه تنها برای کاربران بینا، بلکه برای دستگاه های ورودی مبتنی بر اشاره گر نیز نامرئی می شود. سپس، مقدار all تعامل را دوباره برقرار می‌کند، اما تنها زمانی که .modal-container در URL فعال و قابل مشاهده باشد.

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

به styles.css برگردید و یک ویژگی انتقال به انتخابگر .modal-container اضافه کنید، همانطور که در بلوک کد زیر مشخص شده است:

styles.css

...
.modal-container {
  ...
  opacity: 0;
  pointer-events: none;
  transition: opacity 250ms ease;
}

.modal-container:target {
  opacity: 1;
  pointer-events: all;
}
...

ویژگی transition مختصر یک سری از خواص است. کدورت به مرورگر می گوید که این ویژگی برای انتقال بین است. 250 میلی‌ثانیه زمانی است که انتقال باید تکمیل شود و واحد برای میلی‌ثانیه ایستاده است. در نهایت، سهولت توضیح می دهد که چگونه انتقال رخ خواهد داد. در این مورد، ease به این معنی است که آهسته شروع می‌شود، سرعت می‌گیرد و سپس در نزدیکی پایان انتقال دوباره کاهش می‌یابد.

انتقال زمانی کار خواهد کرد که مودال ظاهر شود و با فشار دادن پیوند بستن در داخل مدال ناپدید شود. این پیوند بستن دارای یک مقدار href است که روی # تنظیم شده است، که URL را از #سلب مسئولیت به # تغییر می‌دهد و حالت :target را حذف می‌کند.

تغییرات خود را در styles.css ذخیره کنید و index.html را در مرورگر refresh کنید. انیمیشن زیر نحوه ظاهر و ناپدید شدن مودال را نشان می دهد

این بخش شما را با خاصیت opacity آشنا کرد که از آن برای پنهان کردن بصری یک ظرف مدال استفاده کردید. شما همچنین از ویژگی شبه کلاس :target، ویژگی pointer-events و ویژگی transition برای ایجاد یک افکت fade-in و fade-out استفاده کردید. در بخش بعدی، از رنگ‌هایی با کانال‌های آلفا برای شفاف‌تر کردن مودال استفاده خواهید کرد.

استفاده از کانال های آلفا برای ایجاد مقادیر رنگ شفاف

یک کانال آلفا مانند ویژگی opacity است، اما در عوض یک بخش اضافی برای یک مقدار رنگ است که از طریق rgb()، hsl() یا هگزادسیمال تعریف شده است. در جایی که ویژگی opacity کل عنصر و فرزندان آن را تنظیم می کند، کانال آلفا فقط کدورت رنگ را در یک ویژگی مشخص تنظیم می کند. در طول این بخش، شما از هر یک از مقادیر رنگ کانال آلفا استفاده کرده و آنها را عملی خواهید کرد.

برای شروع کار با مقادیر رنگ کانال آلفا، stlyes.css را در ویرایشگر متن خود باز کنید. سپس به انتخابگر کلاس .modal-container بروید. همانطور که در بلوک کد زیر مشخص شده است، مقدار ویژگی پس زمینه رنگ را از #000 به rgba (0، 0، 0، 0.75) تغییر دهید:

styles.css

...
.modal-container {
  ...
  background-color: rgba(0,0,0,0.75);
  ...
}
...

مقدار رنگ rgba () مانند rgb () عمل می کند که شامل سه عدد جدا شده با کاما است که سطح نور قرمز، سبز و آبی را نشان می دهد. وقتی یکی از مقادیر رنگ روی 0 تنظیم شود، کاملاً خاموش است (سیاه) و 255 به این معنی است که در روشنایی کامل (سفید) است. بین این سه کانال رنگی می توان میلیون ها رنگ تولید کرد. عدد چهارم کانال آلفا است که مانند خاصیت opacity کار می کند و یک مقدار اعشاری از 0 تا 1 است. تنظیم کانال آلفا باعث شفاف شدن رنگ می شود و به محتوای پشت آن اجازه می دهد از طریق رنگ قابل مشاهده باشد.

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

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

styles.css

...
.modal {
  margin: auto;
  width: 90%;
  max-width: 40rem;
  background: linear-gradient(135deg, hsl(300, 40%, 20%),hsl(300, 40%, 5%));
  border-radius: 1.5rem;
}

.modal-header,
.modal-content {
  padding: 1.5rem;
}

.modal-header {
  display: flex;
  justify-content: space-between;
}

.modal-title {
  margin: 0;
  color: white;
}

.modal-close {
  color: white;
}

.modal-content {
  color: white;
}

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

اکنون در ویرایشگر متن خود به styles.css بازگردید. اکنون از مقدار رنگ ()hsla برای روشن کردن رنگ هدر modal استفاده خواهید کرد. همچنین باید گوشه های بالایی را طوری تنظیم کنید که یک مقدار شعاع مرزی مطابق با مدال داشته باشد، بنابراین هدر خارج از ناحیه مدال ظاهر نشود. CSS هایلایت شده در بلوک کد زیر نحوه تنظیم این را نشان می دهد:

styles.css

...
.modal-header {
  display: flex;
  justify-content: space-between;
  background-color: hsla(300, 80%, 90%, 0.2);
  border-radius: 1.5rem 1.5rem 0 0;
}
...

مقدار پس زمینه رنگ از فرمت hsla() استفاده می کند و مانند مقدار rgba()، فرمت hsl() است اما با کانال آلفا. hsl() از سه بخش تشکیل شده است: یک مقدار درجه از چرخه رنگ، یک مقدار درصد اشباع، و یک مقدار درصد روشنایی، که رنگ نهایی را ایجاد می کند. 300 مقدار رنگ را بین آبی و قرمز در چرخه رنگ قرار می دهد، 80٪ اشباع سنگین به معنای رنگ بیشتر و خاکستری کمتر است، و 90٪ رنگ نهایی را روشن می کند. در نهایت، کانال آلفا مانند خاصیت opacity کار می کند و 0.2 مقدار را نزدیک به کاملا شفاف می کند. این یک پوشش روشن در بالای گرادیان ایجاد می کند و تعریفی را برای هدر ارائه می دهد.

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

راه دیگر برای ایجاد مقادیر رنگ شفاف، استفاده از مقادیر هگزادسیمال است. مقادیر رنگ هگزادسیمال از سه جفت ترکیبی از 0 تا 9 یا a تا f تشکیل شده و معادل عددی از 0 تا 255 است. سه رقم اول یک مقدار قرمز، سبز و آبی هستند که به صورت #RRGGBB فرمت شده اند. برای ایجاد یک کانال آلفا، مجموعه چهارم اضافه می شود و الگوی #RRGGBBAA را می سازد.

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

styles.css

...
.modal-header {
  display: flex;
  justify-content: space-between;
  background-color: hsla(300, 80%, 90%, 0.2);
  border-radius: 1.5rem 1.5rem 0 0;
  border: 4px solid #f7baf72f;
  border-bottom: none;
}
...
.modal-content {
  color: white;
  border-radius: 0 0 1.5rem 1.5rem;
  border: 4px solid #f7baf744;
  border-top: none;
}
...

هدر و محتوا هر کدام یک رنگ هگزادسیمال با #f7baf7 دارند، اما مقادیر کانال آلفای متفاوتی دارند. رنگ حاشیه انتخابگر هدر مدال دارای یک کانال آلفا تنظیم شده روی 2f است که شفاف تر است، زیرا 00 یک مقدار کانال آلفا کاملاً شفاف است. کانال آلفای .modal-content روی 44 تنظیم شده است که باعث شفاف‌تر شدن آن می‌شود.

تغییرات خود را در styles.css ذخیره کنید و index.html را در مرورگر وب بازخوانی کنید. تصویر زیر نحوه نمایش این حاشیه ها در مرورگر را نشان می دهد:

در نهایت، یک رنگ شش رقمی هگزا دسیمال را می توان به صورت خلاصه سه رقمی نوشت، که در آن #33ccee همان #3ce است. به همین ترتیب، یک مقدار هگزادسیمال با یک کانال آلفا را می توان به صورت خلاصه چهار رقمی نوشت به طوری که #33ccee99 را بتوان به #3ce9 کوتاه کرد و یک رنگ باشد.

برای شروع کار با یک هگزادسیمال کوتاه با کانال آلفا، به stlyes.css در ویرایشگر متن خود بازگردید. سپس، به انتخابگر کلاس .modal بروید و یک ویژگی box-shadow اضافه کنید. در اینجا یک سایه بزرگ روی مدال ایجاد می کنید که سیاه است اما توسط یک کانال آلفا نرم می شود. CSS هایلایت شده را در بلوک کد زیر به بلوک انتخابگر .modal خود اضافه کنید:

styles.css

...
.modal {
  margin: auto;
  width: 90%;
  max-width: 40rem;
  background: linear-gradient(135deg, hsl(300, 40%, 20%),hsl(300, 40%, 5%));
  border-radius: 1.5rem;
  box-shadow: 0 1rem 2rem #000a;
}
...

این سایه محور x را 1 rem پایین می آورد و تاری 2 rem را پخش می کند. در مرحله بعد، مقدار #000a با خاموش کردن هر سه مقدار رنگ، یک رنگ سیاه کامل را مشخص می کند. a که معادل aa است و دارای مقدار عددی 170 است، کانال آلفا را با شفافیت تقریباً 66٪ ارائه می کند. این کار سایه را کمی کم می کند، اما آن را به اندازه کافی قابل توجه نگه می دارد تا عمق زیر مودال را فراهم کند.

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

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

افزودن مقدار رنگ شفاف به گرادیان خطی

مقادیر مختلف رنگی که از کانال های آلفا پشتیبانی می کنند برای زمانی که یک رنگ هنوز نیاز به شناسایی دارد مفید است. با این حال، زمانی که هیچ رنگی مورد نیاز نیست، رنگ شفاف به نام مفید می شود. در این بخش، دکمه Close را در حالت مخفی می‌کنید و یک شکل X با یک خطی-gradient() ایجاد می‌کنید که همه اینها با استفاده از مقدار شفاف است.

برای شروع استفاده از مقدار شفاف، styles.css را در ویرایشگر متن خود باز کنید. سپس، به انتخابگر کلاس .modal-close که قبلا اضافه کردید بروید. در داخل انتخابگر، همانطور که در بلوک کد زیر مشخص شده است، مقدار ویژگی رنگ را از سفید به شفاف تغییر دهید:

styles.css

...
.modal-close {
  color: transparent;
}
...

این تغییر متن را از فضای خالی حذف نمی کند. فقط آن را از رندر بصری در صفحه حذف می کند.

بعد، یک مربع از پیوند نزدیک ایجاد می کنید تا جایی برای ایجاد شکل X وجود داشته باشد. با افزودن یک ویژگی نمایشگر به بلاک شروع کنید، که به <a> امکان پیکربندی بصری بیشتری را می دهد. در مرحله بعد، یک ویژگی height و width ایجاد کنید و هر کدام را روی 1.5rem قرار دهید که شکل مربع را ایجاد می کند. در نهایت، یک ویژگی overflow را به hidden اضافه کنید، که از خروج متن به خارج از ظرف و افزودن فضای تعاملی جلوگیری می کند. CSS هایلایت شده از بلوک کد زیر نحوه تنظیم مربع را نشان می دهد:

styles.css

...
.modal-close {
  color: transparent;
  display: block;
  height: 1.5rem;
  width: 1.5rem;
  overflow: hidden;
}
...

بخش آخر ایجاد شکل X با یک نمونه پس زمینه چندگانه متشکل از دو مقدار خطی-gradient() است. برای تنظیم این، کد برجسته شده را از بلوک کد زیر اضافه کنید:

styles.css

...
.modal-close {
  color: transparent;
  display: block;
  height: 1.5rem;
  width: 1.5rem;
  overflow: hidden;
  background-image:
    linear-gradient(
      to top right,
      transparent 48%,
      white 48%,
      white 52%,
      transparent 52%
    ),
    linear-gradient(
      to top left,
      transparent 48%,
      white 48%,
      white 52%,
      transparent 52%
    );
}
...

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

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

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

برای ایجاد یک حالت تعاملی برای X، به styles.css در ویرایشگر متن خود بازگردید. به دنبال انتخابگر کلاس .modal-close، یک انتخابگر گروه جدید متشکل از .modal-close:hover و .modal-close:focus ایجاد کنید. سپس، ویژگی و مقدار background-image را از .modal-close در انتخابگر جدید کپی کنید. در نهایت، بخش های 48 درصدی را به 46 درصد کاهش دهید و 52 درصد را به 54 درصد افزایش دهید.

style.css

...
.modal-close {
  ...
}

.modal-close:hover,
.modal-close:focus {
  background-image:
    linear-gradient(
      to top right,
      transparent 46%,
      white 46%,
      white 54%,
      transparent 54%
    ),
    linear-gradient(
      to top left,
      transparent 46%,
      white 46%,
      white 54%,
      transparent 54%
    );
}
...

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

این بخش شما را با ویژگی transparent آشنا می کند و شما از آن برای مخفی کردن محتوا و ایجاد نماد X با استفاده از مقادیر ()linear-gradient استفاده می کنید. در بخش آخر، از مقدار شفاف بر روی یک گرادیان برای کمک به ارائه افکت انیمیشن بر روی یک عنصر استایل دکمه ای استفاده خواهید کرد.

با استفاده از حالت :hover برای انتقال بین مقادیر رنگ شفاف

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

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

styles.css

...
.button {
  text-decoration: none;
  display: inline-block;
  padding: 0.5rem 1.25rem;
  color: white;
  background: #4c90b2;
  border: 1px solid #2d566b;
  border-radius: 0.5rem;
  transition: background-color 250ms ease;
}

.button:hover,
.button:focus {
  background-color: #2d566b;
}
...

تغییرات خود را در styles.css ذخیره کنید و index.html را در مرورگر وب خود باز کنید. نگه داشتن دکمه با مکان نما اکنون باعث می شود که رنگ پس زمینه بین آبی روشن و آبی تیره متحرک شود. انیمیشن زیر نشان می دهد که چگونه این در مرورگر ارائه می شود:

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

styles.css

...
.button {
  text-decoration: none;
  display: inline-block;
  padding: 0.5rem 1.25rem;
  color: white;
  background: #4c90b2;
  border: 1px solid #2d566b;
  border-radius: 0.5rem;
  background-image:
    linear-gradient(
      to bottom,
      hsla(200, 40%, 80%, 0.4),
      transparent,
      hsla(200, 40%, 20%, 0.6)
    );
  transition: background-color 250ms ease;
}
...

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

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

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

نتیجه

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

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

برچسب‌ها:CSSاستایل‌سازی HTML با CSSانواع سرور مجازیایجاد سرور مجازیایجاد یک Modal در CSSخرید سرور لینوکسراه اندازی پایه HTML و CSSسرور مجازی

 

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

چگونه یک ربات Discord با Node.js بسازیم

ورود به سایت

معرفی

Discord یک برنامه چت است که به میلیون ها کاربر در سراسر جهان امکان می دهد در جوامعی به نام اصناف یا سرورها به صورت آنلاین پیام و چت صوتی داشته باشند. Discord همچنین یک API گسترده ارائه می دهد که توسعه دهندگان می توانند از آن برای ساخت ربات های قدرتمند Discord استفاده کنند. ربات ها می توانند اقدامات مختلفی مانند ارسال پیام به سرورها، کاربران DM-ing، تعدیل سرورها و پخش صدا در چت های صوتی را انجام دهند. این به توسعه‌دهندگان اجازه می‌دهد تا ربات‌های قدرتمندی بسازند که شامل ویژگی‌های پیشرفته و پیچیده مانند ابزارهای تعدیل یا حتی بازی‌ها می‌شود. به عنوان مثال، ربات ابزار Dyno به میلیون‌ها انجمن خدمات ارائه می‌دهد و دارای ویژگی‌های مفیدی مانند محافظت از هرزنامه، پخش‌کننده موسیقی و سایر عملکردهای کاربردی است. یادگیری نحوه ایجاد ربات های Discord به شما امکان می دهد تا امکانات زیادی را پیاده سازی کنید که هزاران نفر می توانند هر روز با آنها تعامل داشته باشند.

در این آموزش، با استفاده از Node.js و کتابخانه Discord.js، یک ربات Discord را از ابتدا می سازید، که به کاربران اجازه می دهد مستقیماً با Discord API تعامل داشته باشند. شما یک نمایه برای یک ربات Discord تنظیم می‌کنید، نشانه‌های احراز هویت را برای ربات دریافت می‌کنید، و ربات را با قابلیت پردازش دستورات با آرگومان‌های کاربران برنامه‌ریزی می‌کنید.

پیش نیازها

قبل از شروع به موارد زیر نیاز دارید:

  • Node.js روی ماشین توسعه شما نصب شده است. برای نصب آن در macOS یا اوبونتو 20.04، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی در macOS یا نصب Node.js با Apt با استفاده از بخش NodeSource PPA در نحوه نصب Node.js در اوبونتو 20.04 را دنبال کنید. .
  • هر ویرایشگر متنی دلخواه شما، مانند Visual Studio Code، Atom، Sublime یا Nano.
  • یک حساب رایگان Discord با یک حساب ایمیل تأیید شده و یک سرور Discord رایگان که برای آزمایش ربات Discord خود استفاده خواهید کرد.

مرحله 1 – راه اندازی ربات Discord

در این مرحله، از رابط کاربری گرافیکی توسعه دهندگان Discord (GUI) برای راه اندازی ربات Discord و دریافت توکن ربات استفاده می کنید که آن را به برنامه خود منتقل می کنید.

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

برای شروع، روی New Application کلیک کنید. Discord از شما می خواهد که یک نام برای برنامه جدید خود وارد کنید. سپس روی Create کلیک کنید تا اپلیکیشن ایجاد شود.

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

روی دکمه افزودن ربات کلیک کنید تا یک ربات به برنامه اضافه شود. روی Yes, do it کلیک کنید! زمانی که از شما درخواست تایید می کند را فشار دهید. سپس روی داشبوردی قرار می گیرید که حاوی جزئیات نام ربات، نشانه احراز هویت و تصویر نمایه شما است.

اکنون باید یک دعوت نامه ایجاد کنید تا ربات را به انجمن Discord اضافه کنید تا بتوانید آن را آزمایش کنید. ابتدا به صفحه URL Generator زیر تب OAuth2 داشبورد برنامه بروید. برای ایجاد یک دعوت، به پایین پیمایش کنید و ربات را در زیر scopes انتخاب کنید. همچنین باید مجوزهایی را برای کنترل اعمالی که ربات شما می تواند در انجمن ها انجام دهد تنظیم کنید. برای اهداف این آموزش، Administrator را انتخاب کنید، که به ربات شما اجازه می دهد تقریباً تمام اقدامات را در Guild انجام دهد. لینک را با دکمه کپی کپی کنید.

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

حالا روی Continue کلیک کنید. مطمئن شوید که تیک باکس کنار Administrator را علامت زده اید – این به مدیر ربات مجوز می دهد. سپس روی Authorize کلیک کنید. Discord از شما می خواهد که قبل از پیوستن ربات به سرور، یک CAPTCHA را حل کنید. اکنون ربات Discord را در لیست اعضا در سروری که ربات را در حالت آفلاین به آن اضافه کرده اید خواهید داشت.

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

مرحله 2 – ایجاد پروژه شما

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

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

پوشه پروژه خود را ایجاد کنید:

 

mkdir discord-bot

 

به پوشه پروژه ای که ایجاد کرده اید بروید:

 

cd discord-bot

 

در مرحله بعد، از ویرایشگر متن خود برای ایجاد فایلی به نام config.json برای ذخیره رمز احراز هویت ربات خود استفاده کنید:

 

nano config.json

 

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

discord-bot/config.json

{
    "BOT_TOKEN": "YOUR BOT TOKEN"
}

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

سپس یک فایل package.json ایجاد می‌کنید که جزئیات پروژه شما و اطلاعات مربوط به وابستگی‌هایی را که برای پروژه استفاده می‌کنید ذخیره می‌کند. با اجرای دستور npm زیر یک فایل package.json ایجاد خواهید کرد:

npm init

npm از شما جزئیات مختلفی در مورد پروژه شما می خواهد. اگر مایل به راهنمایی برای تکمیل این دستورات هستید، می توانید در مورد آنها در نحوه استفاده از ماژول های Node.js با npm و package.json مطالعه کنید.

اکنون بسته discord.js را که برای تعامل با Discord API استفاده خواهید کرد، نصب خواهید کرد. با دستور زیر می توانید discord.js را از طریق npm نصب کنید:

npm install discord.js

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

ابتدا یک فایل به نام index.js در پوشه discord-bot برای کد ایجاد کنید:

nano index.js

کدگذاری ربات را با نیاز به وابستگی discord.js و فایل پیکربندی با توکن ربات آغاز کنید.

discord-bot/index.js

const Discord = require("discord.js");
const config = require("./config.json");

پس از این، دو خط کد بعدی را اضافه کنید:

discord-bot/index.js

...
const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]);

client.login(config.BOT_TOKEN);

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

خط اول کد یک Discord.Client جدید ایجاد می کند و آن را به مشتری ثابت اختصاص می دهد. این کلاینت تا حدودی نحوه تعامل شما با Discord API و نحوه اطلاع رسانی Discord از رویدادهایی مانند پیام های جدید است. کلاینت در واقع نشان دهنده ربات Discord است. شیء ارسال شده به سازنده Client، مقاصد دروازه ربات شما را مشخص می کند. این مشخص می کند که ربات شما به کدام رویدادهای WebSocket گوش می دهد. در اینجا GUILDS و GUILD_MESSAGES را مشخص کرده‌اید تا ربات بتواند رویدادهای پیام را در انجمن‌ها دریافت کند.

خط دوم کد از روش لاگین روی کلاینت برای ورود به ربات Discord که ایجاد کرده‌اید استفاده می‌کند و از رمز موجود در فایل config.json به عنوان رمز عبور استفاده می‌کند. توکن به Discord API اجازه می دهد بداند که برنامه برای کدام ربات است و اینکه شما برای استفاده از ربات احراز هویت شده اید.

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

node index.js

وضعیت ربات شما در سرور Discord که آن را به آن اضافه کرده اید به حالت آنلاین تغییر می کند.

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

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

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

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

ابتدا فایل خود را باز کنید:

nano index.js

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

discord-bot/index.js

...
const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});


client.on("messageCreate", function(message) { 
                                         
});                                      

client.login(config.BOT_TOKEN);

این تابع که روی رویداد messageCreate اجرا می شود، پیام را به عنوان پارامتر می گیرد. پیام ارزش یک نمونه پیام Discord.js را خواهد داشت که حاوی اطلاعاتی در مورد پیام ارسال شده و روش هایی برای کمک به ربات برای پاسخ دادن است.

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

discord-bot/index.js

...
client.on("messageCreate", function(message) {
  if (message.author.bot) return;
});
...

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

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

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

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

discord-bot/index.js

...
const prefix = "!";

client.on("messageCreate", function(message) {
  if (message.author.bot) return;
  if (!message.content.startsWith(prefix)) return;
});
...

شما خط اول کد را اضافه می کنید تا مقدار “!” به پیشوند ثابت که از آن به عنوان پیشوند ربات استفاده خواهید کرد.

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

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

discord-bot/index.js

...
client.on("messageCreate", function(message) {
  if (message.author.bot) return;
  if (!message.content.startsWith(prefix)) return;

  const commandBody = message.content.slice(prefix.length);
  const args = commandBody.split(' ');
  const command = args.shift().toLowerCase();
});
...

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

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

خط سوم اولین عنصر را از آرایه args حذف می کند (که نام دستور ارائه شده است)، آن را به حروف کوچک تبدیل می کند و سپس آن را به دستور ثابت اختصاص می دهد. این به شما امکان می دهد نام فرمان را ایزوله کنید و فقط آرگومان ها را در آرایه باقی بگذارید. شما همچنین از روش toLowerCase استفاده می کنید زیرا دستورات معمولاً در ربات های Discord به حروف بزرگ و کوچک حساس نیستند.

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

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

discord-bot/index.js

...
  const args = commandBody.split(' ');
  const command = args.shift().toLowerCase();

  if (command === "ping") {
                           
  }                        
});
...

این دستور if بررسی می کند که آیا نام فرمانی که شما تجزیه کرده اید (به دستور ثابت اختصاص داده شده) با “ping” مطابقت دارد یا خیر. اگر این کار را کرد، نشان می دهد که کاربر می خواهد از دستور “ping” استفاده کند. کد دستور خاص را در بلوک دستور if قرار می دهید. شما این الگو را برای دستورات دیگری که می خواهید اجرا کنید تکرار خواهید کرد.

اکنون می توانید کد دستور “ping” را پیاده سازی کنید:

discord-bot/index.js

...
  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
  }
...

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

شما بلوک فرمان “ping” را اضافه می کنید که تفاوت بین زمان فعلی – که با استفاده از روش now در شیء Date یافت می شود – و مهر زمانی که پیام ایجاد شده را در میلی ثانیه محاسبه می کند. این محاسبه مدت زمان پردازش پیام و “پینگ” ربات را محاسبه می کند.

خط دوم با استفاده از روش پاسخ در ثابت پیام به دستور کاربر پاسخ می دهد. روش پاسخ به کاربر که دستور را فراخوانی کرده است پینگ می دهد (که به کاربر اطلاع می دهد و پیام را برای کاربر مشخص شده برجسته می کند) و به دنبال آن محتوای ارائه شده به عنوان اولین آرگومان متد. شما یک الگوی تحت اللفظی حاوی یک پیام و پینگ محاسبه شده به عنوان پاسخی که روش پاسخ استفاده خواهد کرد ارائه می دهید.

این به اجرای دستور “ping” پایان می دهد.

ربات خود را با استفاده از دستور زیر (در همان پوشه index.js) اجرا کنید:

node index.js

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

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

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

اکنون با اجرای دستور “!sum” برنامه خود را گسترش خواهید داد. دستور هر تعداد آرگومان را می گیرد و آنها را با هم جمع می کند، قبل از اینکه مجموع همه آرگومان ها را به کاربر برگرداند.

اگر ربات Discord شما همچنان در حال اجرا است، می توانید با CTRL + C روند آن را متوقف کنید.

فایل index.js خود را دوباره باز کنید:

nano index.js

برای شروع اجرای دستور “!sum” از بلوک else-if استفاده می کنید. پس از بررسی نام دستور ping، بررسی می کند که آیا نام دستور برابر با “sum” است یا خیر. شما از یک بلوک else-if استفاده خواهید کرد زیرا فقط یک دستور در یک زمان پردازش می شود، بنابراین اگر برنامه با نام دستور “ping” مطابقت داشته باشد، لازم نیست دستور “sum” را بررسی کند. خطوط هایلایت شده زیر را به فایل خود اضافه کنید:

discord-bot/index.js

...
  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Ping! This message had a latency of ${timeTaken}ms.`);
  }

  else if (command === "sum") {
                               
  }                            
});
...

می توانید اجرای کد دستور “sum” را شروع کنید. کد دستور “sum” داخل بلوک else-if که به تازگی ایجاد کرده اید می رود. حالا کد زیر را اضافه کنید:

discord-bot/index.js

...
  else if (command === "sum") {
    const numArgs = args.map(x => parseFloat(x));
    const sum = numArgs.reduce((counter, x) => counter += x);
    message.reply(`The sum of all the arguments you provided is ${sum}!`);
  }
...

شما از روش نقشه در لیست آرگومان ها برای ایجاد یک لیست جدید با استفاده از تابع parseFloat در هر آیتم در آرایه args استفاده می کنید. این یک آرایه جدید ایجاد می کند (به ثابت numArgs اختصاص داده می شود) که در آن همه موارد به جای رشته ها اعداد هستند. این بدان معناست که بعداً می توانید با جمع کردن آنها با موفقیت مجموع اعداد را پیدا کنید.

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

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

این به اجرای دستور “sum” پایان می دهد. اکنون ربات را با استفاده از دستور زیر (در همان پوشه index.js) اجرا کنید:

node index.js

اکنون می توانید از دستور “!sum” در هر کانالی که ربات می تواند مشاهده کند و در آن پیام ارسال کند، استفاده کنید.

نسخه زیر یک نسخه کامل از اسکریپت ربات index.js است:

discord-bot/index.js

const Discord = require("discord.js");
const config = require("./config.json");

const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES"]});

const prefix = "!";

client.on("messageCreate", function(message) {
  if (message.author.bot) return;
  if (!message.content.startsWith(prefix)) return;

  const commandBody = message.content.slice(prefix.length);
  const args = commandBody.split(' ');
  const command = args.shift().toLowerCase();

  if (command === "ping") {
    const timeTaken = Date.now() - message.createdTimestamp;
    message.reply(`Pong! This message had a latency of ${timeTaken}ms.`);
  }

  else if (command === "sum") {
    const numArgs = args.map(x => parseFloat(x));
    const sum = numArgs.reduce((counter, x) => counter += x);
    message.reply(`The sum of all the arguments you provided is ${sum}!`);
  }
});

client.login(config.BOT_TOKEN);

در این مرحله، ربات Discord خود را با اجرای دستور sum توسعه داده اید.

نتیجه

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

هنگام ایجاد ربات‌های Discord، همیشه باید شرایط سرویس Discord API را در نظر داشته باشید که نشان می‌دهد توسعه‌دهندگان چگونه باید از Discord API استفاده کنند. اگر می‌خواهید درباره Node.js بیشتر بدانید، نحوه کدنویسی در سری 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/

 

 

برچسب‌ها:

 

  • behnam gol mohamadi
  • ۰
  • ۰

چگونه از یک ماژول خصوصی Go در پروژه خود استفاده کنید

ورود به سایت

 

 

 

معرفی

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

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

پیش نیازها

  • Go نسخه 1.16 یا بالاتر نصب شده است، که می توانید با دنبال کردن سری ما، نحوه نصب و راه اندازی یک محیط برنامه نویسی محلی برای Go، این کار را انجام دهید.
  • درک توزیع ماژول های Go،
  • آشنایی با Git،
  • یک مخزن خصوصی خالی GitHub با نام mysecret برای ماژول خصوصی منتشر شده شما.
  • یک رمز دسترسی شخصی GitHub با دسترسی به خواندن از مخازن شما. از این برای اجازه دسترسی Go به مخزن خصوصی شما استفاده خواهید کرد.

توزیع یک ماژول خصوصی

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

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

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

دایرکتوری پروژه ها را بسازید و به آن بروید:

mkdir projects

cd projects

از دایرکتوری پروژه‌ها، git clone را اجرا کنید تا مخزن mysecret خصوصی شما در رایانه شما کلون شود:

git clone git@github.com:your_github_username/mysecret.git

Git تایید می کند که ماژول شما را شبیه سازی کرده است و ممکن است به شما هشدار دهد که یک مخزن خالی را شبیه سازی کرده اید. اگر چنین است، این چیزی نیست که باید نگران آن باشید:

 

Output

Cloning into 'mysecret'...
warning: You appear to have cloned an empty repository.

در مرحله بعد، از cd برای رفتن به دایرکتوری mysecret جدیدی که کلون کرده اید استفاده کنید و از go mod init به همراه نام مخزن خصوصی خود برای ایجاد یک ماژول Go جدید استفاده کنید:

cd mysecret

go mod init github.com/your_github_username/mysecret

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

nano mysecret.go

در فایل mysecret.go، بسته را با همان نام مخزن خود نامگذاری کنید، سپس یک تابع SecretProcess برای چاپ خط Running the secret اضافه کنید! هنگام تماس:

projects/mysecret/mysecret.go

package mysecret

import "fmt"

func SecretProcess() {
    fmt.Println("Running the secret process!")
}

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

از آنجایی که هر دو ماژول Go خصوصی و عمومی مخازن منبع هستند، انتشار یک ماژول Go خصوصی همان فرآیند انتشار عمومی را دنبال می کند. برای انتشار ماژول جدید خود، تغییرات خود را با استفاده از دستور git add در فهرست فعلی مرحله بندی کنید، سپس با دستور git commit آن تغییرات را در مخزن محلی خود انجام دهید:

git add .

git commit -m “Initial private module implementation”

تأییدیه ای از Git مبنی بر موفقیت آمیز بودن commit اولیه و همچنین خلاصه ای از فایل های موجود در commit را مشاهده خواهید کرد:

 

Output

[main (root-commit) bda059d] Initial private module implementation
 2 files changed, 10 insertions(+)
 create mode 100644 go.mod
 create mode 100644 mysecret.go

اکنون تنها قسمت باقی مانده این است که تغییرات خود را به مخزن GitHub خود منتقل کنید. مشابه یک ماژول عمومی، از دستور git push برای انتشار کد خود استفاده کنید:

git push

سپس Git تغییرات شما را تحت فشار قرار می دهد و آنها را برای هر کسی که به مخزن خصوصی شما دسترسی دارد در دسترس قرار می دهد:

git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 404 bytes | 404.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:your_github_username/mysecret.git
 * [new branch]      main -> main

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

در این بخش، ماژول جدیدی با تابع SecretProcess ایجاد کردید و آن را در مخزن mysecret خصوصی GitHub خود منتشر کردید و آن را به یک ماژول Go خصوصی تبدیل کردید. با این حال، برای دسترسی به این ماژول از برنامه Go دیگر، باید Go را پیکربندی کنید تا بداند چگونه به ماژول دسترسی پیدا کند.

پیکربندی رفتن به دسترسی به ماژول های خصوصی

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

برای استفاده از ماژول خصوصی، با تنظیم آن در متغیر GOPRIVATE، به Go بگویید کدام مسیر را خصوصی در نظر بگیرید. هنگام تنظیم مقادیر متغیر GOPRIVATE، چند انتخاب وجود دارد. یک گزینه این است که GOPRIVATE را روی github.com تنظیم کنید. اگرچه ممکن است این چیزی نباشد که شما به دنبال آن هستید، زیرا این امر به Go می‌گوید که از خدمات مرکزی برای هر ماژول میزبانی شده در github.com، از جمله مواردی که مال شما نیستند، استفاده نکند.

گزینه بعدی این است که GOPRIVATE را فقط روی مسیر کاربری خود تنظیم کنید، مانند github.com/your_github_username. این مشکل در نظر گرفتن تمام GitHub خصوصی را حل می کند، اما در برخی مواقع ممکن است ماژول های عمومی ایجاد کنید که بخواهید از طریق آینه ماژول Go دانلود کنید. انجام این کار هیچ مشکلی ایجاد نمی کند و یک گزینه کاملا منطقی خواهد بود، اما شما همچنین می توانید این گزینه را دقیق تر کنید.

خاص ترین گزینه تنظیم GOPRIVATE برای مطابقت دقیق با مسیر ماژول شما است، مانند: github.com/your_github_username/mysecret. این هر دو مشکل از گزینه های قبلی را حل می کند، اما همچنین مشکلی را معرفی می کند که باید هر یک از مخازن خصوصی خود را به صورت جداگانه به GOPRIVATE اضافه کنید، مانند نشان داده شده در اینجا:

GOPRIVATE=github.com/your_github_username/mysecret,github.com/your_github_username/othersecret

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

از آنجایی که اکنون فقط یک ماژول خصوصی دارید، از نام مخزن کامل برای مقدار استفاده خواهیم کرد. برای تنظیم متغیر محیطی GOPRIVATE=github.com/your_github_username/mysecret در ترمینال فعلی خود، از دستور صادرات استفاده کنید:

export GOPRIVATE=github.com/your_github_username/mysecret

اگر می خواهید دوباره بررسی کنید که تنظیم شده است، می توانید از دستور env به همراه grep برای بررسی نام GOPRIVATE استفاده کنید:

env | grep GOPRIVATE

 

Output

GOPRIVATE=github.com/your_github_username/mysecret

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

go get github.com/your_github_username/mysecret

 

Output

go get: module github.com/your_github_username/mysecret: git ls-remote -q origin in /Users/your_github_username/go/pkg/mod/cache/vcs/2f8c...b9ea: exit status 128:
    fatal: could not read Username for 'https://github.com': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.
 

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

ارائه اعتبار ماژول خصوصی برای HTTPS

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

به طور پیش‌فرض، وقتی go get تلاش می‌کند یک ماژول را دانلود کند، ابتدا سعی می‌کند از HTTPS استفاده کند. با این حال، همانطور که در مثال قبلی نشان داده شد، نمی‌تواند از شما نام کاربری و رمز عبور را بخواهد. برای دادن اعتبار به Git، باید یک netrc. داشته باشید که شامل github.com در فهرست اصلی خود است.

برای ایجاد یک فایل netrc. در Linux، MacOS، یا Windows Subsystem for Linux (WSL)، فایل netrc. را در فهرست اصلی خود (~/) باز کنید تا بتوانید آن را ویرایش کنید:

nano ~/.netrc

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

~/.netrc

machine github.com
login your_github_username
password your_github_access_token

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

~/.netrc

machine github.com login your_github_username password your_github_access_token

اکنون محیط شما برای استفاده از احراز هویت HTTPS برای دانلود ماژول خصوصی شما تنظیم شده است. حتی اگر HTTPS روش پیش‌فرض Go و Git برای دانلود یک ماژول است، می‌توان به Git گفت که به جای آن از SSH استفاده کند. استفاده از SSH به جای HTTPS می تواند مفید باشد، بنابراین می توانید از همان کلید SSH که برای فشار دادن ماژول خصوصی خود استفاده می کردید استفاده کنید. همچنین به شما این امکان را می دهد که از کلیدهای استقرار هنگام تنظیم یک محیط CI/CD استفاده کنید، اگر ترجیح می دهید رمز دسترسی شخصی ایجاد نکنید.

ارائه اعتبار ماژول خصوصی برای SSH

برای استفاده از کلید SSH به عنوان روش احراز هویت برای ماژول Go خصوصی به جای HTTPS، Git یک گزینه پیکربندی به نام جایگزینOf را ارائه می دهد. گزینه جایگزین به شما این امکان را می دهد که بگویید “به جای” از https://github.com/ به عنوان URL درخواست برای همه درخواست های Git، ترجیح می دهید از ssh://git@github.com/ استفاده کنید.

در لینوکس، MacOS و WSL این پیکربندی در فایل gitconfig. وجود دارد. ممکن است قبلاً با این فایل آشنایی داشته باشید زیرا آدرس ایمیل و نام commit شما نیز در آن پیکربندی شده است. برای ویرایش فایل، از nano یا ویرایشگر متن مورد علاقه خود استفاده کنید و فایل ~/.gitconfig را در فهرست اصلی خود باز کنید:

nano ~/.gitconfig

هنگامی که فایل را باز کردید، آن را ویرایش کنید تا بخش url برای ssh://git@github.com/ مانند مثال زیر باشد:

~/.gitconfig

[user]
    email = your_github_username@example.com
    name = Sammy the Shark

[url "ssh://git@github.com/"]
    insteadOf = https://github.com/

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

این بخش جدید به Git می‌گوید که هر نشانی اینترنتی که با https://github.com/ شروع می‌شود باید با ssh://git@github.com/ جایگزین شود. از آنجایی که Go به طور پیش فرض از HTTPS استفاده می کند، این امر بر دستورات go get شما نیز تأثیر می گذارد. با استفاده از ماژول خصوصی خود به عنوان مثال، این بدان معناست که Go مسیر واردات github.com/your_github_username/mysecret را به URL https://github.com/your_github_username/mysecret تبدیل می کند. هنگامی که Git با این URL روبرو می شود، URL را با پیشوند https://github.com/ مطابقت می بیند که به جای آن به آن ارجاع داده شده است و URL حاصل را به ssh://git@github.com/your_github_username/mysecret تبدیل می کند.

تا زمانی که URL ssh://git@ برای آن میزبان نیز کار کند، می‌توان از این الگو برای دامنه‌هایی غیر از GitHub استفاده کرد.

در این بخش، Git را برای استفاده از SSH برای دانلود ماژول های Go با به روز رسانی فایل .gitconfig و افزودن یک بخش url پیکربندی کردید. اکنون که احراز هویت برای ماژول خصوصی شما تنظیم شده است، می توانید برای استفاده در برنامه های Go خود به آن دسترسی داشته باشید.

استفاده از ماژول خصوصی

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

در دایرکتوری که برای پروژه های خود استفاده می کنید، مانند پروژه ها، با استفاده از دستور mkdir یک دایرکتوری به نام myproject برای پروژه جدید ایجاد کنید:

mkdir myproject

پس از ایجاد دایرکتوری، با استفاده از cd به دایرکتوری بروید و یک ماژول Go جدید را با استفاده از go mod init برای پروژه خود بر اساس URL مخزنی که پروژه شما در آن زندگی می کند، راه اندازی کنید، مانند github.com/your_github_username/myproject. اگر قصد ندارید پروژه شما به مخزن دیگری منتقل شود، نام ماژول می تواند فقط myproject یا هر نام دیگری باشد، اما استفاده از URL های کامل تمرین خوبی است زیرا اکثر ماژول هایی که به اشتراک گذاشته می شوند به آنها نیاز دارند.

cd myproject
go mod init github.com/your_github_username/myproject

 

Output

go: creating new go.mod: module github.com/your_github_username/myproject

اکنون، با باز کردن main.go با nano یا ویرایشگر متن دلخواه خود، اولین فایل کد پروژه خود را ایجاد کنید:

nano main.go

در داخل فایل، تابع اصلی اولیه را که ماژول خصوصی خود را از آن فراخوانی می کنید، تنظیم کنید:

projects/myproject/main.go

package main

import "fmt"

func main() {
    fmt.Println("My new project!")
}

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

go run main.go

 

Output

My new project!

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

go get github.com/your_github_username/mysecret

سپس ابزار go کد ماژول خصوصی شما را دانلود کرده و با استفاده از یک رشته نسخه که با آخرین هش commit و زمان آن commit مطابقت دارد، آن را به عنوان یک وابستگی اضافه می کند:

 

Output

go: downloading github.com/your_github_username/mysecret v0.0.0-20210920195630-bda059d63fa2
go get: added github.com/your_github_username/mysecret v0.0.0-20210920195630-bda059d63fa2

در نهایت، فایل main.go را دوباره باز کنید و آن را به روز کنید تا یک تماس به تابع SecretProcess ماژول خصوصی خود در تابع اصلی اضافه کنید. همچنین باید عبارت import را به‌روزرسانی کنید تا github.com/your_github_username/mysecret خصوصی ماژول خود را نیز به‌عنوان یک import اضافه کنید:

projects/myproject/main.go

package main

import (
    "fmt"

    "github.com/your_github_username/mysecret"
)

func main() {
    fmt.Println("My new project!")
    mysecret.SecretProcess()
}

برای مشاهده پروژه نهایی در حال اجرا با ماژول خصوصی خود، از دستور go run دوباره استفاده کنید و فایل main.go را به عنوان پارامتر ارائه دهید:

go run main.go

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

 

Output

My new project!
Running the secret process!

در این بخش از go init برای ایجاد یک ماژول Go جدید برای دسترسی به ماژول خصوصی که قبلا منتشر کرده بودید استفاده کردید. هنگامی که ماژول را ایجاد کردید، سپس از go get برای دانلود ماژول خصوصی خود مانند یک ماژول عمومی Go استفاده کردید. در نهایت از go run برای کامپایل و اجرای برنامه Go خود با استفاده از ماژول خصوصی استفاده کردید.

نتیجه

در این آموزش، شما یک ماژول Go خصوصی ایجاد و منتشر کردید. همچنین برای دسترسی به ماژول Go خصوصی خود، احراز هویت HTTPS و SSH را تنظیم کرده اید. در نهایت، شما از ماژول خصوصی خود در یک پروژه جدید استفاده کردید.

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

علاوه بر متغیر محیطی GOPRIVATE، متغیرهای بیشتری برای استفاده در هنگام کار با ماژول های خصوصی Go در دسترس هستند. آنها را می توان با جزئیات در بخش Private Modules در مرجع Go Modules مشاهده کرد.

 

 

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/

برچسب‌ها:HTTPSSSHاستفاده از ماژول خصوصی Goخرید سرورسرور مجازیفروش سرور مجازیماژول Goماژول خصوصی

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه نصب وب سرور Apache در اوبونتو 18.04

ورود به سایت

معرفی

سرور Apache HTTP پرکاربردترین وب سرور در جهان است. این ویژگی های قدرتمند بسیاری از جمله ماژول های قابل بارگذاری پویا ، پشتیبانی رسانه ای قوی و ادغام گسترده با سایر نرم افزارهای محبوب را ارائه می دهد.

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

پیش نیازها

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

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

مرحله 1 – نصب Apache

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

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

sudo apt update

سپس ، بسته apache2 را نصب کنید:

sudo apt install apache2

پس از تأیید نصب ، apt Apache و تمام وابستگی های مورد نیاز را نصب می کند.

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

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

در حین نصب ، Apache خود را با UFW ثبت می کند تا چند پروفایل برنامه را ارائه دهد که می توان از آنها برای فعال یا غیرفعال کردن دسترسی به Apache از طریق فایروال استفاده کرد.

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

sudo ufw app list

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

 

Output

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

این لیست نشان می دهد که سه نمایه برای Apache در دسترس است:

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

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

sudo ufw allow ‘Apache’

با بررسی وضعیت ، این تغییر را تأیید کنید:

sudo ufw status

 

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

 

Output

Status: active

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

 

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

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

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

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

sudo systemctl status apache2

 

Output

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Tue 2021-09-28 16:52:56 UTC; 1min 14s ago
 Main PID: 9409 (apache2)
    Tasks: 55 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─9409 /usr/sbin/apache2 -k start
           ├─9410 /usr/sbin/apache2 -k start
           └─9411 /usr/sbin/apache2 -k start

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

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

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

hostname -I

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

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

curl -4 icanhazip.com

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

http://your_server_ip

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

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

مرحله 4 – مدیریت فرایند آپاچی

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

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

sudo systemctl stop apache2

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

sudo systemctl start apache2

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

sudo systemctl restart apache2

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

sudo systemctl reload apache2

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

sudo systemctl disable apache2

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

sudo systemctl enable apache2

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

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

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

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

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

sudo mkdir /var/www/your_domain

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

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

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

sudo chmod -R 755 /var/www/your_domain

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

nano /var/www/your_domain/index.html

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

/var/www/your_domain/index.html

<html>
    <head>
        <title>Welcome to Your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain virtual host is working!</h1>
    </body>
</html>

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

برای اینکه Apache این محتوا را ارائه دهد ، لازم است یک فایل میزبان مجازی با دستورالعمل های صحیح ایجاد کنید. به جای تغییر فایل پیکربندی پیش فرض واقع در /etc/apache2/sites-available/000-default.conf ، یک فایل جدید در

/etc/apache2/sites-available/your_domain.conf:

sudo nano /etc/apache2/sites-available/your_domain.conf

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

/etc/apache2/sites-available/your_domain.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

توجه داشته باشید که ما DocumentRoot را به فهرست جدید و ServerAdmin را به ایمیلی که سرپرست سایت your_domain می تواند به آن دسترسی داشته باشد ، به روز کرده ایم. ما همچنین دو دستورالعمل اضافه کرده ایم: ServerName ، که دامنه اصلی را که باید با این تعریف میزبان مجازی مطابقت داشته باشد ، ایجاد می کند ، و ServerAlias ، نامهای دیگری را که باید مطابق نام اصلی باشد مطابقت می دهد.

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

بعد ، فایل را با ابزار a2ensite فعال کنید:

sudo a2ensite your_domain.conf

سایت پیش فرض تعریف شده در 000-default.conf را غیرفعال کنید:

sudo a2dissite 000-default.conf

اکنون خطاهای پیکربندی را آزمایش کنید:

sudo apache2ctl configtest

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

 

Output

Syntax OK

برای پیاده سازی تغییرات ، Apache را مجدداً راه اندازی کنید:

sudo systemctl restart apache2

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

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

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

محتوا

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

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

  • /etc/apache2: فهرست پیکربندی Apache. همه فایلهای پیکربندی Apache در اینجا قرار دارند.
  • /etc/apache2/apache2.conf: فایل اصلی پیکربندی Apache است. این می تواند برای ایجاد تغییر در پیکربندی جهانی Apache اصلاح شود. این فایل مسئول بارگیری بسیاری از فایل های دیگر در فهرست پیکربندی است.
  • /etc/apache2/ports.conf: این فایل پورتهایی را که Apache به آنها گوش می دهد ، مشخص می کند. به طور پیش فرض ، هنگامی که ماژولی که قابلیت های SSL را فعال می کند ، آپاچی به پورت 80 گوش می دهد و همچنین به پورت 443 گوش می دهد.
  • /etc/apache2/sites-available/: دایرکتوری که میزبان مجازی هر سایت در آن ذخیره می شود. Apache از فایلهای پیکربندی موجود در این پوشه استفاده نمی کند مگر اینکه به فهرست راهنمای سایتها پیوند خورده باشد. به طور معمول ، تمام پیکربندی بلوک سرور در این فهرست انجام می شود و سپس با پیوند دادن به فهرست دیگر با دستور a2ensite فعال می شود.
  • /etc/apache2/sites-enabled/: دایرکتوری که میزبان مجازی هر سایت فعال در آن ذخیره می شود. به طور معمول ، اینها با پیوند دادن به فایلهای پیکربندی موجود در فهرست سایتهای موجود با a2ensite ایجاد می شوند. Apache فایلهای پیکربندی و پیوندهای موجود در این فهرست را هنگام شروع یا بارگیری مجدد برای کامپایل یک پیکربندی کامل می خواند.
  • /etc/apache2/conf-available/،/etc/apache2/conf-enabled/: این فهرستها همانند فهرستهای سایتهای موجود و سایتهای فعال هستند ، اما برای ذخیره قطعات پیکربندی که متعلق به یک میزبان مجازی فایل های موجود در فهرست conf-available را می توان با دستور a2enconf فعال کرد و با دستور a2disconf غیرفعال کرد.
  • /etc/apache2/mods-available/،/etc/apache2/mods-enabled/: این فهرستها به ترتیب شامل ماژولهای موجود و فعال هستند. فایل هایی که به .load ختم می شوند شامل قطعاتی برای بارگذاری ماژول های خاص هستند ، در حالی که فایل هایی که به .conf ختم می شوند حاوی پیکربندی آن ماژول ها هستند. ماژول ها را می توان با استفاده از دستورات a2enmod و a2dismod فعال و غیرفعال کرد.

Server Logs

  • /var/log/apache2/access.log: به طور پیش فرض ، هر درخواستی از سرور وب شما در این فایل لاگ ثبت می شود مگر اینکه Apache به گونه دیگری تنظیم شده باشد.
  • /var/log/apache2/error.log: به طور پیش فرض ، همه خطاها در این پرونده ثبت می شوند. دستورالعمل LogLevel در پیکربندی Apache مشخص می کند که چقدر شامل خطا خواهند داشت.

نتیجه

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

 

برچسب‌ها:

 

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از تم ها در Gatsby

ورود به سایت

معرفی

Gatsby 1.0 در سال 2017 منتشر شد و از آن زمان به بعد ویژگی های جدید خود را همچنان حفظ می کند ، در حالی که قابلیت سفارشی سازی بالا را به عنوان یک تولید کننده سایت استاتیک حفظ می کند. ویژگی های افزوده شده به شکل افزونه ها ، API های جدید ، ابزارهای کمکی و گزینه های پیکربندی است. هر یک از این ویژگی ها را می توان به صورت جداگانه استفاده کرد و سفارشی کرد یا با هم ترکیب کرد تا موارد خاص استفاده را اعمال کند. با این حال ، از آنجا که بسیاری از سایت ها از ترکیب ویژگی ها و تنظیمات یکسانی بهره می برند ، Gatsby تم های Gatsby را معرفی کرد.

تم ها در Gatsby به طور خاص به افزونه هایی اشاره می کنند که به عنوان مجموعه ای از گزینه های پیکربندی ، عملکرد و/یا عناصر رابط کاربر (UI) عمل می کنند. تفکیک ویژگی های به اشتراک گذاشته شده در موضوعات حفظ شده باعث می شود سایت شما به روزتر باشد و همچنین به شما اجازه می دهد زمان کمتری را برای پیکربندی سایت خود صرف کنید و زمان بیشتری را برای توسعه محتوا اختصاص دهید.

در این آموزش ، شما تم Gatsby را برای انتشار پست های وبلاگ نصب ، پیکربندی و استفاده می کنید: gatsby-theme-blog. این افزونه چندین ویژگی مانند پشتیبانی از MDX و برجسته سازی کد را در یک بسته مناسب قرار می دهد. در طول دوره آموزشی ، روند استفاده از این موضوع خاص Gatsby را دنبال می کنید ، که می توانید آن را به طور کلی در موضوعات اعمال کنید.

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

پیش نیازها

قبل از شروع کار ، چند مورد را که لازم دارید در اینجا آورده ایم:

  • نصب محلی Node.js برای اجرای Gatsby و ایجاد سایت شما. روش نصب بر اساس سیستم عامل متفاوت است ، اما vpsgol دارای راهنمای Ubuntu 20.04 و macOS است و همیشه می توانید آخرین نسخه را در صفحه بارگیری رسمی Node.js پیدا کنید.
  • آشنایی با جاوا اسکریپت برای کار در Gatsby. زبان جاوا اسکریپت یک مبحث گسترده است ، اما یک نقطه شروع خوب نحوه کدگذاری ما در سری جاوا اسکریپت است.
  • یک پروژه جدید Gatsby ، داربست از gatsby-starter-default. برای ساخت یک پروژه جدید Gatsby از ابتدا ، می توانید به مرحله 1 آموزش نحوه راه اندازی اولین وب سایت Gatsby مراجعه کنید.

این آموزش روی Node.js v14.16.1 ، npm v6.14.12 ، Gatsby v3.11.1 و gatsby-theme-blog v3.0.0 آزمایش شده است.

مرحله 1 – پیدا کردن و نصب یک تم

اگرچه این آموزش با استفاده از یک موضوع خاص ، gatsby-theme-blog ، شما را راهنمایی می کند ، اما هر مرحله به طور کلی در مورد موضوعات Gatsby نیز کاربرد دارد. این امر در مورد اولین مرحله نیز صدق می کند: یافتن موضوعی که می خواهید استفاده کنید و نصب آن با npm.

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

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

در این آموزش ، شما از gatsby-theme-blog استفاده می کنید ، بنابراین آن بسته را انتخاب کنید. با انتخاب gatsby-theme-blog به عنوان موضوعی که قصد نصب آن را دارید ، قسمت بعدی این مرحله این است که در واقع آن را به همراه وابستگی های آن نصب کنید. به پروژه موجود Gatsby بروید و دستور زیر را در فهرست اجرا کنید:

npm install gatsby-theme-blog

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

 

Output

...
+ gatsby-theme-blog@3.0.0
added 262 packages from 181 contributors and audited 2391 packages in 49.706s

اکنون که تم و وابستگی های آن را در پروژه خود نصب کرده اید ، وقت آن است که به بارگیری و پیکربندی تم در پروژه Gatsby خود بپردازید.

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

اکنون که تم شما نصب شده است ، می توانید از آن در سایت خود استفاده کرده و آن را بر اساس نیاز خود تغییر دهید. در Gatsby ، راه اندازی اولیه و پیکربندی تم اصلی با ویرایش فایل پیکربندی ریشه ، gatsby-config.js انجام می شود. در این مرحله ، فایل پیکربندی را ویرایش می کنید تا در گزینه مورد نظر خود در تم خود بارگذاری شود.

فایل پیکربندی gatsby-config.js را در ویرایشگر دلخواه خود باز کنید ، سپس موارد زیر را اضافه کنید:

gatsby-config.js

module.exports = {
  plugins: [
    ...
    `gatsby-plugin-image`,
    {
      resolve: 'gatsby-theme-blog',
      options: {
        basePath: '/posts',
        contentPath: `md/posts`,
      }
    },
    `gatsby-transformer-sharp`,
    ...
  ]
}

در این کد پیکربندی ، دو تنظیم مهم وجود دارد که از مقادیر سفارشی برای آنها استفاده می کنید. موضوع از گزینه basePath برای تنظیم آدرس وبلاگ استفاده می کند و contentPath به موضوع می گوید که کجا فایلهای Markdown را برای انتشار به عنوان پست وبلاگ پیدا کنید. استفاده از مقدار md/posts برای contentPath به این معنی است که فایلهای Markdown شما باید در فهرست md/posts قرار داشته باشند.

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

موضوع gatsby-theme-blog تنظیمات بیشتری را ارائه می دهد ، که در فایل README gatsby-theme-blog ثبت شده است. از آنجا که هر موضوع Gatsby متفاوت است ، مهمترین قسمت این مرحله مراجعه به مستندات موضوع انتخابی شما و پیروی از راهنمایی های دقیق ارائه شده در آن است.

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

مرحله 3 – آزمایش عملکرد

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

شما MDX ، برجسته سازی کد و پشتیبانی پردازش Markdown از gatsby-theme-blog را با یک فایل پست وبلاگ جدید آزمایش خواهید کرد. ابتدا ، شما باید پوشه ای را برای نگهداری فایل ها ایجاد کنید ، که باید با تنظیم محتوای مسیر md/post هایی که در مرحله شماره 2 استفاده کرده اید مطابقت داشته باشد. شما می توانید این فهرست را به صورت دستی در مرورگر فایل خود ایجاد کنید یا با اجرای این دستور در ریشه پروژه Gatsby خود ، آن را در ترمینال خود ایجاد کنید:

mkdir -p ./md/posts

در مرحله بعد ، یک فایل خالی MDX ، my-first-post.mdx ایجاد کنید که حاوی محتوای پست جدید شما باشد. دوباره می توانید این را به صورت دستی یا در ترمینال ایجاد کنید:

touch ./md/posts/my-first-post.mdx

حالا فایل خالی MDX را باز کرده و کد زیر را به آن اضافه کنید:

md/posts/my-first-post.mdx

---
title: Learning Gatsby Themes and Trying MDX
slug: /posts/gatsby-theme-learning
date: 2021-08-16
excerpt: A post about learning Gatsby themes and trying out some MDX.
---

## Welcome!

This is a post where I plan to share my journey learning Gatsby Themes, and to try out some MDX.

## Resources

<ul>
{[
    {
        link: 'https://www.gatsbyjs.com/',
        text: 'Gatsby Website',
        note: 'Official Website for Gatsby'
    },
    {
        link: 'https://www.gatsbyjs.com/docs/themes/',
        text: 'Gatsby Theme Documentation',
        note: 'Documentation for Gatsby Theme usage and development'
    },
    {
        link: 'https://www.vpsgol.com/community/tutorial_series/how-to-create-static-web-sites-with-gatsby-js',
        text: 'vpsgol - "How To Create Static Web Sites with Gatsby.js"',
        note: 'A vpsgol tutorial series on using Gatsby JS'
    }
].map(item => (
    <li key={item.link}>
        <a href={item.link} target="_blank">{item.text}</a>
        <ul>
            <li>{item.note}</li>
        </ul>
    </li>
))}
</ul>

## Code Sample

To try out code highlighting in this theme, here is a snippet of JavaScript code. This code won't run in your browser; it is for visual use only.

در بالای فایل ، قسمتی که توسط — محصور شده است مجموعه ای از جفت های کلید-مقدار است که frontmatter نامیده می شود. همه موضوعات از کلیدهای یکسانی استفاده نمی کنند و آنهایی که در پست خود استفاده می کنید از بین کلیدهای مورد استفاده gatsby-theme-blog با دقت انتخاب شده اند. شما یک عنوان سفارشی ، راه حل (مسیر URL) ، تاریخ انتشار و گزیده ای (پیش نمایش متن برای نمایش در صفحه فهرست پست ها) را تعریف کرده اید.

تمام متنی که از دستور جلو پیروی می کند ، بدنه پست می شود و با خوش آمدید شما شروع می شود! بخش. دو علامت هش (##) قبل از متن عنوان به Markdown می گویند که این یک عنوان سطح 2 است که برای بخش منابع نیز استفاده می شود.

در بخش منابع ، اولین استفاده خود را از آنچه MDX را از Markdown معمولی متمایز می کند ، استفاده می کنید: استفاده از نحو JSX React برای جاسازی اجزای React که با Markdown شما ادغام شده و به یک صفحه واحد تبدیل می شوند. در پست خود ، از JSX برای تبدیل مجموعه ای از منابع درباره Gatsby به لیست پیوندهای HTML استفاده می کنید.

سرانجام ، برای آزمایش ویژگی برجسته سازی نحو کد همراه با gatsby-theme-blog ، یک بلوک Markdown Fidden Code Block در انتهای فایل اضافه کنید:

md/posts/my-first-post.mdx

```js
function saySomething(name) {
    console.log(`Hello ${name}!`);
    console.log(`Isn't learning about Gatsby fun?!`);
}
saySomething('Arthur');
```

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

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

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

npm run develop

پس از آماده شدن ، Gatsby CLI از شما می خواهد که پروژه خود را در مرورگر وب خود باز کنید ، که می توانید با رفتن به localhost: 8000 این کار را انجام دهید. برای مشاهده صفحه فهرست وبلاگ جدید ، از localhost: 8000/posts دیدن کنید و برای مشاهده این پست جدید ، به localhost بروید: 8000/posts/gatsby-theme-learning/. پست وبلاگ به شکل زیر خواهد بود:

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

مرحله 4 – استفاده از سایه (اختیاری)

در این مرحله از آموزش ، شما قبلاً یک تم شخص ثالث را در Gatsby نصب کرده و پیکربندی کرده اید. پیکربندی در gatsby-config.js انجام شد و محدود به گزینه هایی بود که ناشر موضوع برای سفارشی سازی آنها انتخاب کرده بود. اگر نیاز به سفارشی سازی یک موضوع فراتر از این گزینه ها دارید ، از یک مفهوم Gatsby به نام سایه استفاده می کنید ، که در این مرحله این کار را انجام می دهید.

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

با تم های Gatsby ، هر فایلی در کد منبع تم می تواند تحت سایه قرار گیرد ، از روش هایی که بر روی گره Gatsby و ایجاد فایل تأثیر می گذارد تا عناصر و طرح های UI. برای وبلاگ خود ، یک فایل کامپوننت React به نام bio-content.js را تحت سایه قرار دهید تا نحوه نمایش بیوگرافی وبلاگ شما در زیر هر پست سفارشی شود. با سایه انداختن این یک فایل ، بر ظاهر هر پست وبلاگی که از طریق افزونه gatsby-theme-blog می گذرد تأثیر می گذارید.

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

mkdir src/gatsby-theme-blog

برای هر فایل خاصی در تم که می خواهید سایه داشته باشد ، مرحله بعدی ایجاد یک پرونده با همان نام و ساختار دایرکتوری مشابه در موضوع است. از آنجا که قصد دارید جزء زیستی موجود را کمی تغییر دهید ، می توانید با کپی کردن فایل موجود به عنوان نقطه شروع ، با دستور cp (copy) در زمان خود صرفه جویی کنید.

mkdir -p src/gatsby-theme-blog/components
cp node_modules/gatsby-theme-blog/src/components/bio-content.js src/gatsby-theme-blog/components/bio-content.js

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

src/gatsby-theme-blog/components/bio-content.js

import React, { Fragment } from "react"

const BioContent = () => (
  <Fragment>
    <p>Content by vpsgol</p>
    <p>License Info:</p>
    <p
      style={{
        margin: "10px 20px",
        padding: 8,
        backgroundColor: "#0069ff",
        color: "white",
        borderRadius: 12,
      }}
    >
      This work is licensed under a Creative Commons
      Attribution-NonCommercial-ShareAlike 4.0 International License.
    </p>
  </Fragment>
)

export default BioContent

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

در این فایل ، شما فایل اصلی bio-content.js را تحت سایه قرار داده اید ، و متن نویسنده را با نام نویسنده و اطلاعات مجوز جایگزین کرده اید. شما این کار را با جایگزینی JSX برگردانده شده توسط کامپوننت BioContent React انجام داده اید. کد style = {{}} نمونه ای از CSS درون خطی است که از آن برای افزودن رنگ و فاصله به فراخوان مجوز استفاده کرده اید.

با اجرای مجدد npm run در ترمینال خود ، سرور توسعه Gatsby را راه اندازی می کنید و می توانید تغییرات را در همه پست های وبلاگ خود پیش نمایش کنید:

با استفاده از سایه زدن Gatsby ، شما فقط یک موضوع شخص ثالث Gatsby را فراتر از پیکربندی استاندارد تغییر داده اید و در لغو و افزونه های سفارشی خود مخلوط شده اید.

نتیجه

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

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

 

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از Bash’s Job Control برای مدیریت فرایندهای پیش زمینه و پس زمینه

ورود به سایت

معرفی

در آموزش قبلی ، ما در مورد نحوه استفاده از دستورات ps ، kill و nice برای کنترل فرآیندهای سیستم صحبت کردیم. این راهنما نشان می دهد که چگونه bash ، سیستم لینوکس و ترمینال شما برای ارائه فرایند و کنترل کار گرد هم می آیند.

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

پیش نیازها

برای پیگیری این راهنما ، به رایانه ای نیاز دارید که رابط bash shell را اجرا می کند. bash پوسته پیش فرض در بسیاری از سیستم عامل های مبتنی بر لینوکس است و در بسیاری از سیستم عامل های مشابه یونیکس از جمله macOS موجود است. توجه داشته باشید که این آموزش با استفاده از یک سرور خصوصی مجازی لینوکس که اوبونتو 20.04 را اجرا می کند ، تأیید شده است.

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

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

مدیریت فرایندهای پیش زمینه

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

شروع یک فرایند

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

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

echo “Hello World”

 

Output

Hello World

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

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

top

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

خاتمه یک فرایند

فرض کنید یک حلقه bash ساده را در خط فرمان راه اندازی می کنید. به عنوان مثال ، دستور زیر حلقه ای را شروع می کند که Hello World را هر ده ثانیه چاپ می کند. این حلقه برای همیشه ادامه می یابد ، تا زمانی که صریحاً خاتمه یابد:

while true; do echo “Hello World”; sleep 10; done

بر خلاف بالا ، حلقه هایی مانند این کلید “خروج” ندارند. شما باید با ارسال سیگنال ، روند را متوقف کنید. در لینوکس ، کرنل می تواند سیگنال هایی را به فرآیندهای در حال اجرا ارسال کند ، به عنوان یک درخواست برای خروج یا تغییر حالت. پایانه های لینوکس معمولاً طوری تنظیم شده اند که وقتی کاربر کلید ترکیبی CTRL + C را فشار می دهد ، سیگنال “SIGINT” (مخفف “قطع سیگنال”) را به فرایند پیش زمینه فعلی ارسال می کند. سیگنال SIGINT به برنامه می گوید که کاربر با استفاده از صفحه کلید درخواست خاتمه داده است.

برای توقف حلقه ای که شروع کرده اید ، کلید CTRL را نگه دارید و کلید C را فشار دهید:

CTRL + C

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

سیگنال SIGINT ارسال شده توسط ترکیب CTRL + C یکی از سیگنال های زیادی است که می تواند به برنامه ها ارسال شود. اکثر سیگنالها دارای ترکیب صفحه کلید مرتبط با آنها نیستند و باید با استفاده از دستور kill ارسال شوند ، که بعداً در این راهنما توضیح داده می شود.

تعلیق فرآیندها

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

سیگنال دیگری که می توانید ارسال کنید ، سیگنال “SIGTSTP” است. SIGTSTP مخفف کلمه “stop terminal signal” است و معمولاً به عنوان شماره سیگنال 20 نشان داده می شود. هنگامی که CTRL + Z را فشار می دهید ، ترمینال شما فرمان “تعلیق” را ثبت می کند ، که سپس سیگنال SIGTSTP را به فرایند پیش زمینه ارسال می کند. در اصل ، این امر اجرای فرمان را متوقف کرده و کنترل را به ترمینال باز می گرداند.

برای نشان دادن تصویر ، از ping برای اتصال به google.com هر 5 ثانیه استفاده کنید. دستور زیر قبل از دستور ping فرمان دارد ، که به شما امکان می دهد از نام مستعار پوسته ای که به طور مصنوعی حداکثر تعداد فرمان را تعیین می کند ، دور بزنید:

command ping -i 5 google.com

به جای خاتمه فرمان با CTRL + C ، به جای آن CTRL + Z را فشار دهید. با این کار خروجی به این شکل برمی گردد

 

Output

[1]+  Stopped                 ping -i 5 google.com

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

ps T

 

Output

  PID TTY      STAT   TIME COMMAND
26904 pts/3    Ss     0:00 /bin/bash
29633 pts/3    T      0:00 ping -i 5 google.com
29643 pts/3    R+     0:00 ps t

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

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

fg

پس از از سرگیری روند ، آن را با CTRL + C خاتمه دهید:

مدیریت فرایندهای پیشین

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

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

شروع فرآیندها

می توانید با افزودن یک کاراکتر ampersand (&) به انتهای دستورات خود ، یک فرایند پس زمینه را شروع کنید. این به پوسته می گوید منتظر نمانید تا فرآیند به اتمام برسد ، بلکه باید اجرا را آغاز کرده و بلافاصله کاربر را به یک اعلان بازگرداند. خروجی فرمان همچنان در ترمینال نمایش داده می شود (مگر اینکه هدایت شود) ، اما با ادامه روند پس زمینه می توانید دستورات بیشتری را تایپ کنید.

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

command ping -i 5 google.com &

سیستم کنترل کار bash خروجی را به صورت زیر برمی گرداند:

 

Output

[1] 4287

سپس خروجی معمولی را از دستور ping دریافت خواهید کرد:

 

Output

PING google.com (74.125.226.71) 56(84) bytes of data.
64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=1 ttl=55 time=12.3 ms
64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=2 ttl=55 time=11.1 ms
64 bytes from lga15s44-in-f7.1e100.net (74.125.226.71): icmp_seq=3 ttl=55 time=9.98 ms

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

لیست فرایندهای پس زمینه

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

jobs

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

 

Output

[1]+  Running                 command ping -i 5 google.com &

این نشان می دهد که شما در حال حاضر یک فرایند تک پس زمینه در حال اجرا دارید. [1] مشخصات کار یا شماره کار فرمان را نشان می دهد. می توانید با سایر دستورات کنترل کار و فرآیند ، مانند kill ، fg و bg ، با شماره قبلی با علامت درصد ، این مورد را ارجاع دهید. در این مورد ، شما این شغل را٪ 1 ارجاع می دهید.

توقف فرآیندهای پیش زمینه

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

kill %1

بسته به نحوه پیکربندی پایانه شما ، بلافاصله یا دفعه بعد که ENTER را فشار می دهید ، وضعیت پایان کار در خروجی شما ظاهر می شود:

 

Output

[1]+  Terminated              command ping -i 5 google.com

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

تغییر حالتهای فرآیند

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

این راهنما قبلاً یکی از روشهای تغییر وضعیت یک فرآیند را توضیح داده است: توقف یا تعلیق یک فرآیند با CTRL + Z. هنگامی که فرآیندها در این حالت متوقف شده هستند ، می توانید یک فرایند پیش زمینه را به پس زمینه یا برعکس منتقل کنید.

انتقال فرآیندهای پیش زمینه به پس زمینه

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

اولین قدم متوقف کردن مجدد فرآیند با CTRL + Z است. هنگامی که فرآیند متوقف شد ، می توانید از دستور bg برای شروع مجدد آن در پس زمینه استفاده کنید:

bg

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

 

Output

[1]+ ping -i 5 google.com &

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

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

انتقال فرایندهای پیش زمینه به پیش زمینه

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

fg

این کار بر اساس آخرین فرایند پس زمینه شما (که در خروجی فرمان jobs + نشان داده شده است) عمل می کند. بلافاصله این روند را متوقف می کند و آن را در پیش زمینه قرار می دهد. برای تعیین کار متفاوت ، از شماره شغل آن استفاده کنید:

fg %2

هنگامی که یک کار در پیش زمینه قرار دارد ، می توانید آن را با CTRL + C بکشید ، بگذارید تکمیل شود ، یا تعلیق کرده و دوباره به پس زمینه منتقل کنید

برخورد با SIGHUPs

فرایندی که در پس زمینه باشد یا در پیش زمینه ، نسبتاً محکمی با نمونه پایانی دارد که آن را آغاز کرده است. هنگامی که یک ترمینال بسته می شود ، معمولاً یک سیگنال SIGHUP به تمام فرایندهایی (پیش زمینه ، پس زمینه یا متوقف شده) که به ترمینال متصل هستند ارسال می کند. این نشان می دهد که فرآیندها خاتمه می یابد زیرا ترمینال کنترل آنها به زودی در دسترس نخواهد بود.

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

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

استفاده از nohup

اگر هنگام شروع فرآیند می دانید که می خواهید ترمینال را قبل از اتمام فرآیند ببندید ، می توانید آن را با استفاده از دستور nohup شروع کنید. این امر باعث می شود فرآیند شروع شده در برابر سیگنال SIGHUP مصون باشد. با بسته شدن ترمینال به کار خود ادامه می دهد و مجدداً به عنوان فرزند سیستم init تعیین می شود:

nohup ping -i 5 google.com &

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

 

Output

nohup: ignoring input and appending output to ‘nohup.out’

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

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

برای از بین بردن روند پینگ ، باید شناسه پردازش آن (یا “PID”) را پیدا کنید. می توانید این کار را با دستور pgrep انجام دهید (دستور pkill نیز وجود دارد ، اما این روش دو قسمتی تضمین می کند که شما فقط فرایند مورد نظر را از بین می برید). برای جستجوی اجرایی از pgrep و پرچم -a استفاده کنید:

pgrep -a ping

 

Output

7360 ping -i 5 google.com

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

kill 7360

اگر دیگر نیازی به فایل nohup.out ندارید ، ممکن است بخواهید آن را حذف کنید.

استفاده از disown

دستور nohup مفید است ، اما تنها در صورتی که بدانید در زمان شروع فرآیند به آن نیاز خواهید داشت. سیستم کنترل کار bash روش های دیگری را برای دستیابی به نتایج مشابه با دستور disown داخلی ارائه می دهد.

فرمان disown در پیکربندی پیش فرض خود ، یک کار را از صف مشاغل یک ترمینال حذف می کند. این بدان معناست که دیگر نمی توان آن را با استفاده از مکانیزم های کنترل شغل که قبلاً در این راهنما توضیح داده شد مدیریت کرد ، مانند fg ، bg ، CTRL + Z ، CTRL + C. در عوض ، کار بلافاصله از لیست در خروجی مشاغل حذف می شود و هیچ دیگر با ترمینال ارتباط دارد

فرمان با تعیین یک شماره کار فراخوانی می شود. به عنوان مثال ، برای رد فوراً شغل 2 ، می توانید تایپ کنید:

disown %2

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

معمولاً ، اگر بلافاصله پنجره ترمینال خود را نبندید ، نمی خواهید روند را به طور کامل از کنترل کار حذف کنید. می توانید به جای آن پرچم -h را به فرآیند رد کردن منتقل کنید تا روند را نادیده بگیرید و سیگنال های SIGHUP را نادیده بگیرید ، اما در غیر این صورت به عنوان یک کار معمولی ادامه دهید:

disown -h %1

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

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

با استفاده از huponexit Shell Option

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

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

shopt huponexit

برای روشن کردن آن تایپ کنید:

shopt -s huponexit

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

exit

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

نتیجه

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

Linuxاستفاده از Bash's Job Controlخرید سرور لینوکسسرورلینوکسفروش سرورلینوکسمحیط لینوکس

  • behnam gol mohamadi
  • ۰
  • ۰

راه اندازی سرور اولیه با Rocky Linux 8

ورود به سایت

معرفی

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

مرحله 1 – ورود به سیستم به عنوان Root

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

اگر قبلاً به سرور خود متصل نیستید ، اکنون با استفاده از دستور زیر به عنوان کاربر اصلی وارد شوید (قسمت برجسته شده فرمان را با آدرس IP عمومی سرور خود جایگزین کنید):

ssh root@your_server_ip

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

درباره Root

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

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

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

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

این مثال یک کاربر جدید به نام sammy ایجاد می کند ، اما شما باید نام کاربری دیگری را که ترجیح می دهید جایگزین کنید:

adduser sammy

در مرحله بعد ، یک رمز عبور قوی برای کاربر sammy تعیین کنید:

passwd sammy

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

مرحله 3 – اعطای امتیازات اداری

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

برای اجتناب از خروج از کاربر معمولی و ورود مجدد به عنوان حساب اصلی ، می توانیم مواردی را که به عنوان “superuser” یا امتیازات root برای حساب معمولی خود شناخته می شود ، تنظیم کنیم. این به کاربر معمولی ما این امکان را می دهد که با قرار دادن کلمه sudo قبل از هر فرمان ، فرمان هایی با امتیاز مدیریتی اجرا کند.

برای افزودن این امتیازات به کاربر جدید ، باید کاربر جدید را به گروه چرخ اضافه کنیم. به طور پیش فرض ، در Rocky Linux 8 ، کاربرانی که به گروه چرخ تعلق دارند مجاز به استفاده از دستور sudo هستند.

به عنوان root ، این دستور را اجرا کنید تا کاربر جدید خود را به گروه چرخ اضافه کنید (کلمه برجسته شده را با نام کاربری جدید خود جایگزین کنید):

usermod -aG wheel sammy

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

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

فایروال ها سطح اولیه امنیت را برای سرور شما فراهم می کنند. این برنامه ها مسئول جلوگیری از تردد به هر پورت سرور شما هستند ، به جز درگاه ها/سرویس هایی که صراحتاً تأیید کرده اید. راکی لینوکس برای انجام این عملکرد سرویسی به نام firewalld دارد. ابزاری به نام firewall-cmd برای پیکربندی خط مشی های دیوار آتش استفاده می شود

ابتدا firewalld را نصب کنید:

dnf install firewalld -y

پیکربندی پیش فرض firewalld اجازه اتصال ssh را می دهد ، بنابراین می توانیم فایروال را بلافاصله روشن کنیم

systemctl start firewalld

برای اطمینان از شروع سرویس ، وضعیت آن را بررسی کنید:

systemctl status firewalld

 

Output

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-02-06 16:39:40 UTC; 3s ago
     Docs: man:firewalld(1)
 Main PID: 13180 (firewalld)
    Tasks: 2 (limit: 5059)
   Memory: 22.4M
   CGroup: /system.slice/firewalld.service
           └─13180 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

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

اکنون که سرویس راه اندازی شده است ، می توانیم از برنامه firewall-cmd برای بدست آوردن و تنظیم اطلاعات خط مشی برای فایروال استفاده کنیم.

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

firewall-cmd –permanent –list-all

 

Output

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

برای مشاهده خدمات اضافی که می توانید با نام آنها را فعال کنید ، تایپ کنید:

firewall-cmd –get-services

برای افزودن سرویسی که باید مجاز باشد ، از پرچم –add-service استفاده کنید:

firewall-cmd –permanent –add-service=http

با این کار سرویس http اضافه می شود و ترافیک ورودی TCP به پورت 80 امکان پذیر می شود. پیکربندی پس از بارگیری مجدد فایروال به روز می شود:

firewall-cmd –reload

به یاد داشته باشید که برای هرگونه سرویس اضافی که بعداً ممکن است پیکربندی کنید ، باید فایروال (با سرویس یا پورت) را به صراحت باز کنید.

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

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

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

اگر حساب Root از احراز هویت رمز عبور استفاده می کند

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

ssh sammy@your_server_ip

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

sudo command_to_run

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

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

اگر حساب Root از احراز هویت کلید SSH استفاده می کند

اگر با استفاده از کلیدهای SSH وارد حساب اصلی خود شده اید ، احراز هویت رمز عبور برای SSH غیرفعال است. برای ورود موفق به سیستم ، باید یک نسخه از کلید عمومی خود را به فایل user/.ssh/author_keys کاربر جدید اضافه کنید.

از آنجا که کلید عمومی شما قبلاً در فایل root/.ssh/author_keys حساب ریشه در سرور است ، می توانیم آن فایل و ساختار فهرست را در حساب کاربری جدید خود کپی کنیم.

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

rsync –archive –chown=sammy:sammy ~/.ssh /home/sammy

اکنون ، در یک ترمینال جدید در دستگاه محلی خود ، یک جلسه SSH جدید را با کاربر غیر root خود باز کنید:

ssh sammy@your_server_ip

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

sudo command_to_run

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

نتیجه

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

Rocky Linux 8rootجدیدترین سرور لینوکسخرید سرور لینوکسراه اندازی فایروالسرور لینوکسسرورRocky Linux 8

  • behnam gol mohamadi