タグ: Linux Page 1 of 38

RHEL9系でMySQLのrootパスワードを忘れてしまったときの再設定メモ

本手順は、MySQLのrootパスワードを紛失し、通常の方法でログインできなくなった場合に実施する「非常時用」のリカバリ手順です。

作業の前に

この作業は本来ならばあってはならない作業です。パスワード失念はセキュリティ事故の筆頭。ましてやWebシステムの神に等しいDBを司る通行証が消えた。なので、

  • 事前にアカウント情報を記したファイルを保存する
  • 適切な場所、適切なアクセス権で保管する

は必須ですが

往々にしてこの事故は起きます。なので、「マジで起きてしまった。取り敢えずの迅速な復旧」を望んでいる(つまり今回の私のような)方へのメモとなります。

この手順が笑える状況

  • 構築中
  • 検証作業中

のいずれかのみ。本番稼働中だったらまず笑えませんし、許可を得るための政治力・交渉力は甚大なものになります。筆者は「構築中」のパターンです。

環境

  • RHEL9系(RockyLinux9系)
  • MySQL 8

注記:RHEL 9系での注意点

  • 従来の mysqld_safe コマンドは廃止されているため、systemctl set-environment を使用して起動オプションを制御します。
  • MySQL 8.0以降は skip-grant-tables モード中でも FLUSH PRIVILEGES を実行しない限り ALTER USER コマンドが受け付けられない仕様となっています。

作業影響

  • 作業中にMySQLが止まる

これに尽きますが、「起きてしまったことは仕方ない。潔くサパッと止めてサクッと終わらせる」を心がけます。

さっくりとした手順

  1. MySQLサービスを停止します。
  2. 認証をスキップするための環境変数をセットします。
  3. 認証スキップ状態でMySQLを起動します。
  4. rootパスワードのリセットを行います。
  5. 認証を有効化してMySQLサービスを起動します。
  6. リセットされたパスワードでMySQLに入れることを確認します。

MySQLサービスの停止

  • MySQL停止
sudo systemctl stop mysqld
  • MySQL停止確認
systemctl status mysld

inactive(dead)を確認します。

認証をスキップするための環境変数をセットします。

  • 認証スキップのオプションを環境変数に一時セット
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

(--skip-networkingを付けることで、作業中の外部接続を遮断し安全を確保します。)

認証スキップ状態でMySQLを起動します。

sudo systemctl start mysqld
  • MySQL起動確認
systemctl status mysld

active(running)を確認します。

rootパスワードのリセットを行います。

認証がスキップされている状態でログインし、権限テーブルを強制ロードしてからパスワードを書き換えます。

  • パスワードなしでrootログイン
mysql -u root

これでログインできたらひとまず成功です。ここからはSQL捜査を行います。

  • 権限テーブルをリロード (ALTER USER を実行可能にするために必須)
FLUSH PRIVILEGES;
  • パスワードの変更を実施します。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_strong_password';
  • 変更を確定して終了
FLUSH PRIVILEGES;
exit

認証を有効化してMySQLサービスを起動します。

一時的な環境変数を削除し、通常の認証が有効な状態で再起動します。

  • MySQLを一旦停止
systemctl stop mysqld
  • MySQL停止確認
systemctl status mysld

inactive(dead)を確認します。

  • セットした環境変数を必ず解除 (これを忘れると誰でも入れる状態が続くため重要)
systemctl unset-environment MYSQLD_OPTS
  • 通常どおりサービスを起動
sudo systemctl start mysqld
  • MySQL起動確認
systemctl status mysld

リセットされたパスワードでMySQLに入れることを確認します。

mysql -u root -p

新しいパスワードでログインできたことを確認します。

まとめ

「起きないことが第一」とは言いますが、本当にくだらない理由でこういう事象は発生します。なので

  • 起きてしまったことは潔く認める
  • そこから原状の復旧を目指す。
  • 責任の追及とか誰がイモを引くかはその後で考える

の三段活用。“全裸大佐”が言う

過ちを気に病むことはない。ただ認めて、次の糧にすればいい

という「大人の特権」をフル活用しましょう。

レポジトリ一覧を確認するためのワンライナー。

RHEL系のサーバ設定で結構重要になってくる「サーバがどのレポジトリを使っているか?

これを簡単に調べるワンライナーです。

環境

Rocky Linux 9.10

ワンライナー

echo -e "|Repo-id|Repo-name|\n|---|---|" && dnf repolist -q | awk '$1 != "repo" && NF > 1 {id=$1; $1=""; sub(/^[ \t]+/, ""); print "|" id "|" $0 "|"}'

出力結果

