0
0

More than 3 years have passed since last update.

Beego+MySQL+Docker+Heroku

Last updated at Posted at 2019-10-31

はじめに

普段は,docker-composeでgolangとMySQLを管理しています.
Herokuへのアプリのアップを試みました.(DBストレージw)
個人開発でDBストレージ消費するサービス運用って,素敵なサーバどうしたものか...

環境

ubuntu16
Herokuアカウント・クレジットカード登録済み.
ローカルではアプリ動きます.
Dockerfileにはマルチステージビルドを採用しています.
herokuへpushするimageは25MBくらいでした.(もっと小さくしたい)

Dockerfile

FROM golang:1.12.12-alpine3.9 AS build

ENV GOPATH $GOPATH:/go
ENV PATH $PATH:$GOPATH/bin

RUN apk update && \
  apk add --no-cache git ca-certificates tzdata && \
  go get "github.com/go-sql-driver/mysql" && \
  go get "github.com/beego/bee" && \
  go get "github.com/astaxie/beego" && \
  go get "github.com/astaxie/beego/session" && \
  go get "golang.org/x/crypto/bcrypt" && \
  go get "github.com/PuerkitoBio/goquery" && \
  go get "github.com/microcosm-cc/bluemonday" && \
  rm -rf /var/cache/apk/*

ADD . /go/src/app
WORKDIR /go/src/app

RUN go build -o app main.go

FROM alpine:3.9
RUN apk update && \
  apk --no-cache add tzdata ca-certificates && \
  rm -rf /var/cache/apk/*
COPY --from=build /go/src/app/ .
CMD ["./app"]

結果

MySQLはイメージのアップができないので,add-onを追加する必要があります.

heroku login
heroku container:login
heroku create -a app_name
heroku git:remote -a app_name
heroku addons:add cleardb:ignite
echo "web: app_name" > Procfile

次にMySQLへの接続情報をゲットします.

heroku config | grep CLEARDB_DATABASE_URL
=> CLEARDB_DATABASE_URL: mysql://38faf8fefeaaef:dfefe44@us-cdbr-iron-east-093823.cleardb.net/heroku_8cfefedfgcd6a?reconnect=true

これをBeegoでよく利用する形に変形して使っています.(文末のreconnect=trueは未検証)

conf/app.conf
sqlconn = 38faf8fefeaaef:dfefe44@tcp(us-cdbr-iron-east-093823.cleardb.net:3306)/heroku_8cfefedfgcd6a

#sqlconnはmain.goで利用しています↓
orm.RegisterDataBase("default", beego.AppConfig.String("driver"), beego.AppConfig.String("sqlconn")+"?charset=utf8mb4")

herokuはアプリの起動ごとにポート番号が変わるようです.
よって,main.go内でポートを取得し,設定の上書きが必要です.(おそらく,HTTPの文はいらない)

main.go
port, err := strconv.Atoi(os.Getenv("PORT"))
beego.BConfig.Listen.HTTPPort = port
beego.BConfig.Listen.HTTPSPort = port

仕上げです!(上2行はいらないかも)

git add .
git commit -m "add procfile"

heroku container:push web -a app_name
heroku container:release web -a app_name
heroku open
heroku logs --tail #ログの確認

アプリによっては,起動後から数分後に接続できたり,キャッシュを消したら接続できたりするみたいです.
私のアプリ内の機能:スクレイピング部分はうまく動かず...
海外サーバだからなのかな.(追記:ca-certificatesをいれたら直りました)

最後に

作成したアプリの削除

heroku apps:destroy -a app_name --confirm app_name
git remote rm heroku
0
0
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
0
0