14
14

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.

Vagrant + VirtualBox でLaravel5.8環境構築メモ

Last updated at Posted at 2019-07-21

2019.8.14 複数プロジェクトを作る手順を追加し、ディレクトリ構成を複数プロジェクトで使えるように修正しました。

Vagrantのインストール

https://www.vagrantup.com/downloads.html

VirtualBoxのインストール

https://www.virtualbox.org/wiki/Downloads

VagrantのBoxを準備する

参考サイト

https://qiita.com/Fendo181/items/a6b9017f6ef490995aba

VirtualBoxとVagrantがインストールされた状態から、以下の手順で進める

ホストOSディレクトリ構成の確認

ディレクトリはこんな感じを想定します。

    └──Homestead    # vmの起動はここから。任意のディレクトリに入れてもOK
    └──vm-test      # お好みで。ホーム直下にcodeディレクトリでもOK    
      └──code       # VM内と繋げるディレクトリ
        └──laravel  # プロジェクトのディレクトリ

Homesteadのインストール

    # 後から使うので先に作っておきます
    $ mkdir vm-test
    $ cd vm-test
    $ mkdir code
    # ホームにもどってhomesteadをインストールしていきます
    $ cd  
    $ vagrant box add laravel/homestead
    $ git clone https://github.com/laravel/homestead.git Homestead
    $ cd Homestead
    $ bash init.sh
    Homestead initialized!
    # 上記のメッセージが出たらOK

Homesteadとは

Laravel Homestead(入植農地、「ホームステード」)はパッケージを事前に済ませた、Laravel公式の"box"で、PHPやHHVM、Webサーバー、その他のサーバーソフトウェアをローカルマシンにインストールする必要なく、素晴らしい開発環境を準備できます。オペレーティングシステムでごちゃごちゃになる心配はもうありません! Vagrantのboxは完全に使い捨てできます。何かの調子が悪くなれば壊して、数分のうちにそのboxを再生成できます!

Laravel Homesteadに含まれるソフトウェアは以下になります。

Ubuntu 16.04
Git
PHP 7.1
Nginx
MySQL
MariaDB
Sqlite3
Postgres
Composer
Node (With Yarn, Bower, Grunt, and Gulp)
RedisMemcached
Beanstalkd
Mailhog
ngrok

Homesteadとは、Laravel公式による仮想環境(VM)用のパッケージ。PHP、Laravelによる開発のために必要なあれこれがひとまとめになっています。

ssh鍵の作成

Homesteadの設定では、id_rsaがデフォルトで指定されるので、すでに鍵が存在する場合はこの項目を飛ばしてもOKです。
鍵が存在するかどうかは、下記コマンドで確認できます。

    $ cd ~/.ssh
    $ ls | grep "id_rsa"
      id_rsa
      id_rsa.pub

上記のようにid_rsaid_rsa.pubがあればOKです。ない場合は下記の手順にしたがってid_rsa_homesteadを設定して進むことができます。

ちなみにデフォルトのid_rsaの鍵を作成したい場合は、id_rsa_homesteadの箇所を全てid_rsaに置き換えて読めばid_rsaで鍵が作れます。

    $ cd ~/.ssh
    # 鍵を作る id_rsa_homestead というファイル名にする
    $ ssh-keygen -t rsa -C メールアドレス -f id_rsa_homestead
    # password聞かれるので任意に。エンター押してスキップもOK
    # 鍵の確認
    $ ls | grep "id_rsa_homestead"
    id_rsa_homestead
    id_rsa_homestead.pub
    # 上記のようにファイルが検索できたらOK

Homestead.ymlの設定(設定ファイル)

デフォルトは以下のような感じ。コメントアウトで説明を記入しています。

Homestead.yaml

    # ipアドレスとメモリの割り当て、使用するプロバイダ
    -- ip: "192.168.10.10"
    memory: 2048
    cpus: 2
    provider: virtualbox
    
    # 公開鍵の参照場所
    authorize: ~/.ssh/id_rsa.pub
    
    # 秘密鍵の参照場所
    keys:
    - ~/.ssh/id_rsa
    
    folders:
    # ホスト側OSの参照ディレクトリ
    - map: ~/code
    # ゲスト側OSのディレクトリ
      to: /home/vagrant/code
    
    sites:
    # ブラウザアクセス時の開発用ドメインと参照先の設定
    - map: homestead.test
      to: /home/vagrant/code/public
   
    # 使用するDB名
    databases:
      - homestead
    
    features:
        - mariadb: false
        - ohmyzsh: false
        - webdriver: false
    
    # blackfire:
    # - id: foo
    # token: bar
    # client-id: foo
    # client-token: bar
    
    # ports:
    # - send: 50000
    # to: 5000
    # - send: 7777
    # to: 777
    # protocol: udp

