سرور مجازی

۱۶ مطلب در شهریور ۱۴۰۰ ثبت شده است

  • ۰
  • ۰

نحوه استفاده از دکوراتورها در TypeScript

ورود به سایت

معرفی

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

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

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

پیش نیازها

برای پیگیری این آموزش ، شما نیاز دارید:

  • محیطی که در آن می توانید برنامه های TypeScript را اجرا کنید تا همراه با مثال ها دنبال کنید. برای تنظیم این دستگاه در دستگاه محلی خود ، به موارد زیر نیاز دارید.
    • هر دو Node و npm (یا نخ) به منظور اجرای یک محیط توسعه که بسته های مربوط به TypeScript را مدیریت می کند ، نصب شده است. این آموزش با Node.js نسخه 14.3.0 و npm نسخه 6.14.5 آزمایش شده است. برای نصب روی macOS یا اوبونتو 18.04 ، مراحل نحوه نصب Node.js و ایجاد محیط توسعه محلی در macOS یا بخش Installing using a PPA از نحوه نصب Node.js در اوبونتو 18.04 را دنبال کنید. اگر از زیر سیستم Windows برای Linux (WSL) استفاده می کنید ، این نیز کار می کند.
    • علاوه بر این ، به TypeScript Compiler (tsc) نصب شده بر روی دستگاه خود نیاز دارید. برای انجام این کار ، به وب سایت رسمی TypeScript مراجعه کنید.
  • اگر نمی خواهید محیط TypeScript را در دستگاه محلی خود ایجاد کنید ، می توانید از زمین بازی رسمی TypeScript برای پیگیری استفاده کنید.
  • شما به دانش کافی در مورد جاوا اسکریپت ، به ویژه نحو ES6+ ، مانند تخریب ، عملگرهای استراحت و واردات/صادرات نیاز دارید. اگر به اطلاعات بیشتری در مورد این موضوعات نیاز دارید ، خواندن نحوه کدگذاری در سری JavaScript توصیه می شود
  • این آموزش به جنبه های ویرایشگرهای متنی که از TypeScript پشتیبانی می کنند اشاره می کند و خطاهای خطی را نشان می دهد. این برای استفاده از TypeScript ضروری نیست ، اما از ویژگیهای TypeScript بیشتر استفاده می کند. برای به دست آوردن مزایای این موارد ، می توانید از ویرایشگر متنی مانند Visual Studio Code استفاده کنید که از TypeScript پشتیبانی کامل دارد. همچنین می توانید این مزایا را در TypeScript Playground امتحان کنید

همه نمونه های نشان داده شده در این آموزش با استفاده از TypeScript نسخه 4.2.2 ایجاد شده است.

فعال کردن پشتیبانی Decorators در TypeScript

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

CLI کامپایلر TypeScript

برای فعال کردن پشتیبانی دکوراتورها در هنگام استفاده از TypeScript Compiler CLI (tsc) تنها مرحله اضافی مورد نیاز این است که یک پرچم اضافی –experimentalDecorators:

tsc –experimentalDecorators

tsconfig.json

هنگام کار در پروژه ای که دارای فایل tsconfig.json است ، برای فعال کردن decorator تجربی ، باید ویژگی experimentalDecorators را به شیء compilerOptions اضافه کنید:

{
“compilerOptions”: {
“experimentalDecorators”: true
}
}

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

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

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

در TypeScript ، می توانید با استفاده از نحو خاصexpression ، decorator کننده ایجاد کنید ، جایی که بیان یک تابع است که به طور خودکار در زمان اجرا با جزئیات مربوط به هدفdecorator فراخوانی می شود.

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

  • خود اعلام کلاس
  • خواص
  • دستیاران
  • مواد و روش ها
  • مولفه های

برای مثال ، فرض کنید شما یک decorator به نام مهر و موم شده دارید که Object.seal را در یک کلاس فراخوانی می کند. برای استفاده از دکوراتور خود می توانید موارد زیر را بنویسید:

@sealed
class Person {}

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

همین امر برای انواع دیگر decorators معتبر است:

@classDecorator
class Person {
  @propertyDecorator
  public name: string;

  @accessorDecorator
  get fullName() {
    // ...
  }

  @methodDecorator
  printName(@parameterDecorator prefix: string) {
    // ...
  }
}

 

برای افزودن چند decorator ، آنها را یکی پس از دیگری به هم اضافه کنید:

@decoratorA
@decoratorB
class Person {}

ایجاد دکوراتورهای کلاس در TypeScript

در این بخش مراحل ایجاد decorator کلاس در TypeScript را طی خواهید کرد.

برای decorator به نامdecoratorA ، به TypeScript می گویید که باید تابع decoratorA را فراخوانی کند. یک تابع با جزئیات نحوه استفاده از decorator در کد خود فراخوانی می شود. به عنوان مثال ، اگر decorator را برای اعلان کلاس اعمال کرده اید ، تابع جزئیات مربوط به کلاس را دریافت می کند. این عملکرد باید در حدی باشد که دکوراتور شما بتواند کار کند.

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

