ホスティングサービスからOCIへアプリの移行

# アプリを移行

### ホスティングサーバからデータの抜き出し
私は以前より、GMOのロリポップサーバのシェルを使えるプランを利用しているため、今回はサーバのデータをtarで固めてまとめて持ってきたいと思います。
一部のCGIはDBを使っており、ロリポップが標準で準備しているMySQLを使っています。
こちらの移行方法はまだ調べきれていないため、今回はファイルだけ移動してみる事にします。

SSHでログインしてtarで固めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/30589422-fdcb-5942-8a39-1bbcc02a098e.png)

34MB弱になったようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/55eed585-99a9-a3c1-f4ec-b898864531e7.png)

これを一度WinSCPを使ってローカルに持ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/2f89df90-7eab-61de-97ab-c7797c75ae84.png)

### サーバへデータをアップロード
今度はローカルからOCI上にWinSCPを使って持って行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/f2fd7a3e-dc64-cc08-635f-19dcb323abec.png)

OCIのインスタンスのシェルに入って確認するとちゃんとありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/8e0315d9-529c-3593-86cb-a8ef824ea439.png)

### ファイルの解凍
tarファイルをここで展開してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/e6af6364-0f34-f1b3-e8a2-9f3a578022f4.png)
無事に解凍できてはいるものの、当然同じUIDはないのでオーナーが違います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/8d7670aa-a3a0-c7e8-5bde-40e34ad9d9c3.png)
ここではオーナーをopcに統一しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/2b595152-7d9e-7740-5fa7-fcae33810226.png)
これでオーナーがopcになりました。

中のファイルのどれが何だったかあまり記憶に無いのでとりあえず、全て/var/www/htmlへ持って行ってみます。

index.htmlも置き換わっているはずなのでブラウザでアクセスしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/3f718341-6e33-0eeb-7ade-ac7cac586712.png)
なんと、文字化けしています。

### Apacheの文字化け対応
そういえば、昔はほとんどs-jisで書いていたっけ・・・。
どうすれば良いか調べました。

どうも、httpd.confにUTF-8をデフォルトにする記述があるようでそれが影響してHTML内で指定してもヘッダが優先されてしまうようです。

というわけで、httpd.confの対象箇所をコメントアウトしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/7ef2e003-22fa-ae13-8b92-6ea7fb1d37e3.png)
サービスを再起動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/2c370835-a9a3-4c75-35a6-dca253fb9239.png)
一応、ヘッダを確認すると無指定になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/3598d669-f376-0f9e-5155-ffba9da7ceb4.png)
無事に表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/a87cfaf1-0130-8234-bab2-17d32a43cddb.png)

httpd.confを修正し、CGIを使えるようにして確認動作を確認してみます。

ExecCGIを追加しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/91f5a190-a515-ebc9-7e7e-9d513089c20d.png)

ブラウザからアクセスすると500エラーになってしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/211c2cf3-4168-68f6-8ef0-ccfbb2d8030f.png)


PERLそのものが大丈夫かシェルでスクリプトを流してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/83e6720f-4a2f-0cb1-bc68-53a9b973c907.png)
Jcode.pmが足りないようです。

### Jcode.pmのインストール
AWSもそうでしたが、クラウドは基本的に日本語には優しくないようです・・・
早速、Jcode.pmを入れてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/7bd79705-db0b-7348-715c-0f7a42da3d5a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/ccc84366-31e7-ae1a-eb93-a92574722aef.png)
結果がFAILになって失敗してるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/a5d091c8-e977-689e-5567-ae9d8880d143.png)
//hint//に試してみるようにかいてあるので試してみたところ、CPAN::DistnameInfoが無いと言われているので入れてみます。
入れた後、再度Jcode.pmのインストールを試みるとまたエラーが出たので同様に調べると今度はLWPが無いとか・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/c2f8f59e-367a-a38f-abdf-b122d2ef39be.png)
なのでLWPを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/963a7697-6a74-41e5-437b-05c5f34ada70.png)

再度、Jcode.pmのインストールを試してみると無事に入りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/a32e78af-9069-5900-4c3c-3440e65e612a.png)
シェルでPerlスクリプトを動かすと普通に動きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/de49249c-8698-3e8e-af3f-e9630539a6d1.png)
これで無事に動くと思い、ブラウザからアクセスしたところ、また500エラーに。
もしやと思いPERLのパスを見ると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/174f658f-b331-09cf-622f-0ce37cbbc71e.png)
でした。
ロリポップが/usr/local/bin/perlでしたので、書き換えが必要でした。

こちらを解決すると無事にCGIが動きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/eaf9e16d-ed9a-c55d-07cc-a43d845878f9.png)
・・・がログインするとデータが全く表示されず、いろいろと切り分けをした結果、データ格納ディレクトリのパーミッションの設定に問題があり、修正するとデータが表示されるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/776a64a8-dc99-d50d-39ff-cb119f256d3c.png)

以上、アプリがOCI上のインスタンスで動くところまで行きました。
次回はドメイン移行を見据えて、テスト用に一つドメインを取得してこのサーバに紐付けようと思います。