LoginSignup
3
3

More than 5 years have passed since last update.

Heroku で動かしてる Twitter bot の環境を buildpack から Docker に移行した

Last updated at Posted at 2018-12-21

この記事はOkinawa.rb Advent Calendar 2018の22日目の記事です。

去年 Heroku で Twitter bot を運用する という記事を書いたのですが、今年はその環境を移行したという話です。特にRubyの話は出てきません。

背景

  • heroku-buildpack-mecab を使って Heroku 環境で mecab を使えるようにしていました
  • ですが、buildpack は可搬性が低いため、何らかの理由で Heroku が使えなくなった場合に移行に苦労するのが予想されました
  • そんなわけで Docker 環境に移行しました

詳細

ローカル環境

Dockerfile
FROM ruby:2.5.3
ENV LANG C.UTF-8
RUN apt-get update && apt-get -y install mecab libmecab-dev mecab-ipadic-utf8
RUN gem install bundler
ADD . /yonobot
WORKDIR /yonobot
RUN bundle install

HerokuではmLabというアドオンを使っていますが、ローカルでは公式のMongoDBのDockerイメージを使っています。アドオンの環境にあわせてMongoDB3.6を指定しています。

docker-compose
version: '3'
services:
  web:
    build: .
    tty: true
    stdin_open: true
    volumes:
      - .:/yonobot
    depends_on:
      - mongo
  mongo:
    image: "mongo:3.6-stretch"
    ports:
      - "27020:27017"
    volumes:
      - mongo:/data/db
volumes:
  mongo:
    driver: local

これでdocker-compose up するだけで開発環境が準備できるようになりました。

Heroku

Herokuで独自のDockerイメージを使いたい場合、ローカルでbuildしたDockerイメージをHerokuのDocker Registryにpushする方法とheroku.ymlを使う方法があります。

今回はheroku.ymlを使う方法を選びました。Heroku側で自動的にDockerイメージをbuildしてくれるので、運用を考えるとこちらのほうが手軽そうだと考えてのことです。

heroku.yml
setup:
  addons:
    - plan: mongolab:sandbox
    - plan: scheduler:standard
build:
  docker:
    web: Dockerfile
run:
  web: bundle exec bin/yonobot

最後の run: の部分は、何かしら指定しないといけないのでやむなく書いてます。実態は help を表示するだけのコマンドです。

環境変数は従来どおりherokuのWebもしくはCLIから設定します。

まとめ

  • Herokuにてbuildpack環境からDocker環境に移行しました
  • ローカルの開発環境もあわせてDockerに移行しました
  • RubyのDockerイメージ使ってるということ以外一切Rubyと関係ない話でした:bow:
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3