※2024/1/5時点の記載を更新
初めに
QOLを上げるため、自宅内にプライベートサーバを構築しています。
個人利用を目的としているため、自宅のWindowsPC上にVMWareをインストールし、仮想サーバ(LinuxOS)を構築できる環境があることを前提としています。
この記事で紹介している内容は、構築方法となります。
- 各種ソフトウェアのインストール
- テーブル移行のポイント
(テーブル設計)
要件や設計に関しては、別記事に記載しています。
背景
プライベートオンリーの日記および家計の状況分析と可視化を目的とした統合管理サーバ(自称ですが・・・)を、自宅用PC内の仮想マシン(centos7.6)として構築していました。(下記方法で構築)
今後も使用継続していきたいところでしたが、
利用していたcentos7.6が2024年6月30日にサポート期限が終了し、移行しないとセキュリティアップデートができなくなる懸念がありました。
そこで、よりセキュリティアップデートが期待できるOSにするため、新しいosへの入れ替えを検討・構築を行いました。
検討内容
OSのディストリビューション検討
RockyLinux9.0とalmalinux8.4とで検討しました。
リリース後の修正対応の速さを重視するため、AlmaLinuxを採用しました。
移行前後の構成
移行前後でソフトウェアの構成が変わりましたので、そのノウハウを備忘で記載しました。
移行前と移行後の構成は下記の通りです。
基本的には変わらないのですが、細かいところで差異があります。
* サーバアーキテクチャのそれぞれの設計観点は別の記事で記載を予定しています。
- 移行前
-
移行後
移行前後のバージョン差異
バージョン差異をまとめると以下の通りとなります。
総じていうと、AlmaLinuxでは、一部のソフトウェア(Apache、JDK)で最新でないものがインストールされるので、注意が必要です。
(今回、移行前後でバージョンは揃えていませんが、バージョンをそろえる必要がある場合はインストール方法を検討したほうがよろしいかと思います。)
ソフトウェア | 移行前 | 移行後 | やったこと |
---|---|---|---|
CPU | 1GB(1コア) | 1GB(1コア) | 初期構築時に1GB(1コア)設定 |
仮想メモリ | 1GB | 2GB | VmwarePlayerからメモリ増設 |
ディスク | 30GB | 20GB | 初期構築時にディスク20GB設定 |
OS | CentOS7.6 | AlmaLinux8.4 | イメージの選択 |
Apache | 2.4.6 | 2.4.37 | dnf install httpd |
Wordpress | 4.2.32(PG4WP:1.3.1) | 6.1 | wordpress6.1をwgetでDL |
Metabase | v0.37.6 | v0.36.3 | Metabasev0.36.3のjarファイルをwgetでDL |
Postgresql | 9.2.24 | mysqlへ移行 | dnf install mariadb |
mongoDB | ※未使用 | dnf install mongod | |
java(JDK) | 1.8.0_332 | 1.8.0_342 | dnf install java |
php | 忘れた | 1.8.0_342 | dnf install php |
接続方式 | http接続 | https接続 | ApacheのSSL証明書作成 |
参考:https://qiita.com/zakuroishikuro/items/f33929eab9d55c5bd073
CPU
1GB、1コアで変更なしとなります。
仮想メモリ
移行前はそれほど、メモリを使用していなかったのですが、
mysqlとmetabaseを移行したところ、
SQLクエリ実行時、javaでメモリを大量消費してしまう事象が発生し、swapが大量に発生してしまいした。
そのため、1GBから2GBに増やしています。
■■■移行前■■■
●Metabaseにログイン中の状態
[root@homeserver_org metabase]# free -h
total used free shared buff/cache available
Mem: 972M 742M 69M 38M 161M 60M
Swap: 4.0G 69M 3.9G
[root@homeserver_org metabase]#
■■■移行後■■■
●Metabaseにログイン中の状態
[root@homeserver ~]# free -h
total used free shared buff/cache available
Mem: 1.7Gi 990Mi 276Mi 9.0Mi 518Mi 638Mi
Swap: 2.0Gi 147Mi 1.9Gi
ディスク
ディスク全体サイズを30GB→20GBに減らしています。
移行前は/varを使い果たしてしまう懸念があったため、
/varを10GB拡張し、合計30GBとしていましたが、
ほかのパーティション(/opt、/home、/)
をあまり使用していないため、
移行後はディスク集約し、合計20GBで構成しました。
■■■移行前■■■
[root@homeserver_org ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 7.0G 2.3G 4.8G 32% /
/dev/mapper/centos-var 13G 1.5G 12G 11% /var
/dev/mapper/centos-opt 3.0G 741M 2.3G 25% /opt
/dev/mapper/centos-home 2.0G 59M 2.0G 3% /home
/dev/sda1 1014M 163M 852M 17% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@homeserver_org ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <29.00 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 7423
Free PE 0
Allocated PE 7423
PV UUID MLSbDZ-yoIj-Q2TK-u67C-DNav-uze1-96ubHI
[root@homeserver_org ~]#
■■■移行後■■■
[root@homeserver ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 873M 0 873M 0% /dev
tmpfs 893M 0 893M 0% /dev/shm
tmpfs 893M 17M 876M 2% /run
tmpfs 893M 0 893M 0% /sys/fs/cgroup
/dev/mapper/almalinux-root 17G 6.4G 11G 38% /
/dev/sda1 1014M 357M 658M 36% /boot
tmpfs 179M 0 179M 0% /run/user/0
[root@homeserver ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name almalinux
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID ddKRKp-Cs3k-JjxL-MPYl-t38g-wznh-1ESkq9
[root@homeserver ~]#
OS(ディストリビューション)
ディストリビューションについては、
-
RHEL8
-
Alma Linux8.4
-
Rocky Linux9.0
のどれかで迷いましたが、 -
リポジトリやクラウドへの対応がほかのOSSよりも早い点
-
RHELのクローンとして開発されているので、使い勝手がよい点
-
Almalinuxに関しては最も記載がある点
上記より、AlmaLinuxを採用しました。
参考:
https://almalinux.org/ja/
https://www.designet.co.jp/ossinfo/almalinux/
OSのイメージファイルは下記を使っています。
- 移行前:CentOS-7-x86_64-Everything-1810
- 移行後:AlmaLinux-8.4-x86_64-dvd
Apache
デフォルトインストールをしたのですが、むしろバージョンが移行前よりも下がってしまいました。
dnf install httpd
とはいえ、Apache2.4のバージョン差異はほとんどないため、そのままとしています。
- ディレクティブの設定
- IP制限設定
※今後、バージョンアップも検討中
Wordpress
移行前は、postgresをデータベースとして、プラグイン(PG4WP:1.3.1)
を入れていたため、 wordpressのバージョンは4.2.32を使用していました。
しかし、セキュリティ脆弱性対策するにはバージョンアップが必要となり、postgreSQLへの接続プラグインが対応できない問題が発生したため、
移行後は、最新のWordpressをダウンロードし、インストールをしています。(postgre SQLは辞めて、MySQLに変更しています。)
Metabase
移行前バージョンは v0.37.6でしたが、postgre SQLからMySQLに変わったことと、v0.36.3にバージョンが下がってしまったので、JDKのインストールに応じてMetabaseのバージョンを変えています。
(バージョンは、管理者の画面からトラブルシューティングを確認しています。)
※今後、Metabaseの管理者画面からアップデートを検討中でしたが、2023/12/2時点で、アップデート済みとなるため、JDK含めてアップデートを実施済の状況です。
(※別記事に記載する予定です。★)
PostgreSQL(廃止)
- 移行前はPostgreSQLを使用していました。
- 先述と同様ですが、Wordpressの最新化を行うため、PostgreSQLを使用することは難しいと判断したため、移行後は廃止しています。
https://and-engineer.com/articles/YRg9zBAAACEA4e1T#heading2-3
https://www.linode.com/ja/blog/databases/choosing-a-database-mysql-or-postgresql/
MySQL
- Wordpressと相性のよいMySQLを使用しています。
- インストール方法は下記になります。
dnf install mariadb
mongoDB
- ※PostgreSQLはクエリを最適化する機能が充実しているため、大量のクエリや分析に向いていたので、移行前での問題は出なかったのですが、MySQLに変更したことによって、書き込み速度が遅い問題が発生しました。
- 一部の処理(ログのデータベース保存先)をmongodbに移行しています。
- サーバで発生しているエラーログ(/var/log/messages、metabaseのログ、cronの実行ログ)をデータベースに保存・蓄積する機能の代替データベースとして利用しています。
(MySQLを使用しない理由として、データを取り込みするときに大量データを挿入するのに時間がかかっていたため。)
dnf install mongodb
java(JDK)
javaはMetabaseを起動するのに必要なソフトウェアになります。
特に変わったことはしていないですが、JDKのインストールに応じてMetabaseのバージョンを変えています。
今回は、java-1.8.0-openjdk-1.8.0.342.b07-2.el8_6.x86_64を入れています。
[root@homeserver ~]# ps -ef | grep metabase | grep -v grep
metabase 1015 1 4 17:05 ? 00:02:32 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-2.el8_6.x86_64/jre/bin/java -jar /opt/metabase/metabase.jar
[root@homeserver ~]#
接続方式
移行前はHTTP接続を使用していましたが、自宅内サーバをWi-Fiに接続し、宅内のPC端末からログインすると、Googleなどのブラウザで安全ではない接続と判定されてしまいました。
セキュリティの観点(データの盗聴・改ざん・なりすまし)でよろしくないので、移行後からHTTPS接続できるようApacheのSSL証明書を導入しています。
2023/12/2時点では、metabase、Wordpress、PythonAPIの利用はHTTPS接続を実現している状況です。
https://qiita.com/clown0082/items/551d7c081ff6b41b1717
https://teratail.com/questions/pg4afpa3x57v7y
(参考)バージョン確認コマンド
各ミドルウェアの移行前後のバージョンを記載しています。
■■■移行前■■■
- 移行前はCentOS7.5ではyumコマンドでバージョンを確認します。
[root@homeserver_org ~]# yum list installed | grep httpd
httpd.x86_64 2.4.6-97.el7.centos.5 @updates
httpd-tools.x86_64 2.4.6-97.el7.centos.5 @updates
[root@homeserver_org ~]# yum list installed | grep postgresql
postgresql.x86_64 9.2.24-7.el7_9 @updates
postgresql-jdbc.noarch 9.2.1002-8.el7_8 @updates
postgresql-jdbc-javadoc.noarch 9.2.1002-8.el7_8 @updates
postgresql-libs.x86_64 9.2.24-7.el7_9 @updates
postgresql-odbc.x86_64 09.03.0100-2.el7 @base
postgresql-server.x86_64 9.2.24-7.el7_9 @updates
[root@homeserver_org ~]#
- 各ミドルウェアのバージョンを確認します。
[root@homeserver_org ~]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Mar 24 2022 14:57:57
[root@homeserver_org ~]# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
[root@homeserver_org ~]#
-bash-4.2$ psql --version
psql (PostgreSQL) 9.2.24
-bash-4.2$
■■■移行後■■■
- 移行後はAlmalinux8.4のため、yumではなくdnfコマンドでバージョンを確認します。
(※yumの後継がdnfになりますが、yumでも一応使えはします。)
- yumの場合
[root@homeserver ~]# yum list installed | grep httpd
almalinux-logos-httpd.noarch 84.5-1.el8 @appstream
httpd.x86_64 2.4.37-47.module_el8.6.0+2935+fb177b09.2 @appstream
httpd-filesystem.noarch 2.4.37-47.module_el8.6.0+2935+fb177b09.2 @appstream
httpd-tools.x86_64 2.4.37-47.module_el8.6.0+2935+fb177b09.2 @appstream
[root@homeserver ~]# yum list installed | grep mysql
php-mysqlnd.x86_64 8.0.22-1.el8.remi @remi-modular
- dnfの場合
[root@homeserver ~]# dnf list --installed | grep java
java-1.8.0-openjdk.x86_64 1:1.8.0.342.b07-2.el8_6 @appstream
java-1.8.0-openjdk-headless.x86_64 1:1.8.0.342.b07-2.el8_6 @appstream
javapackages-filesystem.noarch 5.3.0-2.module_el8.0.0+6004+2fc32706 @appstream
tzdata-java.noarch 2022a-1.el8 @appstream
[root@homeserver ~]# dnf list --installed | grep php
gd3php.x86_64 2.3.3-8.el8.remi @remi-safe
oniguruma5php.x86_64 6.9.8-1.el8.remi @remi-safe
php.x86_64 8.0.22-1.el8.remi @remi-modular
php-cli.x86_64 8.0.22-1.el8.remi @remi-modular
php-common.x86_64 8.0.22-1.el8.remi @remi-modular
php-fpm.x86_64 8.0.22-1.el8.remi @remi-modular
php-gd.x86_64 8.0.22-1.el8.remi @remi-modular
php-intl.x86_64 8.0.22-1.el8.remi @remi-modular
php-mbstring.x86_64 8.0.22-1.el8.remi @remi-modular
php-mysqlnd.x86_64 8.0.22-1.el8.remi @remi-modular
php-opcache.x86_64 8.0.22-1.el8.remi @remi-modular
php-pdo.x86_64 8.0.22-1.el8.remi @remi-modular
php-sodium.x86_64 8.0.22-1.el8.remi @remi-modular
php-xml.x86_64 8.0.22-1.el8.remi @remi-modular
[root@homeserver ~]#
[root@homeserver ~]# dnf list --installed | grep httpd
almalinux-logos-httpd.noarch 84.5-1.el8 @appstream
httpd.x86_64 2.4.37-47.module_el8.6.0+2935+fb177b09.2 @appstream
httpd-filesystem.noarch 2.4.37-47.module_el8.6.0+2935+fb177b09.2 @appstream
httpd-tools.x86_64 2.4.37-47.module_el8.6.0+2935+fb177b09.2 @appstream
[root@homeserver ~]# dnf list --installed | grep mysql
php-mysqlnd.x86_64 8.0.22-1.el8.remi @remi-modular
[root@homeserver ~]#
参考:
- 各ミドルウェアのバージョン確認
[root@homeserver ~]# httpd -v
Server version: Apache/2.4.37 (AlmaLinux)
Server built: Jun 22 2022 07:12:01
[root@homeserver ~]# java -version
openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
[root@homeserver ~]# mysql --version
mysql Ver 15.1 Distrib 10.3.32-MariaDB, for Linux (x86_64) using readline 5.1
[root@homeserver ~]# mongo --version
MongoDB shell version v4.4.15
Build Info: {
"version": "4.4.15",
"gitVersion": "bc17cf2c788c5dda2801a090ea79da5ff7d5fac9",
"openSSLVersion": "OpenSSL 1.1.1k FIPS 25 Mar 2021",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "rhel80",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
[root@homeserver ~]#
データ移行方法
- MySQLではSQL文がpostgre SQLと異なるため、インポートが難しい状況でした。そのため、専用のクライアントツール(a5m2)により、テーブル単位でCSVエクスポートし、データインポートを行いました。
- (手でのインポートなのでかなり大変でした…)
- Wordpressに登録しているデータは下記の方法で移行しました。
- 移行前のWordpressからツール→エクスポートより、すべてのコンテンツを選択し、
エクスポートファイルをダウンロードをする。 - 移行後のWordpressからツール→インポートより、WordPressのインポーターの実行を実行する。
- 移行前のWordpressからツール→エクスポートより、すべてのコンテンツを選択し、
後述
- 災対環境も構築したくなりました。
(仮想マシンをovaファイル化し、データはファイル管理していく。) - Jenkinsによるタスク自動化やFlaskを用いたPythonAPIを利用したい。
- 2023/12/2時点でWebフレームワークが多様化かつPythonやReact.jsといったフロントエンドも経験したいというのもあり、でPythonとReact.jsでの実装シフトを検討しています。
- 機能追加が増えている面もあるため、コンテナベースのLAMPサーバを構築したくなりました。
- LinuxOSの PCに、vmvare workstation playerを入れられるようで、将来的にはWindows PCでの運用を検討中です。
- https://zenn.dev/isi00141/articles/333de2f545a46b
- linux版インストールにはcentos7系、メモリとしては4GB以上推奨とあるので、要件的には問題無し
- Linux OSの PC上で、仮想サーバを起動しておく
- 今使用しているWindows PCにはovfファイルをバックアップとして保管を検討中