12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HomesteadでLaravel環境構築(Windows10)

Last updated at Posted at 2019-04-05

#前置き
もう各所で散々書かれている内容だから私が書かなくても…と思ったのですが、

というsuinさんのツイートに背中を押されたので書くことにしました。
七転八倒したポイントを重点的に書けばいいよね。うんうん。

#環境
※ 構築したのは2019年1月頃

  • Windows10
  • Oracle VM VirtualBox 6.0
  • vagrant 2.2.2
  • PHP 7.2
  • Laravel 5.7.21

#準備

#BOX追加

Git Bashまたはコマンドプロンプトを起動して以下を入力

GitBash
cd c:\
vagrant box add laravel/homestead

ここで「Enter your choice:」と出るので、
3(virtualbox) を入力してEnterします。

しばらく待って、以下のような表示が出ればOK

GitBash
==> box: Successfully added box 'laravel/homestead' (v6.4.0) for 'virtualbox'!

#Homesteadダウンロード(git clone)

公式からcloneします。
ディレクトリ名はお好きに。今回は特に何も考えずHomesteadにしました。

GitBash
git clone https://github.com/laravel/homestead.git ~/Homestead

#設定の初期化

GitBash
cd ~/Homestead

./init.sh
# Homestead initialized! と表示されたらOK

#Homestead.yamlの修正

foldersとsitesを修正します

Gitbash
# 場所は ~/Homestead のまま
vi Homestead.yaml
Homestead.yaml
# (中略)
folders:
    - map: D:\homestead\Laravel # ローカルディレクトリ
      to: /home/vagrant/code # vagrant上のディレクトリ

sites:
    - map: homestead.test # host名(起動後のドメイン名)
      to: /home/vagrant/code/public # web上に公開するディレクトリ(Apachで言うところのhtdocs)

##(補足) sites:mapに記載するドメイン名について

後で構築した環境をブラウザで確認するとき、
取り急ぎ https:// ではなく http:// でアクセスする場合は
homestead.app ではなく homestead.test を指定する方が無難です。

http://homestead.apphttps://homestead.app とリダイレクトされるのですが、
Chromeだと自己署名証明書がエラーとなるためアクセスできないためです。

ただ、昨今の情勢としてはSSL通信で動かすことがベターだと思うので、
余裕があれば自己証明が通るよう設定した方がいいかもしれません。
(私はまだやってない……)

#SSH鍵ファイル作成
Homestead.yaml の authorize と keys にあたるファイルを作成します

Homestead.yaml
authorize: ~/.ssh/id_rsa.pub # 公開鍵

keys:
    - ~/.ssh/id_rsa # 秘密鍵
GitBash
cd ~

# 鍵が既にあるかどうか
ls -la .ssh

# 無ければ以下を実行

mkdir .ssh
cd .ssh # ~/.ssh へ移動

# 鍵ファイル作成
ssh-keygen -t rsa

# id_rsa.pub と id_rsa が作成されたことを確認する
ls -l

#hostsファイル修正
C:\Windows\System32\drivers\etc\hosts にホスト追加します。
これはGit Bashで編集できなかったのでサクラエディタでやっちゃいました。

GitBash
# Homestead.yamlの ip と sites:map を紐づける感じです
192.168.10.10    homestead.test

#いざ、起動!

GitBash
# Vagrantfileがある場所に移動
cd Homestead/

# 起動 ちょっと時間かかります
vagrant up

502 Bad Gateway になった

起動して vagrant ssh もできる状態になったのですが、
http://homestead.test をブラウザで開くと502の表示……

どうやら原因はnginxの方にあるらしい
502 Bad Gateway nginx (1.9.7) in Homestead [ Laravel 5 ]

というわけで、nginxの設定を見ていきます

GitBash
# homestead環境にログイン
vagrant ssh

# nginxの設定ファイルはこちら
less /etc/nginx/nginx.conf

「Virtual Host Configs」の項に何がincludeされているか書いてます

/etc/nginx/nginx.conf
http {
# (中略)
        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

includeしているディレクトリを見ると、
どうやら /etc/nginx/sites-available/homestead.test がhomestead環境の設定ファイルのようです。

/etc/nginx/sites-available/homestead.test
server {
# (中略)
    access_log off;
    error_log  /var/log/nginx/homestead.test-error.log error;

エラーログの場所が分かったので、そちらを見ます。
(と言いつつ、調査当時のメモによるとなぜか homestead.app-error.log の方を見ている私…)

/var/log/nginx/homestead.app-error.log
2019/01/17 04:20:09 [crit] 1603#1603: *1 connect() to unix:/var/run/php/php7.2-fpm.sock failed (2: No such file or 
directory) while connecting to upstream, client: 192.168.10.1, server: homestead.app, request: "GET / HTTP/1.1", up
stream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "homestead.test"

php-fpmの方に原因がありそう。
類似のエラーを対処した方の記事を見ながら修正してみます。
nginxでphpのパッケージを追加したら’502 Bad Gateway’になってしまったときの対処法

vagrant@homestead
sudo vi /etc/php/7.2/fpm/pool.d/www.conf

# www.confのlistenを修正
;listen = /run/php/php7.2-fpm.sock
listen = /var/run/php/php7.2-fpm.sock

そしてphp-fpmとnginxを再起動します

vagrant@homestead
sudo service php7.2-fpm restart
sudo service nginx restart

これで502エラーが解消されました!

##No input file specified が表示される

こちら によると
Homestead.yamlsites:to のディレクトリが間違っているかもということで確認しましたが、私の場合その問題ではなさそうです。

vagrant@homestead
ls -l ~/code/public/index.php
-rwxrwxrwx 1 vagrant vagrant 1823 Jan 17 04:56 /home/vagrant/code/public/index.php

# Homestead.yamlの設定は以下のようになっているので問題なし
sites:
    - map: homestead.test
       to: /home/vagrant/code/public

というわけで、エラーログをtailしながら http://homestead.test に再度アクセス。

/var/log/nginx/homestead.app-error.log
2019/01/17 05:16:18 [error] 7864#7864: *6 FastCGI sent in stderr: "Unable to open primary script: /home/vagrant/code/test/public/index.php (No such file or directory)" while reading response header from upstream, client: 192.168.10.1, server: homestead.app, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "homestead.test"

なぜか /home/vagrant/code/test/public を見に行っている模様。

実は最初の頃Homestead.yamlを以下のように設定していた時期があり、その時の設定が適用されたままだったようです。

Homestead.yaml(古い設定)
sites:
    - map: homestead.app
      to: /home/vagrant/code/test/public

エラーログが homestead.app-error.log の方に出ていたのもそれが原因です。
強制プロビジョニングで解消しました。

GitBash
vagrant up --provision

これで例の初期画面が表示されました。
その後、エラーログも /var/log/nginx/homestead.test-error.log の方に出力されるようになりました。

お疲れ様でした……!

#その他参考

12
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?