@sealed
class Person {}

function sealed(target: Function) {
  Object.seal(target);
  Object.seal(target.prototype);
}

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

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

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

مهم است که به یاد داشته باشید که در حال حاضر نمی توان نوع TypeScript هدف را هنگام استفاده از decorator گسترش داد. این بدان معناست که ، به عنوان مثال ، شما نمی توانید یک فیلد جدید با استفاده از یک تزئین کننده به کلاس اضافه کنید و آن را از نظر نوع ایمن کنید.

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

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

ایجاد Decorator Factories

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

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

بیایید تصور کنیم که شما یک دکوراتور کلاس به نام decoratorA دارید و می خواهید گزینه ای را اضافه کنید که می توانید هنگام فراخوانی با دکوراتور مانند پرچم بولی تنظیم کنید. شما می توانید با نوشتن یک کارخانه تزئیناتی مشابه کارخانه زیر به این مهم برسید:

const decoratorA = (someBooleanFlag: boolean) => {
  return (target: Function) => {
  }
}

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

const decoratorA = (someBooleanFlag: boolean) => {
  return (target: Function) => {
  }
}

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

const decoratorA = (someBooleanFlag: boolean) => {
  return (target: Function) => {
  }
}

@decoratorA(true)
class Person {}

در اینجا ، وقتی از decoratorA decorator استفاده می کنید ، قرار است کارخانه تزئینات با پارامتر someBooleanFlag روی true تنظیم شود. سپس اجرای تزئین کننده خود اجرا می شود. این به شما امکان می دهد رفتار دکوراتور خود را بر اساس نحوه استفاده از آن تغییر دهید ، و سفارشی سازی و استفاده مجدد از دکوراتورها را از طریق برنامه خود آسان کنید.

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

const decoratorA = (someBooleanFlag: boolean) => {
  return (target: Function) => {
  }
}

@decoratorA
class Person {}

کامپایلر TypeScript دو خطا به شما می دهد که ممکن است بسته به نوع تزئین کننده متفاوت باشد. برای تزئین کنندگان کلاس خطاها 1238 و 1240 است:

 

Output

Unable to resolve signature of class decorator when called as an expression.
  Type '(target: Function) => void' is not assignable to type 'typeof Person'.
    Type '(target: Function) => void' provides no match for the signature 'new (): Person'. (1238)
Argument of type 'typeof Person' is not assignable to parameter of type 'boolean'. (2345)

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

ایجاد Property Decorators

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

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

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

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

در اینجا یک عملکرد تزئین کننده وجود دارد که نام اعضا را روی کنسول چاپ می کند:

const printMemberName = (target: any, memberName: string) => {
console.log(memberName);
};

class Person {
@printMemberName
name: string = “Jon”;
}

وقتی کد TypeScript بالا را اجرا می کنید ، موارد زیر را در کنسول چاپ می کنید:

 

Output

name

می توانید از طراحان املاک برای نادیده گرفتن ملک مورد تزئین استفاده کنید. این را می توان با استفاده از Object.defineProperty همراه با یک setter و getter جدید برای ویژگی انجام داد. بیایید ببینیم چگونه می توانید یک تزئین کننده با نام فهرست مجاز ایجاد کنید ، که فقط اجازه می دهد یک ویژگی بر روی مقادیر موجود در یک لیست مجاز استاتیک تنظیم شود:

const allowlist = ["Jon", "Jane"];

const allowlistOnly = (target: any, memberName: string) => {
  let currentValue: any = target[memberName];

  Object.defineProperty(target, memberName, {
    set: (newValue: any) => {
      if (!allowlist.includes(newValue)) {
        return;
      }
      currentValue = newValue;
    },
    get: () => currentValue
  });
};

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

const allowlist = [“Jon”, “Jane”];

سپس در حال پیاده سازی تزئین کننده اموال هستید:

const allowlistOnly = (target: any, memberName: string) => {
  let currentValue: any = target[memberName];

  Object.defineProperty(target, memberName, {
    set: (newValue: any) => {
      if (!allowlist.includes(newValue)) {
        return;
      }
      currentValue = newValue;
    },
    get: () => currentValue
  });
};

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

