سرور مجازی

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

  • ۰
  • ۰

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

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

ورود به سایت

 

معرفی

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

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

پیش نیازها

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

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

مرحله 1 – نصب Nginx

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

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

sudo apt update
sudo apt install nginx

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

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

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

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

sudo ufw app list

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

 

Output

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

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

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

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

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

sudo ufw allow ‘Nginx HTTP’

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

sudo ufw status

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

 

Output

Status: active

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

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

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

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

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

systemctl status nginx

 

Output

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

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

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

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

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

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

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

curl -4 icanhazip.com

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

http://your_server_ip

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

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

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

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

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

sudo systemctl stop nginx

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

sudo systemctl start nginx

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

sudo systemctl restart nginx

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

sudo systemctl reload nginx

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

sudo systemctl disable nginx

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

sudo systemctl enable nginx

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

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

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

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

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

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

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

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

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

sudo chmod -R 755 /var/www/your_domain

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

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

 

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

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

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

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

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

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

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

/etc/nginx/sites-available/your_domain

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

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

        server_name your_domain.com www.your_domain;

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

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

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

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

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

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

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

sudo nano /etc/nginx/nginx.conf

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

/etc/nginx/nginx.conf

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

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

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

sudo nginx -t

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

sudo systemctl restart nginx

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

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

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

محتوا

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

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

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

Server Logs

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

نتیجه

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

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

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه نصب و پیکربندی VNC در اوبونتو 20.04

ورود به سایت

معرفی

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

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

پیش نیازها

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

  • یک سرور اوبونتو 20.04 با کاربر اداری غیر روت و فایروال با UFW پیکربندی شده است. برای تنظیم این ، راهنمای راه اندازی سرور اولیه ما برای اوبونتو 20.04 را دنبال کنید.
  • یک رایانه محلی با یک سرویس گیرنده VNC نصب شده است. سرویس گیرنده VNC که استفاده می کنید باید از اتصالات روی تونل های SSH پشتیبانی کند:
    • در Windows ، می توانید از TightVNC ، RealVNC یا UltraVNC استفاده کنید.
    • در macOS ، می توانید از برنامه Screen Sharing داخلی استفاده کنید یا می توانید از یک برنامه چند پلتفرمی مانند RealVNC استفاده کنید.
    • در لینوکس ، می توانید از بین بسیاری از گزینه ها ، از جمله vinagre ، krdc ، RealVNC یا TightVNC ، یکی را انتخاب کنید.

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

به طور پیش فرض ، سرور اوبونتو 20.04 دارای محیط دسکتاپ گرافیکی یا سرور VNC نصب نیست ، بنابراین ابتدا با نصب آن شروع کنید.

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

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

sudo apt update

اکنون Xfce را به همراه بسته xfce4-goodies ، که شامل چند پیشرفت برای محیط دسکتاپ است ، نصب کنید:

sudo apt install xfce4 xfce4-goodies

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

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

sudo apt install tightvncserver

در مرحله بعد ، دستور vncserver را برای تنظیم گذرواژه دسترسی VNC ، ایجاد فایلهای پیکربندی اولیه و شروع نمونه سرور VNC اجرا کنید:

vncserver

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

 

Output

You will require a password to access your desktops.

Password:
Verify:

رمز عبور باید بین شش تا هشت کاراکتر باشد. گذرواژه های بیش از 8 کاراکتر به طور خودکار کوتاه می شوند.

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

سپس این فرآیند فایلهای پیکربندی پیش فرض لازم و اطلاعات اتصال را برای سرور ایجاد می کند. علاوه بر این ، یک نمونه سرور پیش فرض را روی پورت 5901 راه اندازی می کند. این پورت پورت نمایش نامیده می شود و توسط VNC به عنوان: 1 شناخته می شود. VNC می تواند چندین نمونه را روی سایر پورت های نمایش نمایش دهد ، از جمله: 2 مورد اشاره به پورت 5902 ،: 3 اشاره به 5903 و موارد دیگر:

 

Output

Would you like to enter a view-only password (y/n)? n
xauth:  file /home/sammy/.Xauthority does not exist

New 'X' desktop is your_hostname:1

Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

 

توجه داشته باشید که اگر می خواهید گذرواژه خود را تغییر دهید یا گذرواژه فقط برای مشاهده اضافه کنید ، می توانید این کار را با دستور vncpasswd انجام دهید:

vncpasswd

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

مرحله 2 – پیکربندی سرور VNC

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

دستوراتی که سرور VNC هنگام راه اندازی اجرا می کند در یک فایل پیکربندی به نام xstartup در پوشه .vnc زیر فهرست اصلی شما قرار دارد. اسکریپت راه اندازی زمانی ایجاد شد که دستور vncserver را در مرحله قبل اجرا کردید ، اما برای راه اندازی دسکتاپ Xfce خود برنامه خود را ایجاد می کنید.

از آنجا که قصد دارید نحوه تنظیم سرور VNC را تغییر دهید ، ابتدا نمونه سرور VNC را که در پورت 5901 اجرا می شود با دستور زیر متوقف کنید:

vncserver -kill :1

خروجی به این شکل خواهد بود ، اگرچه PID متفاوتی را مشاهده خواهید کرد:

 

Output

Killing Xtightvnc process ID 17648

قبل از اینکه فایل xstartup را اصلاح کنید ، از نسخه اصلی نسخه پشتیبان تهیه کنید:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

حالا یک فایل xstartup جدید ایجاد کنید و آن را در ویرایشگر متن مانند nano باز کنید:

nano ~/.vnc/xstartup

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

~/.vnc/xstartup

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

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

اولین فرمان در فایل ، xrdb $ HOME/.Xresources ، به چارچوب GUI VNC می گوید که فایل .Xresources کاربر سرور را بخواند. .Xresources جایی است که کاربر می تواند در تنظیمات خاصی از دسکتاپ گرافیکی ، مانند رنگ های ترمینال ، تم مکان نما و ارائه فونت تغییراتی ایجاد کند. دستور دوم به سرور می گوید که Xfce را راه اندازی کند. هر زمان که سرور VNC را راه اندازی یا راه اندازی مجدد کنید ، این دستورات به طور خودکار اجرا می شوند.

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

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

chmod +x ~/.vnc/xstartup

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

vncserver -localhost

توجه داشته باشید که این بار این فرمان شامل گزینه -localhost است که سرور VNC را به رابط loopback سرور شما متصل می کند. این باعث می شود VNC فقط به اتصالات منشاء شده از سروری که روی آن نصب شده است اجازه دهد.

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

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

 

Output

New 'X' desktop is your_hostname:1

Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

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

مرحله 3 – اتصال ایمن به دسکتاپ VNC

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

یک اتصال SSH روی رایانه محلی خود ایجاد کنید که به طور ایمن به اتصال localhost برای VNC ارسال می شود. می توانید این کار را از طریق ترمینال در لینوکس یا macOS با دستور ssh زیر انجام دهید:

ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

