主に自分の備忘録としての内容です。 CentOS6のサポートが切れて久しいので、新しいOSに移行しました。 CentOSは開発中止となったので、AlmaLinuxを代替として選択しました。
必要なデータを、tarで圧縮します。パーミッションは維持しておきます。
tar cvzfp httpd.tar.gz httpd
新しいサーバで展開します。
tar xvzfp httpd.tar.gz
apacheなどのアプリケーション設定ファイルは、特に保存しませんでした。 アプリケーションのバージョンが変わって設定方法が変わる可能性があるからです。 面倒でなければ保存しておいた方が安心かと思います。
tarなどのコマンドも初期状態では使えませんので、不足しているコマンド等があれば、逐次インストールします。
# dnf install tar # dnf install php # dnf install ruby # dnf install mysql-server mysql # dnf install php-mysqlnd
Perlのバージョンが上がったことで、jcode.plでエラーが出るようになりました。 jacode.plを代わりに使います。
https://metacpan.org/release/INA/jacode-2.13.4.18
色々ファイルがありますが、必要なファイルはjacode.plのみです。 こちらをjcode.plがあるディレクトリに配置し、require対象をjcode.plからjacode.plに書き換えるだけでOKです。
PHP8.1となったので、pukiwikiを1.5.3から1.5.4にアップデートする必要があります。 update_pukiwiki_153to154_eucjp.patch.zip の内容を適用しました。 数箇所衝突が発生しましたが、手動で直せそうなところは直し、対応箇所が見つからない部分は放置しました。 またwikiディレクトリ配下でも衝突が起きていましたが、マニュアル系かと思うので無視します。 パッチで更新した1.5.3なので、こうした衝突が起きたのかと思います。
下記のエラーが発生しましたが、該当ファイルのパーミッションを0666にして解決しました。
pkwk_chown(): fopen() failed for: CACHEDIR/pkwk_chown.lock
必要なパッケージをインストールします。
# dnf install openssl # dnf install mod_ssl # dnf install epel-release # dnf install certbot # dnf install certbot-apache
certbotで証明書を発行する場合、自分がサーバ管理者であることを証明するために、httpd.confをいじる必要があります。
https://hacknote.jp/archives/48748/
続いてssl.confを更新します。
https://hacknote.jp/archives/48748/
設定ファイル修正後は、apacheを再起動します。
# systemctl restart httpd
httpd.confにサブドメインの情報を設定します。 とりあえず末尾に追加しておきます。
# for subdomain <virtualHost *:80> ServerName album.omoshiro-joho.com DocumentRoot /var/www/yyy AllowEncodedSlashes On <Directory /var/www/yyy> SetEnv HTTP_X_FORWARDED_PROTO http SetEnv REAL_HOST_NAME album.omoshiro-joho.com AllowOverride All Require all granted </Directory> </VirtualHost>
ssl.confにサブドメインの情報を設定します。 必要な項目だけで良いです。
<VirtualHost *:443> DocumentRoot "/var/www/yyy" ServerName album.omoshiro-joho.com:443 SSLCertificateFile /etc/letsencrypt/live/omoshiro-joho.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/omoshiro-joho.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/omoshiro-joho.com/chain.pem </VirtualHost>
その他の設定を反映します。 リダイレクト設定です。Aliasやシンボリックリンクは相対リンクなど解決できない問題があるので使いません。
Redirect permanent /blog /d/prof/wp
続いて文字化け対策で、下記を設定します。これが指定されていると、htmlコンテンツ内の文字コード(実際の文字コードやmetaタグによる指定)を無視して、それより手前の段階で文字コードを設定してしまうため、複数の文字コードのページが混在している場合にはOffにする必要があります。
AddDefaultCharset Off
ローカル環境でwgetを実行して取得できているのに、外部のPCからHTTPコンテンツを取得できない現象が発生しました。 firewalldが動いていれば、その設定を見直します。 もし動いていない場合は、OSの外側でパケットフィルタが動いていないか確認します。 自分の環境の場合、VPSが提供するパケットフィルタ機能が動いていて、そこでアクセスが遮断されていました。
まずサービスを起動します。
# systemctl start mysqld
下記で自動起動設定をします。
# systemctl enable mysqld
設定変更後などで再起動したい場合は下記です。
# systemctl restart mysqld
管理ユーザを設定します。
# mysqladmin -u root password "****"
mysqlクライアントを起動します。
$ mysql -u root -p mysql > CREATE USER 'bokupi'@'localhost' IDENTIFIED BY '****'; mysql > GRANT ALL PRIVILEGES ON *.* TO 'bokupi'@'localhost' WITH GRANT OPTION;
以前は下記のコマンド1発でユーザを作成できましたが、今はできないようです。
GRANT ALL PRIVILEGES ON *.* TO 'bokupi'@'localhost' IDENTIFIED BY '****' WITH GRANT OPTION;
mysqldumpでダンプしたSQLデータを用いてリストアします。通常はシステムテーブルを含めた環境一式をそのまま復元できますが、今回はMySQLのバージョンが8に上がったことでシステムテーブルのデータベースエンジンがMyISAMからinnoDBに変わったことでそのまま復元できません。
対応としては、ダンプしたSQLデータからmysqlデータベースの部分(恐らく先頭にある)を削除した上でリストアすることです。 その代わりユーザー設定などは改めて行なう必要があります。
$ mysql -u root -p < all_db_dump.sql
cronにmysqlのバックアップスクリプトを登録します。
まずはバックアップスクリプトを用意します。
スクリプトに直接パスワードを書くと下記のWarningが出て気持ち悪いので、外部ファイル(dbaccess.cnf)に設定します。
mysqldump: [Warning] Using a password on the command line interface can be insecure.
$ emacs dbaccess.cnf [client] user = root password = ******
$ emacs backupmysql.sh #!/bin/sh mysqldump --defaults-extra-file=dbaccess.cnf --all-databases > /var/www/mysql/all_db_dump.sql
それからcronに登録します。
$ crontab -e 0 3 * * * sh /var/www/mysql/backupmysql.sh 1> /dev/null
言語仕様の変化や厳格化により、古いコードに影響が出る場合があります。
result[enable] → result['enable']
apacheのerror_logに情報は出るはずですが、出ないケースもあるので、php-cgiを使ってデバッグするのが良いです。
$ php-cgi detail.php id=1670652116