const allowlistOnly = (target: any, memberName: string) => {

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

در خط اول پیاده سازی تزئین کننده خود ، مقدار فعلی دارایی را که تزئین می کنید در متغیر currentValue ذخیره می کنید:

let currentValue: any = target[memberName];

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

سپس با استفاده از Object.defineProperty ویژگی را لغو می کنید:

Object.defineProperty(target, memberName, {
  set: (newValue: any) => {
    if (!allowlist.includes(newValue)) {
      return;
    }
    currentValue = newValue;
  },
  get: () => currentValue
});

فراخوانی Object.defineProperty دارای getter و setter است. دریافت کننده مقدار ذخیره شده در متغیر currentValue را برمی گرداند. اگر تنظیم کننده مقدار currentVariable را روی newValue تنظیم کند ، اگر در لیست مجاز باشد.

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

class Person {
  @allowlistOnly
  name: string = "Jon";
}

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

const allowlist = ["Jon", "Jane"];

const allowlistOnly = (target: any, memberName: string) => {
  let currentValue: any = target[memberName];

  Object.defineProperty(target, memberName, {
    set: (newValue: any) => {
      if (!allowlist.includes(newValue)) {
        return;
      }
      currentValue = newValue;
    },
    get: () => currentValue
  });
};

class Person {
  @allowlistOnly
  name: string = "Jon";
}

const person = new Person();
console.log(person.name);

person.name = "Peter";
console.log(person.name);

person.name = "Jane";
console.log(person.name);

 

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

 

Output

Jon
Jon
Jane

مقدار هرگز روی Peter تنظیم نمی شود ، زیرا Peter در لیست مجاز نیست.

اگر می خواهید کد خود را کمی بیشتر استفاده کنید و اجازه دهید هنگام استفاده از دکوراتور ، لیست مجاز تنظیم شود ، چه می کنید؟ این یک مورد استفاده عالی برای decorator factories. است. بیایید دقیقاً همین کار را انجام دهیم ، با تبدیل دکوراسیون مجاز خود فقط دکوراتور به decorator factories.:

const allowlistOnly = (allowlist: string[]) => {
  return (target: any, memberName: string) => {
    let currentValue: any = target[memberName];

    Object.defineProperty(target, memberName, {
      set: (newValue: any) => {
        if (!allowlist.includes(newValue)) {
          return;
        }
        currentValue = newValue;
      },
      get: () => currentValue
    });
  };
}

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

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

class Person {
  @allowlistOnly(["Claire", "Oliver"])
  name: string = "Claire";
}

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

const allowlistOnly = (allowlist: string[]) => {
  return (target: any, memberName: string) => {
    let currentValue: any = target[memberName];

    Object.defineProperty(target, memberName, {
      set: (newValue: any) => {
        if (!allowlist.includes(newValue)) {
          return;
        }
        currentValue = newValue;
      },
      get: () => currentValue
    });
  };
}

class Person {
  @allowlistOnly(["Claire", "Oliver"])
  name: string = "Claire";
}

const person = new Person();
console.log(person.name);
person.name = "Peter";
console.log(person.name);
person.name = "Oliver";
console.log(person.name);

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

 

Output

Claire
Claire
Oliver

نشان می دهد که آنطور که انتظار می رود کار می کند ، person.name هرگز روی Peter تنظیم نمی شود ، زیرا Peter در فهرست مجاز داده شده نیست.

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

ایجاد Accessor Decorators

در این قسمت نگاهی به چگونگی تزئین اعضای کلاس می اندازید.

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

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

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

اگر یک مقدار از تزئین کننده accessor خود را برگردانید ، این مقدار به عنوان توصیف کننده ویژگی جدید accessor برای هر دو گروه getter و setter تبدیل می شود.

در اینجا نمونه ای از یک تزئین کننده است که می تواند برای تغییر پرچم قابل شمارش دسترسی گیرنده/تنظیم کننده استفاده شود:

const enumerable = (value: boolean) => {
  return (target: any, memberName: string, propertyDescriptor: PropertyDescriptor) => {
    propertyDescriptor.enumerable = value;
  }
}

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

class Person {
  firstName: string = "Jon"
  lastName: string = "Doe"

  @enumerable(true)
  get fullName () {
    return `${this.firstName} ${this.lastName}`;
  }
}

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

ایجاد Method Decorators

در این قسمت نگاهی به نحوه استفاده از تزئین کننده های متد می اندازید.

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

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

const enumerable = (value: boolean) => {
  return (target: any, memberName: string, propertyDescriptor: PropertyDescriptor) => {
    propertyDescriptor.enumerable = value;
  }
}

class Person {
  firstName: string = "Jon"
  lastName: string = "Doe"

  @enumerable(true)
  getFullName () {
    return `${this.firstName} ${this.lastName}`;
  }
}

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

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

const deprecated = (deprecationReason: string) => {
  return (target: any, memberName: string, propertyDescriptor: PropertyDescriptor) => {
    return {
      get() {
        const wrapperFn = (...args: any[]) => {
          console.warn(`Method ${memberName} is deprecated with reason: ${deprecationReason}`);
          propertyDescriptor.value.apply(this, args)
        }

        Object.defineProperty(this, memberName, {
            value: wrapperFn,
            configurable: true,
            writable: true
        });
        return wrapperFn;
      }
    }
  }
}

 

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

const deprecated = (deprecationReason: string) => {
  return (target: any, memberName: string, propertyDescriptor: PropertyDescriptor) => {
    // ...
  }
}

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

شما از این مزیت استفاده می کنید تا متد را به روش کلاس تزئین شده خود اضافه کنید. به این ترتیب می توانید پیاده سازی خود روش را تغییر دهید.

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

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

در داخل getter شما سپس یک تابع wrapper به صورت محلی ایجاد می کنید ، به نام wrapperFn ، این تابع با استفاده از console یک پیام را به کنسول وارد می کند. هشدار دهید ، با رد deprecationReason دریافت شده از کارخانه decorator ، سپس با استفاده از propertyDescriptor.value روش اصلی را فراخوانی می کنید. apply (this، args) ، به این ترتیب متد اصلی نامیده می شود که این مقدار به درستی به نمونه کلاس متصل شده است در صورتی که یک روش غیر استاتیک بود.

سپس از definProperty برای بازنویسی مقدار متد خود در کلاس استفاده می کنید. این مانند یک مکانیسم یادآوری عمل می کند ، زیرا تماس های متعدد با یک روش دیگر با گیرنده شما تماس نمی گیرد ، بلکه مستقیماً با wrapperFn تماس می گیرد. اکنون شما با استفاده از Object.defineProperty ، عضو کلاس را طوری تنظیم می کنید که wrapperFn شما به عنوان مقدار آن باشد.

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

const deprecated = (deprecationReason: string) => {
  return (target: any, memberName: string, propertyDescriptor: PropertyDescriptor) => {
    return {
      get() {
        const wrapperFn = (...args: any[]) => {
          console.warn(`Method ${memberName} is deprecated with reason: ${deprecationReason}`);
          propertyDescriptor.value.apply(this, args)
        }

        Object.defineProperty(this, memberName, {
            value: wrapperFn,
            configurable: true,
            writable: true
        });
        return wrapperFn;
      }
    }
  }
}

class TestClass {
  static staticMember = true;

  instanceMember: string = "hello"

  @deprecated("Use another static method")
  static deprecatedMethodStatic() {
    console.log('inside deprecated static method - staticMember =', this.staticMember);
  }

  @deprecated("Use another instance method")
  deprecatedMethod () {
    console.log('inside deprecated instance method - instanceMember =', this.instanceMember);
  }
}

TestClass.deprecatedMethodStatic();

const instance = new TestClass();
instance.deprecatedMethod();

در اینجا ، شما یک TestClass با دو ویژگی ایجاد کرده اید: یکی استاتیک و دیگری غیر استاتیک. شما همچنین دو روش ایجاد کرده اید: یکی استاتیک و دیگری غیر استاتیک.

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

 

Output

(warning) Method deprecatedMethodStatic is deprecated with reason: Use another static method
inside deprecated static method - staticMember = true
(warning)) Method deprecatedMethod is deprecated with reason: Use another instance method
inside deprecated instance method - instanceMember = hello

