目的
NocoBaseを自分のドメインで公開環境を作成する。
・SSL化も行う
EC2で適当なインスタンスを作成
今回はAmazon Linux 2023でArmのt4g.microにしました。
各種インストール
docker-composeの導入 参考
# dockerのインストール
sudo dnf update && sudo dnf install -y docker
# Dockerデーモン起動
sudo systemctl start docker
# sudoなしで実行できるように、ユーザーグループの追加
sudo gpasswd -a $(whoami) docker
# Adding user ec2-user to group docker
# Dockerに書き込み権限の付与
$ sudo chgrp docker /var/run/docker.sock
# Dockerデーモンの再起動
$ sudo service docker restart
# Redirecting to /bin/systemctl restart docker.service
# Dockerデーモンの自動起動設定
$ sudo systemctl enable docker
# Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
# Docker Composeのダウンロード & インストール
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# パーミッション変更
$ sudo chmod +x /usr/local/bin/docker-compose
#シンボリックリンクの作成
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker -v
# Docker version 25.0.5, build 5dc9bcc
$ docker-compose -v
# Docker Compose version v2.32.4
ユーザー反映のために一旦ログアウトし再度ログインする
NocoBaseのdockerインストール
チュートリアル通りに進めます。
# NocoBase が生成したシステムファイルを保存するために、my-project(または他の名前)という名前のフォルダーを作成します
mkdir my-project && cd my-project
# 空の docker-compose.yml ファイルを作成します
vi docker-compose.yml
version: '3'
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest
networks:
- nocobase
depends_on:
- postgres
environment:
# アプリケーションのシークレットキー、ユーザートークンなどを生成するのに使用します
# APP_KEY が変更されると、古いトークンも無効になります
# 任意のランダム文字列にし、外部に漏らさないようにしてください
- APP_KEY=your-secret-key
# データベースタイプ、postgres、mysql、mariadb に対応
- DB_DIALECT=postgres
# データベースホスト、既存のデータベースサーバーの IP に置き換えることができます
- DB_HOST=postgres
# データベース名
- DB_DATABASE=nocobase
# データベースユーザー
- DB_USER=nocobase
# データベースパスワード
- DB_PASSWORD=nocobase
# タイムゾーン
- TZ=Asia/Tokyo
# 商用プラグインのためのサービスプラットフォームのユーザー名とパスワード
- NOCOBASE_PKG_USERNAME=
- NOCOBASE_PKG_PASSWORD=
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# 既存のデータベースサービスを使用する場合、postgres を起動する必要はありません
postgres:
image: postgres:16
restart: always
command: postgres -c wal_level=logical
environment:
POSTGRES_USER: nocobase
POSTGRES_DB: nocobase
POSTGRES_PASSWORD: nocobase
volumes:
- ./storage/db/postgres:/var/lib/postgresql/data
networks:
- nocobase
保存して終了
:wq
NocoBaseのインストールと起動
# 最新のイメージを取得
$ docker-compose pull
# バックグラウンドで実行
$ docker-compose up -d
# app プロセスの状態を確認
$ docker-compose logs app
nginxのインストール
$ sudo dnf -y install nginx
# nginx を起動する
$ sudo systemctl start nginx.service
# nginx を自動起動
$ sudo systemctl enable nginx.service
EC2のセキュリティグループのインバウンドルールで80ポートを開放する
ドメインへのバインディング
公式のデプロイ手順をそのまま行う
server {
listen 80;
server_name your_domain.com; # your_domain.comをあなたのドメインに置き換えてください
location / {
proxy_pass http://127.0.0.1:13000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_buffering off;
}
}
Route53でAレコードにインスタンスのIPを指定する
一旦http://mydomain.com
で確認できます。
以下のSSL導入を行う場合はAレコードは一旦削除します。(ACMやCloudFrontでエラーになる)
SSL導入
EC2 ACM CloudFrontでSSLします。現在はCloudFrontを挟まなくても直接指定できる方法もありますが、コンソールだけで簡単に解決するので、こちらの方法にします。
ACMで証明書発行
ACM -> 証明書をリクエスト -> 対象のドメインmydomain.com
を入力します。
DNS検証でRoute53でCNAMEを登録すれば証明書の発行が簡単にできます。
Route53ではない場合はそれぞれのDNS管理画面でCNAMEを設定します。
CloudFrontでディストリビュージョン作成
Origin domainにEC2のパブリック IPv4 DNS
を指定します。
プロトコルはHTTPのみ。
代替ドメイン名に対象のドメインを入力mydomain.com
証明書はACMで発行した証明書を設定します。
Route53でAレコードにエイリアスでCloudFrontのディストリビュージョンへのエイリアスを指定する。
レコードを作成してhttps://mydomain.com
で接続できるのを確認できたら完了です。