در اینجا منظور از گزینه های این دستور ssh است:

  • -L 59000: localhost: 5901: سوئیچ -L مشخص می کند که پورت داده شده در رایانه محلی (59000) باید به میزبان و پورت داده شده در سرور مقصد ارسال شود (localhost: 5901 ، یعنی پورت 5901 در سرور مقصد ، به عنوان your_server_ip) تعریف شده است. توجه داشته باشید که پورت محلی که مشخص کرده اید تا حدودی دلخواه است. تا زمانی که پورت قبلاً به سرویس دیگری متصل نشده باشد ، می توانید از آن به عنوان پورت حمل و نقل تونل خود استفاده کنید.
  • -C: این پرچم فشرده سازی را فعال می کند که می تواند به حداقل رساندن مصرف منابع و سرعت بخشیدن به کارها کمک کند.
  • -N: این گزینه به ssh می گوید که نمی خواهید هیچ دستور از راه دور را اجرا کنید. این تنظیم زمانی مفید است که فقط بخواهید پورت ها را به جلو ارسال کنید.
  • -l sammy your_server_ip: سوئیچ -l به شما اجازه می دهد تا زمانی که به سرور متصل می شوید ، کاربری را که می خواهید وارد آن شوید ، مشخص کنید. اطمینان حاصل کنید که نام کاربر غیر ریشه و آدرس IP سرور خود را جایگزین sammy و your_server_ip کنید.

اگر از PuTTY برای اتصال به سرور خود استفاده می کنید ، می توانید با کلیک راست روی نوار بالای پنجره ترمینال و سپس کلیک روی گزینه Change Settings … یک تونل SSH ایجاد کنید:

شاخه Connection را در منوی درخت در سمت چپ پنجره PuTTY Reconfiguration پیدا کنید. شاخه SSH را گسترش دهید و بر روی Tunnels کلیک کنید. در گزینه های کنترل کننده صفحه نمایش حمل و نقل SSH ، 59000 را به عنوان منبع و localhost: 5901 را به عنوان مقصد وارد کنید ، مانند این:

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

پس از اجرای tunnel ، از یک سرویس گیرنده VNC برای اتصال به localhost استفاده کنید: 59000. از شما خواسته می شود با استفاده از گذرواژه ای که در مرحله 1 تنظیم کرده اید ، احراز هویت کنید.

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

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

CTRL+C را در local terminal خود فشار دهید تا SSH tunnel متوقف شود و به درخواست خود بازگردید. با این کار جلسه VNC شما نیز قطع می شود.

اکنون می توانید سرور VNC خود را پیکربندی کنید تا به عنوان یک سرویس systemd اجرا شود.

مرحله 4 – اجرای VNC به عنوان سرویس سیستم

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

ابتدا یک فایل واحد جدید به نام /etc/systemd/system/vncserver@.service ایجاد کنید:

sudo nano /etc/systemd/system/vncserver@.service

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

خطوط زیر را به فایل اضافه کنید. مطمئن شوید که مقدار User، Group ، WorkingDirectory و نام کاربری را در مقدار PIDFILE تغییر دهید تا با نام کاربری شما مطابقت داشته باشد:

/etc/systemd/system/vncserver@.service