این نشان می دهد که هر دو روش به درستی با عملکرد wrapper شما بسته شده است ، که پیامی را با دلیل منسوخ شدن به کنسول وارد می کند.

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

ایجاد پارامترهای Decorators

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

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

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

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

function print(target: Object, propertyKey: string, parameterIndex: number) {
  console.log(`Decorating param ${parameterIndex} from ${propertyKey}`);
}

سپس می توانید پارامتر decorators خود را مانند این استفاده کنید:

class TestClass {
  testMethod(param0: any, @print param1: any) {}
}

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

 

Output

Decorating param 1 from testMethod

شما اکنون یک  پارامتر decorator ایجاد کرده و اجرا کرده اید و نتیجه ای را که شاخص پارامتر decorator را برمی گرداند چاپ می کنید.

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

decoratorMethod DecoratorsProperty DecoratorsTypeScriptپارامترهای Decoratorsجاواجاوا اسکریپتسرورسرور مجازیکامپایلر TypeScript

  • behnam gol mohamadi
  • ۰
  • ۰

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

ورود به سایت

معرفی

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

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

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

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

ssh root@your_server_ip

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

درباره Root

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

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

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

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

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

adduser sammy

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

passwd sammy

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

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

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

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

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

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

usermod -aG wheel sammy

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

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

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

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

dnf install firewalld -y

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

systemctl start firewalld

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

systemctl status firewalld

 

Output

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

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

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

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

firewall-cmd –permanent –list-all

 

Output

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

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

firewall-cmd –get-services

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

firewall-cmd –permanent –add-service=http

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

firewall-cmd –reload

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

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

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

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

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

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

ssh sammy@your_server_ip

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

sudo command_to_run

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

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

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

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

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

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

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

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

ssh sammy@your_server_ip

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

sudo command_to_run

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

نتیجه

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

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

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه تنظیم کلیدهای 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
  • ۰
  • ۰

مشارکت در نرم افزار منبع باز: Kubernetes

ورود به سایت

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

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

چرا من شروع به مشارکت در Kubernetes کردم

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

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

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

نحوه کمک به Kubernetes به عنوان یک مبتدی

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

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

