Под капотом "Градуса":
инфраструктура веб-студии
Проблемы?
Проблема №1
Автоматизация типовых задач
Автоматизация должна быть:
- Простая
- С использованием уже знакомых средств
- Быстро разворачиваемая
Babushka
1. Быстрая установка
- Берём "чистую" машину (VPS)
- sh -c "`curl https://babushka.me/up`"
- Готово
2. С использованием уже знакомых средств
- Shell (sh, bash)
- Ruby
dep 'name', :argument do
requires 'other deps'.with('args'), 'whatever they might be'
met? {
# is this dependency already met?
}
meet {
# this code gets run if it isn't.
}
end
Dep - сокращение от "dependency"
dep 'postgres.apt_repository' do
url "http://apt.postgresql.org/pub/repos/apt/"
distribution "wheezy-pgdg"
components "main"
after do
sudo "wget -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | apt-key add -"
sudo 'apt-get update'
end
end
dep 'postgres.managed', :version do
version.default('9.3')
requires 'common:set.locale'.with("en_US")
requires_when_unmet 'postgres.apt_repository'
met? { shell? "psql --version" }
meet {
shell("apt-get -y install -t wheezy-pgdg postgresql-#{version} libpq-dev")
}
end
# nginx/site.erb
upstream <%= app_name %>_server{
<% if app_type == 'rails' %>
server unix:/opt/<%= app_name %>/current/tmp/sockets/<%= app_name %>.sock fail_timeout=0;
<% else %>
server unix:/opt/<%= app_name %>/tmp/sockets/<%= app_name %>.sock fail_timeout=0;
<% end %>
}
server {
listen <%= port %>;
# server_name <%= app_name %>.ru www.<%= app_name %>.ru
...
}
dep 'unicorn-server available', :app_name, :port, :app_type do
requires 'configured.nginx'
app_name.ask("What is the name of application located at /opt")
port.ask("What port do you want to choose for your application")
met? {
Babushka::Renderable.new("/opt/nginx/sites-available/#{app_name}")
.from?(dependency.load_path.parent / "nginx/site.erb")
}
meet {
render_erb "nginx/site.erb", :to => "/opt/nginx/sites-available/#{app_name}", :sudo => true
}
end
3. Простая
babushka webgradus:'unicorn-server available'
Проблема №2
Бэкапирование
(не ручное)
Backup - Ruby gem
Backup - Ruby gem
Backup Model
Backup::Model.new(:my_backup, 'Description for my_backup') do
archive :my_archive do |archive|
archive.add "/path/to/a/file.rb"
archive.add "/path/to/a/folder/"
end
database PostgreSQL do |db|
db.name = 'someprojectdb'
end
store_with S3 do |s3|
s3.path = "/someproject"
end
# Gzip [Compressor]
compress_with Gzip
notify_by Mail do |mail|
mail.on_success = true
mail.on_failure = true
mail.to = "receiver@email.com"
# ...
end
end
1. Описываем модель для задачи бэкапирования
Backup Model
$ backup perform --trigger my_backup
2. Запускаем
Backup - Databases
- MongoDB
- MySQL
- PostgreSQL
- Redis
- Riak
- OpenLDAP
- SQLite
Backup - Compressors
- Gzip
- Bzip2
- Custom
Backup - Encryptors
- GPG
- OpenSSL
Backup - Storages
- CloudFiles
- Dropbox
- Ninefold
- Amazon S3
- FTP
- SCP
- SFTP
- RSync
- Local
Backup - Notifiers
- Campfire
- Hipchat
- HttpPost
- Nagios
- Prowl
- Pushover
- Zabbix
Мы пошли дальше!
+
Результат
...
every 1.week, at: '0:00 am' do
command "rvm use 2.0.0 do backup perform -t kava_database"
end
every '0 0 2 * *' do
command "rvm use 2.0.0 do backup perform -t kava_archives"
end
Проблема №3
Мониторинг
Eye
Eye
- gem install eye
- gem install eye-http
- ~/eye/server.eye
require 'eye-http'
Eye.config do
http :enable => true, :host => "0.0.0.0", :port => 10001
end
Eye.application 'gradus-five' do
process :nginx do
pid_file '/opt/nginx/logs/nginx.pid'
start_command "service nginx start"
restart_command "service nginx restart"
stop_command "service nginx stop"
restart_grace 30.seconds
end
end
Работа с Eye
- $ /etc/init.d/eye start
- $ eye l(oad) eye/server.eye
- $ eye i(nfo)
- start, stop, restart, delete, monitor, unmonitor
test
samples
sample1 ....................... up (21:52, 0%, 13Mb, <4107>)
sample2 ....................... up (21:52, 0%, 12Mb, <4142>)
nginx ........................... up (21:52, 3%, 26Mb, <4112>)
thin ............................ up (21:53, 2%, 54Mb, <4228>)
Захотелось большего
Spirtometr
Мы пошли ещё дальше!
+
-
Совершенству нет предела
-
Лень - двигатель
прогресса
Спасибо за внимание.
Вопросы?
автоматизации
Выводы
webgradus.ru/partner.pdf
Партнёрская программа
"Градус"
Под капотом "Градуса": инфраструктура веб-студии
By Igor Petrov
Под капотом "Градуса": инфраструктура веб-студии
- 481