[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

دستور ExecStartPre اگر VNC در حال اجرا است متوقف می کند. فرمان ExecStart VNC را راه اندازی می کند و عمق رنگ را با رنگ 24 بیت با وضوح 1280×800 تنظیم می کند. همچنین می توانید این گزینه های راه اندازی را برای رفع نیازهای خود تغییر دهید. همچنین ، توجه داشته باشید که دستور ExecStart مجدداً شامل گزینه -localhost است.

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

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

sudo systemctl daemon-reload

فایل واحد را فعال کنید:

sudo systemctl enable vncserver@1.service

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

اگر سرور VNC هنوز در حال اجرا است ، نمونه فعلی آن را متوقف کنید:

vncserver -kill :1

سپس آن را مانند هر سرویس systemd دیگری شروع کنید:

sudo systemctl start vncserver@1

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

sudo systemctl status vncserver@1

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

 

Output

● vncserver@1.service - Start TightVNC server at startup
     Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago
    Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
    Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
   Main PID: 39795 (Xtightvnc)
...

سرور VNC شما اکنون آماده استفاده در زمان بالا آمدن سرور شما است و شما می توانید آن را با دستورات systemctl مانند سایر سرویس های systemd مدیریت کنید.

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

ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

سپس با استفاده از نرم افزار سرویس گیرنده VNC خود به localhost یک اتصال جدید ایجاد کنید: 59000 برای اتصال به سرور خود.

نتیجه

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

 

برچسب‌ها:

 

  • behnam gol mohamadi
  • ۰
  • ۰

چگونه یک ماژول سفارشی Terraform بسازیم

ورود به سایت

معرفی

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

در این آموزش ، ماژول Terraform را ایجاد می کنید که چندین قطره را در پشت Load Balancer برای افزونگی راه اندازی می کند. شما همچنین از ویژگی های for_each و count حلقه زبان پیکربندی Hashicorp (HCL) برای استقرار چندین نمونه سفارشی ماژول به طور همزمان استفاده خواهید کرد.

ساختار و مزایای ماژول

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

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

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

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

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

سپس ماژول ها را در پروژه های Terraform خود تعریف ، استفاده و سفارشی کنید.

ایجاد یک ماژول

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

ماژول را در دایرکتوری به نام droplet-lb ، در زیر دایرکتوری به نام modules ذخیره می کنید. با فرض اینکه در فهرست راهنمای terraform-modules که به عنوان بخشی از پیش نیازها ایجاد کرده اید هستید ، هر دو را همزمان اجرا کنید:

mkdir -p modules/droplet-lb

آرگومان -p به mkdir دستور می دهد تا همه دایرکتوری ها را در مسیر ارائه شده ایجاد کند.

به آن بروید:

cd modules/droplet-lb

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

متغیرهای تعریف شده در یک ماژول به عنوان ورودی های آن نشان داده می شوند و می توانند در تعاریف منابع برای سفارشی سازی آنها استفاده شوند. ماژولی که ایجاد می کنید دارای دو ورودی است: تعداد Droplets برای ایجاد و نام گروه آنها. ایجاد و باز کردن برای ویرایش فایلی به نام variables.tf که در آن متغیرها را ذخیره می کنید:

nano variables.tf

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

modules/droplet-lb/variables.tf

variable "droplet_count" {}
variable "group_name" {}

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

شما تعریف Droplet را در فایلی با نام droplets.tf ذخیره خواهید کرد. ایجاد و باز کردن آن برای ویرایش:

nano droplets.tf

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

modules/droplet-lb/droplets.tf

resource "vpsgol_droplet" "droplets" {
  count  = var.droplet_count
  image  = "ubuntu-20-04-x64"
  name   = "${var.group_name}-${count.index}"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

برای پارامتر count که مشخص می کند چند نمونه از منبع را ایجاد کنید ، از متغیر droplet_count استفاده می کنید. مقدار آن زمانی مشخص می شود که ماژول از کد اصلی پروژه فراخوانی شود. نام هر یک از Droplets های مستقر متفاوت خواهد بود ، که با افزودن فهرست قطره فعلی به نام گروه ارائه شده ، به آن می رسید. استقرار Droplets در منطقه fra1 خواهد بود و اوبونتو 20.04 را اجرا خواهند کرد.

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

با Droplets که اکنون تعریف شده است ، می توانید به ایجاد Load Balancer بروید. شما تعریف منابع آن را در فایلی با نام lb.tf ذخیره خواهید کرد. با اجرای آن ، آن را برای ویرایش ایجاد کرده و باز کنید:

nano lb.tf

تعریف منابع آن را اضافه کنید:

modules/droplet-lb/lb.tf

resource "vpsgol_loadbalancer" "www-lb" {
  name   = "lb-${var.group_name}"
  region = "fra1"

  forwarding_rule {
    entry_port     = 80
    entry_protocol = "http"

    target_port     = 80
    target_protocol = "http"
  }

  healthcheck {
    port     = 22
    protocol = "tcp"
  }

  droplet_ids = [
    for droplet in vpsgol_droplet.droplets:
      droplet.id
  ]
}

شما Load Balancer را با نام گروه در نام آن تعریف می کنید تا قابل تشخیص باشد. شما آن را به همراه Droplets در منطقه fra1 مستقر می کنید. دو بخش بعدی پورت ها و پروتکل های هدف و نظارت را مشخص می کند.

بلوک droplet_ids برجسته ، شناسه Droplets را که باید توسط Load Balancer مدیریت شود ، می گیرد. از آنجا که چند قطره وجود دارد ، و تعداد آنها از قبل مشخص نیست ، شما از حلقه for برای عبور از مجموعه Droplets (vpsgol_droplet.droplets) و گرفتن شناسه آنها استفاده می کنید. شما حلقه for را با پرانتز ([]) احاطه می کنید تا مجموعه حاصل یک لیست باشد.

اکنون Droplet ، Load Balancer و متغیرها را برای ماژول خود تعریف کرده اید. شما باید الزامات ارائه دهنده را مشخص کنید ، مشخص کنید که ماژول از کدام ارائه دهندگان استفاده می کند ، از جمله نسخه آنها و جایی که آنها واقع شده اند. از آنجا که Terraform 0.13 است ، ماژول ها باید به صراحت منابع ارائه دهندگان غیر Hashicorp مورد استفاده خود را مشخص کنند. این به این دلیل است که آنها آنها را از پروژه اصلی به ارث نمی برند.

الزامات ارائه دهنده را در فایلی با نام provider.tf ذخیره خواهید کرد. با اجرای آن آن را برای ویرایش ایجاد کنید:

nano provider.tf

ماژول ها همچنین از خروجی ها پشتیبانی می کنند که می توانید از آنها برای استخراج اطلاعات داخلی در مورد وضعیت منابع خود استفاده کنید. شما یک خروجی تعریف می کنید که آدرس IP Load Balancer را نشان می دهد و آن را در فایلی با نام outputs.tf ذخیره می کنید. آن را برای ویرایش ایجاد کنید:

nano outputs.tf

تعریف زیر را اضافه کنید:

modules/droplet-lb/outputs.tf

output "lb_ip" {
  value = vpsgol_loadbalancer.www-lb.ip
}

این خروجی آدرس IP Load Balancer را بازیابی می کند. ذخیره کنید و فایل را ببندید.

ماژول droplet-lb از لحاظ عملکردی کامل است و آماده استقرار است. شما آن را از کد اصلی ، که در ریشه پروژه ذخیره می کنید ، صدا می زنید. ابتدا ، با دوبار بالا رفتن از فهرست پرونده خود به آن بروید:

cd ../..

سپس ، برای ویرایش فایلی به نام main.tf ایجاد و باز کنید ، که در آن از ماژول استفاده می کنید:

nano main.tf

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

main.tf

module "groups" {
  source = "./modules/droplet-lb"

  droplet_count = 3
  group_name    = "group1"
}

output "loadbalancer-ip" {
  value = module.groups.lb_ip
}

در این اعلان ماژول droplet-lb را که در فهرست راهنمای تعیین شده به عنوان منبع قرار دارد فرا می خوانید. شما ورودی ارائه شده ، droplet_count و group_name را که روی group1 تنظیم شده است پیکربندی می کنید تا بعداً بتوانید بین نمونه ها تشخیص دهید.

از آنجا که خروجی IP Load Balancer در یک ماژول تعریف شده است ، هنگام اعمال پروژه به طور خودکار نشان داده نمی شود. راه حل این مسئله ایجاد خروجی دیگری است که مقدار آن را بازیابی می کند (loadbalancer_ip). پس از اتمام کار فایل را ذخیره و ببندید.

با راه اندازی اولیه ماژول را راه اندازی کنید:

terraform init

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

 

Output

Initializing modules...
- groups in modules/droplet-lb

Initializing the backend...

Initializing provider plugins...
- Reusing previous version of vpsgol/vpsgol from the dependency lock file
- Using previously-installed vpsgol/vpsgol v2.10.1

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

می توانید برنامه ریزی پروژه را امتحان کنید تا ببینید Terraform با اجرای چه اقداماتی انجام می دهد:

terraform plan -var “do_token=${DO_PAT}”

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

 

Output

...
Terraform used the selected providers to generate the following execution plan. Resource actions are
indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.groups.vpsgol_droplet.droplets[0] will be created
  + resource "vpsgol_droplet" "droplets" {
...
      + name                 = "group1-0"
...
    }

  # module.groups.vpsgol_droplet.droplets[1] will be created
  + resource "vpsgol_droplet" "droplets" {
...
      + name                 = "group1-1"
...
    }

  # module.groups.vpsgol_droplet.droplets[2] will be created
  + resource "vpsgol_droplet" "droplets" {
...
      + name                 = "group1-2"
...
    }

  # module.groups.vpsgol_loadbalancer.www-lb will be created
  + resource "vpsgol_loadbalancer" "www-lb" {
...
      + name                     = "lb-group1"
...
    }

Plan: 4 to add, 0 to change, 0 to destroy.
...

این خروجی نشان می دهد که Terraform سه قطره ایجاد می کند ، به نام های group1-0 ، group1-1 و group1-2 ، و همچنین یک Load Balancer به نام group1-lb ایجاد می کند ، که ترافیک به سه قطره را از و خارج مدیریت می کند.

با اجرای پروژه می توانید پروژه را روی ابر اعمال کنید:

terraform apply -var “do_token=${DO_PAT}”

در صورت درخواست بله را وارد کنید. خروجی تمام اقدامات را نشان می دهد و آدرس IP Load Balancer نیز نشان داده می شود:

 

Output

module.groups.vpsgol_droplet.droplets[1]: Creating...
module.groups.vpsgol_droplet.droplets[0]: Creating...
module.groups.vpsgol_droplet.droplets[2]: Creating...
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

Outputs:

loadbalancer-ip = ip_address

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

terraform destroy -var “do_token=${DO_PAT}”

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

 

Output

...
Destroy complete! Resources: 4 destroyed.

در این مرحله ، ماژولی ایجاد کرده اید که شامل تعدادی Droplets و Load Balancer است که به طور خودکار برای مدیریت ترافیک ورودی و خروجی آنها پیکربندی می شود. اکنون می توانید چندین نمونه از یک ماژول را از یک کد با استفاده از for_each و count استفاده کنید.

استقرار موارد متعدد ماژول

در این بخش ، از count و for_each برای استقرار چندین بار ماژول droplet-lb ، با سفارشی سازی استفاده خواهید کرد.

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

یک راه برای استقرار چند نمونه از یک ماژول به طور همزمان این است که تعداد آنها را به پارامتر count منتقل کنید ، که به طور خودکار برای هر ماژول در دسترس است. main.tf را برای ویرایش باز کنید:

nano main.tf

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

main.tf

module "groups" {
  source = "./modules/droplet-lb"

  count  = 3

  droplet_count = 3
  group_name    = "group1-${count.index}"
}

با تنظیم شمارش روی 3 ، به Terraform دستور می دهید که ماژول را سه بار ، هر کدام با نام گروهی متفاوت ، مستقر کند. پس از اتمام کار ، فایل را ذخیره و ببندید.

برنامه ریزی استقرار با اجرای:

terraform plan -var “do_token=${DO_PAT}”

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

 

Output

...
Terraform used the selected providers to generate the following execution plan. Resource actions are
indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.groups[0].vpsgol_droplet.droplets[0] will be created
...
  # module.groups[0].vpsgol_droplet.droplets[1] will be created
...
  # module.groups[0].vpsgol_droplet.droplets[2] will be created
...
  # module.groups[0].vpsgol_loadbalancer.www-lb will be created
...
  # module.groups[1].vpsgol_droplet.droplets[0] will be created
...
  # module.groups[1].vpsgol_droplet.droplets[1] will be created
...
  # module.groups[1].vpsgol_droplet.droplets[2] will be created
...
  # module.groups[1].vpsgol_loadbalancer.www-lb will be created
...
  # module.groups[2].vpsgol_droplet.droplets[0] will be created
...
  # module.groups[2].vpsgol_droplet.droplets[1] will be created
...
  # module.groups[2].vpsgol_droplet.droplets[2] will be created
...
  # module.groups[2].vpsgol_loadbalancer.www-lb will be created
...

Plan: 12 to add, 0 to change, 0 to destroy.
...

Terraform در خروجی توضیح می دهد که هر یک از سه نمونه ماژول دارای سه Droplet و Load Balancer مربوط به آنها خواهد بود.

استفاده از for_each

هنگامی که به سفارشی سازی پیچیده تر نیاز دارید ، یا زمانی که تعداد موارد به داده های شخص ثالث (اغلب به صورت نقشه ارائه می شود) که هنگام نوشتن کد مشخص نیست ، می توانید از for_each برای ماژول ها استفاده کنید.

اکنون نقشه ای را تعریف می کنید که نام گروه ها را با تعداد Droplet جفت می کند و موارد قطره ای-lb را مطابق آن مستقر می کند. main.tf را برای ویرایش با اجرا باز کنید:

nano main.tf

فایل را اصلاح کنید تا به این شکل درآید:

main.tf

variable "group_counts" {
  type    = map
  default = {
    "group1" = 1
    "group2" = 3
  }
}

module "groups" {
  source   = "./modules/droplet-lb"
  for_each = var.group_counts

  droplet_count = each.value
  group_name    = each.key
}

شما ابتدا نقشه ای به نام group_counts تعریف می کنید که حاوی چند قطره است که یک گروه معین باید داشته باشد. سپس ، ماژول droplet-lb را فرا می خوانید ، اما مشخص می کنید که حلقه for_each باید در var.group_counts ، نقشه ای که قبلاً تعریف کرده اید ، عمل کند. droplet_count each.value ، مقدار جفت فعلی ، که تعداد Droplets برای گروه فعلی است را می گیرد. group_name نام گروه را دریافت می کند.

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

سعی کنید پیکربندی را با اجرای زیر اعمال کنید:

terraform plan -var “do_token=${DO_PAT}”

در خروجی اقدامات Terraform برای ایجاد دو گروه با Droplets و Load Balancers خود شرح داده می شود:

 

Output

...
Terraform used the selected providers to generate the following execution plan. Resource actions are
indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.groups["group1"].vpsgol_droplet.droplets[0] will be created
...
  # module.groups["group1"].vpsgol_loadbalancer.www-lb will be created
...
  # module.groups["group2"].vpsgol_droplet.droplets[0] will be created
...
  # module.groups["group2"].vpsgol_droplet.droplets[1] will be created
...
  # module.groups["group2"].vpsgol_droplet.droplets[2] will be created
...
  # module.groups["group2"].vpsgol_loadbalancer.www-lb will be created
...

در این مرحله ، شما از count و for_each برای استقرار چندین نمونه سفارشی از یک ماژول از یک کد استفاده کرده اید.

نتیجه

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

 

برچسب‌ها:

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه فعال کردن SFTP بدون دسترسی Shell در اوبونتو 20.04

ورود به سایت

معرفی

SFTP مخفف SSH File Transfer Protocol است و راهی مطمئن برای انتقال فایلها بین ماشینها با استفاده از اتصال SSH رمزگذاری شده است. اگرچه از نظر نام مشابه است ، این پروتکل متفاوت از FTP (پروتکل انتقال فایل) است ، اما SFTP به طور گسترده توسط سرویس گیرندگان FTP مدرن پشتیبانی می شود.

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

در این آموزش ، شما SSH daemon را تنظیم می کنید تا دسترسی SFTP را به یک فهرست بدون دسترسی SSH به ازای هر کاربر محدود کند.

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

پیش نیازها

برای پیگیری این آموزش ، باید به سرور اوبونتو 20.04 دسترسی داشته باشید. این سرور باید دارای یک کاربر غیر root با امتیازات sudo و همچنین فایروال فعال باشد. برای کمک به تنظیم این ، راهنمای راه اندازی سرور اولیه ما برای اوبونتو 20.04 را دنبال کنید.

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

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

sudo adduser sammyfiles

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

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

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

برای محدود کردن دسترسی SFTP به یک دایرکتوری ، ابتدا باید مطمئن شوید که دایرکتوری با الزامات مجوزهای سرور SSH مطابقت دارد ، که بسیار خاص هستند.

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

روشهای مختلفی برای حل این مشکل مالکیت وجود دارد. در این آموزش ، شما از/var/sftp/uploads به عنوان پوشه بارگذاری هدف استفاده می کنید . /var/sftp متعلق به root است و توسط سایر کاربران قابل نوشتن نخواهد بود. زیر شاخه/var/sftp/uploads متعلق به sammyfiles است ، به طوری که کاربر می تواند فایل ها را در آن بارگذاری کند.

ابتدا دایرکتوری ها را ایجاد کنید:

sudo mkdir -p /var/sftp/uploads

 /var /sftp را روی root تنظیم کنید:

sudo chown root:root /var/sftp

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

sudo chmod 755 /var/sftp

مالکیت فهرست بارگذاری ها را به کاربری که به تازگی ایجاد کرده اید تغییر دهید. دستور زیر مجدداً از مثال کاربر و گروه sammyfiles استفاده می کند ، بنابراین اگر نام کاربری دیگر را ایجاد کردید ، این مورد را تغییر دهید:

sudo chown sammyfiles:sammyfiles /var/sftp/uploads

اکنون که ساختار دایرکتوری برقرار است ، می توانید خود سرور SSH را پیکربندی کنید.

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

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

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

sudo nano /etc/ssh/sshd_config

به پایین فایل بروید و قطعه پیکربندی زیر را اضافه کنید:

/etc/ssh/sshd_config

Match User sammyfiles
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

در اینجا هر دستورالعمل انجام می دهد:

  • Match User به سرور SSH می گوید دستورات زیر را فقط برای کاربر مشخص شده اعمال کند. در اینجا ، sammyfiles را مشخص می کنیم. مجدداً ، مطمئن شوید که این نام را در صورت متفاوت با نام کاربر خود به روز کنید.
  • ForceCommand داخلی-sftp سرور SSH را مجبور می کند تا سرور SFTP را هنگام ورود اجرا کند و دسترسی به پوسته را ممنوع می کند.
  • PasswordAuthentication بله اجازه احراز هویت رمز عبور را برای این کاربر می دهد.
  • ChrootDirectory/var/sftp/تضمین می کند که کاربر اجازه دسترسی به هر چیزی فراتر از فهرست/var/sftp را نخواهد داشت.
  • AllowAgentForwarding شماره ، AllowTcpForwarding شماره. و X11Forwarding به ترتیب حمل و نقل پورت ، تونل زنی و حمل و نقل X11 را برای این کاربر غیرفعال نمی کند.

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

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

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

sudo systemctl restart sshd

شما اکنون سرور SSH را طوری پیکربندی کرده اید که دسترسی به انتقال فایل را فقط برای sammyfiles محدود کند. آخرین مرحله آزمایش پیکربندی برای اطمینان از عملکرد مناسب آن است.

مرحله 4 – تأیید پیکربندی

اجازه دهید اطمینان حاصل کنیم که کاربر جدید sammyfiles ما فقط می تواند فایل ها را منتقل کند. همانطور که قبلاً ذکر شد ، SFTP برای انتقال فایل بین ماشین ها استفاده می شود. می توانید با آزمایش انتقال بین دستگاه محلی و سرور خود ، این کار را تأیید کنید.

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

ssh sammyfiles@your_server_ip

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

OutputThis service allows sftp connections only.
Connection to your_server_ip closed.

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

در مرحله بعد ، بررسی کنید که آیا کاربر می تواند با موفقیت به SFTP برای انتقال فایل دسترسی پیدا کند:

sftp sammyfiles@your_server_ip

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

Output

OutputConnected to your_server_ip
sftp>

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

sftp>ls

با این کار پوشه بارگذاری هایی که در مرحله قبل ایجاد شده بود نشان داده می شود و شما را به دستور sftp> بر می گرداند:

 

Output

uploads

برای تأیید اینکه کاربر واقعاً به این فهرست محدود شده است و نمی تواند به هیچ دایرکتوری قبل از آن دسترسی داشته باشد ، می توانید دایرکتوری را به فهرست قبلی تغییر دهید:

sftp>cd ..

این دستور خطایی نمی دهد اما محتویات فهرست را مانند قبل بدون هیچ تغییری لیست می کند و ثابت می کند که کاربر قادر به تغییر در فهرست اصلی نبوده است.

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

نتیجه

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

سرور SSH طرح های پیکربندی پیچیده تری را امکان پذیر می کند ، از جمله محدود کردن دسترسی به گروه ها یا چندین کاربر به طور همزمان ، یا حتی دسترسی محدود به برخی آدرس های IP.

 

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

چگونه می توان نتایج پرس و جو را در Laravel Eloquent محدود و پیج بندی کرد

ورود به سایت

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

در این قسمت از سری ، نحوه محدود کردن تعداد نتایج در پرس و جو Laravel Eloquent با روش limit () و نحوه صفحه بندی نتایج با روش simplePaginate () را خواهید آموخت.

محدود کردن نتایج پرس و جو

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

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

routes/web.php

سپس ، تعریف مسیر اصلی را پیدا کنید:

routes/web.php

Route::get('/', function () {
    $links = Link::all()->sortDesc();
    return view('index', [
        'links' => $links,
        'lists' => LinkList::all()
    ]);
});

خط برجسته پرس و جو را نشان می دهد که تمام پیوندهای موجود در پایگاه داده را از طریق متد Link model all () دریافت می کند. همانطور که در قسمت قبلی این سری توضیح داده شد ، این روش از کلاس Model وراثت می شود و مجموعه ای را با تمام رکوردهای پایگاه داده مرتبط با آن مدل باز می گرداند. روش sortDesc () برای مرتب سازی مجموعه حاصله به ترتیب نزولی استفاده می شود.

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

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

routes/web.php

Route::get('/', function () {
    $links = Link::orderBy('created_at', 'desc')->limit(4)->get();

    return view('index', [
        'links' => $links,
        'lists' => LinkList::all()
    ]);
});

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

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

نتایج جستجوی پیجینی

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

Laravel Eloquent روشهای بومی برای تسهیل پیاده سازی صفحه نتایج جستار پایگاه داده دارد. روشهای paginate () و simplePaginate () به ایجاد پیوندهای صفحه بندی ، رسیدگی به پارامترهای HTTP برای شناسایی صفحه ای که در حال حاضر درخواست می شود ، و جستجوی پایگاه داده با محدودیت و جابجایی صحیح به منظور دستیابی به مجموعه مورد انتظار نتایج ، بستگی دارد. تعداد سوابق در هر صفحه ای که می خواهید لیست کنید.

اکنون می توانید پرس و جوهای Eloquent را در route/web.php به روز کنید تا از متد simplePaginate () استفاده کنید ، که با پیوندهای قبلی و بعدی یک ناوبری اساسی ایجاد می کند. بر خلاف روش paginate () ، simplePaginate () اطلاعاتی درمورد تعداد کل صفحات در نتیجه پرس و جو نشان نمی دهد.

فایل route/web.php را در ویرایشگر کد خود باز کنید. با به روز رسانی / route ، جایگزین محدودیت (4)-> فراخوانی متد get () با متد () simplePaginate:

routes/web.php

...
Route::get('/', function () {
    $links = Link::orderBy('created_at', 'desc')->simplePaginate(4);

    return view('index', [
        'links' => $links,
        'lists' => LinkList::all()
    ]);
});
...

 

در مرحله بعد ، تعریف مسیر /{slug} را در همان فایل قرار دهید و متد get () را با روش simplePaginate () جایگزین کنید. پس از اتمام کار کد باید به این شکل باشد:

routes/web.php

...
Route::get('/{slug}', function ($slug) {
    $list = LinkList::where('slug', $slug)->first();
    if (!$list) {
        abort(404);
    }

    return view('index', [
        'list' => $list,
        'links' => $list->links()->orderBy('created_at', 'desc')->simplePaginate(4),
        'lists' => LinkList::all()
    ]);
})->name('link-list');
...

پس از اتمام کار ، مسیرهای نهایی/فایل web.php به این شکل ظاهر می شود. تغییرات برای راحتی شما برجسته شده است:

routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Models\Link;
use App\Models\LinkList;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    $links = Link::orderBy('created_at', 'desc')->simplePaginate(4);

    return view('index', [
        'links' => $links,
        'lists' => LinkList::all()
    ]);
});

