サーバー

完全移行完了です

2018年10月24日
数日前から行っていたサイトの新環境への移行が完了しました。
ネットビジネス便利ツール
昨日、後は新旧を切り替えるだけと書きましたが、今日早くに切り替えました。

と言っても見た目はほぼ変わりません。URLがhttpからhttpsへ変わったくらいです。

行なったのは
SSL化、
ページの文字コードをUTF-8へ、
html5へ、
PHP7へバージョンアップとそれに伴うMySQL関係のソース書き換え、
PostgreSQLの移行(バージョンアップと文字コード変更)、
です。一番大変だったのは・・・ううんなんだろう。
そうだ、テストデータの用意、ですね。

一見動いているように見えても、どこかでエラーが起きていてはいけないので、テストサイトでテストをするのですが、そのデータを用意するのが大変でした。
まさか本番のデータでテストするわけにもいきませんので、でもきちんとデータを作らないと動かない箇所が沢山あるのです。

こういうとき、色々な所を自動化していると大変です。自動にしているソースを見直すのがではなく、自動にすることでデータの動きを自分自身も忘れてしまっているので、思い出して、テストデータを作るのが大変でした。

少々疲れました。
しかも「やった~、終わった!!」ではなく「うん、きっとこれで大丈夫。」という状況なので、今一晴れ晴れしません。

そろそろツールのソースの改修に戻ります。

サーバー

【.forward】からphp.iniを指定してPHPを実行

2018年10月23日
先日からやっているサイトの
SSL化、
ページの文字コードをUTF-8へ、
html5へ、
PHP7へバージョンアップ、
PostgreSQLの移行(バージョンアップと文字コード変更)、
とほぼ全ての環境が変わってしまう移行がほぼ終わりました。
変わらなかったのはMySQLだけです。でもPHPのバージョンアップに伴い、MySQL関係がかなり変わったので、MySQLまで変わった気分です。

テストサイトでの動作確認は終了し、後は本番サイトとテストサイトとを切り替えます。
切り替え前に再度データの同期を取らなくてはいけません。
ドキドキします。


サイトをSSL化したので、ついでにPOSTしている部分をSSLに書き換えました。

ツールが売れたら、自分自身にもメール送信し、特定のメールボックスで受信します。
そのメールボックスにメールが届くとPHPを起動し、処理を行います。
PHPの起動は【.forward】で行います。
私が利用しているレンタルサーバーの場合、SSLを利用するには拡張モジュールを【php.ini】に記述しておかなければいけません。
ここでハマりました。どうしても読み込んでくれなかったのです。
もちろん私の勘違いで読み込まなかったのですが。。。分かってしまえばなんでもないところで、つまづきました。何を勘違いしていたかは恥ずかしいので内緒です。


【.forward】
"| exec /usr/local/bin/php -q -c/home/xxx/.php/php.ini /home/xxx/yyy/run.php"

【/usr/local/bin/php】はPHPのパス、サーバーによってはPHPのバージョンを指定できます。
【/home/xxx/.php/】ディレクトリ下の【php.ini】を読み込んで、【/home/xxx/yyy/run.php】を実行します。
私も初めは間違えていましたが、【php.ini】を指定している部分【-c/home/xxx/.php/php.ini】の【-c】の後ろにスペースは入りません。


説明を読んでも勘違いが解けず行き詰まってコーヒーを入れていたら、突然ポワッとcronの設定が目の前に浮かんできて解決できました。

SQL

MySQLがガラリと変わっていました

2018年10月22日
まだ完全移行ではありませんが、一応【ネットビジネス便利ツール】のSSL化とSQLサーバーの文字コード変換が終わりました。動いていない箇所の修正には時間がかかるので、とりあえず非SSLで動かします。

何度もテストをするのは面倒なので、ページそのものをUTF-8へ、html5へ変更しました。

そしてPHPもバージョン5から7へ移行しています。

その関係で久々にMySQLの部分のPHPのソースを触ることになりました。
PHP7ではmysqlが使えなくなっています。何かで読んで知ってはいましたが、そうですね、修正しなくてはいけませんね。

調べたらmysqliかPDOを使うことになるとのこと。mysqliを使うことにしました。
参考になるのは、もちろん本家本元のマニュアルと、
MySQL 改良版拡張モジュール

ここがわかりやすかったです。
mysqlからmysqliへの書き換え方法

意外にハマってしまったのが、文字コードです。
MySQLもWebページもUTF-8にしているのに化けてしました。古いmysqlのソースを見ていると文字コードを指定していました。そう言えばそうでした(このブログでも書いていました・・・MySQLの文字化け)。
mysqliでは
mysqli_set_charset($objMySQLConID, "UTF8");
です。UTF-8ではなく、UTF8で指定します。

テスト環境で色々触っているのですが、完全に本番と同じではないことでエラーになったり、バグも見つけてしまったりとなかなか前に進めません。
自分が何をやっているのか、わからなくなりそうです。

さあ、また明日続きをやろう。

SQL

PostgreSQLのパスワード

2018年10月21日
SQLデータベースの文字コードを変更するため、新しい文字コードUTF-8でデータベースを作って全移動しています。
データベースが変わるので、cronで動かしているバックアップ(ダンプ)やバキューム(最適化)を変更しなくてはいけません。