Repo-idRepo-name
appstreamRocky Linux 9 - AppStream
baseosRocky Linux 9 - BaseOS
epelExtra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
extrasRocky Linux 9 - Extras
remi-modularRemi's Modular repository for Enterprise Linux 9 - x86_64
remi-safeSafe Remi's RPM repository for Enterprise Linux 9 - x86_64
zabbixZabbix Official Repository - x86_64
zabbix-non-supportedZabbix Official Repository (non-supported) - x86_64
zabbix-toolsZabbix Official Repository (tools) - x86_64

と、このままマークダウン記事として貼り付けられるようになっています。

仕組み

1. echo -e "|Repo-id|Repo-name|\n|---|---|"

Markdown形式の表の「見出し」を無理やり作っている部分です。

  • echo -e: 「バックスラッシュ記法」を有効にするオプションです。
  • \n: これがあることで、1行目の見出しと2行目の区切り線(|---|---|)の間で改行されます。

2. dnf repolist -q

システムのレポジトリ一覧を取得するコマンドです。

  • repolist: 有効なレポジトリの ID と名前を表示します。
  • -q (quiet): 「メタデータの期限切れ確認」などの余計なメッセージを非表示にし、純粋なリストの結果だけを出力します。

3. awk '$1 != "repo" && NF > 1 { ... }'

受け取ったテキストを1行ずつ加工しています。

要素意味
$1 != "repo"1番目の項目(Repo-id)が "repo" という文字列ではない行だけを処理する(見出し除外)。
NF > 1項目の数(Number of Fields)が1つより多い行=空行などを除外。
id=$11番目の項目(Repo-id)を変数 id にキープ。
$1=""1番目の項目をデータから消去。これで残りの $0(行全体)が Repo-name だけになります。
sub(/^[ \t]+/, "")1列目を消した後に残ってしまう「先頭の空白」を削除して綺麗にします。
print "|"...最後に、Markdownの枠組み | で囲って出力します。

まとめ

  1. echo で表の見た目を作り、
  2. dnf でデータを静かに(-q)呼び出し、
  3. awk で「いらない行(repo)」を捨てつつ、1列目(ID)とそれ以降(Name)をバラバラにして | で挟み直す。

という流れになっています。

Ubuntu26.04にRedmine6.1をインストール。(並びにハマったところのメモ)

以下の環境でインストールを確認しています。

  • Ubuntu 26.04
  • Ruby: 3.3 以上 (Ubuntu標準パッケージ)
  • Redmine: 6.1-stable
  • DB: MySQL 8.x

本記事で実施すること

  1. Redmineを動かすためのパッケージがインストールできるように準備をします。
  2. Redmineを動かすためのパッケージ(Ruby/データベース/Webサービスなど)をインストールします。
  3. データベースやWebサービスの基礎設定を行います。
  4. Redmineの動作確認を行います。

想定している読者

  • 「Redmine」をUbuntuにインストールしてみたい
  • まずは動くところまで確認できればいい

前提

  • Ubuntuサーバの初期設定が終わった直後の状態を想定します。
  • DNSでドメインの名前が解決できることを前提としています
  • 環境は以下の通りです。
  • Apache系
  • MySQL
  • Ruby
    • 3.3 (Ubuntu 26.04)
  • また、パッケージ管理としてaptitudeを用いています。aptが好みの方はこちらに読み替えてください。

特記事項

  • 本手順ではRedmine 6.1.2をインストールします。
  • 本記事のredmineの格納ディレクトリは/home/www-data/redmineです。一般的なディレクトリ(/var/lib/redmine)と異なることを最初に注記します。
  • ほぼコピペだけで済むような構成にしていますが、一部、テキストエディタを使用する箇所があります。
  • また、自身の環境に合わせたりパスワードを設定する項目がありますのでそこは注意してください。

手順

必要なパッケージをインストールします。

  • パッケージ全体のアップデート
sudo aptitude update
  • 必要なパッケージのインストール
sudo aptitude install build-essential zlib1g-dev libssl-dev libreadline-dev libyaml-dev libcurl4-openssl-dev libffi-dev mysql-server mysql-client apache2 apache2-dev libapr1-dev libaprutil1-dev imagemagick libmagick++-dev fonts-takao-pgothic subversion git ruby libruby ruby-dev libmysqlclient-dev

apacheの追加モジュールをインストールします。

sudo aptitude install libapache2-mod-passenger

rubyのパッケージ管理(gem)を用いて必要なライブラリをインストールします。

sudo gem install bundler racc mysql2

「3 gems installed」が表示されればインストール成功です。

必要に応じてmysqlの初期設定を行います。

mysql_secure_installationによる初期設定を行います。

うまくいかない場合は以下を参照してください。

https://barrel.reisalin.com/books/bbf94/page/mysql-secure-installation

mysqlでDBとユーザーを設定します。

sudo mysql -u root -p

上記で設定した「mysqlのrootパスワード」を入力し、mysqlにログインします

CREATE DATABASE redmine character set utf8mb4;

DB "redmine" を作成します

CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'password';

