3-2. バックエンド用 インスタンスの構築
次にバックエンド用のインスタンス構築を行います。もう1つ作成したインスタンスにSSHログインします。
3-2-1. 初期設定
「3-1-1. 初期設定」と同様に初期設定を行います。
3-2-2. docker インストール
# 必要パッケージのインストール
$ sudo apt install ca-certificates curl gnupg lsb-release
# gpgキーの追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# リポジトリの追加(stable版)
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker Engineのインストール
$ sudo apt update && sudo apt upgrade
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin3-2-3. docker コマンド初期設定
# sudo無しでdockerコマンドを実行出来るように、ubuntuユーザをdockerグループに追加する
$ getent group docker
docker:x:999:
$ sudo gpasswd -a ubuntu docker
ユーザ ubuntu をグループ docker に追加
$ getent group docker
docker:x:999:ubuntu
# 上記がおわったら一度sshから抜けて再ログインすればsudo無しでdockerコマンドが実行可能になる
3-2-4. docker-conpose ファイルの作成
mariadb, redisが起動する docker-conpose.yml ファイルを作成します。
# ディレクトリの作成
$ sudo mkdir /app
# docker composeファイルの作成
$ sudo vim /app/docker-compose.yml
docker-compose.yml
dockerを終了してもデータが抹消されないようデータの永続化や、mariadb, redisの設定を含めた docker-compose.yml を作成しています。
過去にGoogle Cloudで構築した docker-compose.yml から若干変更しています。
services:
mariadb:
image: mariadb:lts
container_name: mariadb
hostname: mariadb
volumes:
- 'mariadb_data:/var/lib/mysql'
ports:
- '3306:3306'
restart: always
environment:
- TZ=Asia/Tokyo
- MARIADB_ROOT_PASSWORD=[rootユーザ用パスワード]
- MARIADB_USER=[ユーザ名]
- MARIADB_PASSWORD=[パスワード]
- MARIADB_DATABASE=[データベース名]
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
redis:
image: redis:latest
container_name: redis
hostname: redis
volumes:
- 'redis_data:/redis/data'
ports:
- '6379:6379'
restart: always
environment:
- TZ=Asia/Tokyo
command: ["redis-server", "--appendonly", "no", "--maxmemory", "1000mb", "--maxmemory-policy", "allkeys-lru"]
volumes:
mariadb_data:
driver: local
name: mariadb_data
redis_data:
driver: local
name: redis_data
3-2-5. docker 起動
# docker composeファイルのあるディレクトリへ移動
$ cd /app/
# バックグラウンドで起動
$ docker compose up -d
# 起動確認
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mariadb mariadb:lts "docker-entrypoint.s…" mariadb 4 months ago Up 27 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
redis redis:latest "docker-entrypoint.s…" redis 4 months ago Up 27 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp
3-2-6. mariadb-client, redis-cli のインストール & 接続確認
コマンドでmariadbやredisにログインできるようにクライアントをインストールします。
インストール後に、mariadbとredisに接続できるか確認します。
### mariadb-client インストール
# 参考:https://mariadb.com/docs/server/connect/clients/mariadb-client/
$ sudo apt install mariadb-client
# ログイン確認
$ mariadb -h 127.0.0.1 -u root -pパスワード
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.11.6-MariaDB-1:10.11.6+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
### redis-cli インストール
$ sudo apt install redis-tools
# ログイン確認
$ redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> quit
3-2-7. DBデータ移行
移行元サーバでDBのダンプデータを取得した後に、移行先(OCI)のインスタンスにデータを転送します。
なおデータ転送時には事前に、移行元と移行先のそれぞれの環境でポート22の通信の許可を行ってください。
### 移行元サーバでの作業
# mysqldump を実行してダンプデータを取得
$ mysqldump --single-transaction --skip-lock-tables -h 127.0.0.1 -u ユーザ名 -pパスワード --databases データベース名 | gzip > バックアップファイル名.sql.gz
# rsync で移行先サーバにダンプデータを転送
# rsyncを実行 ※/path/to/ssh/key はSSH鍵のパスを指定
$ rsync -avz -e "ssh -i /path/to/ssh/key" バックアップファイル名.sql.gz ubuntu@リモートサーバのIPアドレス:/リモートパス/
rsyncで移行先(OCI)にデータを転送したら、移行先サーバでDBのリストアを実施します。
### 移行先サーバ(OCI)での作業
# DBリストア
$ zcat バックアップファイル名.sql.gz | mariadb -h 127.0.0.1 -u root -pパスワード データベース名
以上でデータの移行が完了です。
念のため、正しく移行出来ているかを移行先のmariadbにログインして、データベースが存在しているかの確認を行いましょう。
3-2-8. WordPress設定ファイル wp-config.php の設定変更
WordPressの設定ファイル wp-config.phpのDBとRedisの向き先指定を変更してください。
define('DB_HOST', 'バックエンド用インスタンスのVNIC FQDN(もしくはIPアドレス):3306');
define('WP_REDIS_HOST', 'バックエンド用インスタンスのVNIC FQDN(もしくはIPアドレス)');
4. ロードバランサの作成
ロードバランサを作成し、バックエンドセットに 「3-1. フロントエンド用 インスタンスの構築」で作成したインスタンスを指定します。
https://docs.oracle.com/ja-jp/iaas/Content/Balance/Tasks/managingloadbalancer_topic-Creating_Load_Balancers.htm
5. 表示確認
ロードバランサ詳細で表示されている IPアドレス にアクセスし、Wordpressが表示されていれば成功です。
独自ドメインに設定する場合は、DNSレコードに登録すれば完了です。
以上になります。
SSL証明書はLB終端に配置していますので、次回はLet’s EncryptのSSL証明書を自動更新する方法をご紹介します。