Route::get('/{slug}', function ($slug) {
    $list = LinkList::where('slug', $slug)->first();
    if (!$list) {
        abort(404);
    }

    return view('index', [
        'list' => $list,
        'links' => $list->links()->orderBy('created_at', 'desc')->simplePaginate(4),
        'lists' => LinkList::all()
    ]);
})->name('link-list');

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

درخواست های پایگاه داده در حال حاضر به روز شده اند ، اما شما هنوز هم باید نمای جلویی خود را به روز کنید تا کدی را که نوار ناوبری را نشان می دهد ، شامل شود. مجموعه Eloquent به دست آمده با () simplePaginate شامل روشی به نام () است که می تواند از نمای جلویی فراخوانی شود تا کد HTML لازم را برای خروجی بخش ناوبری بر اساس یک پرس و جوی صفحه بندی شده ارائه دهد.

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

نمای برنامه منابع/views/index.blade.php را در ویرایشگر کد خود باز کنید:

resources/views/index.blade.php

انتهای بخش دارای برچسب کلاس پیوندها را مشخص کنید ، که شامل حلقه foreach است که پیوندها در آن رندر می شوند. کد زیر را بعد از آن بخش و قبل از برچسب </div> آخر در آن صفحه قرار دهید:

resources/views/index.blade.php