به طور معمول ، هنگامی که شما مشارکت کننده جدیدی در هر پروژه منبع باز هستید ، باید به دنبال هرگونه اسناد مرتبط برای مشارکت کنندگان باشید. معمولاً ، این به صورت یک فایل CONTRIBUTING.md یا چیزی مشابه است. README در ریشه یک repo نیز مکان خوبی برای شروع است. هر پروژه ای که به دنبال پرورش جامعه مشارکت کنندگان است باید این اطلاعات را به راحتی در اختیار مشارکت کنندگان جدید قرار دهد. مورد دیگری که باید مورد توجه قرار گیرد ، وسایل ارتباطی است که توسعه دهندگان در آن پروژه یا پروژه فرعی خاص از آن استفاده می کنند. به عنوان مثال ، Kubernetes به شدت به Slack و لیستهای پستی متکی است: مشترک کانالهای Slack و ایمیلهای مورد علاقه خود شوید ، به ویژه برای مناطق Kubernetes که قصد دارید در آنها مشارکت داشته باشید.

به عنوان یک مبتدی کامل برای Kubernetes به طور کلی ، و همچنین فردی که هیچ تجربه ای در مشارکت در پایگاه کد Kubernetes نداشت ، من مستقیماً به فایل CONTRIBUTING.md رفتم. این به خوبی مستند شده است و به من مستندات لازم را برای تنظیم محیط من برای شروع توسعه نشان داد.

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

  • یافتن مشکلاتی برای کار: هنگامی که محیط برنامه نویس خود را تنظیم کردید ، می خواهید چیزی را پیدا کنید که روی آن کار کنید. هنگامی که من برای اولین بار شروع به کار کردم ، پس از اینکه محیط خود را تنظیم کردم ، به بررسی مسائل موجود در repo Kubernetes پرداختم. در GitHub ، هنگامی که مسائل مربوط به یک پروژه خاص را جستجو می کنید ، یک برچسب فیلترینگ وجود دارد که می تواند برای فیلتر کردن ” is:open is:issue label:”good first issue”” اعمال شود که نشان می دهد این مسئله می تواند توسط یک مبتدی کار شود. به عنوان مثال ، is:open is:issue label:”good first issue” ” در نوار جستجوی شماره GitHub لیستی از همه مسائل باز شده با برچسب “good first issue” را در اختیار شما قرار می دهد. برای فیلتر کردن بیشتر برای یک گروه علاقه مندی خاص (SIG) مانند sig/network ، عبارت “open is: issue”: برچسب ” is:open is:issue label:”good first issue”” را جستجو کنید: sig/network. از اینجا من توانستم اولین شماره خود را پیدا کنم.
  • رفع مشکلاتی که پیدا می کنید: پس از یافتن مشکلی ، باید به نگهبانان اطلاع دهید که قصد شما از کار روی آن چیست. اولین کاری که من انجام دادم این بود که در مورد GitHub بپرسم که آیا می توانم روی موضوعی که پیدا کردم کار کنم ، یعنی PR برای حذف تمام خطوط اضافی اضافی که به توابع Logf () منتقل می شوند. این شامل گذراندن کد در هر دو آزمون/e2e و test/e2e_node ، پیدا کردن مازاد خط جدید در تماس با Logf () و حذف آنها بود. این کار تمرین خوبی برای یادگیری نحوه مشارکت در پایگاه کد Kubernetes بود زیرا شامل تغییرات محلی ، ایجاد روابط عمومی در برابر شاخه اصلی و پرداختن به بازخورد بازبینی می شد.

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

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

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

3. در پیدا کردن مسائل گیر کرده اید؟ سعی کنید سایه انتشار repo Kubernetes شوید

راه دیگر برای مشارکت از طریق به روزرسانی اسناد است ، که روشی متداول برای مشارکت کنندگان جدید است تا در یک پروژه منبع باز غیر از تغییرات کد مشارکت کنند. یکی از راههای جالبی که اخیراً در آن شرکت کرده ام ، برنامه سایه انتشار Kubernetes است ، برنامه ای که در آن افراد تازه وارد مدیریت انتشارات Kubernetes می توانند در یکی از بخشهای مختلف نسخه کار کنند. من روی پیشرفتهای Kubernetes 1.20 کار کردم. وظیفه ای که به من محول شد ، بررسی و ردیابی همه پیشنهادات Kubernetes Enhancements (KEPs) ، با کمک چند سایه دیگر و یک سرنخ بود. این به من اطلاعات زیادی در مورد روند KEP داد و به من اجازه داد تا با تعداد کمی از مشارکت کنندگان در این روند کار کنم. من این مسیر را به هر کسی که به دنبال راه اندازی مجدد شبکه و تأثیر خود در جامعه Kubernetes است ، بسیار توصیه می کنم.

مزایای عضویت در Kubernetes

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

یکی از مزایای اصلی عضویت در این است که بتوانید مسائل مربوط به خود را تعیین کرده و تأثیر بیشتری بر بخش های خاصی از کدی که روی آن کار می کنید داشته باشید. یکی دیگر از مزایای ملموس عضویت ، دریافت آسیب پذیری ها و مواجهه های مشترک Kubernetes (CVE) به محض تشخیص توسط جامعه است. این امر برای تیم vpsgol Kubernetes بسیار ارزشمند بود زیرا ما اطلاعات مربوط به این آسیب پذیری های امنیتی را قبل از عموم مردم دریافت می کنیم و به ما این امکان را می دهد که تلاش های ناخواسته برای به خطر انداختن پلت فرم ما و اطمینان از حفظ امنیت مشتریانمان در حین استفاده از DOKS و سایر محصولات مبتنی بر Kubernetes در بستر vpsgol را خنثی کنیم.

