どうも、しゅーいっちです。
why
- かなり昔にsinatraで作った地味サービスをそろそろをSSL化したい
- メンテされてない dokku-alt やめて dokku に切り替えたい。(そもそも dokku がメンテされてなくて dokku-alt が生まれたのに本家が復活してた)
- なんかSSHの設定おかしくなってpushできなくなった(けど現行サーバであれこれやるのめんどくさい)
- 眠っているVPSがあった。
dokku
Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.
-
これを自前のサーバに入れると、Herokuみたいな
git push
でデプロイできる仕組みを自前で構築できる。 -
さらにdokku letsencrypt(beta)というのもあってSSL化も簡単そう。
さあ始めよう
サーバ基本設定
さくらVPSです。Ubuntu 18.04
こちらを参考にさせていただきました。
https://loumo.jp/wp/archive/20190302120011/
80, 443 の portを開ける。
$ sudo ufw allow http
$ sudo ufw allow https
(↑ これやってなくて、いろいろ遠回りしました)
確認
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
dokku 入れる
officialの仰せの通りに。
$ wget https://raw.githubusercontent.com/dokku/dokku/v0.19.11/bootstrap.sh
$ sudo DOKKU_TAG=v0.19.11 bash bootstrap.sh
dockerが入ったりします。時間がかかるということで途中で星空を眺めます。
This is going to take a long time
.....................................................................
............+...............................................+........
................+....................................................
.....................................................................
.....................................................................
.....................................................................
+..+.................................................................
...............................................+.....................
.....................................................................
.....................................................................
.....................................................................
...........................+.......+...............................+.
.........+.................................+.........................
...........+..............................+..........................
入りました。
$ dokku -v
dokku version 0.19.11
dokku 設定
(このまま現行ドメインのDNS変えるとサービス表示されなくなることに気づき別に検証用ドメインを取得💰)
ドメインがすでにサーバーIPに向いた状態です。
http://ドメイン
にアクセスしたら表示される設定画面で設定を完了させる。
- Public SSH Keys
- Hostname
あとからSSH keyの設定する時は
dokku ssh-keys
コマンド使う
http://dokku.viewdocs.io/dokku~v0.7.1/deployment/user-management/#adding-deploy-users
あとから、ドメイン関連の設定する時は
dokku domains
コマンド使う
https://github.com/dokku/dokku/blob/master/docs/configuration/domains.md
sample app を push してみる
これそのままやった
http://dokku.viewdocs.io/dokku/deployment/application-deployment/
http://ruby-getting-started.dracarysme.com で表示された。(ドラカリス!🔥)
↑
削除済み
自分の app を push
rubyのバージョン古過ぎてコケるぽいのでスキップ。
! An error occurred while installing ruby-2.1.0
! Heroku recommends you use the latest supported Ruby version listed here:
! https://devcenter.heroku.com/articles/ruby-support#supported-runtimes
sample app を SSL化
officialの仰せのままに
# dokku 0.5+
$ sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
メアド設定して実行
$ dokku config:set --no-restart ruby-getting-started DOKKU_LETSENCRYPT_EMAIL=メアド
$ dokku letsencrypt ruby-getting-started
リダイレクトもきちんとされつつ、あっさりとSSL化
https://ruby-getting-started.dracarysme.com 🧖♀️🐲🔥🌚
↑
削除済み
作りかけの nuxt app を push してみる
officialの仰せのままに設定
https://nuxtjs.org/faq/dokku-deployment/
できた。
感想
よかったこと
- DNSやnginxの設定することなしに、アプリごとに勝手にサブドメイン増えてくのが楽しい
- nuxt app を firebase に上げると SSRのためのfunctionsが必要だけど、dokkuだと不要ぽい。
イマイチだったこと
- やはりサーバ基本設定がめんどくさい
- mini-Herokuと言ってはいるが、ドキュメント量見るとあまりmini感を感じられない。
追記
myapp を deploy
rubyのバージョンを上げてデプロしました。
letsencryptでSSL化する時にドメイン設定でハマりました。
症状: 証明書は入ってきてるし、https にリダイレクトもされるが、ブラウザでアクセスするとSSLが有効になっていない(安全でないサイトのお知らせが出る)。
原因: アプリはサブドメイン運用なのですが、デプロイの過程でなぜかルートドメインもvhostsに追加されていたのが原因でした。
$ dokku domains:report
Domains app enabled: true
Domains app vhosts: example.com sub.example.com
Domains global enabled: false
Domains global vhosts:
$ dokku domains:remove <app name> <削除したいURL>
$ dokku domains:report
Domains app enabled: true
Domains app vhosts: sub.example.com
Domains global enabled
その後、 dokku certs:remove <app name>
で一旦証明書を削除して、再度取得したらいけた。
proxy portの設定とかいろいろ触ったけど関係なかった。最終的にデフォルトのこの状態。
$ dokku proxy:ports <app name>
-----> scheme host port container port
http 80 5000
https 443 5000
あとは、analyticsのプロパティURL変更して、google seach consoleのプロパティ作り直して、関連付けし直してSSL化完了。
日付の計算 カレンダータ: https://calcal.helloqapp.com
証明書の自動更新設定
dokku letsencrypt:cron-job --add
要確認。
dokku で静的サイトを deploy
空の .static
を作って push するだけ。
.static
index.html
ドメインルートに deploy
git remote add
時に :
の後にドメインルートを入れる。
git remote add dokku dokku@dokku.me:dokku.me