@if ($links->links()->paginator->hasPages())
    <div class="mt-4 p-4 box has-text-centered">
        {{ $links->links() }}
    </div>
@endif

ین کد با دسترسی به شی paginator و فراخوانی متد hasPages () ، وجود چندین صفحه از نتایج را بررسی می کند. وقتی این متد true می شود ، صفحه یک عنصر div جدید ارائه می دهد و متد links () را برای چاپ پیوندهای ناوبری برای پرس و جو مربوط به Eloquent فراخوانی می کند.

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

resources/views/index.blade.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>My Awesome Links</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css">

    <style>
        html {
            background: url("https://i.imgur.com/BWIdYTM.jpeg") no-repeat center center fixed;
            -webkit-background-size: cover;
            -moz-background-size: cover;
            -o-background-size: cover;
            background-size: cover;
        }

        div.link h3 {
            font-size: large;
        }

        div.link p {
            font-size: small;
            color: #718096;
        }
    </style>
</head>
<body>
<section class="section">
    <div class="container">
        <h1 class="title">
            @if (isset($list))
                {{ $list->title }}
            @else
                Check out my awesome links
            @endif
        </h1>
        <p class="subtitle">
            @foreach ($lists as $list)<a href="{{ route('link-list', $list->slug) }}" title="{{ $list->title }}" class="tag is-info is-light">{{ $list->title }} ({{ $list->links()->count() }})</a> @endforeach
        </p>

        <section class="links">
            @foreach ($links as $link)
                <div class="box link">
                    <h3><a href="{{ $link->url }}" target="_blank" title="Visit Link: {{ $link->url }}">{{ $link->description }}</a></h3>
                    <p>{{$link->url}}</p>
                    <p class="mt-2"><a href="{{ route('link-list', $link->link_list->slug) }}" title="{{ $link->link_list->title }}" class="tag is-info">{{ $link->link_list->title }}</a></p>
                </div>
            @endforeach
        </section>

        @if ($links->links()->paginator->hasPages())
            <div class="mt-4 p-4 box has-text-centered">
                {{ $links->links() }}
            </div>
        @endif
    </div>
