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_rsa
とid_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の設定(設定ファイル)
デフォルトは以下のような感じ。コメントアウトで説明を記入しています。
# 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
以下、書き換える場所だけ抜粋。
# 私の環境ではこの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
全て設定したあとは、こんな感じ。
おまけの方に、複数プロジェクトを作る場合の設定例も記載しておきます。
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
ディレクトリができているはず。(画像は若干ディレクトリ構成異なってますが)
Homesteadの再設定
このまま http://homestead.test にアクセスしてもいつものLaravelの画面は出てこないので、homestead.yamlを再設定する。
# ssh接続を切断
$ exit
# Vagrantを停止
$ vagrant halt
# homestead.yamlを開く
$ vi ~/tests/vm-test/Homestead/Homestead.yaml
開発用ドメインの参照先を下記のように訂正
sites:
- map: homestead.test
to: /home/vagrant/code/laravel/public
Vagrantを再起動
$ vagrant up
ここまでやって、http://homestead.test にアクセスすると、無事表示されるはずです。いつものLaravelの画面でた↓↓
以上で環境構築完了です!!
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プロジェクトを新たに追加します
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の中身をこういう設定にした場合。。。
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以外でも使える有名どころの拡張機能
- Bracket Pair Colorizer
-
Bracket Pair Colorizer 2
カッコの対応を見やすくしてくれる -
EvilInspector
全角スペースをハイライト -
Trailing Spaces
行の後ろにあるスペースをハイライト表示 -
VSCode Icons
ファイルのアイコンが見やすくなる
VSCode上でGitをいい感じに使う
Laravel開発でいい感じに使える拡張機能を入れる
-
DotENV
.envファイルの中身をシンタックスハイライト -
PHP Debug
PHPのデバッガー - PHP IntelliSense PHPファイルの整形
-
PHP Intelephense
PHPファイルの整形
以上です。ツッコミあったら教えてください。。。