2. Homesteadを用いたsymfony4環境構築手順(DB設定)
概要
Homesteadを使用したsymfony4の環境構築(DB設定)についてやったことを纏めた。 既にHomesteadにインストールしてあるPostgreSQLにsymfony_dbというデータベースを作成する。下記のサイトを参考に環境構築を行った。
Using PostgreSQL with Symfony 4
環境構築
1. 必要なライブラリのインストール
$ composer require doctrine/doctrine-bundle
2. .envへのDB設定記述
# .env # customize this line! - DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name + DATABASE_URL=pgsql://homestead:secret@127.0.0.1:5432/symfony_db
ここに記述した情報をもとにDBが作成される。
3. config/doctrine.yamlの修正
doctrine: dbal: - driver: 'pdo_mysql' + driver: 'pdo_pgsql' charset: utf8
3. データベース作成
$ php bin/console doctrine:database:create Created database "symfony_db" for connection named default
4. 作成したデータベースの確認
データベースに接続し、テーブルが作成されているかを確認する。 Homesteadの場合、DBの初期パスワードはsecretとなっている。
vagrant@homestead:~/code$ psql -U homestead -h localhost Password for user homestead:(secret) ... homestead=# \l Name | Owner | Encoding | Collate | Ctype | Access privileges ------------+-----------+----------+-------------+-------------+----------------------- homestead | homestead | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | symfony_db | homestead | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (5 rows)
Laradock環境構築
Laradockとは
Laravelのアプリを開発する上で必要なComposer、MySQL、Nginxなど諸々のDockerコンテナを作成する為のイメージが入ったパッケージ。これらのコンテナを組み合わせアプリ開発をしていく。VagrantでいうHomesteadのような存在。
Dockerイメージとは
コンテナを作成するためのファイルシステム。イメージは公式な「リポジトリ」で配布されているもの(ベースイメージ)を取得してきてもよいし、自作することもできる。例えばRubyとMySQLのパッケージを追加してひとつのイメージにしておけば、これを様々な環境で同一に使いまわすことができる。何と何を組み合わせるかはDockerfileに定義しておく。 今回はLaradockが提供しているイメージを使用することになるが、LaradockはLaravelやComposer等プログラム系を纏めたworkspace、WebサーバーであるNginx、DBのMySQLという単位でイメージを切り分けてある。(他にもRedis、phpMyAdminといった単位でたくさん用意してある) とりあえずのアプリを作成するのならworkspace、nginx、mariadbのイメージからコンテナを作成すればいい。
環境構築
準備
今回のフォルダ構成は下記の通り。
laradockと同階層にプロジェクトフォルダを置く。
projectフォルダ配下にはapp,bootstrap,config...とLaravelのフォルダが続く。
ちなみに既にプロジェクトフォルダがある場合、後ほど記載するlaradockの.envのマウントフォルダのパス設定を変えれば良い。
使うDBをプロジェクトによって切り替えたい場合は、laravelの.envを変えること。
Documents/ ├ laradock/ ├ project/
手順1.LaradockをCloneする
git clone https://github.com/LaraDock/laradock.git
手順2.laradock用の.envを用意する
cd laradock cp env-example .env
これはLaravelの.envではなくLaradockの.envである。 この.envに、コンテナとマウントするプロジェクトフォルダ等を定義していく。
「準備」記載のフォルダ構成を前提にlaradockの.envにマウントフォルダを下記のように定義する。
APP_CODE_PATH_HOST=../project
手順3.コンテナを作成する
docker-compose up -d nginx mariadb phpmyadmin redis workspace
最初はなかなか時間が掛かる。次からは早い。
手順4.コンテナの起動を確認する
docker-compose ps
stateがUpになっていればコンテナが起動している。
※ここでmariadbが動いていない問題が発生!!とりあえず下記の対応で何とかなった。
volumes: - - ${DATA_PATH_HOST}/mariadb:/var/lib/mysql + #- ${DATA_PATH_HOST}/mariadb:/var/lib/mysql
手順5.Laravelプロジェクトの作成
workspaceというコンテナに入りcomposerでプロジェクトを作成する。 まずは下記のコマンドでworkspaceコンテナに入る。
docker exec -it laradock_workspace_1 /bin/bash
ここでls -l
すると、どのフォルダ階層かが分かる。「準備」記載の階層にプロジェクトフォルダを作るとして、Composerでプロジェクトを作成していく。
composer create-project laravel/laravel docker_app
完了
workspaceでphp artisan serve
で稼働を確認できる。
その他
Laravelの.envのDB初期値設定は下記である。
DB_CONNECTION=mysql DB_HOST=mariadb DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret
1. Homesteadを用いたsymfony4環境構築手順(環境構築~Route,Controller作成まで)
環境構築
symfonyでアプリを開発する為に必要な環境を整えていく。記事を漁っていくとLaravelで使用していたHomesteadでお手軽にスタートすることが出来るとの記事を見つけた。Vagrant、Homesteadって??という方は下記の記事を参考にVirtualBox + Vagrant + Homesteadを用意する。(ComposerはHomesteadに既に入っている)
【Laravel超入門】開発環境の構築(VirtualBox + Vagrant + Homestead + Composer)
1. プロジェクト作成
Homesteadフォルダに移動しvagrant ssh
で仮想マシンへ入ったら、composerを使用してプロジェクトを作成する。
$ composer create-project symfony/website-skeleton my-project
2. Git 管理
プロジェクトを作成したらgit commitをする。
$ cd my-project $ git init $ git add . $ git commit -m "Initial commit"
3. セキュリティ脆弱性の確認
公式サイトによるとセキュリティなんちゃらを入れるらしい。説明は下記の引用を参考に。
Symfonyには、プロジェクトの依存関係に既知のセキュリティ上の脆弱性が存在するかどうかをチェックするための "Security Checker"というユーティリティが用意されています。以降、このユーティリティは、アプリケーションの依存関係をインストールまたは更新するたびに自動的に実行されます。 依存関係に脆弱性がある場合は、明確なメッセージが表示されます。
composer require sensiolabs/security-checker --dev
これでとりあえずの環境構築が完成。
動作確認
ここまで出来たらsymfonyがきちんとインストールされているか下記のコマンドで確認する。http://localhost:8000/ でWelcomeページが出ていればOK!
php bin/console server:run
hello world 作成
ここからhello worldまでの手順を纏める。DBを使用した簡易アプリはまた別途纏めることにした。 アプリ作成の入り口はRouteとControllerなので、この部分を触ってみた。 感想は、他のフレームワークと同じじゃん!?だった。
1.RouteとControllerの定義
見ての通りで"/"に対してDefaultControllerのindexメソッドが対応している。 routes.yamlに定義する以外の方法としてアノテーションを利用した方法もある。
# config/routes.yaml index: path: / controller: 'App\Controller\DefaultController::index'
2.コントローラーの作成
コントローラーはコマンドラインから作成することができ、twigというhtmlのテンプレートも同時に下記の場所に作成されるようだ。
template/default/index.html.twig
php bin/console make:controller DefaultController
routes.yamlに定義したindexメソッドを定義していく。 実際の開発ではtwigテンプレートを使用することになるだろうが、ひとまずControllerからレスポンスを返す。 ひとまずこれでhello worldが表示される。
// src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; class DefaultController { public function index() { return new Response( '<html><body>hello world</body></html>' ); } }
その他コマンド集
ルーティングの確認
php bin/console debug:router