Skip to content

Instantly share code, notes, and snippets.

@superchell
Created November 30, 2018 15:19
Show Gist options
  • Save superchell/9b118f3f4032f5bb8896bac9225bc446 to your computer and use it in GitHub Desktop.
Save superchell/9b118f3f4032f5bb8896bac9225bc446 to your computer and use it in GitHub Desktop.
настройка автодеплоя dokku с github для rails проекта
####### Установка сокета для связи контейнера проекта с Dokku #######
установить dokku-daemon https://github.com/dokku/dokku-daemon
systemctl enable dokku-daemon
systemctl start dokku-daemon
примонтировать директорию с сокетом dokku-daemon к образу проекта. ВАЖНО! Монтировать необходимо в существующую директорию образа, несуществующий путь автоматически создаваться не будет
dokku storage:mount <project_name> '/var/run/dokku-daemon:<existing directory in project img>'
####### Установка плагина для клонирования репозитория в dokku-проект ######
установить dokku clone - dokku plugin:install https://github.com/crisward/dokku-clone.git clone
скопировать содержимое (открытый ключ) /home/dokku/.ssh/id_rsa.pub
добавить открытый ключ в проект на гитхабе - https://github.com/<your_login>/<your_project>/settings/keys
####### Установка гема для обработки хуков с гитхаба ######
https://github.com/ssaunier/github_webhook
# добавить в файл app/controllers/github_webhooks_controller.rb
class GithubWebhooksController < ActionController::Base
protect_from_forgery with: :null_session
include GithubWebhook::Processor
DEFAULT_SOCKET_PATH ="/<примонтированная директория образа dokku>/dokku-daemon.sock"
DOKKU_COMAND = 'clone nabaze [email protected]:<your_login>/<your_project>'
def github_push(payload)
socket = UNIXSocket.new(DEFAULT_SOCKET_PATH)
sleep(1) # Give socket 1 sec
logger.info "[CommandRunner] Sending the command"
socket.puts(DOKKU_COMAND)
logger.info "[CommandRunner] Waiting for the result"
while text_line = socket.gets
logger.info "[CommandRunner] #{text_line}"
end
socket.close
end
private
def webhook_secret(payload)
ENV['GITHUB_WEBHOOK_SECRET']
end
end
#
####### Настроить вебхук гитхаба ######
https://<your_login>/<your_project>/nabaze/settings/hooks/
Payload URL https://<domain.com>/github_webhooks
Content type application/json
остальное по умолчанию
задать переменную среды ENV['GITHUB_WEBHOOK_SECRET'] для образа проекта
dokku config:set <your_project> GITHUB_WEBHOOK_SECRET=<GitHub Secret>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment