PageRenderTime 41ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/generators/project/config/deploy.rb

https://bitbucket.org/fearlessstar/digitalheroes_startkit
Ruby | 377 lines | 278 code | 70 blank | 29 comment | 2 complexity | d967f6272d2544ab9d2e8047c10bb294 MD5 | raw file
  1. # config valid only for current version of Capistrano
  2. lock '3.8.1'
  3. # загрузка конфига в полноценный символьный хэш
  4. require 'active_support/core_ext/hash'
  5. CONFIG = YAML.load_file(File.expand_path('../capistrano.yml', __FILE__)).with_indifferent_access
  6. set :application, CONFIG[:conf][:vars][:cap_application]
  7. set :repo_url, "git@bitbucket.org:slowpokesfrommoscow/#{fetch :application}.git"
  8. # set :repo_url, 'git@example.com:me/my_repo.git'
  9. # Default branch is :master
  10. # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
  11. # Default deploy_to directory is /var/www/my_app_name
  12. set :deploy_to, "/home/rails/#{fetch :application}"
  13. # Default value for :format is :airbrussh.
  14. # set :format, :airbrussh
  15. # You can configure the Airbrussh format using :format_options.
  16. # These are the defaults.
  17. set :format_options, command_output: true, log_file: 'log/capistrano.log', color: :auto, truncate: :auto
  18. # Default value for :pty is false
  19. # set :pty, true
  20. # set :default_shell, '/bin/bash -l'
  21. # Default value for :linkedlinked_files is []
  22. # 'config/sitemap.rb',
  23. set :linked_files, fetch(:linked_files, []).push('config/secrets.yml.enc', 'config/secrets.yml.key', 'config/database.yml', 'config/secrets.yml', 'config/puma.rb')
  24. set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system', 'public', 'files', 'documents')
  25. # Default value for default_env is {}
  26. # set :default_env, { path: "/opt/ruby/bin:$PATH" }
  27. # Default value for keep_releases is 5
  28. set :keep_releases, 2
  29. # Puma:
  30. # set :puma_conf, "#{shared_path}/config/puma.rb"
  31. before 'rvm:hook', 'prepare:ssh'
  32. namespace :install do
  33. desc 'подготовительные мероприятия'
  34. task :prepare do
  35. on roles(:all) do
  36. CONFIG[:soft][:prepare].each do |command|
  37. execute command
  38. end
  39. end
  40. end
  41. desc 'apt'
  42. task :apt do
  43. on roles(:all) do
  44. CONFIG[:soft][:apt].each do |software|
  45. execute "apt-get -y install #{software}"
  46. end
  47. end
  48. end
  49. desc 'команды'
  50. task :commands do
  51. on roles(:all) do
  52. CONFIG[:soft][:commands].each do |command|
  53. execute command
  54. end
  55. end
  56. end
  57. desc 'гемы'
  58. task :gems do
  59. on roles(:all) do
  60. CONFIG[:soft][:gems].each do |gem|
  61. execute "/usr/local/rvm/bin/rvm all do gem install --no-rdoc --no-ri #{gem}"
  62. end
  63. end
  64. end
  65. end
  66. namespace :conf do
  67. desc 'перемещение кофн файлов на сервак'
  68. task :copy do
  69. on roles(:all) do
  70. # конфиги
  71. p 'перемещение кофн файлов на сервак'
  72. upload! 'config/deploy/puma.rb', "#{shared_path}/config/puma.rb"
  73. upload! 'config/deploy/database.yml', "#{shared_path}/config/database.yml"
  74. upload! 'config/secrets.yml', "#{shared_path}/config/secrets.yml"
  75. upload! 'config/deploy/secrets.yml.key', "#{shared_path}/config/secrets.yml.key"
  76. upload! 'config/deploy/secrets.yml.enc', "#{shared_path}/config/secrets.yml.enc"
  77. upload! 'config/deploy/application.secrets.yml', "#{shared_path}/config/application.secrets.yml"
  78. upload! 'config/deploy/foreman.sh', "#{shared_path}/foreman.sh"
  79. # upload! 'config/deploy/postfix.cf', "/etc/postfix/main.cf"
  80. upload! 'config/sitemap.rb', "#{shared_path}/config/sitemap.rb"
  81. # конфиги NGINX
  82. upload! 'config/deploy/nginx.conf', "/etc/nginx/nginx.conf"
  83. # дефолтный конфиг убирается
  84. execute :rm, "-f /etc/nginx/sites-enabled/default"
  85. if CONFIG[:conf][:with_ssl]
  86. upload! 'config/deploy/nginx_site_ssl.conf', "/etc/nginx/sites-enabled/#{fetch :application}.conf"
  87. upload! "config/deploy/#{fetch :application}.crt", "/etc/ssl/#{fetch :application}.crt"
  88. upload! "config/deploy/#{fetch :application}.key", "/etc/ssl/#{fetch :application}.key"
  89. else
  90. upload! 'config/deploy/nginx_site.conf', "/etc/nginx/sites-enabled/#{fetch :application}.conf"
  91. end
  92. end
  93. end
  94. desc 'добавление SSL к уже работающему проекту'
  95. task :ssl_update do
  96. execute :rake, 'cap:conf_update'
  97. on roles(:all) do
  98. upload! 'config/deploy/nginx_site_ssl.conf', "/etc/nginx/sites-enabled/#{fetch :application}.conf"
  99. upload! "config/deploy/#{fetch :application}.crt", "/etc/ssl/#{fetch :application}.crt"
  100. upload! "config/deploy/#{fetch :application}.key", "/etc/ssl/#{fetch :application}.key"
  101. end
  102. invoke 'conf:reload'
  103. end
  104. desc 'перезапуск нужных сервисов и чек конфига'
  105. task :reload do
  106. on roles(:all) do
  107. execute :systemctl, :restart, :nginx
  108. execute :systemctl, :restart, :postfix
  109. end
  110. end
  111. desc 'тесты конфигов, тестовое письмо'
  112. task :test do
  113. on roles(:all) do
  114. execute :nginx, '-t'
  115. # execute "echo 'Привет! Как дела ?' | mail -s 'Тест от #{CONFIG[:conf][:vars][:cap_domain]}' shadows.of.unevenness@gmail.com"
  116. end
  117. end
  118. end
  119. namespace :sitemap do
  120. desc 'unpack xml'
  121. task :unpack_xml do
  122. on roles(:all) do
  123. within release_path do
  124. execute "gunzip -c #{shared_path}/public/sitemap.xml.gz > #{shared_path}/public/sitemap.xml"
  125. end
  126. end
  127. end
  128. desc 'upload xml'
  129. task :upload_xml do
  130. on roles(:all) do
  131. upload! 'public/sitemap.xml', "#{shared_path}/public"
  132. end
  133. end
  134. desc 'заливка sitemap.rb'
  135. task :upload_conf do
  136. on roles(:all) do
  137. upload! 'config/sitemap.rb', "#{shared_path}/config"
  138. end
  139. end
  140. desc 'скачивание файла sitemap.xml почитать'
  141. task :download_xml do
  142. on roles(:all) do
  143. download! "#{shared_path}/public/sitemap.xml", '/Users/nikolajmartynov/Documents/Разработка/Rails/science/public/sitemap.xml'
  144. end
  145. end
  146. before 'sitemap:create', 'sitemap:upload_conf'
  147. before 'sitemap:refresh', 'sitemap:upload_conf'
  148. after 'sitemap:create', 'sitemap:unpack_xml'
  149. after 'sitemap:create', 'sitemap:download_xml'
  150. after 'sitemap:refresh', 'sitemap:unpack_xml'
  151. end
  152. namespace :robots_etc do
  153. desc 'заливка robots.txt и всяких 404.html'
  154. task :install do
  155. on roles(:all) do
  156. upload! 'public/robots.txt', "#{shared_path}/public"
  157. upload! 'public/401.html', "#{shared_path}/public"
  158. upload! 'public/422.html', "#{shared_path}/public"
  159. upload! 'public/404.html', "#{shared_path}/public"
  160. upload! 'public/500.html', "#{shared_path}/public"
  161. upload! 'public/map', "#{shared_path}/public", recursive: true
  162. upload! 'public/favicon.ico', "#{shared_path}/public"
  163. end
  164. end
  165. end
  166. namespace :prepare do
  167. desc 'проверка там ли ключик ?'
  168. task :ssh do
  169. on roles(:all) do
  170. begin
  171. execute "ssh -o PasswordAuthentication=no root@#{CONFIG[:conf][:vars][:cap_server]}"
  172. rescue
  173. p 'ТВОЙ КЛЮЧ ЕЩЁ НЕ НА СЕРВАКЕ, ВВЕДИ РУТОВЫЙ ПАРОЛЬ!'
  174. # копирование ключа на сервак
  175. `ssh-copy-id root@#{CONFIG[:conf][:vars][:cap_server]}`
  176. end
  177. # плавный запуск ssh-agent'а для комфортного деплоя, и чтобы не заёбывал каждый раз, предусмотрена проверка .)
  178. if /no identities/ =~ `ssh-add -l`
  179. `eval 'ssh-agent'`
  180. `ssh-add`
  181. end
  182. end
  183. end
  184. end
  185. namespace :log do
  186. desc 'скачивание логов'
  187. task :dwnld do
  188. on roles(:all) do
  189. download! "#{shared_path}/log/production.log", "/Users/nikolajmartynov/Documents/Разработка/Rails/#{CONFIG[:conf][:vars][:cap_application]}/log/production.log"
  190. end
  191. end
  192. end
  193. namespace :feed do
  194. desc 'заливка тестового xml'
  195. task :upload do
  196. on roles(:all) do
  197. upload! 'public/feed.xml', "#{shared_path}/public"
  198. end
  199. end
  200. end
  201. namespace :db do
  202. desc 'db fuck!'
  203. task :fuck do
  204. on roles(:all) do
  205. within release_path do
  206. with rails_env: fetch(:rails_env) do
  207. execute :rake, 'db:fuck'
  208. end
  209. end
  210. end
  211. end
  212. end
  213. namespace :database do
  214. task :create do
  215. on roles(:all) do
  216. within release_path do
  217. with rails_env: fetch(:rails_env) do
  218. execute :rake, 'db:create'
  219. end
  220. end
  221. end
  222. end
  223. end
  224. namespace :dump do
  225. desc 'загрузить дамп'
  226. task :upload do
  227. on roles(:all) do
  228. upload! 'dump.sql', "#{release_path}"
  229. end
  230. end
  231. end
  232. namespace :deploy do
  233. task :seed do
  234. on roles(:all) do
  235. within release_path do
  236. with rails_env: fetch(:rails_env) do
  237. execute :rake, 'db:seed'
  238. end
  239. end
  240. end
  241. end
  242. task :mk_dirs do
  243. on roles(:all) do
  244. execute "mkdir -p #{shared_path} #{shared_path}/config #{shared_path}/pids #{shared_path}/sockets #{shared_path}/log"
  245. end
  246. end
  247. task :setup do
  248. on roles(:all) do
  249. # invoke 'deploy:mk_dirs'
  250. end
  251. end
  252. task :prepare do
  253. invoke 'deploy:mk_dirs'
  254. execute :rake, 'cap:conf_update'
  255. invoke 'conf:copy'
  256. invoke 'conf:reload'
  257. end
  258. before 'deploy:assets:precompile', 'database:create'
  259. after 'deploy:setup', 'install:prepare'
  260. after 'deploy:setup', 'install:apt'
  261. after 'deploy:setup', 'install:commands'
  262. after 'deploy:setup', 'install:gems'
  263. after 'deploy:setup', 'deploy:prepare'
  264. after 'deploy:setup', 'conf:test'
  265. after :deploy, 'robots_etc:install'
  266. after :deploy, 'deploy:seed'
  267. after :deploy, 'app:reload'
  268. # after :deploy, 'sitemap:refresh'
  269. end
  270. namespace :app do
  271. desc 'Start server'
  272. task :start do
  273. on roles(:all) do
  274. execute "systemctl start #{fetch :application}.target"
  275. end
  276. end
  277. desc 'Stop server'
  278. task :stop do
  279. on roles(:all) do
  280. execute "systemctl stop #{fetch :application}.target"
  281. end
  282. end
  283. desc 'Server status'
  284. task :status do
  285. on roles(:all) do
  286. execute "systemctl status #{fetch :application}.target"
  287. execute 'systemctl status nginx'
  288. end
  289. end
  290. desc 'Server reload'
  291. task :reload do
  292. on roles(:all) do
  293. execute 'systemctl daemon-reload'
  294. invoke 'app:stop'
  295. invoke 'app:start'
  296. end
  297. end
  298. end
  299. def err path
  300. p '===S=====T========P==============='
  301. p '=====h=i====H=a=p===E============='
  302. p '======================N=S=!======='
  303. p "#{path} NOT FOUND"
  304. p '=================================='
  305. p '=================================='
  306. p '=================================='
  307. end