موانع مشترک در راه شما برای تبدیل شدن به یک مشارکت کننده Kubernetes

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

1. کمک به کد بدون همکاری با جامعه

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

2. متواضع نبودن یا احترام به عنوان مشارکت کننده

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

بازبینی: چگونه می توان به عنوان یک مبتدی به عنوان منبع باز Kubernetes تبدیل شد

  1. منطقه ای از K8 ها را پیدا کنید که به شما علاقه دارد و “اولین شماره خوب” را با موضوعات دارای برچسب پیدا کنید تا بلافاصله روی آن کار کنید.
  2. به یاد داشته باشید ، ارتباط زیاد خوب است.
  3. وظیفه را به شیوه ای مثبت دنبال کنید.
  4. در طول مسیر به دیگران کمک کنید ، درست همانطور که در شروع کار می خواهید.

open source, خرید سرور, سرور مجازی, فروش 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
  • ۰
  • ۰

معرفی MongoDB VPSGOL Managed – پایگاه داده ای کاملاً مدیریت شده به عنوان سرویس برنامه های مدرن

ورود به سایت

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

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

مزایای MongoDB مدیریت شده

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

پشتیبان گیری روزانه خودکار با بازیابی زمان: داده ها یکی از مهمترین دارایی های یک برنامه هستند ، بنابراین پشتیبان گیری از پایگاه داده شما بسیار مهم است. ما بطور روزانه بصورت رایگان از کل خوشه های شما نسخه پشتیبان تهیه می کنیم. ما همچنین یک نقطه در زمان بازیابی به مدت 7 روز ارائه می دهیم ، به این ترتیب اگر همه چیز به دلیل خطای انسانی ، خطای ماشین یا ترکیبی از هر دو اشتباه شود ، می توانید پایگاه داده را به راحتی در 7 روز گذشته در هر زمان بازیابی کنید.

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

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

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

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

نیاز به پایگاه های داده مدیریت شده

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

با در نظر گرفتن این موضوع ، چند سال پیش پایگاه های مدیریتی را معرفی کردیم و مشتاق هستیم که MongoDB مدیریت شده را به مجموعه ما اضافه کنیم. با این نسخه ، vpsgol Managed Databases اکنون از موتورهای زیر پشتیبانی می کند:

راه اندازی مدیریت MongoDB پس از پلتفرم vpsgol App ، یک PaaS (پلت فرم به عنوان سرویس) مدرن و تصور شده است که چند ماه پیش منتشر کردیم. App Platform ساخت ، استقرار و مقیاس گذاری برنامه ها و سایت های ایستا را بسیار آسان می کند. شما می توانید کد را به سادگی با اشاره به مخازن GitHub و GitLab خود مستقر کنید ، و App Platform تمام کارهای سنگین مدیریت زیرساخت ، زمان اجرای برنامه و وابستگی ها را انجام می دهد. پلتفرم برنامه ، همراه با پایگاه های داده مدیریت شده ، با توانمندسازی توسعه دهندگان ، استارتاپ ها و SMB ها برای تمرکز بیشتر بر روی برنامه های خود و کمتر بر زیرساخت ها و پایگاه های اطلاعاتی زیربنایی ، به ماموریت vpsgol کمک می کند.

نحوه مدیریت MongoDB

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

  • Droplets: ماشین های مجازی لینوکس در صورت تقاضا مناسب برای تولید برنامه های تجاری و پروژه های اشتیاق شخصی.
  • vpsgol Kubernetes: Kubernetes مدیریت شده با مقیاس بندی خودکار ، ارتقاء و هواپیمای کنترل رایگان.
  • پلتفرم برنامه vpsgol : یک پلتفرم کاملاً مدیریت شده به عنوان یک سرویس.

صرف نظر از اینکه کدام گزینه محاسباتی را برای ساخت برنامه های خود انتخاب می کنید ، می توانید MongoDB مدیریت شده را به راحتی به آن اضافه کنید. علاوه بر این ، Managed MongoDB همچنین با برنامه Node.js 1-Click از vpsgol Marketplace ادغام شده و ساختن برنامه های Node.js را بسیار آسان می کند.

قیمت ساده و قابل پیش بینی

مانند سایر محصولات vpsgol ، Managed MongoDB قیمت ساده و قابل پیش بینی را ارائه می دهد که به شما امکان می دهد هزینه ها را کنترل کرده و از هر گونه صورت حساب غافلگیر کننده جلوگیری کنید

در دسترس بودن منطقه ای

MongoDB مدیریت شده در حال حاضر در مناطق زیر موجود است:

NYC3 (نیویورک ، ایالات متحده)
FRA1 (فرانکفورت ، آلمان)
AMS3 (آمستردام ، هلند)
به زودی Manago Mongo را در سایر مناطق در دسترس قرار خواهیم داد.

با ما در استقرار ، کنفرانس مجازی vpsgol همراه باشید

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

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

MongoDBMySQLPostgreSQLRedisامنیت در vpsgolپایگاه دادهپشتیبان گیری درvpsgolخرید سرورسرور مجازیمدیریت پایگاه داده

  • behnam gol mohamadi
  • ۰
  • ۰

 با اطمینان حجم کاری خود را به vpsgol منتقل کنید

ورود به سایت

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

با این حال ، مهاجرت به ارائه دهنده ابری دیگر مستلزم برنامه ریزی زیاد ، زمان و تلاش زیادی است و با این خطر مهاجرت باعث اختلال در تجربه مشتریان می شود.

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

چرا مهاجرت به vpsgol

vpsgol رایانش ابری را ساده می کند تا توسعه دهندگان و مشاغل بتوانند زمان بیشتری را صرف ساختن نرم افزاری کنند که جهان را تغییر می دهد. vpsgol با زیرساخت های مهم ماموریتی و ارائه خدمات کاملاً مدیریت شده ، به توسعه دهندگان ، استارتاپ ها و مشاغل کوچک و متوسط (SMB) کمک می کند تا سریعاً برنامه های کاربردی را برای تسریع نوآوری و افزایش بهره وری و چابکی بسازند. برخی از مزایای اصلی vpsgol عبارتند از:

  • راه حل های ساده و در عین حال جامع

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

  • توانایی افزایش مقیاس با اطمینان

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

  • قیمت قابل پیش بینی و مقرون به صرفه

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

آنچه می توانید در vpsgol بسازید

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

چگونه vpsgol می تواند به انتقال حجم کار شما کمک کند

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

ارائه خدمات به مشتریانپلتفرمهای vpsgolخرید سرورخریدvpsرایانش ابریفروش سرورقیمت مقرون به صرفه سرورمهاجرت به vpsgol

 

  • behnam gol mohamadi
  • ۰
  • ۰

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

ورود به سایت

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

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

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

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

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

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

تقاضای روزافزون برای ابزارها و خدمات توسعه دهندگان

در دهه گذشته یا بیشتر ، کسب و کار ابزار و توسعه دهندگان توسعه یافته است. تیم های توسعه دهنده مبتکر راه های جدید و کارآمدتری برای حل چالش های توسعه نرم افزار پیدا کرده اند و بسیاری نیز امکانات و سناریوهای جدیدی را ایجاد کرده اند. Github ، Twilio ، Stripe ، MongoDB و حتی DigitalOcean تنها چند نمونه از شرکت های متمرکز بر توسعه هستند که وارد شده و نامی برای خود در مناطق شلوغ ایجاد کرده اند. آنها این کار را با تمرکز بر نیازهای مخاطبان محروم و سناریوهای محروم و ارائه تجربیات متمایز به توسعه دهندگان انجام دادند. در حقیقت ، انجمن های پرسش و پاسخ آنلاین مانند Stack Overflow ، ابزارهای مصاحبه برنامه نویسی آنلاین مانند LeetCode و انجمن های آنلاین انجمن مانند DEV نیز نمونه هایی از خدمات هستند که زندگی توسعه دهندگان را آسان تر می کند.

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

DigitalOcean: ابر ایده آل برای ایجاد ابزارهای توسعه دهنده

در DigitalOcean ، ما یک یا دو مورد در مورد ایجاد یک کسب و کار که بر توسعه دهندگان متمرکز است می دانیم. ما این کار را توسط:

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

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

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

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

  • مأموریت Bunnyshell این است که به توسعه دهندگان اجازه دهد بدون ایجاد نگرانی در مورد زیرساخت ها بر روی ساخت برنامه ها تمرکز کنند. این سیستم مدیریت زیرساخت و مدیریت برنامه و ابزار DevOps را برای استقرار و نظارت ارائه می دهد. Bunnyshell به دنبال ارائه دهنده زیرساختی بود که بتواند خدمات قابل اطمینان را به مشتریان خود به نحو مقرون به صرفه ارائه دهد.

 DigitalOceanفرصت هایی را برای دیگران ایجاد می کند تا بهترین کاری را که انجام می دهند انجام دهند

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

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

“با DigitalOcean ، ما یک گزینه کم هزینه با پشتیبانی و قابلیت اطمینان بالا دریافت می کنیم.”
– مدیر آموزش و آگاهی ، مولی ووجیک

ارائه دهندگان ابزار توسعه می توانند از نظر اقتصادی کوچک و مقیاس کوچک را شروع کنند

مانند بسیاری از مشاغل SaaS ، حتی ابزارها و محصولات توسعه دهندگان نیز با مشکل مدیریت مقیاس مؤثر روبرو هستند. DigitalOcean با ارائه بسته های پیشرو در زمینه عملکرد و قیمت و به ویژه اقتصاد پهنای باند جذاب در مقیاس بالا ، یک بستر محاسبات ابری مناسب برای ابزارهای توسعه دهندگان فراهم می کند.

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

