AS400/IBMi VirtualBoxとVagrantでMac開発環境を構築する2/2

IT関連

前回の続きです。

前回はIBMiのデータベースからデータを引っ張れることを確認しただけ。

続いてGitリポジトリにあるLaravelのソースコードを取得して動くところまで。

実質環境構築はこれで完成する。

 

前回の記事はこちら。

AS400/IBMi VirtualBoxとVagrantでMac開発環境を構築する1/2
自宅でテレワークするのに、いちいち会社のPCにリモートして仕事をするのが奇妙なのでMac内に開発環境を作ろうと思います。 その備忘録です。 巷ではDockerが主流というか、現時点で使っていないやつは無能以下のゴミ扱いらしいですね。 でもD...

 

Gitをインストールする

Gitが入ってないので入れる必要がある。

ただし、CentOSでは標準リポジトリからはgitの古いバージョンしかyumインストールできないみたい。

gitの本家本元のサイト、git.scmによると、CentOSの場合はサードパーティのiusから取得するように書いてある。

iusのサイトを見ると、iusのsetup方法が書いてあったのでそれを行う。

[ius-releaseをインストールする]
$ sudo yum install \
https://repo.ius.io/ius-release-el7.rpm
\
404 Not Found
[gitをインストールする] $ sudo yum install -y git224.x86_64

これでGitの2.24.3がインストールされる。

この2.24.3という指定はyum searchで調べた。

$ sudo yum search git

とするとインストールできるパッケージでgitという文字が含まれるものが表示された。

その中には

  • git.x86_64
  • git222.x86_64
  • git224.x86_64

の3つがあった。

 

ソースコードの置き場を作る

ソースコードがローカル側(Mac)に無いとVSCodeなどのエディタで触れないので不便。

それゆえ前回iAccessを導入した時のごとく、マウントされる/vagrantにソースコードを置くようにする。

[マウントされる/vagrantに移動する]
$ cd /vagrant

[ディレクトリを作ってあげる。私の場合はXAMPPで名残があるのでhtdocsという名前にした]
$ mkdir htdocs

[htdocsに移動する]
$ cd htdocs

 

Gitリポジトリからソースを取得する

今さらながらリモートリポジトリは存在する体の話なので登録する。

もし一から作るのなら別記事にしてあるのでそちらをご覧ください。

リモート先のパスは私の環境なのでご自身のを入れてください。

[初期化する]
$ git init

[リモート先の登録をする]
$ sudo git remote add origin ssh://git_repo@128.1.10.10:22/opt/repo.git

[ソースコードを取得する]
$ sudo git pull origin master

これでソースコードがhtdocsの中に流れてくる。

途中でyes/noやリモート先のパスワードを聞かれるので正しいものを入力する。

 

シンボリックリンクを貼る

やり方としてはドキュメントルートを/vagrant直下に変更するのではなくシンボリックリンクを貼ることで対応します。

最初に/var/www/htmlの中身をクリアして、リンクを貼る。

[/var/www/htmlの中身をクリアする]
$ sudo rm -fr /var/www/html

[シンボリックリンクを貼る]
$ sudo ln -fs /vagrant/htdocs /var/www/html

 

ドキュメントルートを編集する

Laravelのindexはpublic直下にあるのでそこを見るようにhttp.confを設定する。

[httpd.confを編集する]
$ sudo vi /etc/httpd/conf/httpd.conf

[行番号を表示する]
:set nu
 
[119行目を編集する]
#DocumentRoot "/var/www/html"
DocumentRoot "/var/www/html/public"
 
[保存して終了]
:wq

変更箇所はコピーの上、コメントアウトで残しておく方がベター

 

オリジナルのdatabase.phpを持ってくる

database.phpはGit管理していないはずなのでリモートリポジトリから取得したソースコードから抜け落ちているはず。

なのでオリジナルのdatabase.phpをhtdocs/config内に入れて上げる。

これはFinder操作でできるはず。

これも以前LAMPで作った環境の続きゆえ、不明な場合はそちらの記事をご参照ください。

 

ドキュメントルートのAllowOverrideをAllにする

