7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Okinawa.rbAdvent Calendar 2019

Day 23

VPSにdokku入れてできるだけ楽にデプロイ

Last updated at Posted at 2019-12-22

どうも、しゅーいっちです。

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化

dokku-letsencrypt (Beta)

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

7
8
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
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?