وی افزود: ما ماهانه 10 تا 20 درصد رشد داشتیم. و در هر مرحله از راه ، DO ابزارهایی داشت که دقیقاً همان چیزی بود که درست بود. ما برای سادگی آمدیم و سپس ، وقتی مقیاس بندی می کردیم ، در واقع از چیزهای زیادی روی سکو بسیار خوشحال شدیم. ”
– دانیل نی ، مدیرعامل و بنیانگذار API Scraper

حتی سازندگان ابزارهای توسعه نیز باید نرم افزاری را به طور مؤثر بسازند

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

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

“من به عنوان بنیانگذار ، نمی خواستم وقت خود را برای مدیریت زیرساخت ها و انجام دراز کش های XML صرف کنم. هنگامی که همه گیری اتفاق افتاد و ترافیک ده برابر شد ، پلت فرم قوی DigitalOcean به ما اجازه داد بدون هیچ گونه اختلالی در عملیات خود ، مقیاس یکپارچه را افزایش دهیم ، بنابراین ما می توانیم همچنان بر اداره کسب و کار خود تمرکز کنیم. ”
– جردن هوسنی ، بنیانگذار و مدیرعامل Parabol
DigitalOcean مفتخر است که یک شرکت متمرکز بر توسعه دهنده است.

DigitalOceanپشتیبانی DigitalOceanپلتفرم DigitalOceanپلتفرمهای به روزتوسعه دهندگان نرم افزارخریدvpsراه اندازی سرورسرور مجازیفروش سرور

 

 

  • behnam gol mohamadi
  • ۰
  • ۰

 Multi-cloud و hybrid cloud:همه آنچه کسب و کار شما باید بداند

ورود به سایت

یافتن رویکرد رایانش ابری مناسب برای کسب و کار شما

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

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

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

بلافاصله ،  hybrid cloud و multi-cloud به طرز مشکوکی مشابه هستند و مرتباً به جای یکدیگر استفاده می شوند. در حالی که هر دو سرویس های ابری را از بیش از یک منبع ارائه می دهند ، این کار را به روش های منحصر به فرد انجام می دهند و به تنظیمات مختلف ابر اشاره می کنند. برای مطالعه عمیق تر این مبحث به ادامه مطلب بروید.

رایانش hybrid cloud چیست؟

یک عامل عمده وجود دارد که رایانشhybrid cloud را از multi-cloud منحصر به فرد می کند: رایانش hybrid cloud زیرساخت های ابر خصوصی را در کنار ارائه دهندگان رایانش ابری عمومی شامل می شود. برای اینکه محاسبات ابری ترکیبی در نظر گرفته شود ، به طور کلی شامل یک جزء خصوصی مانند مرکز داده در محل است که مستقیماً توسط مشاغل با استفاده از آن مدیریت و نگهداری می شود.

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

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

رایانش multi-cloud چیست؟

راه اندازی رایانش multi-cloud در ساده ترین شکل به این معنی است که یک شرکت از چندین ارائه دهنده ابر عمومی برای انجام وظایف یا حجم کاری خاص استفاده می کند. به عنوان مثال ، یک ارائه دهنده برای حجم کار تحلیلی و یکی برای وب سایت های عمومی. همانطور که رامان شارما ، نایب رئیس بازاریابی محصول و برنامه DigitalOcean می گوید: “دلایلی که برای انتخاب راه اندازی چند ابر ارائه می شود متفاوت است-مدیریت ریسک ، اجتناب از قفل شدن و وابستگی به یک ارائه دهنده ، رعایت الزامات نظارتی و غیره.”

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

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

انتخاب گزینه ابر مناسب برای استارتاپ یا مشاغل کوچک شما

مشاغل کوچک کاندیدای ایده آل برای اتخاذ استراتژی hybrid وmulti-cloud هستند. بسیاری از مشاغل کوچک امروزی بومی ابر هستند ، به این معنی که در ابر متولد شده اند و هرگز زیرساخت خود را حفظ نمی کنند بلکه در عوض یک استراتژی چند ابر را اتخاذ می کنند. همانطور که شارما توضیح می دهد ، “اکثر شرکت های کوچکتر تقریباً بنا به ضرورت از معماری چند ابر استفاده می کنند. آنها دو نیاز دارند: 1) آنها می خواهند بر ساخت برنامه های خود تمرکز کنند و چرخ را دوباره اختراع نکنند. 2) آنها ابزارها و خدماتی را می خواهند که از نظر بهره وری و ROI در مناطق مربوطه بهترین تولید را داشته باشند. ” اغلب ، کار با ارائه دهندگان خدمات ابری خارجی نتیجه جستجوی نتایج مطلوب آنها با بودجه ای مناسب برای کسب و کار رو به رشد آنها است.

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

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

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

hybrid cloudmulti-cloudخرید سرورخریدvpsرایانش ابریرایانش ابری ترکیبیسرور مجازیمحاسبات ابریهاست 

 

  • behnam gol mohamadi