cronから実行する場合、パスワードを入力できないので、【.pgpass】にIDやパスワード記録して、そこから読み込んで使います。

ホスト名:ポート番号:データベース名:ユーザ名:パスワード
を【.pgpass】に保存してホームディレクトリにアップロード、パーミッションを600にします。

これでcronからバックアップや最適化が可能になります。
副産物で、タームミナルエディタから接続する時も、PHPなどのソースでもパスワードを入力しなくてよくなります。

【.pgpass】には複数のデータベースのパスワードを保存できます。
【*】も使用可能です。どれでもOKの時は使用します。

PostgreSQL 9.3.2文書 - パスワードファイル

例1
*:*:db01:user1:pass1
*:*:db02:user1:pass2

例2
*:*:*:*:pass3

パスワードは平文で保存されますが、パーミッションが600ですし、大丈夫ということなんでしょう。でもファイルが流出したら困りますよね。

サーバー

特定のURLを除外してリダイレクト

2018年10月20日
3日間片頭痛で伸びていました。今回は薬があまり効かず、しんどかった。今日はやっとまともに活動できました。
片頭痛で吐き気がしている間は、指一本でも動かすと強烈な吐き気にくるので、ピクリとも動けません。そのせいで無理な姿勢で寝ていたのでしょうか、左腕がピクピクし始めてしまい、治まる気配がありません。ああ、鬱陶しい。


WebサイトのSSL化で、何か忘れている気がすると書きました。忘れていたわけではないのですが、テスト漏れがありました。すっかりテストした気になっていました。ご迷惑をおかけしてしまったユーザー様、申し訳ございません。

これからまだツールのソースを変更するので(サイトのSSLはそのままですが)、【.htaccess】のRewriteRuleを書き換えました。
特定のURLを除外して、httpsに301リダイレクトします。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/abcdefg.php$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://engineer.ns-it.net/$1 [R=301,L]

http://engineer.ns-it.net/abcdefg.php へのアクセスはそのままhttpで、それ以外はhttpsへ301リダイレクトします。
【.htaccess】は【engineer.ns-it.net】の下へアップロードです。

RewriteCond %{REQUEST_URI} !^/abcdefg.php$

RewriteCond %{REQUEST_URI} !(.*/abcdefg.php$)
でもOKを確認しました。

サーバー

WebサイトのSSL化

2018年10月16日
このブログの文字コードをUTF-8に移行できたので、今日は【ネットビジネス便利ツール】をUTF-8に移行予定だったのですが、急遽予定を変更してSSL化を行いました。

使っているレンタルサーバーがLet's Encryptに対応しているので利用することにしました。
おそらくメジャーなレンタルサーバーは対応(設定や更新を自動化)していると思うので、興味のある方は調べてみてください。

ネットビジネス便利ツール】はすんなりできました。
ですがこのブログはサブドメインで利用しています。使っているレンタルサーバーではLet's Encryptのワイルドカードにはまだ対応していないので、サブドメインごとにSSLを設定することで解決できました。

作業自体は簡単でした。
これで【ネットビジネス便利ツール】とこのブログをSSL化できました。
このブログの他にもサブドメインで運用しているサイトがあるのですが、閉鎖も含めてもう少し考えます。

ページ内にhttpでリンクを貼っている箇所を修正、PayPal決済関係でhttpを利用している箇所をhttpsに変更しました。

後は、【.htaccess】に
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://engineer.ns-it.net/$1 [R=301,L]
を書いて、httpでのアクセスをhttpsへリダイレクトと共に、検索サイトのページ情報を引き継がせます。

何か忘れている気もするけど、気がついた時また作業します。
助かりました。Let's Encryptとレンタルサーバーに感謝。

ブログ

データベースの文字コード変換

2018年10月15日
TwitterAPIのどツボにハマって遊んでしまいましたでTwitter関係を触ったら、このブログが文字化けし始めました。
紺屋の白袴で、未だにEUC-JPでした。もうこうなったらついでにUTF-8にしてしまいます。
いつかはやらねばと思っていたし、いやもっと優先順位の高い物があるので、その後のつもりだったのですが。

で、移行終了・・かな。多分。後はエラーが出た時に対応します。

ブログを運用しながら移行しました。
文字コードUTF-8のデータベースを新しく作り、そこにEUC-JPのデータベース全体からダンプしたファイルを使ってデータベース全体をリストアしました。
ダンプ(バックアップ)はcronで毎日動かしていますが、リストアは初めてでした。

今回移行したデータベースはPostgreSQLです。
旧データベースはPostgreSQL7でしたが、新データベースはPostgreSQL9になっていました。

一部のSQLでエラーが出ていたのでそちらも修正しました。
テーブル結合を行っている場合、FROM句に全てのテーブル名がないと(結合はWHERE句に書いているので)エラーになるようになっったようです。そう言えば「どうして全てのテーブルを書いていないのに動くんだろう」と思った記憶があります(でもそのまま動かしていたなんて・・・)。

そしてついでのついでで、html5へ移行もしました。

いつも作っているソフトウェアはフィルシステムですし、滅多にデータベースなんて触らなくなってしまっているので、とても緊張しました。息するの忘れているんじゃあないかって自分で思いました。

まだ一番大切なサイトの移行が残っています。ブログは予行演習でした。

大変良い勉強になりました。