サーバー運用とPC日記
Netcommons 3.2.1.1 から 3.2.2 に update した時の不具合
Netcommons 3.2.1.1 から 3.2.2 にアップデート作業を行いました。
手順に沿って、ていねいに作業し、問題なく完了したように見えていました。
ところが、カミさんのスタジオのホームページに問題発生!
カレンダーに日程の書き込みや編集をしようとすると、「内部エラーが発生しました」となり、操作できないとのこと。
慌てて、3つ作ってあるNetcommons3サイトをすべてチェックしてみたところ、さらに不具合を発見!
管理ページでの、会員管理、権限管理、会員項目設定、の各操作をしようとすると、「内部エラーが発生しました」となり、この3項目は操作できないことが分かりました。
現在のこのサーバー環境は、Debian9、apache 2.4.25、Mysql 10.1.37、php7.2 です。
さて、検索したり、Netcommons3の掲示板を見たりしましたが、手掛かりがつかめません。
そこで、公式サイトにユーザ登録して、トラブル報告として書き込ませていただきました。
以前、Githubに書き込んだ時には、全く応答してもらえなかったので不安でしたが、
今回は、1時間後には、対応策を書き込んで下さっていました。
その対応策に沿って修正作業してみたところ、見事、一発で、すべてのエラーは解消しました!
対応のアドバイスを下さった、牟田口様、天野様、本当にありがとうございました!!
この件の詳細について書いておこうと思います。
Netcommons3.2.1.1 の時に、サイトの引っ越しをしていました。
この時、引っ越し先の自分の新調サーバーは、 php7.2 環境にアップしてあり、
まずは、このサーバーにNetcommons3.2.1.1 の新規インストールを行う必要がありました。
その際、php7.2に対応させるために、app/Plugin/Migrations/Lib/CakeMigration.php ファイル17行目の「Object を CakeObjectに書き換える」作業が必要でした。
これで出来たNetcommons 3.2.1.1環境に、php7.0で動いていたNetcommons 3サイトのバックアップからのリストアを行った訳です。
そして今回は、Netcommons 3.2.2 は php7.2 にすでに対応しているだろうから、CakeMigration.php ファイルの修正はせずにアップデート完了するだろうと思い込んでいました。
しかし、Netcommons 3.2.2 のCakeMigration.php ファイルは、まだ php7.2 には対応していなかった、ということでした。
対応していなかった理由は良く分かりませんが、レンタルサーバーの多くは、まだ php7.1 あたりなのではないか、とか推測しています。
考えられる多くの環境があるでしょうから、そのどれに対応させるのか、判断が難しいのかもしれません。
または、本当に忙しくて、全ての対応に手が回らない、ということもあり得ると思います。
いずれにしても、これからも、すんなりといかない場面が多く出てきそうですから、
こちらも一生懸命やりながら、多くのエンジニアの方々に助けてもらっていかなければならないと思っています!
Netcommons3アップデート作業は、基本に忠実に
Netcommons3もver.3.2.2 まで来て、動作も含めて、大きく改善されてきたと感じます!
これからも、ユーザサイドでアップデート作業を継続していかなければなりません。
ほぼ2か月に1度のペースで発表されるアップデートですが、作業の細かい点をどうしても忘れがちです。
結果オーライに安心して、バックアップ作業を省略したりもしていました。
しかし、突然何かアクシデントがあった時に対応できるよう、やはり基本に忠実に作業しておかないといけませんね。
何となく作業していたのでは、このwebサイトを失う原因にもなりかねません!
そこで、作業手順を細かく記録しておくことにしました。
<事前準備・バックアップディレクトリの作成>
# cd /home
# mkdir 20190126bkup
<事前準備・最新ファイルの用意>
(1)https://www.netcommons.org/NetCommons3/download より、
最新ファイルを取得して、例えば /home に配置
(2)(1)のファイルを解凍。
# cd /home
/home# unzip NetCommons-3.2.2.zip
解凍ディレクトリ NetCommons3 が生成されます。
(3)解凍ディレクトリをリネーム(後でバージョン等不明にならないように)
/home# mv Netcommons3/ nc322/
<対象NC3サイトを、閲覧不可にする>
メッセージ文は前もって書いておくと良い
<アップデート前のバックアップ>(自分は、OS、mysql 共に root ユーザで作業しました)
(1)データベース 〇〇〇 のバックアップ(バックアップファイル 〇〇〇.sql 保管先/home/20190126bkup)
# cd /home/20190126bkup
# mysqldump -u root -p 〇〇〇 > 〇〇〇.sql
(mysql root のパスワードを入力)
(2)ソースのバックアップ(バックアップ先 /home/20190126bkup)
# cp -r /var/www/NC3インストールディレクトリ/app/Config /home/20190126bkup/
# cp -r /var/www/NC3インストールディレクトリ/app/Uploads /home/20190126bkup/
以上のバックアップがあれば、アップデートに失敗しても、最悪、アップデート前の状態には戻せます。
インストールディレクトリ全部のバックアップでもいいと思います。
<Netcommons3本体のアップデート>
(1)リネームディレクトリ下のファイル、ディレクトリを、既存NC3インストールディレクトリに上書き
/home# cp -r nc322/* /var/www/インストールディレクトリ/
上書きが終わったら、上例のnc322ディレクトリは、例えばhokanディレクトリ下に移動等しておく。
(2)cakeコマンド実行してアップデート
# cd /var/www/インストールディレクトリ/app
・・・/app# Console/Cake PluginManager.update_all
画面に「一括アップデート」が表示されるので、画面の指示どおり、S を入力してEnter
アップデート処理中、ざっと眺めておく。エラーは黄色表示になるはず。
(3)インストールディレクトリの所有者を「webサーバー(debianならwww-data)に戻しておく。
# chown -R www-data:www-data /var/www/インストールディレクトリ
<サイトをブラウジングして確認>
外部PC等から、アップデートしたサイトにwebアクセスして、ログイン等出来れば完了です!
php7.2環境への引っ越し完了!
昨日まで、この自宅サーバー(debian9)は、php7.0環境でしたが、
php7.0は、アクティブサポート、セキュリティサポート共に、12/3に終了していました。
これを何とかしたかったのですが、せっかくなので、OS新規installからやることにしました。
ついでにHDDミラーリングをやめてSSD1本に。
SSDが壊れるリスクについては、定期的なバックアップで対応しようということに。
特にowncloudでは複数のクライアントが繋がっているので、これらのファイルがバックアップになります。
また、最近リリースされたphp7.3もテスト機で試してみましたが、急に不具合が出る可能性もあり、
普段の時間がない時には対応が出来ません。
php7.2は、アクティブサポートが2019年11/30、セキュリティサポートが2020年11/30 までで、まだ余裕があります。
ということで、debian9にphp7.2以降のリポジトリ設定をしてから、php7.2環境を作成しました。
そのあとは、php7.2モジュール、apache2、mariadb、とインストールしていき、割とスムーズに作業が出来ました。
ただ、SSDのパーテイション作成で、マザーボードがBIOSではなくUEFIだったので、UEFIbootパーテイションをあらかじめ作っておく必要がありました。(Windowsインストールなら特に意識しなくていいのかも)
サイトの引っ越しは、以前教えていただいて勉強しておいた方法を再確認しながら進めました。
Netcommonsの内部構造が変わった部分はそれに合わせてバックアップ、リストア方法を変更しましたが、うまくいったようです。
現在、SSDの動きはさすがに早いのですが、以前の高速化の対策がまだ反映されていません。
徐々に対応していこうと思っています。
php7.3最新環境への引っ越しは・・・まだ何とも言えない
現行サーバーのハードウェアを変更し、
そこにdebian9、php7.2環境を構築し、
そこに現在のwebページ3つを引っ越しする。
という計画ですが、
ついさっきまで、TESTサーバー機にdebian9、php7.3環境を構築するところまでは出来ました。
そこにNetcommons3をインストールしようとしたところ、Mariadbへの接続でつまずきました。
明日も朝から早いので、残念ながら今日はここまでです・・・
php7.0セキュリティサポート終了
以前書いたように、php7.0は、php5.6より一足先にセキュリティサポートが切れてしまいます!
今すぐ不具合が生じることはないと考えますが、年末までにはphp7.2環境にしてしまう予定です。
でも、多分、何か所かハマリそうだし、時間がかかるでしょう。
はたして年末に時間がとれるか?
しかし、どうせやるなら、HDDミラーリングもやめて、SSD1台にしてしまおうと無謀な計画を立てています。
これにOSクリーンインストールからやってしまいます!
さあ、出来るかどうか? いつ出来るのか・・・
Debian9サーバー機新調(完成まで)
OSインストール、初期設定まで終わったので、owncloud、Netcommons を動かせるようにします。
Mariadb → apache2、php その他 → owncloud リポジトリ設定後 owncloud-file 、とインストールしていきます。
前回は、apt-get install owncloud で、mysql 、apache も同時にインストールされたんですが、
DB、Webserverは各自で選んでください、と変更されたようですね。
・・・白状しますが、Web検索で見つけたコマンド文を、コピペでSSHクライアントに貼り付ける、というセコイやり方を覚えてしまいました! (SSHクライアントはRloginを使っています)
apache バーチャルホストの設定ファイル、DDNS の cronjob ファイルも、旧サーバーから持って来てしまします。
owncloud は、ssl 通信になるように設定することが重要だと思います。
この時の ssl 証明書は、自己証明書を作ったり、Let's Encrypt を使ったりしていたのですが、
OSから再インストールし直す機会が多くなってしまったのと、また、ほとんど自分専用ということもあり、
OS内の snakeoil 証明書を使うという安易なやり方にしちゃっています。(ファイルアップロードダウンロードの機能を貸し出す時だけ、アクセス時に警告が出ることについて、事情を説明しています)
旧 owncloud 内のユーザデータは、引っ越しではなく、owncloud-client でクライアントに保管してあるデータに再同期させて新owncloudに取り込むやり方にしています。
owncloud のインストールが終わったら、Netcommons3のインストールに進みます。
また、Netcommons3の引っ越しは、今回はディレクトリ、ファイル全部を持ってきましたが(DBは別に引っ越し)、次からは教えていただいた方法で実行できます!(本当に感謝です!)
もう一つ、php5.6 と php7.0 では、計測してはいないのですが、php7.0 の方がかなり早くなっているような気がします。
さて、最後に、旧サーバーではどうだったっけ? と、旧サーバーを覗きに行かなきゃならない場面もしばらくは出てきます。
IPアドレスを別々にして、新旧とも動かしながら作業するのがいいと思ったんですが、
今回は、IPアドレスは新旧同じにしたまま、必要な方だけ電源を入れて切り替えるというやり方で何とかなりました。SSH は旧サーバーのみ鍵認証を切って使いました。
こんな感じで、かなり省力化(手抜き?)したやり方なんですが、今後とも、特にOS等の基盤は最新の状態にしておかなければならないので、今後もOSから再インストールという機会は少なくないと思っています。
やり直さなきゃいけない、という状況になった時、身軽に動けるようにするため、とい言ったら怒られるでしょうか?
Debian9サーバー機新調(OSインストールまで)
この夏、ようやくDebian9(php7.0)の新環境にすることが出来ました。
Netcommons2がphp7 では動かないので、(今後もphp7には対応させる予定はないとのこと)Debian8のままでしたが、この夏に、何とかnc2サイトをすべてnc3サイトに移行出来たので、ハードウェアも新調してOSも最新版にすることにしました。
アスロックPentium J5005マザー、メモリー4GB×2、HDDはWDRed2TB×2でRaid1構成とし、OSはDebian9を使うことにしました。
いつものようにUSBメモリでインストールを始めました。
UEFI install の表示が出て、おや? と思ったのですが、そのまま続行。
パーテイション作成では、swap 領域は各 HDD ごとに設け、あとはすべて Raid1領域としました。
インストールが進んでいく途中で、動きが重くなっているような気が。
HDDアクセスledが点滅ではなく、点きっぱなし、HDD のアクセス音も途絶えずに鳴りっぱなしです。
こんなことは初めてで、さらにインストール終了まぎわの grub インストールでつまづきました!
grubがインストールできません!!
調べてみると、UEFI インストールの時、ブートローダーが必要とするディスク容量は、BIOSインストールの時よりかなり大きくなる、つまり今までの「予約容量」では小さすぎる、ということのようです。
Raidを構築する前に、EFI system partition 分をディスクに用意しておく必要があるようです。
ということで、パーテイション作成からやり直しです。
ESP(UEFI ブートローダー用パーテイション?)を、各 HDD に約500MBずつ、
また、swap 領域は各 HDD 8GBずつ、さらに各 HDD に約250MBずつの /boot、/boot2 用パーテイション、を割り当てました。
そして、残りをすべて RAID1 パーテイションとして、再度 OS インストール開始。
やはり、インストールが進んでいくと、はっきりと動きが重くなっています。HDDled も赤く点きっぱなしです。
しかし、今度はインストールは最後まで進みました。
再起動すると、やはり HDD はアクセス動作しっ放しの状況です。
HDD がおかしいのか? もしかして Raid 関係の不具合?
Windows 機で検索してから、proc / mdstat コマンドを打ち込むと、「resync」と「残り時間」の表示が出てきました。
Raid の再同期? Raid 作成後に最初に resync が走るような設定になったんだろう、ということで、
不具合ではないと思ったので、初期設定から少しずつ済ませておくことにしました。
今回は firewall の設定を最初に済ませました。
そして、OSupdate → OSupgrade → SSH設定(sshd_cofig 編集も)→ NTP設定 、と進んで行きました。
ここまでで、Raid resync を終わらせるために、サーバーを動かしたまま寝ることに。
次の日、Raid の resync は終了していて、HDD のアクセス led も通常通りになっていました。ホッと一息。
そう言えば、以前ubuntu16サーバーをインストールしてみた時、動きが重いと感じたのは、この Raid resync が走っていたからかもしれません。
さて、php5.6のセキュリティサポートは、今年いっぱいまでだそうです!
セキュリティ面からも、phpのバージョンアップには付いていかないとダメらしいんです。
ところが!! 何と、php7.0のセキュリティサポートは、今年12/3までなんだって。 えぇ?
php5.6のセキュリティサポート期限の方が、ずるずると伸びていったらしいんですね。
でも、php7.0までにしておけば、OSアップデートでphpのバージョンも上がっていくでしょう。
ちなみにphp7.2は、2020年11/30までのサポートです。
という訳で、今回のサーバー機新調作業となりました。
NC3サイトのバックアップ・リストアについて(5結論)
<ご注意下さい!>
以下の方法は、ver 3.1.10 までのものです。ver 3.2.0 からは、uploadディレクトリの場所が変更されたようです。実験して検証が済みましたら、訂正記事を載せたいと思います。
さて、本題の、Netcommons3サイトのバックアップ・リストアがどうやって成功したか、についてです。
繰り返しになりますが、以下の⑥までは以前と同じ内容です。また⑥までがNetcommons2の時と同じやり方です。
① サイトを閲覧不可にする、又はwebサーバーを停止してから、旧DB3 *** のダンプファイル △△△.sql 作成。
# mysqldump -u root -p *** > △△△.sql (mysql の root パスワード聞かれるので入力)
② files ディレクトリ( app / webroot / files )取得。アーカイブして持ってくる。
③ 新環境に新DB3 ○○○ を作成する。
mysql > create database ○○○ default character set utf8;
mysql> grant all privileges on ○○○ to ユーザー名@localhost identified by 'パスワード';
その後、 prefix のみ旧サイトと同じにして、nc3を新規インストール。
④ インストール完了したら、mysql にログインして、③の新DB3をいったん削除。
mysql > drop database ○○○;
⑤ 再度、③と同様にして新DB3○○○ 作成。作成後、旧DB3ダンプファイルインポート。
mysql > create database ○○○ default character set utf8;
mysql > use ○○○;
mysql > set names utf8;
mysql > source / home / bk / △△△.sql; (/ home / bk に dumpファイルがある場合)
⑥ app / webroot / files ディレクトリを②の解凍ディレクトリと置き換える。
⑦ 旧サイトの app / Config / application.yml ファイルを、新サイトに上書きする。
以上の方法で、上手くいきます!!
上手くいったのは、もちろん、天野さんからのアドバイスのおかげなんです!
application.yml を上書きしないと、アカウント関係の情報が引っ越し前と違ってしまうので、ログインできない状況になってしまう、と教えていただきました。
そして、新サイトで出来たDB情報を、引っ越し前環境で出来たDB情報に上書きするのはおかしい、ということなんだと思います。なので、旧サイトの database.php で上書きしてはいけません。自分は上書きしてみた後、このファイル内のDB情報を編集してみたりしましたが、エラーは直らずダメでした。
今年のユーザカンファレンスの資料にあった、 「database.php が大事なファイル」というのは、「prefix 情報の確認のために database.php が大事なファイル」という意味で、上書きしなさいということではないのだろうと判断しました。
以上の貴重な情報は、すべて天野さんからのアドバイスによるものです!
前回お世話になったので、あつかましくもまたメールで助けを求めてしまいました。
やはり、自分のスキルにあった適切なアドバイスをいただき、本当に感謝しています!
天野さん、有難うございました!!
重ねて御礼申し上げます。
最後に、天野さんが注力されている「nc3+ NetCommons3 をより便利に」というプロジェクトについて、ぜひ書いておきたいと思います。
Netcommons3関係のプラグイン、pluguin開発の要望引き受け、Netcommons3レンタル、などの開発をしているとのことで、自分もとても興味が湧きました!
特に、Netcommons3のテーマも開発中とのことで、武骨なデザインのNetcommonsがカッコ良くなるのでは? と自分も期待しているんです!
Netcommons3のバックアップ・リストアのプラグインも、間もなく発表となっています!!
この天野さんのプロジェクトのHPは、以下のリンクからたどってみて下さい。nc3で出来ているのにカッコいいんですよ!
NC3サイトのバックアップ・リストアについて(4)
Netcommons(nc)3サイトのバックアップ・リストア(サーバー引っ越しの時必要!)の正しい方法をアドバイスして下さったのは、株式会社RYUSの代表、天野龍司さんという方です。
天野さんは、Netcommons3のコアプログラムの開発を行っており、また自社で「nc3+ NetCommons3 をより便利に」というNetcommons3プラグイン、テーマその他の開発も行っていらっしゃるエンジニアなんです!
実は、昨年、nc2をnc3に移行しようと奮闘していて上手くいかなくて悩んでいる時に、天野さんのブログを発見したんです。
そのブログの中で
「移行ツールでうまく移行できないような特殊ケースとかNetCommons2用に開発したプラグインをNetCommons3に移植したいようなケースがありましたらご相談ください^^;」
とありましたので、こちらは企業でもないのに相談にのってくれるだろうか、と思いながらメールしたんです。
その時、意外にも、こちらのスキルを推し量りながら適切なアドバイスを下さり、とても感激したんです!
結局、その時は、自分にはまだ無理な面があり、移行は成功したのか不明だったのですが、今年の夏に再度移行に挑戦した訳なんです。
nc2→nc3移行にあたりnc2側の準備について、開発元のページには次のように記してあります。
「現状NC2のDB及びNC2のアップロードファイルを取得して、NC3と同じ環境にDBインポート及びファイル配置をしてください。」
ここまでは何とかできたものの、この後移行ツールを実行すると、エラーが出て上手くいきません。
この時、自分はnc2のDB、nc3のDBのログイン情報は違った状態でやっていました。nc2のDBのログイン情報がないとDBに接続できないはずなのに、この情報をどこから引っぱってきているんだろう? と、素人の自分でもさすがに感じていました。
この時の天野さんのアドバイスは、「NC3のDB接続につかってるアカウントでNC2DBにも接続できるようにすると解決するかなと思います。」というものでした。
そうか! nc3のDBをnc2DBの接続アカウントと同じにして作らないとダメなんだ!と、やっと分かりました!
目の前が開けたような感じでした!
これは専門家には当たり前のことで「NC3と同じ環境にDBインポート」という文に含まれている内容だ、ということなんでしょうね。
このあと、移行ツールは走るようになりましたが、成功しているのか、失敗している部分があるのか確かめる手段も分からず、まとまった時間がないと実験も出来ないので放置してありました。
そしてこの夏、まず、方法、手順、アドバイスをおさらいし直して、徹夜したりしながら、何とかnc3に移行出来たのかな、というところまで来れました!(このサイトは移行して出来たものです)
天野さんからのDB接続についてのアドバイスがなければ、今もnc2からnc3への移行は出来ていなかったと思います。
素人相手に適切なアドバイスを下さった天野さんに、本当に感謝しています!!
さて、本題に戻ります。
サーバー引っ越しの時などに必須の作業、nc3サイトのバックアップ・リストアははたして出来るのでしょうか?
NC3サイトのバックアップ・リストアについて(3)
2018年のユーザカンファレンスの「バックアップ」に関する資料に、「大事なファイル3点」という項目を発見!
このファイル、ディレクトリ、3つをインストールしたての新規NC3に上書きすれば、いけるに違いない!
と思い、早速やってみました。
引っ越し前の上記すべてのファイルをtarファイルにして、また、引っ越し前mysqlのデータベースはdumpファイルにして、testサーバー機に移動させました。
そして、testサーバーに作成した新規NC3に、ファイル上書き、DBインポートを行いました。
その結果は、残念ながら、アウト!
前回、app / Config フォルダをコピーした時と同じ結果でした・・・
「内部エラーが発生しました」が出てしまいます。
ディレクトリのオーナー、パーミッションも確認しましたが、ダメでした。
もうお手上げです・・・
「ディレクトリ丸ごと移動」という最後の手段があるからいいのかな、とも思いました。
「ファイル全部でもOK」と上記の資料にもありますしね。
ただ、今回、NC2をNC3に移行した時は、同一サーバー(debian8)内で行ったんです。
よって、出来たNC3サイトは php5.6 環境で install したものです。
このNC3サイトを、php7.0(debian9)環境にそのままコピーしてもいいのか? 何とか動いているように見えるだけで良くないんじゃないか? という気もするんです。
この手詰まりの時に、救いの一手を差し伸べて下さったエンジニアがいらっしゃったんです!
このウェブサイトは、
NetCommons3.3.7で動いています。
NetCommons プロジェクト 開発の、
CMS+グループウェアです!
日 | 月 | 火 | 水 | 木 | 金 | 土 |
27 1 | 28 1 | 29   | 30   | 31   | 1   | 2   |
3   | 4   | 5   | 6   | 7   | 8   | 9   |
10   | 11   | 12   | 13   | 14   | 15   | 16   |
17   | 18   | 19   | 20   | 21   | 22   | 23   |
24   | 25   | 26   | 27   | 28   | 29   | 30   |