</section>
</body>
</html>

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

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

Laravel EloquentSQLsqlserverپایگاه دادهخرید سرورفروش سرورنتایج پرس و جو

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه تنظیم کلیدهای SSH در Rocky Linux 8

ورود به سایت

معرفی

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

در این راهنما ، ما بر تنظیم کلیدهای SSH برای سرور Rocky Linux 8 تمرکز می کنیم. کلیدهای SSH یک روش ساده و ایمن برای ورود به سرور شما ارائه می دهند و برای همه کاربران توصیه می شود.

مرحله 1 – ایجاد جفت کلید RSA

اولین قدم ایجاد یک جفت کلید در ماشین سرویس گیرنده (معمولاً رایانه محلی شما) است:

ssh-keygen

به طور پیش فرض ، ssh-keygen یک جفت کلید RSA 2048 بیتی ایجاد می کند ، که برای اکثر موارد استفاده از امنیت کافی برخوردار است (برای ایجاد یک کلید بزرگتر 4096 می توانید به صورت اختیاری در پرچم -b 4096 قرار دهید).

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

Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

ENTER را فشار دهید تا جفت کلید در .ssh/ subdirectory در فهرست اصلی ذخیره شود ، یا یک مسیر جایگزین مشخص کنید.

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

Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

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

سپس باید اعلان زیر را مشاهده کنید:

Output
Enter passphrase (empty for no passphrase):

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

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

 

Output

Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

 

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

مرحله 2 – کپی کلید عمومی در سرور لینوکس سنگی خود

سریعترین راه برای کپی کردن کلید عمومی در میزبان Rocky Linux استفاده از ابزاری به نام ssh-copy-id است. این روش در صورت وجود بسیار توصیه می شود. اگر ssh-copy-id را در دستگاه مشتری خود در اختیار ندارید ، می توانید از یکی از دو روش جایگزین زیر استفاده کنید (کپی از طریق SSH مبتنی بر رمز عبور ، یا کپی دستی کلید).

کپی کلید عمومی خود با استفاده از ssh-copy-id

ابزار ssh-copy-id به طور پیش فرض در بسیاری از سیستم عامل ها گنجانده شده است ، بنابراین ممکن است آن را در سیستم محلی خود در دسترس داشته باشید. برای اینکه این روش کار کند ، باید از قبل دسترسی SSH مبتنی بر گذرواژه به سرور خود داشته باشید.

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

ssh-copy-id username@remote_host

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

 

Output

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

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

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

 

Output

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@203.0.113.1's password:

رمز عبور را وارد کنید (تایپ شما برای اهداف امنیتی نمایش داده نمی شود) و ENTER را فشار دهید. این ابزار با استفاده از گذرواژه ای که ارائه کرده اید به حساب موجود در میزبان راه دور متصل می شود. سپس محتویات کلید ~/.ssh/id_rsa.pub شما را در فایل remote/.ssh/author_keys حساب از راه دور کپی می کند.

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

 

Output

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.

در این مرحله ، کلید id_rsa.pub شما در حساب راه دور بارگذاری شده است. می توانید به مرحله 3 ادامه دهید.

کپی کلید عمومی با استفاده از SSH

اگر ssh-copy-id در دسترس ندارید ، اما دسترسی SSH مبتنی بر رمز عبور به یک حساب کاربری در سرور خود دارید ، می توانید کلیدهای خود را با استفاده از یک روش مرسوم SSH بارگذاری کنید.

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

از طرف دیگر ، می توانیم مطمئن شویم که فهرست ~/.ssh وجود دارد و دارای مجوزهای صحیح تحت حساب مورد استفاده ما است.

سپس می توانیم محتوایی را که پیپ کرده ایم در فایلی به نام author_keys در این دایرکتوری خروجی دهیم. ما برای افزودن محتوا به جای بازنویسی از نماد تغییر مسیر >> استفاده می کنیم. این به ما اجازه می دهد کلیدها را بدون از بین بردن کلیدهای قبلی اضافه شده اضافه کنیم.

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

cat ~/.ssh/id_rsa.pub | ssh username@remote_host “mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys”

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

 

Output

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

 

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

پس از آن ، باید از شما خواسته شود که گذرواژه حساب کاربری از راه دور را وارد کنید:

 

Output

username@203.0.113.1's password:

پس از وارد کردن گذرواژه خود ، محتوای کلید id_rsa.pub شما در انتهای فایل مجاز_keys حساب کاربر از راه دور کپی می شود. در صورت موفقیت آمیز بودن مرحله 3 را ادامه دهید.

