شروع کار با SaltStack در اوبونتو 17.04
SaltStack یک برنامه مدیریت پیکربندی مبتنی بر پایتون است که برای اتوماسیون پرونده های پیکربندی ، استقرار و هر چیز دیگری بهینه سازی شده است.
روشهای زیادی برای خودکارسازی روند تنظیم و پیکربندی یک جعبه وجود دارد. به هر دلیلی ، اگر کل سیستم ما در این مرحله فقط از یک جعبه واحد تشکیل شده باشد ، راه اندازی یک زیرساخت کامل SCM (نرم افزار مدیریت پیکربندی نرم افزار) کارآیی کامل دارد. اسکریپت های پوسته یکی از گزینه ها هستند ، اما ما همچنین می توانیم از نسخه SCP-down از SCM استفاده کنیم که در چند ابزار موجود در آن موجود است. سرآشپز یکی از گزینه های محبوب است و "آشپز سولو" حالت پیکربندی مستقل آشپز است که در آن ما به یک گره اضافی احتیاج نداریم تا به عنوان "سرور سرآشپز" عمل کند. تمام آنچه نیاز است یک URL یا مسیری برای یک بسته تاربال است که شامل کتابهای آشپزی آشپز است. در مقایسه با اسکریپت های پوسته ، این نوع رویکرد از نظر کادر اعلامی تر و کارآمد تر است و همچنین مقدمه خوبی برای شروع کار با SCM ها یا IaC (زیرساخت ها به عنوان کد) است.
دستور العمل های داخل کتاب آشپزی آشپز دارای یک DSL یاقوت است که "منابع" را توصیف می کند تا در یک حالت خاص در یک گره قرار داشته باشد. بیایید با یک پیمایش همراه شوید تا با چند مفهوم آشپز که برای سرآشپز سولو نیز کاربرد دارد آشنا شویم. هدف ما راه اندازی گره اوبونتو است که با استفاده از Gunicorn و NGINX یک برنامه وب Python / Django را اجرا می کند.
توجه: ما لزوماً نیازی نیست که ChefDK روی "ایستگاه کاری Chef" (دستگاه ما) نصب شود ، اگرچه با استفاده از آن ، می توانیم از دستورات 'chef generate' برای شروع کار با ساختار دایرکتوری برای ایجاد کتابهای آشپزی ، دستور العمل ها و موارد دیگر استفاده کنیم. در این مقاله فرض خواهیم کرد که ChefDK در ایستگاه کاری ما نصب شده است. دستورات با استفاده از نسخه 4.7.26-1 ChefDK اجرا شدند.
(همه چیز از این نقطه به بعد ، مگر اینکه مشخص شده باشد ، روی دستگاه ما اجرا می شود ، که به آن "ایستگاه کاری آشپز" نیز گفته می شود).
کتابهای آشپزی در آشپز واحدهای قابل استفاده مجدد است که شامل همه موارد لازم برای پشتیبانی از سناریوی پیکربندی است. کتابهای آشپزی می توانند شامل چندین دستور العمل و دستور العمل های متشکل از الگوهای منبع باشند. default.rb
دستور العمل پیش فرض است که هنگام مراجعه به کتاب آشپزی در یک لیست اجرا اجرا می شود . دستور العمل های مختلف امکان جداسازی نگرانی ها را فراهم می آورد. با این حال ، برای این آموزش ، تمام اعلامیه های منابع را در یک پرونده اصلی دستور العمل ، که همان است ، اضافه default.rb
خواهیم کرد .
پوشه ای بنام "my-chef-project" ایجاد کنید و پوشه ای را درون آن ایجاد کنید که "cookbooks" نام دارد. از ./my-chef-project/cookbooks/
، اجرا کنید:
$ chef generate cookbook my-cookbook
ساختار دایرکتوری ما اکنون به صورت زیر خواهد بود:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
اولین قدم برای تنظیم گره ما مشخص کردن بسته های مورد نیاز برنامه ما است. گره ما به عنوان اوبونتو انتخاب شده است ، بنابراین می توانیم برای جمع آوری وابستگی به مدیر بسته APT تکیه کنیم. سپس بسته های تهیه شده توسط توزیع سیستم عامل تکه ای از کیک است:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
اینها تقریباً بسیار تبیین شده اند. خط اول مخزن apt را به روز می کند و خطوط زیر آن بسته ها را نصب می کند.
توجه: بسته های زیر "nginx" برای تهیه برخی از وابستگی های پایتون از طریق پیپ مورد نیاز است. اینها ممکن است براساس وابستگی های پروژه پایتون / django شما که در آن مشخص شده است ، متفاوت باشند
requirements.txt
. برای تعیین این بسته هایی که باید در کتاب آشپزی خود داشته باشید می توانید از یک روش آزمایشی و خطا استفاده کنید. برای انجام این کار ، یک دفترچه راهنماsudo pip install -r requirements.txt
(توجه داشته باشید: این سیستم بسته های گسترده را نصب می کند!) را بر روی یک دستگاه اوبونتو تازه فوراً نصب کنید تا ببینید که آیا این کار با موفقیت انجام شده است یا خیر. اگر اینگونه نباشد ، stderr باید نکات مربوط به بسته های موجود را به شما یاد دهد.
پس از اتمام بسته های مورد نیاز ، باید یک کاربر لینوکس غیر ممتاز ایجاد کنیم که دارای کد منبع برنامه باشد.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
توجه داشته باشید که رمز عبور یک فرمت هش سایه است که در لینوکس استفاده می شود. می توان با استفاده از OpenSSL مشتق شد:
$ openssl passwd -1 -salt alilbitof mypassword
اکنون بیایید کد منبع برنامه Django را به کتاب آشپزی خود اضافه کنیم. محل کد منبع در داخل ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
ایجاد ./my-chef-project/cookbooks/my-cookbook/files/default
دایرکتوری اگر آن وجود ندارد.
دستورالعمل کپی کردن این پرونده ها در یک مکان از راه دور در گره ما با استفاده از منبع remote_directory شرح داده شده است:
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
برای نصب بسته های python در requirements.txt
، ما می توانیم با استفاده از اجرای منابع برای اجرای یک فرمان های دلخواه. در این حالت ، باید دستور نصب pip را روی آن اجرا کنیم:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
توجه: در نظر داشته باشید که این کاربر به عنوان کاربر اصلی اجرا می شود و کتابخانه های پایتون به صورت گسترده در سیستم نصب می شوند. اگر گره ما به طور انحصاری این یک برنامه پایتون را اجرا کند ، مشخص شده است ، بنابراین مشکلی نیست. با وجود این ، گزینه ای بهتر برای تمیز نگه داشتن چیزها پیدا کردن و استفاده از کتاب آشپزی جامعه ای که مدیریت نصب پایتون یا "virtualenvs" را مدیریت می کند. (یا حداقل ، یک سری بلوک های اجرای را برای تکرار این مطلب بنویسید ). استفاده از virtualenvs در پایتون تضمین می کند که هیچ گونه ابزار سیستم مبتنی بر پایتون یا سایر پروژه های پایتون تحت تأثیر قرار نمی گیرد.
اکنون زمان آن رسیده است که Gunicorn WSGI HTTP Server را با NGINX به عنوان پراکسی معکوس خود آماده کنیم. Nginx همچنین برای مدیریت تمام دارایی های استاتیک از جنگو استفاده می شود.
برای بستن Gunicorn به عنوان سرویس Ubuntu ، می توان از Systemd استفاده کرد. systemd_unit منابع در آشپز پس از نسخه 12.11 گنجانده شده است.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
حال باید یک پیکربندی استاندارد پروکسی NGINX را به این سرور Gunicorn ارائه دهیم ، همانطور که در زیر مشاهده می شود. این قطعه می تواند وارد شود ./my-cookbook/templates/nginx.conf.erb
. اگر وجود ندارد ، فهرست راهنماها را ایجاد کنید.
توجه: الگوهای سرآشپز از پرونده های یاقوت داخلی تعبیه شده پشتیبانی می کنند که می توانند شامل متغیرها ، عبارات یاقوت های روبی باشند. اگرچه این پرونده دارای پسوند 'erb' است ، اما ما از هیچ یک از عبارات یا بیان یاقوت استفاده نکردیم. همچنین ، به خاطر سادگی ، ما فقط پیکربندی غیر HTTPS nginx را در اینجا داریم (یادآوری ملایم ؛ لطفا این کار را در تولید انجام ندهید!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
توجه: گزینه جایگزین و پیکربندی بهتری نیز وجود دارد ، به عنوان مثال ، سرور Gunicorn به جای اتصال loopback TCP به یک سوکت دامنه یونیکس وصل می شود. ارزش آن را به دلایل عملکرد دارد.
برای کپی کردن این پیکربندی در پوشه دارای سایتهای فعال در گره ، از منبع قالب از Chef استفاده کنید.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
فعال سازی پیکربندی ها در nginx به طور معمول با ایجاد یک Symlink با اشاره به پیکربندی sites-available
موجود در sites-enabled
پوشه nginx انجام می شود . Symlinks را می توان در کتابهای آشپزی سرآشپز با منبع لینک به شرح زیر نشان داد:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
و حذف Symlink پیکربندی پیش فرض:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
و سرانجام ، برای خاموش کردن سرویس nginx:
service 'nginx' do
action :enable
action :start
end
لیست های اجرا شده در آشپز لیستی از نقش ها یا دستور العمل های موجود در کتاب آشپزی است که به ترتیب در گره اجرا می شود. ما یک کتاب آشپزی "کتاب آشپزی من" و دستور "پیش فرض" در داخل آن داریم که باید آن را در جعبه اوبونتو اجرا کنیم ، بنابراین runlist.json در فهرست پروژه ما ( ./my-chef-project/runlist.json
) باید به این شکل باشد:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
کتاب آشپزی ما برای تکنواز سرآشپز آماده ارائه خدمت است. زمان آن رسیده که یک دستگاه اوبونتو 18.04 تهیه کرده و ChefDK را روی آن نصب کنید:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
با بازگشت به ایستگاه کاری Chef ، تمام کاری که ما باید انجام دهیم اینست که پوشه cookbooks را درون یک تاربال قرار دهید ، آن تاربال را به همراه runlist.json
گره از راه دور که در بالا تهیه کردیم انتقال دهید و دستور chef-solo را اجرا کنید:
(دستور زیر قرار است در داخل گره یا "مشتری سرآشپز" اجرا شود و نه ایستگاه کاری Chef).
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
یا اینجا یک لاینر (برای اجرا از ./my-chef-project/
CWD در ایستگاه کاری سرآشپز) وجود دارد:
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
خودشه! تماشای خروجی استاندارد را با فعالیت Chef در تلاش کنید گره خود را به آنچه که در کتابهای آشپزی مشخص کرده اید ، همگرا کنید. سرآشپز - تمام سنگهای مورد نیاز برای همه کتابهای آشپزی را نصب خواهد کرد. اگر فرمان chef-solo موفقیت آمیز باشد ، ما یک برنامه کاربردی Django داریم که در پشت جعبه Ubuntu در پشت nginx اجرا می شود. برای آزمایش آن به دامنه / IP بروید.
توجه: به یاد داشته باشید که در django شاید لازم باشد این دامنه / ip را در
ALLOWED_HOSTS
لیست تنظیم کنیدsettings.py
.
هر زمان که تغییر در محتوای دایرکتوری پروژه خود (دستور العمل ها ، قالب ها یا کد منبع برنامه و غیره) ایجاد کنیم ، به سادگی تک لاینر را از فهرست پروژه اجرا کنید.
نکته: اگر کتاب آشپزی دارای نسخه کنترل شده با git است (همانطور که باید) ، یکی از توصیه های خوب تنظیم قلاب git برای اجرای این تک لاینر است.
اگر به آخرین فرمان آشپز-انفرادی دقت می کنید ، توجه کنید که --recipe-url
منظور از گرفتن URL است. این بدان معنی است که شما می توانید یک گردش کار داشته باشید که یک CI تاربال آشپز سولوی آشپز شما را بسازد ، آن را در جایی آپلود کرده و گره خود را پیکربندی کند تا به طور دوره ای از آن بیرون بیاید.
نکته: برای کشیدن تاربال تغییر یافته به صورت دورانی به عنوان کاردستی از حلقه استفاده کنید.
curl -z $file
بهIf-Modified-Since
هدرها احترام خواهد گذاشت و فقط در صورت بارگیری پرونده از راه دور از زمان محلی در محلی موجود ، توپ تار را بارگیری می کند$file
.
SaltStack یک برنامه مدیریت پیکربندی مبتنی بر پایتون است که برای اتوماسیون پرونده های پیکربندی ، استقرار و هر چیز دیگری بهینه سازی شده است.
جنکینز یک ابزار محبوب منبع باز CI (ادغام مداوم) است که به طور گسترده ای برای توسعه پروژه ، استقرار و اتوماسیون پروژه مورد استفاده قرار می گیرد. این مقاله
با استفاده از یک سیستم متفاوت؟ مقدمه ادغام مداوم یک شیوه توسعه نرم افزار DevOps است که توسعه دهندگان را قادر می سازد به طور مکرر ادغام شوند
مقدمه Drone یک سکوی آزمایش خودکار و تحویل مداوم است که در زیرساخت های شخصی شما اجرا می شود. هواپیماهای بدون سرنشین از هر زبانی ، خدمات o پشتیبانی می کند
با استفاده از یک سیستم متفاوت؟ Foreman ابزاری رایگان و منبع باز است که به شما در پیکربندی و مدیریت سرورهای فیزیکی و مجازی کمک می کند. فورما
Balancers Load Balancer چیست در مقابل برنامه شما قرار می گیرد و ترافیک ورودی را در چندین نمونه برنامه شما توزیع می کند. فو
با استفاده از یک سیستم متفاوت؟ Ansible یک ابزار منبع باز برای اتوماسیون وظایف است. این پیکربندی سرورهای لینوکس و ویندوز شما را مدیریت می کند. اون کار میکنه
مقدمه Strider CD یک بستر استقرار مداوم با منبع باز است. برنامه در Node.js نوشته شده است و از MongoDB به عنوان پس زمینه ذخیره سازی استفاده می کند. گام های بلند برداشتن
SaltStack یا Salt یک راه حل مدیریت پیکربندی منبع باز است که می تواند برای اجرای اجرای راه دور ، مدیریت پیکربندی ، کد
در حالی که SaltStack ابزاری عالی برای اجرای همزمان در بسیاری از سرورهاست ، از پیش تنظیمات تنظیم شده تعریف شده برای هر میزبان نیز که در
با استفاده از یک سیستم متفاوت؟ Ansible یک ابزار منبع باز برای اتوماسیون وظایف است. این پیکربندی سرورهای لینوکس و ویندوز شما را مدیریت می کند. اون کار میکنه
Packer چیست؟ Packer ابزاری برای تصویربرداری سرور است که توسط HashiCorp ساخته شده است. تصویربرداری سرور؛ یا در عوض ، زیرساخت های تغییر ناپذیر. یک جایگزین محبوب است
مقدمه Chocolatey مدیریت بسته بندی را فراهم می کند که مدیریت نرم افزار و وابستگی بر روی لینوکس را به ویندوز آسان می کند. می توانید سریع و آسان کنید
با استفاده از یک سیستم متفاوت؟ Foreman ابزاری رایگان و منبع باز است که به شما در پیکربندی و مدیریت سرورهای فیزیکی و مجازی کمک می کند. فورما
با استفاده از یک سیستم متفاوت؟ مقدمه ادغام مداوم یک شیوه توسعه نرم افزار DevOps است که توسعه دهندگان را قادر می سازد به طور مکرر ادغام شوند
با استفاده از یک سیستم متفاوت؟ GoCD یک سیستم تحویل مداوم و اتوماسیون مداوم با منبع باز است. این امکان را به شما می دهد تا با استفاده از موازی آن ، جریان های کاری پیچیده را مدل کنید
LiteCart یک بستر سبد خرید آزاد و منبع باز است که به زبان های PHP ، jQuery و HTML 5 نوشته شده است. این نرم افزار ساده ، سبک و با کاربرد آسان است.
با استفاده از یک سیستم متفاوت؟ Anchor CMS یک سیستم مدیریت محتوا (CMS) بسیار ساده و بسیار سبک ، بسیار آزاد و آزاد است.
NFS یک سیستم فایل مبتنی بر شبکه است که به رایانه ها اجازه می دهد تا از طریق شبکه رایانه ای به فایلها دسترسی پیدا کنند. این راهنما توضیح می دهد که چگونه می توانید پوشه ها را روی NF قرار دهید
هنگام راه اندازی سرور جدید لینوکس ، به روزرسانی سیستم های هسته و سایر بسته ها تا آخرین نسخه پایدار یک روش توصیه شده است. در این مقاله
با استفاده از یک سیستم متفاوت؟ Matomo (سابقا پیویک) یک بستر تحلیلی منبع باز است ، یک جایگزین باز برای Google Analytics. منبع Matomo میزبان o
TeamTalk یک سیستم کنفرانس است که به کاربران امکان می دهد مکالمات صوتی / تصویری با کیفیت بالا ، چت متنی ، انتقال فایل ها و صفحه های به اشتراک بگذارند. من
Vultr یک ویژگی را فراهم می کند که به شما امکان می دهد با ایجاد یک نمونه جدید ، کلیدهای SSH را از قبل نصب کنید. این اجازه می دهد تا به کاربر root دسترسی داشته باشید ، با این حال ، th
با استفاده از یک سیستم متفاوت؟ NodeBB یک نرم افزار انجمن مبتنی بر Node.js است. از سوکت های وب برای تعامل فوری و اعلامیه های زمان واقعی استفاده می کند. NodeB
ZNC یک پیشرانه پیشرفته شبکه IRC است که تمام وقت بهم متصل می شود تا مشتری IRC بتواند بدون از دست دادن جلسه گپ قطع یا وصل شود.
رنجر یک مدیر فایل مبتنی بر خط فرمان است که دارای کلیدهای اتصال VI است. این برنامه یک رابط لعنتی مینیمالیستی و زیبا با نمای سلسله مراتب فهرست ارائه می دهد