ユーザ "redmine"を作成し、パスワードを設定します。
この'password'は任意のパスワードに変更してください

GRANT ALL ON redmine.* TO 'redmine'@'localhost';
flush privileges;
exit

設定したDBでログインできることを確認します。

mysql -u redmine -p
SHOW DATABASES;
exit
  • 配置ディレクトリ作成
sudo mkdir -p /home/www-data/redmine

自分の環境に合わせます。

  • 所有者変更
sudo chown -R www-data:www-data /home/www-data
  • Redmine 6.1を入手
sudo -u www-data svn co https://svn.redmine.org/redmine/branches/6.1-stable /home/www-data/redmine

Redmineのコンフィグを設定します。

  • サンプルファイルをコピーしてコンフィグを編集
sudo -u www-data cp -pi /home/www-data/redmine/config/database.yml.example /home/www-data/redmine/config/database.yml

/home/www-data/redmine/config/database.yml

このファイルを教義・信仰に従ったエディタで編集してください。

database.yml 編集内容

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  # rootからredmineに変更します
  password: "redmine用のパスワード"
  encoding: utf8mb4
# 本番環境(production)のみ設定を行います

Redmineのマイグレーションを行います。

  • Redmineのルートディレクトリに移動
cd /home/www-data/redmine/ && pwd

/home/www-data/redmine/ (Redmineを配置したディレクトリ)であることを確認します

  • Bundlerの設定

※26.04でハマったところです。Bundlerの設定を行う必要がありました。

sudo -u www-data bundle config set --local path 'vendor/bundle' && sudo -u www-data bundle config set --local without 'development test'
  • stringio競合回避

※これが一番ハマった部分です。Redmineが必要とするライブラリとUbuntu26.04のRubyのgemに齟齬があったため、これに気づかずエラーを繰り返しました。

sudo -u www-data bundle update stringio
  • bundle install
sudo -u www-data bundle install
  • シークレットトークンの発行
sudo -u www-data bundle exec rake generate_secret_token RAILS_ENV=production
  • DBマイグレーション
sudo -u www-data bundle exec rake redmine:load_default_data RAILS_ENV=production
  • 日本語化
sudo -u www-data RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
  • アセットのプリコンパイル

※これもハマりました。表示エラーが出てきました。

sudo -u www-data bundle exec rake assets:precompile RAILS_ENV=production

Apacheの設定ファイルを作成します。

【】を自分の作成したRedmineのサーバ名/ドメイン名に変更します。

cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/redmine.conf
<VirtualHost *:80>
    ServerName 【hoge.example.com】
    # ServerNameは自身が設定したredmineに読み替えてください。
    DocumentRoot /home/www-data/redmine/public
    <Directory /home/www-data/redmine/public>
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
__EOF__

設定を反映させます。

  • ファイル作成確認
ls -l /etc/apache2/sites-available/redmine.conf
  • 設定ファイル有効化
sudo a2ensite redmine.conf
  • 初期サイト設定を無効化
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
  • コンフィグファイル整合性確認
sudo apache2ctl configtest

Syntax OK を確認します

  • 設定反映前のapacheステータス確認
systemctl status apache2.service

active(running)を確認します

  • apache再起動
sudo systemctl restart apache2.service
  • 設定反映後のapacheステータス確認
systemctl status apache2.service

active(running)を確認します

Webページの表示を確認します。

http://設定したRedmineドメイン

でRedmineのトップページが表示されれば成功です。

直ちにadmin/adminでログインし、強固なパスワードを設定し直します。

Ubuntu26.04にPHP8.5/PHP8.5-FPMをインストール。

概要

Ubuntu 26.04でWebアプリ(Nextcloudを想定)を動かす際の柱であるPHPのインストールを行います。

盛大にはまったポイント

2026/04/23にリリースされた26.04。導入されるミドルウェアの最新性がキモでした。

筆者が前項でやったレポジトリ追加は「26.04には対応してない。そもそもミドルウェアが合ってない」など言われましたが、
「リポジトリを追加するまでもなく最新版がインストールされる」ことに気づきませんでした。

さっくりとした手順

  1. システムを最新化します。
  2. PHP 8.5本体を導入します。
  3. 必須モジュールをインストールします。
  4. PHP-FPMを導入します。
  5. 高速化設定を行います。(OPcache, APCu周り)
  6. 設定を反映します。

システムの更新

まずは標準リポジトリを最新の状態にします。

sudo aptitude update

PHP 8.5 本体と Redis サーバーのインストール

メタパッケージ(バージョン指定なし)を使用することで、OSが最適な 8.5 系を自動選択します。

sudo aptitude install php php-fpm php-common php-cli php-readline redis-server

当初筆者はPHP8.4を選択していたのですが、そこが盛大なはまりポイントでした。(PHPの動向を追っていなかったという失態もあります)

Nextcloud 必須・推奨拡張モジュールのインストール