کپی کلید عمومی به صورت دستی

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

ما به صورت دستی محتوای فایل id_rsa.pub شما را به فایل ~/.ssh/author_keys در دستگاه راه دور خود اضافه می کنیم.

برای نمایش محتوای کلید id_rsa.pub خود ، این را در رایانه محلی خود تایپ کنید:

cat ~/.ssh/id_rsa.pub

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

 

Output

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host

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

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

mkdir -p ~/.ssh

اکنون ، می توانید فایل author_keys را در این فهرست ایجاد یا اصلاح کنید. می توانید محتویات فایل id_rsa.pub خود را به انتهای فایل author_keys اضافه کنید و در صورت لزوم آن را با استفاده از این دستور ایجاد کنید:

echo public_key_string >> ~/.ssh/authorized_keys

در دستور بالا ، public_key_string را با خروجی دستور cat ~/.ssh/id_rsa.pub که در سیستم محلی خود اجرا کرده اید جایگزین کنید. باید با ssh-rsa AAAA شروع شود ….

در نهایت ، ما اطمینان حاصل می کنیم که دایرکتوری./.ssh و فایل author_keys دارای مجوزهای مناسب هستند:

chmod -R go= ~/.ssh

با این کار همه مجوزهای “گروه” و “دیگر” برای فهرست ~/ .ssh/ حذف می شود.

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

chown -R sammy:sammy ~/.ssh

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

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

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

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

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

ssh username@remote_host

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

 

Output

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

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

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

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

مرحله 4 – غیرفعال کردن احراز هویت رمز عبور در سرور خود

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

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

هنگامی که تأیید کردید که حساب راه دور شما دارای امتیازات مدیریتی است ، با کلیدهای SSH وارد سرور راه دور خود شوید ، یا به صورت root یا با حسابی با امتیازات sudo. سپس ، فایل پیکربندی SSH daemon را باز کنید:

sudo vi /etc/ssh/sshd_config

در داخل فایل ، دستورالعملی به نام PasswordAuthentication را جستجو کنید. این ممکن است با یک # هش نظر داده شود. i را فشار دهید تا vi در حالت درج قرار گیرد ، و سپس خط را کامنت نکنید و مقدار را روی no قرار دهید. با این کار امکان ورود به سیستم از طریق SSH با استفاده از گذرواژه های حساب غیرفعال می شود:


PasswordAuthentication no

پس از اتمام اعمال تغییرات ، ESC و سپس: wq را فشار دهید تا تغییرات را در فایل بنویسید و خارج شوید. برای پیاده سازی واقعی این تغییرات ، باید سرویس sshd را راه اندازی مجدد کنیم:

sudo systemctl restart sshd

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

ssh username@remote_host

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

الگوی SSH در سرور Linux Rocky شما اکنون فقط به کلیدهای SSH پاسخ می دهد. احراز هویت مبتنی بر رمز عبور با موفقیت غیرفعال شد.

خرید سرور لینوکسسرورسرور Rocky Linux 8سرور سنگی لینوکسسرور لینوکسفروش سرورکلیدهای SSHلینوکس

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه مدیریت داده های زیرساخت با خروجی های Terraform

ورود به سایت

 

معرفی

خروجی های Terraform برای استخراج اطلاعات مربوط به منابع زیرساخت از حالت پروژه استفاده می شود. با استفاده از سایر ویژگی های زبان پیکربندی Hashicorp (HCL) ، که Terraform از آن استفاده می کند ، می توان اطلاعات منابع را جستجو کرد و به ساختارهای داده پیچیده تری مانند لیست ها و نقشه ها تبدیل کرد. خروجی ها برای ارائه اطلاعات به نرم افزارهای خارجی مفید هستند که می توانند بر روی منابع زیرساخت ایجاد شده کار کنند.

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

پیش نیازها

توکن vpsgol Personal Access Token ، که می توانید از طریق کنترل پنل vpsgol ایجاد کنید. دستورالعمل انجام این کار را می توانید در این پیوند مشاهده کنید: نحوه ایجاد یک رمز دسترسی شخصی.
Terraform بر روی دستگاه محلی شما نصب شده و پروژه ای با ارائه دهنده vpsgol تنظیم شده است. مرحله 1 و مرحله 2 نحوه استفاده از Terraform با vpsgol را تکمیل کنید و مطمئن شوید که پوشه پروژه را terraform-outputs ، به جای loadbalance نامگذاری کنید. در مرحله 2 ، متغیر pvt_key و منبع کلید SSH را وارد نکنید.
آشنایی با انواع داده ها و حلقه های HCL. برای اطلاعات بیشتر ، آموزش نحوه بهبود انعطاف پذیری با استفاده از متغیرهای Terraform ، وابستگی ها و شرایط را مشاهده کنید.

توجه: این آموزش به طور خاص با Terraform 1.0.2 آزمایش شده است.

تعریف خروجی ها

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

از فهرست راهنمای terraform-outputs که به عنوان پیش نیاز ایجاد کرده اید ، فایل droplets.tf را برای ویرایش ایجاد کرده و باز کنید:

nano droplets.tf

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

terraform-outputs/droplets.tf

resource “vpsgol_droplet” “web” { image = “ubuntu-20-04-x64” name = “test-droplet” region = “fra1” size = “s-1vcpu-1gb” } output “droplet_ip_address” { value = vpsgol_droplet.web.ipv4_address }

ابتدا یک منبع Droplet به نام وب اعلام کنید. نام واقعی آن در ابر به صورت قطره ای و در منطقه fra1 با اوبونتو 20.04 اجرا می شود.

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

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

terraform apply -var “do_token=${DO_PAT}”

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

Output…
vpsgol_droplet.web: Creating…

vpsgol_droplet.web: Creation complete after 32s [id=207631771]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

droplet_ip_address = ip_address

 

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

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

terraform output

خروجی تمام خروجی های پروژه را لیست می کند:

Output

droplet_ip_address = ip_address

همچنین می توانید یک خروجی خاص را با نام و با تعیین آن به عنوان یک آرگومان ، درخواست کنید:

terraform output output_name

برای droplet_ip_address ، خروجی فقط شامل آدرس IP است:

Output
ip_address

به جز تعیین مقدار اجباری ، خروجی ها دارای چند پارامتر اختیاری هستند:

توضیحات: مستندات کوتاهی را با جزئیات آنچه خروجی نشان می دهد ، جاسازی می کند.
varet_on: یک پارامتر متا در هر منبع موجود است که به شما امکان می دهد منابع را به طور صریح مشخص کنید که خروجی بستگی به این دارد که Terraform قادر نیست در طول برنامه ریزی به طور خودکار نتیجه گیری کند.
حساس: مقدار بولین را می پذیرد ، که در صورت تنظیم روی true از نمایش محتوای خروجی پس از استقرار جلوگیری می کند.
پارامتر حساس زمانی مفید است که سیاهههای مربوط به استقرار Terraform در دسترس عموم قرار گیرد ، اما محتویات خروجی باید مخفی نگه داشته شوند. اکنون آن را به تعریف منابع Droplet خود اضافه می کنید.

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

resource “vpsgol_droplet” “web” {
image = “ubuntu-20-04-x64”
name = “test-droplet”
region = “fra1”
size = “s-1vcpu-1gb”
}