これを書き換えていきます。Homestead直下のyamlファイルを下記コマンドで編集します。

    $ cd tests/vm-test/Homestead
    $ vi Homestead.yaml

以下、書き換える場所だけ抜粋。

Homestead.yaml
    # 私の環境ではこのipアドレスをすでに使っていたので変更します
    - ip: "192.168.30.10"
    
    # 鍵の設定 今回は先ほど新たに作った鍵を使います
    authorize: ~/.ssh/id_rsa_homestead.pub
    keys:
    - ~/.ssh/id_rsa_homestead
    
    # 参照するディレクトリの指定
    folders:
    - map: ~/vm-test/code
      to: /home/vagrant/code

全て設定したあとは、こんな感じ。
おまけの方に、複数プロジェクトを作る場合の設定例も記載しておきます。

Homestead.yaml
    ip: "192.168.30.10"
    memory: 2048
    cpus: 2
    provider: virtualbox

    authorize: ~/.ssh/id_rsa_homestead.pub

    keys:
        - ~/.ssh/id_rsa_homestead

    folders:
        - map: ~/vm-test/code
          to: /home/vagrant/code

    sites:
        - map: homestead.test
          to: /home/vagrant/code/public

    databases:
        - homestead

    features:
        - mariadb: false
        - ohmyzsh: false
        - webdriver: false

    # ports:
    #     - send: 50000
    #       to: 5000
    #     - send: 7777
    #       to: 777
    #       protocol: udp

hostsファイルの編集

開発用ドメインにローカルからアクセスできるように、Macのhostsファイルを編集します。

    $ sudo vi /etc/hosts
    # ファイルを開いたら、先ほど設定ファイルで使ったipアドレスを追記する
    192.168.30.10 homestead.test

Vagrantを起動してSSH接続

    # HomesteadディレクトリからVagrant起動
    $ cd ~/Homestead
    $ vagrant up
    $ vagrant ssh

vagrant upで起動できたらパスワードを聞かれるので、Mac本体のPWを入力します。

接続できたら、/home/vagrant/の中にcodeというディレクトリがあるか確認。(ここがホストOSと接続されるディレクトリになります)

    # vagrant@homesteadに接続した状態
    $  ls | grep "code"
                          code

上記のようにcodeが検索されたらOK!

Laravelをインストールする


    # 5.8系のLaravelをインストールします
    # vagrant@homesteadに接続した状態 
    $  cd code
    # 今回はプロジェクト名=laravelで進めます
    $  composer create-project laravel/laravel laravel --prefer-dist

    # インストールの確認。`code`の下に`laravel`ディレクトリが生成されている。
    $ ls
      laravel

インストールコマンドはcomposer create-project laravel/laravel プロジェクト名 --prefer-distとなっていますので、任意のプロジェクト名に適宜変更してください。

この時点でMac側のvm-test/code の中にもlaravelディレクトリができているはず。(画像は若干ディレクトリ構成異なってますが)

image.png

Homesteadの再設定

このまま http://homestead.test にアクセスしてもいつものLaravelの画面は出てこないので、homestead.yamlを再設定する。


    # ssh接続を切断
    $ exit
    # Vagrantを停止
    $ vagrant halt
    
    # homestead.yamlを開く
    $ vi ~/tests/vm-test/Homestead/Homestead.yaml

開発用ドメインの参照先を下記のように訂正

Homestead.yaml

    sites:
        - map: homestead.test
          to: /home/vagrant/code/laravel/public

Vagrantを再起動


    $ vagrant up

ここまでやって、http://homestead.test にアクセスすると、無事表示されるはずです。いつものLaravelの画面でた↓↓
image.png

以上で環境構築完了です!!

MySQLのrootパスワードを変更

こちらは必要に応じて設定してください。


    # vagrantを起動して接続
    $ cd ~/tests/vm-test/Homestead
    $ vagrant up
    $ vagrant ssh
    
    # mysqlにログイン(初期パスワードはsecret)
    $ cd code
    $ mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4
    Server version: 5.7.26-0ubuntu0.18.04.1 (Ubuntu)
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    # rootユーザーのパスワードを任意のものに変更する(今回はrootに設定)
    mysql> set password for root@localhost=password('root');

おまけ1:複数プロジェクトを作りたい!

個人的に、もう一個プロジェクトを作りたくなったので設定ファイルの記述例を置いておきます。
色々やり方があるかと思いますが、一番シンプルに、接続するディレクトリは共有し、開発用ドメインの参照先を分けて作るやり方です。