後はhttpd.confの設定を定着させるためにサーバを再起動すればいいが、これだけの設定だとトップページ(http://192.168.33.10)は表示できても、パスのあるルートにアクセスできない。

こんなエラーが出ます。

Not Found
The requested URL /パス名 was not found on this server.

これはpublicディレクトリにある.htaccessが効いていないため。

なぜ効かないかは、http.confの設定でAllowOverrideを設定していないから。

デフォルトでは、/var/wwwもNoneで、/var/www/htmlもNoneなので、それをAllにしてあげるか、新たにpublicに対して指定する必要がある。

[http.confを開く]
$ sudo vi /etc/httpd/conf/httpd.conf

[行番号を表示する]
:set nu

[Directory指定の最後160行目にくらいに下記3行追記する]
<Directory "/var/www/html/public">
    AllowOverride All
</Directory>

[保存して終了]
:wq

 

httpdを再起動する

httpd.confを編集したので、設定を適用させるためにhttpdサーバを再起動する。

$ sudo systemctl restart httpd

 

ブラウザで接続する

これでLaravelで作ったアプリの画面が表示されるはず。

 

念のためGitの動作確認だけしておく

複数でのGit操作は慣れていないので一応Pushの操作までしておく。

[gitの初期設定]
$ git config --global user.name "vagrant"
$ git config --global user.email "あなたのメールアドレス"
$ git config --global color.ui true
$ git config --global core.autoCRLF false

[Git pushまでの一連]
$ git add .
$ git commit -m "vagrantからテスト"
$ git push origin master

これでOKのはず。

 

作った環境をパッケージにしておく

Dockerに移行することも見据えて勉強のために、作った環境をパッケージにして、それを元にBOXに追加する。

[SSHを抜ける]
$ exit

[作った仮想環境をBOXにする]
vagrant package

[BOXに追加する]
vagrant box add centOS72ibmi_box package.box

 

ボックスを元に環境を作る

別PCに移植したとして一度作った環境を使いまわせるかを試してみる。

[Vagrantディレクトリに戻る]
cd ..

[ディレクトリを作る]
mkdir centOS72ibmi2

[ディレクトリに移動する]
cd centOS72ibmi2

[初期化initをする」
vagrant init centOS72ibmi_box

[Vagrantfileの35行目を修正する]
[VagrantfileのIPアドレスは今回192.168.33.11にする]
config.vm.network "private_network", ip: "192.168.33.11"

[ソースコードを移植する]
Finderなどを使ってLaravelのhtdocsフォルダごと移植する

[起動する]
vagrant up

 

結果

ブラウザでアクセスしたところちゃんと表示された。

思ったよりうまくいった感じで安心。

 

まとめると、

  • 全ての仮想サーバの設定はちゃんと引き継がれている
  • Vagrantfileの設定は初期状態だった
  • ソースコードを移動する前にvagrant upをするとpublicディレクトリが見つからずhttpdの起動に失敗

package.boxは仮想サーバのイメージとして保存しておいた方がいいかもですね。

httpdやphpやiAccess等のドライバもなども含まれるので引っ越しや別社員に環境を作ってあげるのに便利。

 

おまけ

権限関係でエラーが起こることがあるので備忘録。

ログ系のファイルにアクセルできなかったり、キャッシュが云々でうまくいかなかったり。

  • storage/logs/laravel.logというファイルにアクセスできない
  • storage/framework/sessions直下に作られるセッション情報にアクセスできない
  • キャッシュが悪さしている節がある

など。により色々やってみた。

 

セッション情報のアクセス拒否 storage/framework/sessions/セッション情報 Permission denied

$ sudo chmod -R 777 storage

 

laravel.log系のエラー

[laravel.logがないので作ってあげる]
$ cd storage/logs
$ sudo touch laravel.log

[laravel.logのパーミッションを777にする]
$ sudo chmod 777 laravel.log

 

キャッシュ系エラー? bootstrap/cache directory must be present and writable.

[bootstrap以下のパーミッションを触る]
$ sudo chmod -R 775 bootstrap/cache/

[キャッシュのクリア]
$ php artisan cache:clear

 

1つめのsessionsのPermission deniedはWindowsで環境を作ったときはchmodを一発行えばよかったが、Macの場合はその後何度もエラーが起きた。

原因は不明だが、sessions直下に作られるセッションファイルが所有権vagrantの644で作られることが原因のよう。

Apacheはapacheユーザーでセッションファイルにもアクセスしにいくので、644だと書き込みができずにエラーになるということみたい。

しかもセッションファイルは新しく生成されるたびに644で作られるので、chmodで777に変更したところで、同じ現象がなんども起きてしまう。

解決方法ははっきりとは言えないが、Apacheをvagrantユーザーで動かすようにすれば起きなくなった。

すなわち、

$ sudo vi /etc/httpd/conf/httpd.conf

User vagrant
Group vagrant

にするということ。Apacheの再起動、サーバーの再起動をしても同じ現象は起きず、他の機能も問題なく動いた。

これでいいのか・・・?

 

コメント

タイトルとURLをコピーしました