Nextcloudの動作に不可欠なモジュール群を一括で導入します。

sudo aptitude install php-{bcmath,bz2,curl,gd,gmp,intl,ldap,mbstring,mysql,sockets,xml,zip,imagick,redis,apcu,memcached}

Apache 連携設定 (PHP-FPM版)

Apacheで PHP 8.5 を FPM 経由で動作させる設定です。

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.5-fpm
sudo systemctl restart apache2

5. PHP 8.5 高速化設定 (OPcache / APCu)

Nextcloudの警告を消し、パフォーマンスを最大化するための設定です。

  • OPcache設定の作成
cat <<- __EOF__ | sudo tee /etc/php/8.5/mods-available/opcache.ini > /dev/null
; configuration for php opcache module
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=256
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__

→ 既にあるファイルを上書きます。(切り戻し想定せず)

  • APCu設定の作成
cat <<- __EOF__ | sudo tee /etc/php/8.5/mods-available/apcu.ini > /dev/null
extension=apcu.so
[apcu]
apc.enabled=1 apc.shm_size=32M apc.ttl=7200 apc.enable_cli=1 apc.serializer=php __EOF__

 設定の有効化

sudo phpenmod opcache apcu

このphpenmodもハマりポイントでした。従来の ln -sではなく、専用コマンドを用いることでfpm / cli / apache-mod でも安定した運用が可能になります。

サービスの再起動と確認

sudo systemctl restart php8.5-fpm
sudo systemctl restart redis-server
sudo systemctl restart apache2
  • バージョンの確認
php -v

with Zend OPcache v8.5.4 等 と表示されれば正解です。

備考:PHPを用いるWebアプリ設定の確認

