/lib/generators/project/config/deploy.rb
Ruby | 377 lines | 278 code | 70 blank | 29 comment | 2 complexity | d967f6272d2544ab9d2e8047c10bb294 MD5 | raw file
- # config valid only for current version of Capistrano
- lock '3.8.1'
- # загрузка конфига в полноценный символьный хэш
- require 'active_support/core_ext/hash'
- CONFIG = YAML.load_file(File.expand_path('../capistrano.yml', __FILE__)).with_indifferent_access
- set :application, CONFIG[:conf][:vars][:cap_application]
- set :repo_url, "git@bitbucket.org:slowpokesfrommoscow/#{fetch :application}.git"
- # set :repo_url, 'git@example.com:me/my_repo.git'
- # Default branch is :master
- # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
- # Default deploy_to directory is /var/www/my_app_name
- set :deploy_to, "/home/rails/#{fetch :application}"
- # Default value for :format is :airbrussh.
- # set :format, :airbrussh
- # You can configure the Airbrussh format using :format_options.
- # These are the defaults.
- set :format_options, command_output: true, log_file: 'log/capistrano.log', color: :auto, truncate: :auto
- # Default value for :pty is false
- # set :pty, true
- # set :default_shell, '/bin/bash -l'
- # Default value for :linkedlinked_files is []
- # 'config/sitemap.rb',
- set :linked_files, fetch(:linked_files, []).push('config/secrets.yml.enc', 'config/secrets.yml.key', 'config/database.yml', 'config/secrets.yml', 'config/puma.rb')
- set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system', 'public', 'files', 'documents')
- # Default value for default_env is {}
- # set :default_env, { path: "/opt/ruby/bin:$PATH" }
- # Default value for keep_releases is 5
- set :keep_releases, 2
- # Puma:
- # set :puma_conf, "#{shared_path}/config/puma.rb"
- before 'rvm:hook', 'prepare:ssh'
- namespace :install do
- desc 'подготовительные мероприятия'
- task :prepare do
- on roles(:all) do
- CONFIG[:soft][:prepare].each do |command|
- execute command
- end
- end
- end
- desc 'apt'
- task :apt do
- on roles(:all) do
- CONFIG[:soft][:apt].each do |software|
- execute "apt-get -y install #{software}"
- end
- end
- end
- desc 'команды'
- task :commands do
- on roles(:all) do
- CONFIG[:soft][:commands].each do |command|
- execute command
- end
- end
- end
- desc 'гемы'
- task :gems do
- on roles(:all) do
- CONFIG[:soft][:gems].each do |gem|
- execute "/usr/local/rvm/bin/rvm all do gem install --no-rdoc --no-ri #{gem}"
- end
- end
- end
- end
- namespace :conf do
- desc 'перемещение кофн файлов на сервак'
- task :copy do
- on roles(:all) do
- # конфиги
- p 'перемещение кофн файлов на сервак'
- upload! 'config/deploy/puma.rb', "#{shared_path}/config/puma.rb"
- upload! 'config/deploy/database.yml', "#{shared_path}/config/database.yml"
- upload! 'config/secrets.yml', "#{shared_path}/config/secrets.yml"
- upload! 'config/deploy/secrets.yml.key', "#{shared_path}/config/secrets.yml.key"
- upload! 'config/deploy/secrets.yml.enc', "#{shared_path}/config/secrets.yml.enc"
- upload! 'config/deploy/application.secrets.yml', "#{shared_path}/config/application.secrets.yml"
- upload! 'config/deploy/foreman.sh', "#{shared_path}/foreman.sh"
- # upload! 'config/deploy/postfix.cf', "/etc/postfix/main.cf"
- upload! 'config/sitemap.rb', "#{shared_path}/config/sitemap.rb"
- # конфиги NGINX
- upload! 'config/deploy/nginx.conf', "/etc/nginx/nginx.conf"
- # дефолтный конфиг убирается
- execute :rm, "-f /etc/nginx/sites-enabled/default"
- if CONFIG[:conf][:with_ssl]
- upload! 'config/deploy/nginx_site_ssl.conf', "/etc/nginx/sites-enabled/#{fetch :application}.conf"
- upload! "config/deploy/#{fetch :application}.crt", "/etc/ssl/#{fetch :application}.crt"
- upload! "config/deploy/#{fetch :application}.key", "/etc/ssl/#{fetch :application}.key"
- else
- upload! 'config/deploy/nginx_site.conf', "/etc/nginx/sites-enabled/#{fetch :application}.conf"
- end
- end
- end
- desc 'добавление SSL к уже работающему проекту'
- task :ssl_update do
- execute :rake, 'cap:conf_update'
- on roles(:all) do
- upload! 'config/deploy/nginx_site_ssl.conf', "/etc/nginx/sites-enabled/#{fetch :application}.conf"
- upload! "config/deploy/#{fetch :application}.crt", "/etc/ssl/#{fetch :application}.crt"
- upload! "config/deploy/#{fetch :application}.key", "/etc/ssl/#{fetch :application}.key"
- end
- invoke 'conf:reload'
- end
- desc 'перезапуск нужных сервисов и чек конфига'
- task :reload do
- on roles(:all) do
- execute :systemctl, :restart, :nginx
- execute :systemctl, :restart, :postfix
- end
- end
- desc 'тесты конфигов, тестовое письмо'
- task :test do
- on roles(:all) do
- execute :nginx, '-t'
- # execute "echo 'Привет! Как дела ?' | mail -s 'Тест от #{CONFIG[:conf][:vars][:cap_domain]}' shadows.of.unevenness@gmail.com"
- end
- end
- end
- namespace :sitemap do
- desc 'unpack xml'
- task :unpack_xml do
- on roles(:all) do
- within release_path do
- execute "gunzip -c #{shared_path}/public/sitemap.xml.gz > #{shared_path}/public/sitemap.xml"
- end
- end
- end
- desc 'upload xml'
- task :upload_xml do
- on roles(:all) do
- upload! 'public/sitemap.xml', "#{shared_path}/public"
- end
- end
- desc 'заливка sitemap.rb'
- task :upload_conf do
- on roles(:all) do
- upload! 'config/sitemap.rb', "#{shared_path}/config"
- end
- end
- desc 'скачивание файла sitemap.xml почитать'
- task :download_xml do
- on roles(:all) do
- download! "#{shared_path}/public/sitemap.xml", '/Users/nikolajmartynov/Documents/Разработка/Rails/science/public/sitemap.xml'
- end
- end
- before 'sitemap:create', 'sitemap:upload_conf'
- before 'sitemap:refresh', 'sitemap:upload_conf'
- after 'sitemap:create', 'sitemap:unpack_xml'
- after 'sitemap:create', 'sitemap:download_xml'
- after 'sitemap:refresh', 'sitemap:unpack_xml'
- end
- namespace :robots_etc do
- desc 'заливка robots.txt и всяких 404.html'
- task :install do
- on roles(:all) do
- upload! 'public/robots.txt', "#{shared_path}/public"
- upload! 'public/401.html', "#{shared_path}/public"
- upload! 'public/422.html', "#{shared_path}/public"
- upload! 'public/404.html', "#{shared_path}/public"
- upload! 'public/500.html', "#{shared_path}/public"
- upload! 'public/map', "#{shared_path}/public", recursive: true
- upload! 'public/favicon.ico', "#{shared_path}/public"
- end
- end
- end
- namespace :prepare do
- desc 'проверка там ли ключик ?'
- task :ssh do
- on roles(:all) do
- begin
- execute "ssh -o PasswordAuthentication=no root@#{CONFIG[:conf][:vars][:cap_server]}"
- rescue
- p 'ТВОЙ КЛЮЧ ЕЩЁ НЕ НА СЕРВАКЕ, ВВЕДИ РУТОВЫЙ ПАРОЛЬ!'
- # копирование ключа на сервак
- `ssh-copy-id root@#{CONFIG[:conf][:vars][:cap_server]}`
- end
- # плавный запуск ssh-agent'а для комфортного деплоя, и чтобы не заёбывал каждый раз, предусмотрена проверка .)
- if /no identities/ =~ `ssh-add -l`
- `eval 'ssh-agent'`
- `ssh-add`
- end
- end
- end
- end
- namespace :log do
- desc 'скачивание логов'
- task :dwnld do
- on roles(:all) do
- download! "#{shared_path}/log/production.log", "/Users/nikolajmartynov/Documents/Разработка/Rails/#{CONFIG[:conf][:vars][:cap_application]}/log/production.log"
- end
- end
- end
- namespace :feed do
- desc 'заливка тестового xml'
- task :upload do
- on roles(:all) do
- upload! 'public/feed.xml', "#{shared_path}/public"
- end
- end
- end
- namespace :db do
- desc 'db fuck!'
- task :fuck do
- on roles(:all) do
- within release_path do
- with rails_env: fetch(:rails_env) do
- execute :rake, 'db:fuck'
- end
- end
- end
- end
- end
- namespace :database do
- task :create do
- on roles(:all) do
- within release_path do
- with rails_env: fetch(:rails_env) do
- execute :rake, 'db:create'
- end
- end
- end
- end
- end
- namespace :dump do
- desc 'загрузить дамп'
- task :upload do
- on roles(:all) do
- upload! 'dump.sql', "#{release_path}"
- end
- end
- end
- namespace :deploy do
- task :seed do
- on roles(:all) do
- within release_path do
- with rails_env: fetch(:rails_env) do
- execute :rake, 'db:seed'
- end
- end
- end
- end
- task :mk_dirs do
- on roles(:all) do
- execute "mkdir -p #{shared_path} #{shared_path}/config #{shared_path}/pids #{shared_path}/sockets #{shared_path}/log"
- end
- end
- task :setup do
- on roles(:all) do
- # invoke 'deploy:mk_dirs'
- end
- end
- task :prepare do
- invoke 'deploy:mk_dirs'
- execute :rake, 'cap:conf_update'
- invoke 'conf:copy'
- invoke 'conf:reload'
- end
- before 'deploy:assets:precompile', 'database:create'
- after 'deploy:setup', 'install:prepare'
- after 'deploy:setup', 'install:apt'
- after 'deploy:setup', 'install:commands'
- after 'deploy:setup', 'install:gems'
- after 'deploy:setup', 'deploy:prepare'
- after 'deploy:setup', 'conf:test'
- after :deploy, 'robots_etc:install'
- after :deploy, 'deploy:seed'
- after :deploy, 'app:reload'
- # after :deploy, 'sitemap:refresh'
- end
- namespace :app do
- desc 'Start server'
- task :start do
- on roles(:all) do
- execute "systemctl start #{fetch :application}.target"
- end
- end
- desc 'Stop server'
- task :stop do
- on roles(:all) do
- execute "systemctl stop #{fetch :application}.target"
- end
- end
- desc 'Server status'
- task :status do
- on roles(:all) do
- execute "systemctl status #{fetch :application}.target"
- execute 'systemctl status nginx'
- end
- end
- desc 'Server reload'
- task :reload do
- on roles(:all) do
- execute 'systemctl daemon-reload'
- invoke 'app:stop'
- invoke 'app:start'
- end
- end
- end
- def err path
- p '===S=====T========P==============='
- p '=====h=i====H=a=p===E============='
- p '======================N=S=!======='
- p "#{path} NOT FOUND"
- p '=================================='
- p '=================================='
- p '=================================='
- end