構築方法
1. VCNの作成
OCIドキュメントを参考にVCNを作成します
https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/create_vcn.htm
2. サブネットの作成
VCNを作成したらサブネットを作成します。今回の構成ではパブリックサブネットを3つ作成します。
https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/create_subnet.htm
3. コンピュートインスタンスの作成
今回用途に応じてコンピュートインスタンスを使い分けるため、計2台のインスタンスを作成します。
ArmベースのAmpereインスタンス(VM.Standard.A1.Flex) が無料で使えるのは月に4OCPU、メモリ24GBまでのため
1台のスペックを2OCPU、12GBでインスタンスを作成します。今回OSはUbuntu 22.04で構築を行います。
なお過去に、Ampereインスタンスが取得しづらいことからAmpereインスタンスを自動取得する記事を紹介しましたが、OCIアカウントの本登録(クレカ登録)を行うとすぐにAmpereインスタンスが取得できることがわかりました。
クレカ登録なしのアカウントだと相変わらずAmpereは取得できないので、本登録することをオススメいたします。
3-1. フロントエンド用 インスタンスの構築
OCIのコンソール画面からインスタンスを作成したら、SSHでインスタンスにログインし初期設定を行います。
3-1-1. 初期設定
### timezone設定
$ sudo timedatectl set-timezone Asia/Tokyo
### システムロケール設定
# 現在の設定確認
$ localectl status
System Locale: LANG=C.UTF-8
VC Keymap: n/a
X11 Layout: us
X11 Model: pc105
# 日本語言語パックをインストール
$ sudo apt install language-pack-ja-base language-pack-ja
$ sudo localectl set-locale LANG=ja_JP.UTF-8
# システムロケール設定の確認
$ localectl status
System Locale: LANG=ja_JP.UTF-8
VC Keymap: n/a
X11 Layout: us
X11 Model: pc105
3-1-2. nginx インストール
### 署名鍵の取得
# 参考:https://nginx.org/en/linux_packages.html#Ubuntu
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1561 100 1561 0 0 1435 0 0:00:01 0:00:01 --:--:-- 1436
# 署名鍵の確認
$ gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
# リポジトリ登録
$ sudo vim /etc/apt/sources.list.d/nginx.list
# 中身
$ cat /etc/apt/sources.list.d/nginx.list
deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu jammy nginx
# パッケージ更新
$ sudo apt update && sudo apt upgrade
ヒット:1 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease
ヒット:2 http://ap-osaka-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports jammy InRelease
ヒット:3 http://ap-osaka-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports jammy-updates InRelease
ヒット:4 http://ap-osaka-1-ad-1.clouds.ports.ubuntu.com/ubuntu-ports jammy-backports InRelease
ヒット:5 http://nginx.org/packages/ubuntu jammy InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
パッケージはすべて最新です。
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
# nginx インストール
$ sudo apt install nginx
# nginx 起動
$ sudo systemctl start nginx
# nginx 起動確認
$ systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-08 12:20:00 JST; 22s ago
Docs: https://nginx.org/en/docs/
Process: 2944 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 2945 (nginx)
Tasks: 3 (limit: 14204)
Memory: 2.5M
CPU: 20ms
CGroup: /system.slice/nginx.service
├─2945 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
├─2946 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
└─2947 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
1月 08 12:20:00 instance-name systemd[1]: Starting nginx - high performance web server...
1月 08 12:20:00 instance-name systemd[1]: Started nginx - high performance web server.
# OCIでUbuntuの場合、セキュリティリストのほかにiptablesが有効になっているため、port:80を許可する
# 参考:https://cloudsolution.terilogy.com/blog/oci-ubuntu-iptables
$ sudo iptables -I INPUT -p TCP --dport 80 -j ACCEPT
# iptables設定の永続化
$ sudo /etc/init.d/netfilter-persistent save
$ sudo /etc/init.d/netfilter-persistent reload
# nginx 自動起動設定を有効
$ sudo systemctl enable nginxnginxが起動できたら最低限以下の設定を行います。
# nginxのバージョン非表示
$ sudo vim /etc/nginx/nginx.conf
server_tokens off;
# 設定変更後はサービス再起動
$ sudo systemctl restart nginx
3-1-3. PHP8.3 インストール
# リポジトリを追加
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update && sudo apt upgrade
# php8.3 インストール
$ sudo apt install php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl} php8.3-xml
# インストールできたか確認
$ php -v
PHP 8.3.1 (cli) (built: Dec 21 2023 20:12:13) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies
with Zend OPcache v8.3.1, Copyright (c), by Zend Technologies
# php-fpm インストール
$ sudo apt install php8.3-fpm
# 起動されているかの確認
$ systemctl status php8.3-fpm
● php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php8.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2024-01-20 21:11:20 JST; 4min 18s ago
# php8.3 gdライブラリインストール
# これをインストールしないとWordpressでアップロードする画像のサイズ指定ができないため
# 参考:https://sologaku.com/wordpress/images-only-full-size/
$ sudo apt install php8.3-gd
# php8.3 zip拡張インストール
$ sudo apt install php8.3-zip
3-1-4. phpredis インストール
WordPressのRedisプラグイン「Redis Object Cache」などを利用している場合は、phpredisをインストールします。
WordpressでRedisを使用しないかたはインストール不要です。
# pecl インストール
$ sudo apt install php-pear
# インストール確認
$ pecl version
PEAR Version: 1.10.12
PHP Version: 8.3.2-1+ubuntu22.04.1+deb.sury.org+1
Zend Engine Version: 4.3.2
Running on: Linux instance-name 5.15.0-1049-oracle #55-Ubuntu SMP Mon Nov 20 19:53:49 UTC 2023 aarch64
# phpizeコマンドを動かすためにphp-devをインストール
$ sudo apt install php-dev
# php設定ファイルの末尾にSSL通信の設定を追加 ※pecl実行時にエラーになった場合、ここの設定を行う
$ sudo vim /etc/php/8.3/fpm/php.ini
openssl.cafile = /etc/ssl/certs/ca-certificates.crt
# phpredis インストール
$ sudo pecl install redis
# 以下のダイアログが出るがデフォルトのままでよいので、そのままEnterを実行
enable igbinary serializer support? [no] :
enable lzf compression support? [no] :
enable zstd compression support? [no] :
enable msgpack serializer support? [no] :
enable lz4 compression? [no] :
use system liblz4? [yes] :
# php設定ファイルの末尾にredis.soを追加
$ sudo vim /etc/php/8.3/fpm/php.ini
extension=redis.so
# サービス再起動
$ sudo systemctl restart php8.3-fpm
$ sudo systemctl restart nginx
3-1-5. WordPressファイル配置
/usr/share/nginx/ 配下にWordpressのファイルを配置します。
※新規インストールの場合は WordPress公式からファイルをダウンロードします
※今回は移行なので、旧サーバからファイルをコピーし /usr/share/nginx/ に配置します
フロントエンド用のインスタンス構築は以上です。次にバックエンド用インスタンスの構築を行います。
