Как да инсталирате Jenkins на CentOS 7
Jenkins е популярен инструмент за CI (непрекъсната интеграция) с отворен код, който се използва широко за разработване, внедряване и автоматизация на проекти. Тази статия ще
Има много начини за автоматизиране на процеса на настройка и конфигуриране на кутия. По някаква причина, ако цялата ни система в този момент се състои само от една кутия, настройването на пълна инфраструктура на SCM (Управление на софтуерната конфигурация) е излишно. Shell скриптовете са една от опциите, но бихме могли да използваме и съкратена версия на SCM, която е налична в някои от инструментите там. Chef е една от популярните опции, а "chef-solo" е самостоятелният конфигурационен режим на Chef, където не се нуждаем от допълнителен възел, за да действа като "chef-server". Всичко, от което се нуждае, е URL или път към tarball пакет, който съдържа готварски книги за готвачи. В сравнение със скриптовете на обвивката, този тип подход е по-декларативен и ефикасен от кутията и също така е добро въведение, за да започнете със SCM или IaC (Инфраструктура като код) процеси.
„Рецептите“ вътре в „кулинарна книга“ на главния готвач имат DSL, базиран на рубин, който описва „ресурсите“ да бъдат в определено състояние на възел. Нека продължим с инструкции, за да се запознаем с няколко концепции за готвач, които са приложими и за chef-solo. Нашата цел е да настроим възел на Ubuntu, работещ с уеб приложение на Python/Django, използвайки Gunicorn и NGINX.
Note: We do not necessarily require ChefDK to be installed on our "Chef workstation" (our machine), although with it, we can use 'chef generate' commands to start-off with a directory structure for creating cookbooks, recipes and more. In this article, we will assume ChefDK is installed on our workstation. Commands were run using the version 4.7.26-1 of ChefDK.
(Всичко от този момент нататък, освен ако не е посочено друго, трябва да се изпълнява на нашата машина, наричана още „Работна станция на главния готвач“)
Готварските книги в chef са единици за многократна употреба, които съдържат всичко необходимо за поддържане на сцен��рий за конфигурация. Готварските книги могат да съдържат множество „рецепти“, а „рецептите“ се състоят предимно от модели на ресурси. 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
Първата стъпка към настройката на нашия възел е да идентифицираме какви пакети се изискват от нашето приложение. Нашият възел е избран да бъде Ubuntu, така че можем да разчитаме на мениджъра на пакети 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, а следващите редове ще инсталират тези пакети.
Note: The packages following 'nginx' are needed for compiling some of the python dependencies through pip. These may differ based on your python/django project dependencies specified in
requirements.txt
. You can use a trial and error method to determine these packages that you need to include in your cookbook. To do that, perform a manualsudo pip install -r requirements.txt
(Note: This installs packages system wide!) on a freshly instantiated ubuntu machine to see if it runs successfully. If not, the stderr should give you hints on what packages are missing.
След като приключим с добавянето на необходимите пакети, трябва да създадем непривилегирован потребител на Linux, който ще притежава изходния код на приложението.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Имайте предвид, че паролата е сенчест хеш формат, използван в Linux. Може да се извлече с помощта на 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
, можем да използваме ресурса execute, за да изпълним произволна команда. В този случай трябва да изпълним командата pip install над него:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Note: Bear in mind that this is going to execute as the root user and the python libraries will be installed system-wide. If our node is designated to exclusively run this one single python app, then it isn't much of a problem. Despite that, a better option to keep things clean and sane is to find and use a community cookbook that manages python installations or 'virtualenvs'. (or at the very least, write a series of execute blocks to replicate this). Using virtualenvs in python ensures that any python based system tools or other python projects will not be affected
Сега е време да подготвим Gunicorn WSGI HTTP сървър с NGINX като наш обратен прокси. Nginx също се използва за обработка на всички статични активи от Django.
За да използвате Gunicorn като услуга на Ubuntu, може да се използва Systemd. В systemd_unit ресурс е включена в Chef от версия 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
. Създайте директорията с шаблони, ако тя не съществува.
Note: Chef's templates support embedded ruby files that can contain variables, ruby expressions and statements. Although this file has the 'erb' extension, we did not use any of the ruby statements or expressions. Also, for the sake of simplicity, we only have a non HTTPS nginx config here (gentle reminder; please do not do this in production!)
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/;
}
}
Note: There is also an alternative and a better config, where, for instance the Gunicorn server is bound to a unix domain socket instead of a TCP loopback connection. It's worth exploring that for performance reasons.
За да копирате тази конфигурация в папка с активирани сайтове на възела, използвайте ресурса на шаблона от Chef.
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Активирането на конфигурации на nginx обикновено се извършва чрез създаване на символна връзка, сочеща към конфигурацията в папката sites-available
на nginx sites-enabled
. Символните връзки могат да бъдат декларирани в готварските книги за готвачи с ресурса за връзка, както е показано по-долу:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
и за да изтриете символната връзка за конфигурация по подразбиране:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
И накрая, за да стартирате услугата nginx:
service 'nginx' do
action :enable
action :start
end
Списъците за изпълнение в chef са подреден списък с роли или рецепти в готварска книга, които ще се изпълняват последователно на възела. Имаме една готварска книга "my-cookbook" и рецептата "по подразбиране" вътре в нея, която трябва да изпълним в кутията на Ubuntu, така че runlist.json в нашата директория на проекта ( ./my-chef-project/runlist.json
) трябва да изглежда така:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Нашата готварска книга за соло готвач е готова за сервиране. Време е да осигурите Ubuntu 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 , всичко, което трябва да направим, е да поставим папката с готварски книги в tarball, да прехвърлим този tarball заедно с 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 на Chef Workstation):
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 ще инсталира всички скъпоценни камъни, необходими за всички готварски книги. Ако командата chef-solo е успешна, ще имаме работещо Django приложение, работещо зад nginx в кутията на Ubuntu. Придвижете се до домейна/IP, за да го тествате.
Note: Remember that in django you may need to set this domain/ip in the
ALLOWED_HOSTS
list insettings.py
.
Всеки път, когато правим промяна в съдържанието на директорията на нашия проект (рецепти, шаблони или изходния код на приложението и т.н.), просто стартирайте горния едноред от директорията на проекта.
Tip: If the cookbook is version controlled with git (as it should), one good recommendation is to set git hooks to run this one-liner.
Ако погледнете отблизо последната команда chef-solo, забележете, че --recipe-url
е предназначена да вземе URL. Това означава, че можете да имате работен процес, при който CI ще изгради вашия chef-solo tarball, ще го качи някъде и ще конфигурира вашия възел да изтегля от него периодично.
Tip: Use curl to pull the changed tarball periodically as a cronjob.
curl -z $file
will honorIf-Modified-Since
headers and will only download the tar ball if the remote file has been changed since the timestamp on the existing local$file
.
Jenkins е популярен инструмент за CI (непрекъсната интеграция) с отворен код, който се използва широко за разработване, внедряване и автоматизация на проекти. Тази статия ще
Използване на различна система? Въведение Непрекъснатата интеграция е практика за разработка на софтуер DevOps, която позволява на разработчиците често да обединяват
Използване на различна система? Ansible е инструмент с отворен код за автоматизиране на задачи. Той управлява конфигурацията на вашите Linux и Windows сървъри. Да работи
Използване на различна система? GoCD е система за непрекъсната доставка и автоматизация с отворен код. Той ви позволява да моделирате сложни работни потоци, като използвате неговия паралел
Докато SaltStack е чудесен инструмент за изпълнение на операции на много сървъри едновременно, той също така поддържа предварително зададени конфигурационни настройки за всеки хост, съхранявани в
Използване на различна система? Ansible е инструмент с отворен код за автоматизиране на задачи. Той управлява конфигурацията на вашите Linux и Windows сървъри. Да работи
Въведение Drone е автоматизирана, непрекъсната платформа за тестване и доставка, която работи на вашата собствена инфраструктура. Дрон поддържа всеки език, услуга o
Какво е Load Balancer Балансьорите на натоварване седят пред вашето приложение и разпределят входящия трафик между множество инстанции на вашето приложение. Fo
Използване на различна система? Foreman е безплатен инструмент с отворен код, който ви помага с конфигурирането и управлението на физически и виртуални сървъри. Forema
SaltStack, или Salt, е популярно решение за управление на конфигурация с отворен код, което може да се използва за внедряване на отдалечено изпълнение, управление на конфигурация, cod
Въведение Strider CD е платформа за непрекъснато внедряване с отворен код. Приложението е написано на Node.js и използва MongoDB като бекенд за съхранение. Разкрачвайте се
Въведение Chocolatey предоставя управление на пакети, което прави администрирането на софтуер и зависимостите лесно в Linux, на Windows. Можете бързо и лесно
Какво е Packer? Packer е инструмент за създаване на сървърни изображения, разработен от HashiCorp. Изобразяване на сървър; или алтернативно, неизменна инфраструктура; е популярна алтернатива
Използване на различна система? Въведение Непрекъснатата интеграция е практика за разработка на софтуер DevOps, която позволява на разработчиците често да обединяват
Има много начини за автоматизиране на процеса на настройка и конфигуриране на кутия. По каквато и да е причина, ако цялата ни система в този момент се състои от справедливи
Използване на различна система? Foreman е безплатен инструмент с отворен код, който ви помага с конфигурирането и управлението на физически и виртуални сървъри. Forema
SaltStack е базирана на Python програма за управление на конфигурацията, която е оптимизирана за автоматизиране на конфигурационни файлове, внедряване и всичко друго.
Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.
Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.
Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.
Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.
Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…
Тъй като науката се развива с бързи темпове, поемайки много от нашите усилия, рискът да се подложим на необяснима сингулярност също нараства. Прочетете какво може да означава сингулярността за нас.
Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.
Прочетете блога, за да разберете различни слоеве в архитектурата на големи данни и техните функционалности по най-простия начин.
В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.
Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече