Ubuntuクラウドサーバー＆Dokku環境構築

今回はさくらのクラウドサーバー上にプライベートなシングルホストバージョンのHeroku「Dokku」を構築する。

## Dokkuの特徴
- Dockerを搭載しているので、どんなハードウェアにもDokkuをインストールすることができる
- ホスト上にセットアップしたら、Herokuと互換性のあるアプリケーションをGit経由でプッシュすることができる。
- Herokuのビルドパックを使ってビルドし、分離されたコンテナで実行する。

## GitHubのSSH接続設定
事前にGitHubのSSH接続設定を済ましておく必要がある。

[GithubにSSH接続する](https://qiita.com/toshio_nakayama/items/719559ab94cc86541176 "https://qiita.com/toshio_nakayama/items/719559ab94cc86541176")

## クラウドサーバーの構築

ディスクソース>アーカイブにチェック、今回アーカイブにはUbuntu Server 22.04.1 LTS 64bit（cloudimgでない物）を使用した

[参考: Dokku公式ドキュメント](https://dokku.com/docs/getting-started/installation/)

![サーバー追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2561089/5f80a37e-5b9e-3500-65a2-f54bf743d0b6.png)

- 後ほどUbuntuにrootユーザーでログインする際に必要となる管理ユーザーのパスワードを入力
- 先ほどGitHubに公開したSSHキーを利用するので、github.comのUsernameから取得にチェックを入れユーザー名を入力し、紐付ける

![サーバー追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2561089/a4c89e7b-e9d1-fbf7-4a00-e92659ca2b80.png)

## ドメインの作成とDNSの設定
1. さくらのドメインでドメインを取得する
[さくらのドメイン](https://domain.sakura.ad.jp/?_gl=1*1wcx0j*_gcl_aw*R0NMLjE2ODU4NDAzNDguQ2p3S0NBand5ZXVqQmhBNUVpd0E1V0Q3X1E0Q2RfTUF2YXBDdWJIM1d5RkVLeFI1cDdkQlpuazZGUUo5NFNjLVZydWl5UEdjRXF4Y25ob0NaNjRRQXZEX0J3RQ..*_gcl_au*MjM4ODkzMTc5LjE2ODU2NzY5ODA.*_ga*MjUwMTA2MDQwLjE2ODU2NzY5ODA.*_ga_M3MLBH78ML*MTY4NTgzODk3Ny40LjEuMTY4NTg0MDQ2NC41Mi4wLjA.&_ga=2.132902158.1421263122.1685834923-250106040.1685676980&_gac=1.92004712.1685840348.CjwKCAjwyeujBhA5EiwA5WD7_Q4Cd_MAvapCubH3WyFEKxR5p7dBZnk6FQJ94Sc-VruiyPGcEqxcnhoCZ64QAvD_BwE,"https://domain.sakura.ad.jp/?_gl=1*1wcx0j*_gcl_aw*R0NMLjE2ODU4NDAzNDguQ2p3S0NBand5ZXVqQmhBNUVpd0E1V0Q3X1E0Q2RfTUF2YXBDdWJIM1d5RkVLeFI1cDdkQlpuazZGUUo5NFNjLVZydWl5UEdjRXF4Y25ob0NaNjRRQXZEX0J3RQ..*_gcl_au*MjM4ODkzMTc5LjE2ODU2NzY5ODA.*_ga*MjUwMTA2MDQwLjE2ODU2NzY5ODA.*_ga_M3MLBH78ML*MTY4NTgzODk3Ny40LjEuMTY4NTg0MDQ2NC41Mi4wLjA.&_ga=2.132902158.1421263122.1685834923-250106040.1685676980&_gac=1.92004712.1685840348.CjwKCAjwyeujBhA5EiwA5WD7_Q4Cd_MAvapCubH3WyFEKxR5p7dBZnk6FQJ94Sc-VruiyPGcEqxcnhoCZ64QAvD_BwE")
1. ドメインコントロールパネル＞さくらのドメイン一覧＞ゾーン情報
で@と*のレコードにサーバーのIPアドレスを入力する

![スクリーンショット 2023-06-03 10.39.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2561089/576e4332-1fe8-615c-a4bf-715d44d61c30.png)


## Ubuntuにログインする

ターミナルを開いて以下のコマンドを入力

```sh
$ ssh ubuntu@${YOUR_IP_ADDRESS}
```

:::note warn
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! が出力された場合

```sh
$ ssh-keygen -R ${YOUR_IP_ADDRESS}
```

でssh-keygenコマンド情報を打ち消してから再度実行する。
:::

```sh
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?  →  yes
```

## Dokkuのインストール

```sh
#At the Server
$ wget -NP . https://dokku.com/install/v0.30.6/bootstrap.sh
$ sudo DOKKU_TAG=v0.30.6 bash bootstrap.sh
```

## SSHキーとVirtualhost設定のセットアップ

```sh
#At the Server
$ curl https://github.com/${GITHUB_USERNAME}.keys | dokku ssh-keys:add admin
$ dokku ssh-keys:list	#キーの確認
$ dokku domains:set-global ${DOMAIN_NAME}
$ cat /home/dokku/VHOST   #設定されたドメインの確認
$ dokku domains:set-global ${YOUR_IP_ADDRESS}
$ dokku domains:set-global ${YOUR_IP_ADDRESS}.sslip.io
```

## アプリのデプロイ

使用するアプリ [heroku/node-js-getting-started](https://github.com/heroku/node-js-getting-started,"https://github.com/heroku/node-js-getting-started")

```sh
#At the Local
$ git clone git@github.com:heroku/node-js-getting-started.git
$ cd node-js-getting-started
$ git remote add ${REMOTE_NAME} dokku@${DOMAIN_NAME}:node-js-getting-started
$ git push ${REMOTE_NAME} main
```
※次回はDokkuの主要な機能とデータベースの導入などについて掲載予定

[参考: DockerでミニHeroku！「Dokku」をさくらのクラウドで試す](https://knowledge.sakura.ad.jp/2356/,"https://knowledge.sakura.ad.jp/2356/")