output “droplet_ip_address” {
value = vpsgol_droplet.web.ipv4_address
sensitive = true
}

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

terraform apply -var “do_token=${DO_PAT}”

در صورت درخواست بله را وارد کنید. خواهید دید که خروجی تغییر یافته است:

Output…

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

droplet_ip_address = <sensitive>

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

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

terraform destroy -var “do_token=${DO_PAT}”

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

Output

… Destroy complete! Resources: 1 destroyed.

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

خروجی سازه های پیچیده

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

با استفاده از حلقه for

شما باید تعریف منبع Droplet را تغییر دهید ، بنابراین آن را برای ویرایش باز کنید:

nano droplets.tf

آن را اصلاح کنید تا به این شکل باشد:

resource “vpsgol_droplet” “web” {
count = 3
image = “ubuntu-20-04-x64”
name = “test-droplet-${count.index}”
region = “fra1”
size = “s-1vcpu-1gb”
}

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

کد را با اجرای زیر اعمال کنید:

terraform apply -var “do_token=${DO_PAT}”

Terraform برنامه ای برای ایجاد سه قطره شماره دار به نام های test-droplet-0 ، test-droplet-1 و test-droplet-2 خواهد داشت. وقتی از شما خواسته شد تا مراحل را به پایان برسانید بله را وارد کنید. در پایان خروجی زیر را مشاهده خواهید کرد:


Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

این بدان معناست که هر سه Droplets با موفقیت مستقر شده اند و تمام اطلاعات مربوط به آنها در حالت پروژه ذخیره می شود.

ساده ترین راه برای دسترسی به ویژگی های منابع آنها استفاده از خروجی ها است ، اما ایجاد یکی برای هر Droplet مقیاس پذیر نیست. راه حل این است که از حلقه for برای عبور از لیست Droplets و جمع آوری ویژگی های آنها استفاده کنید ، یا از عبارت های splat استفاده کنید (که بعداً در این مرحله با آنها آشنا خواهید شد).

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

nano droplets.tf

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

resource “vpsgol_droplet” “web” {
count = 3
image = “ubuntu-20-04-x64”
name = “test-droplet-${count.index}”
region = “fra1”
size = “s-1vcpu-1gb”
}

output “droplet_ip_addresses” {
value = {
for droplet in vpsgol_droplet.web:
droplet.name => droplet.ipv4_address
}
}

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

فایل را ذخیره و ببندید ، سپس پروژه را دوباره اعمال کنید:

terraform apply -var “do_token=${DO_PAT}”

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

OutputApply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

droplet_ip_addresses = {
“test-droplet-0” = “ip_address”
“test-droplet-1” = “ip_address”
“test-droplet-2” = “ip_address”
}

droplet_ip_addresses آدرس IP سه قطره مستقر شده را مشخص می کند.

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

terraform output -json droplet_ip_addresses

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

Output{“test-droplet-0″:”ip_address”,”test-droplet-1″:”ip_address”,”test-droplet-2″:”ip_address”}

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

استفاده از عبارت Splat

عبارات Splat یک روش جمع و جور برای تکرار در تمام عناصر یک لیست و جمع آوری محتویات یک ویژگی از هر یک از آنها را ارائه می دهد که منجر به ایجاد یک لیست می شود. یک عبارت splat که آدرس IP سه قطره مستقر را استخراج می کند دارای نحو زیر است:

vpsgol_droplet.web[*].ipv4_address

نماد [*] از فهرست سمت چپ خود می گذرد و برای هر یک از عناصر ، محتویات ویژگی مشخص شده در سمت راست را می گیرد. اگر مرجع در سمت چپ به خودی خود یک لیست نباشد ، به یکی تبدیل می شود که تنها عنصر باشد.

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

resource “vpsgol_droplet” “web” {
count = 3
image = “ubuntu-20-04-x64”
name = “test-droplet-${count.index}”
region = “fra1”
size = “s-1vcpu-1gb”
}

output “droplet_ip_addresses” {
value = vpsgol_droplet.web[*].ipv4_address
}

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

terraform apply -var “do_token=${DO_PAT}”

خروجی دریافت خواهید کرد که اکنون یک لیست است و فقط شامل آدرس های IP Droplets است:

Output…
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

droplet_ip_addresses = [
“ip_address”,
“ip_address”,
“ip_address”,
]

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

terraform output -json droplet_ip_addresses

خروجی یک آرایه واحد خواهد بود:

Output[“ip_address”,”ip_address”,”ip_address”]

شما از خروجی ها همراه با عبارات splat و حلقه ها برای صادر کردن آدرس های IP قطره های مستقر استفاده کرده اید. شما همچنین محتویات خروجی را به عنوان JSON دریافت کرده اید و اکنون از jq – ابزاری برای فیلتر پویا JSON با توجه به عبارات داده شده – برای تجزیه آنها استفاده می کنید.

تجزیه خروجی ها با استفاده از jq

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

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

sudo snap install jq

در macOS ، می توانید از Homebrew برای نصب آن استفاده کنید:

brew install jq

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

terraform output -json droplet_ip_addresses | jq ‘.’

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

Output[
“first_ip_address”,
“second_ip_address”,
“third_ip_address”
]

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

terraform output -json droplet_ip_addresses | jq ‘.[1]’

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

Output”second_ip_address”

برای ایجاد نتیجه پردازش یک آرایه ، عبارت را در داخل پرانتز بپیچید:

terraform output -json droplet_ip_addresses | jq ‘[.[1]]’

شما یک آرایه JSON بسیار چاپ شده دریافت خواهید کرد:

Output[
“second_ip_address”
]

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

terraform output -json droplet_ip_addresses | jq ‘.[0:2]’

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

Output[
“first_ip_address”,
“second_ip_address”
]

محدوده 0: 2 دو عنصر اول را برمی گرداند – قسمت بالای محدوده (2) شامل نمی شود ، بنابراین فقط عناصر در موقعیت های 0 و 1 واکشی می شوند.

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

terraform destroy -var “do_token=${DO_PAT}”

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

نتیجه

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

Terraformخرید vpsخرید سرورفروش سرورمدیریت داده های زیرساخت

  • behnam gol mohamadi
  • ۰
  • ۰

پایگاه های داده مدیریت شده اکنون از PostgreSQL 13 پشتیبانی می کنند

ورود به مدیریت

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

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

vpsgol Managed Databases شما را قادر می سازد تا کارهای پیچیده ، پیش پا افتاده (اما ضروری) مدیریت پایگاه داده مانند پیکربندی ، امنیت و به روزرسانی ها را در اختیار ما قرار دهید. این به شما امکان می دهد بر ساخت و ارتقاء برنامه های خود تمرکز کنید – نه بر حفظ پایگاه های داده خود. علاوه بر این ، پایگاه های داده مدیریتی ما اکنون از Droplets با 100٪ vCPU اختصاص داده شده برای بارهای مهم ماموریت شما پشتیبانی می کند. با نسخه فوق ، ماتریس پشتیبانی فعلی ما برای موتورها و نسخه ها به شکل زیر است:

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

PostgreSQL 13SQLsqlserverآپدیت پایگاه دادهپایگاه های دادهخرید سرورفروش سرور

  • behnam gol mohamadi