れとろのメモ置場

とあるSEのメモ置場

AWS上でRedmineサーバーを作ってみた(2日目:データベース構築)

せっかくAWS SAAの試験勉強でAWSアカウント作ったし、色々サービスの勉強もしたのでなにかサーバーを立てみたくなり、タスク管理用にRedmineサーバーを作ってみた。 (やったことをメモ程度に書くだけで意外と疲れたので記事を2,3個に分割しておく。長過ぎると読むの疲れるし。)

1日目はこっち
AWS上でRedmineサーバーを作ってみた(1日目:ネットワーク構築) - れとろのメモ置場

やったこと

詰まったこと

  • VPCの設定(通信許可の設定周り)
  • RDSで作ったインスタンスに追加のユーザー作成、追加ユーザーでログイン
  • Apacheとpassengerの連携設定

構築までの手順

  1. VPCやサブネットの作成、セキュリティグループ・ネットワークACLの設定
  2. RDSでPostgresインスタンスの構築、Redmine用のDB作成
  3. EC2でRedmineのインストール、動作確認
  4. apacheとpassengerを連携させてWebサイトとしてRedmineの公開

※今回の記事は2だけが対象

RDBインスタンスの構築

RDSでDBサーバを作成する。とりあえず無料枠を使える設定で構築。 f:id:Retro_00:20210623215548j:plain f:id:Retro_00:20210623215553j:plain f:id:Retro_00:20210623215556j:plain f:id:Retro_00:20210623215600j:plain f:id:Retro_00:20210623215603j:plain f:id:Retro_00:20210623215606j:plain f:id:Retro_00:20210623215609j:plain f:id:Retro_00:20210623220941j:plain f:id:Retro_00:20210623215542j:plain

DBはpostgressを選択してインスタンスを作ろうとしたところ、サブネットグループの指定が必須だった。
そんなの知らなかったなあと思いつつ、複数作っておいたプライベートサブネットでサブネットグループを作成。 (名前と説明、VPC、AZ、グループに入れるサブネットを選択してサブネットグループを作成。すごく簡単。)
ついでにセキュリティグループも作成。セキュリティグループの切り分け単位が迷子だけど、DBインスタンスに設定する想定で作成。SSHとはじめに作成したVPC用のセキュリティグループを設定しているインスタンスからの通信を許可するセキュリティグループを作成した。
サブネットグループとDBインスタンス用のセキュリティグループを作ってから改めてDBインスタンスを作成。

Redmine用のDB・ユーザーを作成

RDBインスタンスはプライベートサブネット上に作ったので、DB作成とかでアクセスしたい場合はパブリックサブネット経由じゃないとアクセスできない。 そこでEC2インスタンスにクライアントツールをインストールしてパブリックサブネット上のEC2インスタンスから接続して設定など操作を行う。
まずは操作用のEC2インスタンを作成してSSHでアクセス後にPostgreSQLのクライアントツールをインストールする。
yum install postgresql
インストール後psqlコマンドでDBにアクセスしに行く。オプションを含むコマンドは以下の通り。RBDインスタンスのエンドポイントはAWSRDBインスタンス詳細画面から確認しておく。
psql --host=RDBインスタンスのエンドポイント --port=5432 --username=作成時設定したマスターユーザー --password

f:id:Retro_00:20210623220206j:plain 公式のインストールガイドによるとPostgreSQLの場合は以下のコマンドを実行すればいいらしいのでコマンドを実行する。

CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'my_password' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;

実行するけど2つ目のコマンドを実行するとエラーになる。いろいろ調べた結果、ログイン中のユーザーは1行目で作成したロールに関する権限がないので所有者がredmineになるデータベースが作れないっぽい。 なので以下のコマンドでマスターユーザーにredmineロールの権限を付与する。
GRANT redmine TO マスターユーザー;
その後改めてエラーとなった2行目のコマンドを実行する。 (1度うまく行かなかったのでDBインスタンスを作り直したら今度はできた。PostgreSQLはあんまり触ったことがないからよくわからないや。)
作成したredmineユーザーがちゃんとログインできるのかを確認する。

psql --host=RDBインスタンスのエンドポイント --port=5432 --username=redmine --password

ちゃんとログインできればDB作成は完了。ログイン出来ないときはエラー内容を調べて対応する。 (ロール作成時にパスワードを設定したはずなのにパスワードが設定されてなくてログイン出来ないことがあった。 他にはredmineロールを付与するときに何回やっても権限が設定できてないみたいでCREATE DATABASEが失敗したけどDBインスタンス作り直すと1発でうまく行ったり。)

参考

http://guide.redmine.jp/RedmineInstall/#step-2- https://qiita.com/bwtakacy/items/845c193c6da3218a546d