Laravelのインストールはlaravelをインストールすると同じ手順で行ってください。

  • Homestead.yamlを編集

今回はproject01というLaravelプロジェクトを新たに追加します

Homestead.yaml
ip: "192.168.30.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa_homestead.pub

keys:
    - ~/.ssh/id_rsa_homestead

# 2つのプロジェクトで参照先を共有するので変更なし
folders:
    - map: ~/tests/code
      to: /home/vagrant/code

sites:
    - map: homestead.test
      to: /home/vagrant/code/laravel/public
    # 2つ目のプロジェクトの開発用ドメインと参照先を設定
    - map: project01.test
      to: /home/vagrant/code/project01/public

databases:
    - homestead
    # 2つ目のプロジェクトのDB名を設定
    - project01

features:
    - mariadb: false
    - ohmyzsh: false
    - webdriver: false

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp


おまけ2:MySQLの接続設定を変更する

もしプロジェクト作成後にDBの設定を変更する場合は、.envを書き換えてからそれに合わせてmysqlの設定を再度行うこともできます。

例えば.envの中身をこういう設定にした場合。。。

.env

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=project
    DB_USERNAME=user
    DB_PASSWORD=hogehoge

以下の手順で新たにdatabaseとuserを設定できます。


    # sshで接続後にrootユーザーでmysqlに再度ログイン
    $ cd プロジェクトのディレクトリ
    $ mesql -u root -p
    Enter password:    # 先ほど変更したPW(=root)でログイン
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    ・・・
    
    # projectという名前のDBを作成
    mysql> CREATE DATABASE project;
    Query OK, 1 row affected (0.01 sec)
    
    # ユーザー(=user)を作成してPW(=hogehoge)でログインできるようにする
    mysql> CREATE USER 'user'@'%' IDENTIFIED BY 'hogehoge';
    Query OK, 0 rows affected (0.00 sec)
      
    # 権限を制限する 作成したユーザーは、projectデータベース以外に権限を与えない
    mysql> GRANT ALL PRIVILEGES ON project.* TO 'user'@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    # 変更を反映させる
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> exit;

一度ログアウトして作成したユーザー名で再度ログイン


    $ mysql -u user -p
    Enter password:    # 先ほど設定したPW(=hogehoge)でログイン
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    ・・・
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | project            |
    +--------------------+
    2 rows in set (0.00 sec)
    
    mysql> exit;

先ほどと違い、表示されるdatabaseが2つしかありませんが権限を一部しか与えていないので、これで大丈夫です。
ユーザーとデータベースの作成は上手くいったので、あとはphp artisan migrateしてちゃんと接続できているか確認します。(mysqlは一旦ログアウトして、ssh接続後の/code下でコマンド打ちます)


    vagrant@homestead:~/プロジェクトのディレクトリ$ php artisan migrate
    Migration table created successfully.
    Migrating: 2014_10_12_000000_create_users_table
    Migrated:  2014_10_12_000000_create_users_table (0.08 seconds)
    Migrating: 2014_10_12_100000_create_password_resets_table
    Migrated:  2014_10_12_100000_create_password_resets_table (0.1 seconds)

エラーが出ていないので大丈夫ですが、一応確認しておきます。


    $ mysql -u user -p
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    ・・・
    
    mysql> use project;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;
    +-------------------+
    | Tables_in_project |
    +-------------------+
    | migrations        |
    | password_resets   |
    | users             |
    +-------------------+
    3 rows in set (0.00 sec)
    
    mysql>

無事にmigrateできているのでOK。あとは必要に応じてrollbackしておきます。


    vagrant@homestead:~/プロジェクトのディレクトリ$ php artisan migrate:rollback
    Rolling back: 2014_10_12_100000_create_password_resets_table
    Rolled back:  2014_10_12_100000_create_password_resets_table (0.22 seconds)
    Rolling back: 2014_10_12_000000_create_users_table
    Rolled back:  2014_10_12_000000_create_users_table (0.02 seconds)
    vagrant@homestead:~/プロジェクトのディレクトリ$

おまけ3:ローカルの環境を整える(VSCode拡張機能)

以下、mac + Visual Sutudio Codeでローカル開発の際に使っている拡張機能をさらっと紹介。

PHP以外でも使える有名どころの拡張機能

VSCode上でGitをいい感じに使う

  • GitLens
    変更履歴がわかりやすい
  • Git Graph
    ブランチの管理が楽

Laravel開発でいい感じに使える拡張機能を入れる

以上です。ツッコミあったら教えてください。。。

参考サイト

https://nori-life.com/mac-laravel-homestead-vagrant/

Homebrew公式

14
14
3

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
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?