Apacheの各サイト設定ファイル (/etc/apache2/sites-available/*.conf) 内で、必ず 8.5 のソケットを指定してください。

<FilesMatch \.php$>
&nbsp; &nbsp; SetHandler "proxy:unix:/var/run/php/php8.5-fpm.sock|fcgi://localhost/"
</FilesMatch>

これを入れないと、

The requested URL was not found on this server.   
    
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

の非情なるメッセージが返ってきます。

Apacheのインストールと初期設定(Ubuntu 26.04)

概要

Ubuntu26.04にWebサーバーApacheをインストールします。最近のトレンドではNginxではあるものの、

  1. 豊富なモジュールとカスタマイズ
  2. 動的コンテンツの設定をしやすい
  3. 小規模サイトを立ち上げる上での手間の少なさ
  4. 外部ファイルやモジュールの連携により、以下のような細かい設定が可能
  • 自宅等からのアクセスログを残さず、ログの透明化を図る
  • Robots.txtを無視する悪質なクローラーの排除
  • mod_securityに代表されるWAF(Web Application Firewall)の設置

を考慮してのApache設定です。

さっくりとした手順

  1. (未実施の場合必須)UFWの設定を行います。
  2. Apacheのインストールを行います。
  3. Apacheの設定を行います。
  4. 設定の反映を確認します。

(未実施の場合必須)UFWの設定

この作業、サーバ移設などになれている人ほど陥る罠です。「設定はしっかりしている。なのにサンプルページすら引っかからない!」という場合、大概が「UFWでポート80/443を空けていない」パターンが大半を占めます。

大前提

SSH接続を許可(ポート22はSSH記事で許可済みを前提とする)。

設定の前の心構え:

UFWは堅牢であると同時に融通の利かない門番です。設定を間違えると「自分のサーバにログインできない」事態が易々と発生します。

そのため、この作業に臨む際は落ち着いて臨みましょう。コマンドを打つ際に3回ぐらい深呼吸してもいいぐらいの心構えです。

  • http通信を許可する
sudo ufw allow http comment 'Allow HTTP traffic for Apache'
  • https通信を許可する
sudo ufw allow https comment 'Allow HTTPS traffic for Apache'
  • 設定を確認する
 sudo ufw status verbose

上記、http/httpsが有効になっていることを確認します。

  • UFWが有効になっていない場合:有効化
sudo ufw enable 

インストールを行います。

  • パッケージ全体のアップデート
sudo aptitude update 
  • apacheのインストール
sudo aptitude install apache2
  • バージョン確認
apache2ctl -v
  • 表示例
Server version: Apache/2.4.62 (Ubuntu)
Server built:   2024-07-22T12:37:10
  • サービス稼働確認
systemctl status apache2.service

enabledactive (running)を確認します。

設定を行います。

  • 設定ファイルのバックアップ
sudo cp -pi /etc/apache2/apache2.conf /path/to/backup/directory/apache2.conf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • 設定ファイルのバックアップ確認
diff -u /path/to/backup/directory/apache2.conf.$(date +%Y%m%d) /etc/apache2/apache2.conf

差分が無いことでバックアップを確認します。

  • 設定ファイル追記
sudo tee -a /etc/apache2/apache2.conf > /dev/null << 'EOF'
ServerSignature Off
ServerTokens Prod
ServerName example.com
EOF

自分のサーバー名を英数字で置き換えてください。

  1. サーバーの署名をオフにして
  2. 最小限の情報のみを公開し
  3. Webサーバの名前を指定する

内容です。

  • 追記確認
diff -u /path/to/backup/directory/apache2.conf.$(date +%Y%m%d) /etc/apache2/apache2.conf
  • 差分内容
+ ServerSignature Off
+ ServerTokens Prod
+ ServerName 自分のサーバー名

設定反映を確認します。

  • 構文確認
sudo apache2ctl configtest

Syntax OKを確認します。

  • サービス再起動
sudo systemctl restart apache2.service
  • サービス再起動確認
systemctl status apache2.service

active (running)を確認します。

  • 設定反映確認
curl -I http://localhost

以下のように、ServerヘッダーにApacheのみが表示されていることを確認します。

Server: Apache

ノートPCサーバ化計画。(ノートPCのオートスリープオフ設定)

こちらで買っていた

LinuxデスクトップPCですら怪しい性能になったので、これをサーバに変えます。

  • Core i-5 7300
  • 8GB Memory
  • 256GB SSD

はサーバとして必要最小限以上の機能。何よりも「UPS/コンソールつきのサーバ」として家庭内運用ではこの上なく役立ちます。

今回の方針

  • Nextcloudサーバにする。
  • ローカルNWでのみ運用。DDNSやブロードバンドルータのポート解放などは行わない。
  • データストレージはNASをNFSマウントして利用。

Linuxサーバのインストール

今回選んだのは2026/04/23にリリースされたばかりのUbuntu26.04。

適当な方法でインストールメディアを作り、画面に従ってインストールするだけ。

ノートPCならではの制限解除

蓋を閉じてもスリープさせない設定

これが地味に重要です。

  • 設定ファイルのバックアップ
sudo cp -pi /etc/systemd/logind.conf /path/to/backup/logind.conf.$(date +%Y%m%d)
  • 設定ファイルのバックアップ確認
diff -u /path/to/backup/logind.conf.$(date +%Y%m%d)

エラーがないことを確認します。

  • 変更箇所

以下を修正していきます。

  • HandleLidSwitch=ignore
  • HandleLidSwitchExternalPower=ignore
  • HandleLidSwitchDocked=ignore
  • LidSwitchIgnoreInhibited=no

修正後、保存します。

  • 差分確認
diff -u /path/to/backup/logind.conf.$(date +%Y%m%d)

以下のような差分を確認します。

-#HandleLidSwitch=suspend
-#HandleLidSwitchExternalPower=suspend
-#HandleLidSwitchDocked=ignore
+HandleLidSwitch=ignore
+HandleLidSwitchExternalPower=ignore
+HandleLidSwitchDocked=ignore
 #HandleSecureAttentionKey=secure-attention-key
 #PowerKeyIgnoreInhibited=no
 #SuspendKeyIgnoreInhibited=no
 #HibernateKeyIgnoreInhibited=no
-#LidSwitchIgnoreInhibited=yes
+LidSwitchIgnoreInhibited=no
  • システム反映
sudo systemctl restart systemd-logind

システムの自動スリープ・サスペンドを分陰

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

→ システムのスリープ機能そのものを物理的にリンク切れにします。

これから

NASの設定確認やらApache設定やらが待っています。

Growi 7.5.x→7.5.yへのアップグレード

概要

Growi 7.5.x → Growi 7.5.yにアップデートする 手順です。

7.5.1 → 7.5.2への手順で実際に実施しています。

前提

さっくりとした手順

  1. Growiをメンテナンスモードにします。
  2. Growi・Elasticsearchのサービスを停止します。
  3. バックアップを取ります。
  4. gitコマンドで最新版をcheckoutします。
  5. アップグレードを行います。
  6. Growiのメンテナンスモードを解除します。
  7. アップグレードされたことを確認します。

メンテナンスモード有効化

  1. Growiに管理者権限でログインします。
  2. 管理トップ>アプリ設定に進み、「メンテナンスモードを開始する」をクリックします。
  3. トップページに戻り「メンテナンスモード」が表示されていることを確認します。

バックアップ

以下をバックアップします。

  • mongodbの格納データ
cat /etc/mongod.conf |grep dbPath

として、ここのディレクトリ一式を控えます。(筆者環境 /home/mongodb)

このディレクトリを任意の方法でバックアップします。

  • Growiの添付ファイル一式が納められているディレクトリ(ファイルアップロード先をlocalにしている場合のみ)
/growi/root/directory/apps/app/public

(筆者環境 /home/www-data/growi/apps/app/public)ここも念のためバックアップします。

※ 添付ファイルのアップロード先をAWSやAzureなどにしている場合は不要です

  • vpsや仮想ゲストの場合はシステム全体:推奨

スナップショット機能などでシステム全体をバックアップした方が確実で安心です。

ElasticsearchとGrowiの停止

  • Elasticsearchサービス停止
sudo systemctl stop elasticsearch.service
  • Growiサービス停止
sudo systemctl stop growi.service
  • サービス停止確認
systemctl status elasticsearch.service growi.service | grep Active

inactive(dead)を確認します。

作業前バックアップ

  • データディレクトリを丸ごとコピー (-aオプションでパーミッションを維持)
sudo cp -a /var/lib/elasticsearch/ /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)

自分の環境に合わせます。

  • バックアップ確認
sudo ls -l /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)

バックアップした内容があることを確認します。(※管理者権限でないとこのディレクトリを見ることはできません)

growiディレクトリに移動します

cd /home/www-data/growi && pwd

自分の環境に合わせます。(筆者環境/home/www-data/growi)

リリースタグを確認します。

  • リリースタグ取得
sudo git fetch --tags
  • リリースタグ確認
sudo git tag -l

スペースで確認していき、上記リリースサイトと同じバージョンがあることを確認します。

チェックアウトとインストールを行います。

  • 変更を一時的に退避
sudo git stash
  • チェックアウト
sudo git checkout 【バージョン】

リリースタグは再確認しましょう。今回は 2026/04/23にリリースされたv7.5.2を選択しました。

  • pnpm install
sudo pnpm i
  • ビルド
NODE_OPTIONS="--max-old-space-size=4096" sudo pnpm run app:build

→ ビルド時のメモリ大量使用を抑えるため上限を抑えています。

ElasticsearchとGrowiの再開

  • Elasticsearchサービス開始
sudo systemctl restart elasticsearch.service
  • Growiサービス開始
sudo systemctl restart growi.service
  • サービス開始確認
systemctl status elasticsearch.service growi.service | grep Active

active(running)を確認します。

メンテナンスモード無効化

  1. Growiに管理者権限でログインします。
  2. 管理トップ>アプリ設定に進み、「メンテナンスモードを終了する」をクリックします。
  3. トップページに戻り「メンテナンスモード」が表示されていないことを確認します。

バージョンアップを確認します。

  1. 画面下部にあるバージョンがチェックアウトしたバージョン(v7.5.x)であることを確認します。
  2. 各種機能(ページ閲覧や編集)などが正常に行えるかを確認します。

バージョンアップ後の作業

必要に応じてバックアップしたファイル一式やスナップショットを削除します。

Node.jsの混在環境の解消。

Ubuntu24.04サーバでGrowiを運用していた際に、2系統のNode.jsが独立して存在していた状況が発生しました。

環境

通常ユーザー環境

  • パス: /usr/local/bin/node
  • バージョン: v20.18.0(Nodesource経由のシステムインストール)
  • 状況: pnpmなどの最新ツールが利用不可、または古いバージョンを参照。

rootユーザー環境

  • パス: /root/.nvm/versions/node/v24.14.1/bin/node
  • バージョン: v24.14.1(nvm経由)
  • 状況: 最新版がインストールされているが、systemdなどのサービスから正しく参照できていない可能性があった。

そもそも論として

「各ユーザーにnvmをインストールすればいいのでは?」は確かにその通りですが、筆者サーバーはWebサーバ。つまり、nodeを主に用いるのはGrowi環境であり、

  • rootに最新Node.jsを使わせたい。
  • そして、sudo配下できちんとroot環境でのNode.jsを使いたい

という状況。これを直していきます。

さっくりとした手順

  1. 元々のNode.jsをアンインストールします。
  2. root環境の一本化と最新化を行います。
  3. ついでにGrowi起動スクリプトの動的かを行います。

Node.jsをアンインストール

※これを用いるまでに

sudo su -

の後、

which node

を実行し、

/root/.nvm/versions/node/v24.14.1/bin/node

rootが参照しているNode.jsが.nvm経由であることを確認し、

exit

でroot環境から抜けます。

  • 一般ユーザーが持つNode.jsをアンインストール
sudo apt-get purge -y nodejs
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/bin/npx
sudo rm -rf /usr/local/bin/pnpm
  • hashをクリア
hash -r

一般ユーザーのNode.js系のプログラムの向き先を合わせる

  • Node.jsの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/node /usr/local/bin/node
which node

/usr/local/bin/nodeを確認。

node -v

v24.14.1などを確認。

  • npmの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/npm /usr/local/bin/npm
which npm

/usr/local/bin/npmを確認。

npm -v

11.13.0などを確認。

  • pnpmの向き先変更
sudo ln -sf /root/.nvm/versions/node/v24.14.1/bin/pnpm /usr/local/bin/pnpm
which pnpm

/usr/local/bin/pnpmを確認。

pnpm -v

10.33.2などを確認。

Growiの起動スクリプト修正

Growi起動スクリプト(growi-start.sh)を修正し、rootが見ているデフォルトバージョンを参照するように修正しました。

DEFAULT_NODE_VER=$(cat "$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$DEFAULT_NODE_VER/bin:$PATH"

この修正により、同じ場所を見るような運用が可能になります。

それでも残る問題点

将来的にnodeのバージョンを上げた場合、一般ユーザーでも

sudo ln -sf /root/.nvm/versions/node/v25.xx.yy/bin/node /usr/local/bin/node

のように帰る必要がありますが、そこは割り切りましょう。

RHEL系LinuxにZabbixサーバをインストール

RHEL系Linux(Rocky Linux 9)にZabbixサーバを構築したときのメモです。

環境

  • Zabbix 7.0
  • PHP-FPM 8.3
  • MySQL 8.0
  • Apache 2.4

前提

  • Linuxの初期設定完了済み
  • 以下のミドルウェアをインストール済み。
  • Apache 2.4
  • MySQL 8.0 (mysql_secure_installation込み)
  • PHP-FPM 8.3

さっくりとした手順

  1. php.iniを修正します。
  2. Zabbixパッケージをインストールします。
  3. DBを作成しスキーマをインポートします。
  4. ZabbixのDBを設定します。
  5. Apacheのバーチャルホストを設定します。
  6. Zabbixサービスを有効化してFirewalldを設定します。
  7. 初期インストールを行います。

PHP 設定の最適化 (php.ini)

Zabbix Web UI の動作要件に合わせて PHP のパラメータを修正します。おそらく多くの方がWebインストールした後に怒られる設定です。

  • php.iniのバックアップ
sudo cp -pi /etc/php.ini /path/to/backup/directory/php.ini.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

  • php.iniのバックアップ確認
diff -u /path/to/backup/directory/php.ini.$(date +%Y%m%d) /etc/php.ini 

差分がなければバックアップ成功です。

  • php.ini 修正箇所:
  • post_max_size = 16M (8M から変更)
  • max_execution_time = 300 (30 から変更)
  • max_input_time = 300 (60 から変更)

上記は例です。環境に合わせましょう。

  • php.iniの編集確認
diff -u /path/to/backup/directory/php.ini.$(date +%Y%m%d) /etc/php.ini 

+の箇所に修正した値になっていることを確認します。

  • php-fpmサービス再起動(設定反映)
sudo systemctl restart php-fpm

Zabbix パッケージのインストール

  • レポジトリ追加

2026年4月の最新パッケージである7.0.xを使うため、レポジトリを追加します。

  • Zabbixリポジトリのインストール
sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest.el9.noarch.rpm
  • キャッシュのクリア
sudo dnf clean all
  • EPEL リポジトリとの競合を避けるため、リポジトリを指定してインストールします。

この指定が地味に詰まりました。

sudo dnf install -y --disablerepo=epel \
zabbix-server-mysql \
zabbix-web-mysql \
zabbix-apache-conf \
zabbix-sql-scripts \
zabbix-selinux-policy \
zabbix-agent2

データベースの作成と初期データの流し込み

MySQL (MariaDB) に Zabbix 用の DB とユーザーを作成し、初期スキーマをインポートします。

  • mysqlログイン
mysql -u root -p
  • DB作成
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'あなたのパスワード';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
SET GLOBAL log_bin_trust_function_creators = 1;
EXIT

SET GLOBAL log_bin_trust_function_creators = 1;を指定しないと、zabbixに必要なスキーマを拒否することがあります。

  • スキーマインポート
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
  • 設定を元に戻す
mysql -u root -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"

インポート後にこれを行っておかないと、MySQLがインジェクションとなり得るスキーマを許可することがあります。

Zabbix Server の DB 設定

サーバー本体が DB に接続するためのパスワードを設定します。

/etc/zabbix/zabbix_server.conf を以下のように修正します。

修正箇所:

  • DBPassword=あなたのパスワード (コメントアウト # を外して追記)

Apache (httpd) バーチャルホストの設定

上記、dnfで設定した標準設定を無効化し、/etc/httpd/virtual/ 配下で管理するように変更します。

これは、「一つのサーバにWebサーバとZabbixを同時に立てる必要がある」などで重要なテクニックです。

  • ディレクトリ準備
sudo mkdir -p /etc/httpd/virtual
  • 標準設定の退避
sudo mv /etc/httpd/conf.d/zabbix.conf /path/to/backup/direcotry/zabbix.conf.$(date +%Y%m%d)
  • バーチャルホスト設定の作成

/etc/httpd/virtual/zabbix.conf

等として、以下のようなファイルを作ります。

<VirtualHost *:80>
    # 自分の環境に合わせます
    ServerName zabbix.example.com
    DocumentRoot /usr/share/zabbix

    <Directory "/usr/share/zabbix">
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    # FPM設定
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    </FilesMatch>
    # 任意のログディレクトリを指定します
    ErrorLog /var/log/httpd/zabbix_error.log
    CustomLog /var/log/httpd/zabbix_access.log combined
</VirtualHost>

サービスの起動と Firewalld の設定

全てのコンポーネントを起動し、必要なポートを開放します。これも地味にはまるポイントです。

  • サービスの有効化と起動
sudo systemctl enable --now zabbix-server zabbix-agent2 httpd php-fpm
  • Firewalld の許可
sudo firewall-cmd --permanent --add-service={zabbix-server,zabbix-agent,http}
  • Firewalldのリロード
sudo firewall-cmd --reload

Web セットアップとログイン

  1. ブラウザで http://(ServerName)/ にアクセス。
  2. 全てのチェック項目が OK であることを確認し、DB情報を入力して完了。
  3. 初期ログイン情報:
  • User: Admin (Aは大文字)
  • Password: zabbix

Apacheのインストールと初期設定(RHEL系)

概要

RHEL系(AlmaLinux / Rocky Linux 9等)にWebサーバーApacheをインストールします。最近のトレンドはNginxではあるものの、以下のメリットを考慮してApacheを選択します。

  1. 豊富なモジュールとカスタマイズ: 歴史が長く、情報の蓄積が膨大。
  2. 動的コンテンツの設定のしやすさ: PHP等との親和性が高い。
  3. 運用の手軽さ: 小規模サイトを迅速に立ち上げるのに適している。
  4. 高度なセキュリティ・ログ設定:
    • 自宅等からのアクセスログを除外するなどのログカスタマイズ。
    • 悪質なクローラーの排除。
    • mod_security(WAF)による防御。

さっくりとした手順

  1. firewalldの設定: 外部からのアクセス許可を与えます。
  2. Apacheのインストール: dnfを使用してインストールします。
  3. Apacheの設定: セキュリティとサーバー名の設定を行います。
  4. 設定の反映確認: 正常に動作しているかチェックします。

1. firewalldの設定

サーバー移設などでハマりやすいのが「設定は正しいのにページが表示されない」現象です。RHEL系ではデフォルトで強力なファイアウォール(firewalld)が動作しており、ポート80/443を明示的に開放する必要があります。

大前提

SSH接続(ポート22)は許可されている前提で進めます。設定を誤るとリモート操作ができなくなるため、慎重に行いましょう。

  • HTTP通信を許可する
sudo firewall-cmd --permanent --add-service=http
  • HTTPS通信を許可する
sudo firewall-cmd --permanent --add-service=https
  • 設定を反映させる
sudo firewall-cmd --reload
  • 設定を確認する
sudo firewall-cmd --list-all

services の欄に httphttps が含まれていればOKです。

2. インストールを行います

RHEL系ではApacheのパッケージ名は httpd です。

  • パッケージ全体のアップデート
sudo dnf update -y
  • Apache (httpd) のインストール
sudo dnf install httpd -y
  • バージョン確認
httpd -v

-(表示例)-
Server version: Apache/2.4.57 (AlmaLinux)

  • サービスの起動と自動起動設定
sudo systemctl enable --now httpd
  • サービス稼働確認
systemctl status httpd

enabledactive (running) を確認します。

3. 設定を行います

  • 設定ファイルのバックアップ

RHEL系の設定ファイルは /etc/httpd/conf/httpd.conf です。

sudo cp -pi /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

※任意のバックアップディレクトリを指定してください。

  • 設定ファイルのバックアップ確認
diff -u /etc/httpd/conf/httpd.conf.$(date +%Y%m%d) /etc/httpd/conf/httpd.conf

エラーがないことを確認します。

  • 設定ファイルの書き換え(追記)

セキュリティ向上のため、署名の非表示化とサーバー名を追記します。

sudo bash -c "cat >> /etc/httpd/conf/httpd.conf" << 'EOF'

# Custom Settings
ServerSignature Off
ServerTokens Prod
ServerName example.com:80
EOF

example.com の部分は、ご自身のドメイン名またはホスト名に置き換えてください。

  • 差分の確認
diff -u /etc/httpd/conf/httpd.conf.$(date +%Y%m%d) /etc/httpd/conf/httpd.conf

末尾に指定した3行が追加されていることを確認します。

4. 設定反映を確認します

  • 構文確認
sudo httpd -t

Syntax OK と表示されることを確認します。

  • サービス再起動
sudo systemctl restart httpd
  • 設定の反映確認(ヘッダー確認)
curl -I http://localhost

以下のように、Server ヘッダーが Apache のみ(バージョン情報なし)になっていれば成功です。

HTTP/1.1 200 OK
Date: ...
Server: Apache
...

Page 1 of 38

Powered by WordPress & Theme by Anders Norén