Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

IBM Cloud で始める Laravelアプリケーション開発

IBM Cloud で始める Laravelアプリケーション開発

by ssakaigawa
1 / 45

$ whoami

境川 章一郎
(さかいがわ しょういちろう)

twitter: l_s_s_l
Qiita: @ssakaigawa

時々インフラ屋。時々開発。


おしごと

Pumpkin Heads株式会社

コミュニティ活動

  • Blumix User Group (ibmcloudユーザー会)
  • 2018 IBM Cloud Champion

(MS MVPとか、AWS Blackbeltのような制度のIBM版です)


著書

Docker+Kubernetesの本
コンテナ・オーケストレーション(黄色いコンテナ本)の7章でIBM Cloud Kubernetes Serviceの章を担当しました。


Laravel と私

  • 時々開発で利用します。
  • (ほしいと思ったら自分で作ってみるタイプ

Call for Code ハッカソン参加中
自然災害へ技術で立ち向かおう

Laravelでアプ鋭意開発中


IBM Cloud PaaS on PHP

IBM Cloudで動くPaaS環境でPHPが動きます。
Cloud Foundryベース。

DevOps ToolChainと組み合わせることでCI/CDが可能


なぜ、PaaSなの?

  • PHP環境のメンテナンス、いつまで続けますか? VPSなどのインスタンスを複数毎回インストール・アップデートをおこなっていた。

PaaS運用後

  • 高負荷サービスなどで、サーバーを増やしたいときにすばやくリソースが投入できる
  • PHPなどのミドルウェアの導入コストがほぼゼロ
  • OSの運用保守も不要
  • CI/CD環境を設計・運用せずに既製の環境が利用可能

今日やること

LaravelアプリをIBM Cloud PaaSで動かしたい。

  • laravelプロジェクトの作成
  • IBM Cloud用に設定を修正
  • IBM Cloudの設定
  • デプロイ

必要なもの

  • ローカルでLaravelアプリが開発できる環境

-> laradockはじめました。

  • IBM Cloud ライトアカウント(無料)

((MySQLなどDBはPay-As-You-Goアカウントが必要))


[TIPS] Pay-As-You-Goアカウント

  • クレジットカード登録が必要だが、無料枠の利用できるプラン。
  • アプリを1ヶ月試す程度の枠は無料でついてくる。

laradockの準備

mkdir laravel-test0908 && cd laravel-test0908
git clone https://github.com/laradock/laradock.git
cd laradock
cp env-example .env

laradockを使ってworkspaceを作成

dockerイメージの取得(初回)と起動

docker-compose up -d nginx mysql workspace phpmyadmin

workspace(Laravel実行環境のCLI部分のイメージ)の実行

docker-compose exec workspace bash

Laravelのインストール

(workspace)内で実施。

w$ composer create-project laravel/laravel {PJ名}

w$は便宜上workspaceコンテナでの作業を示します。作業完了後、exitで抜ける。

w$ exit

laradock .envの修正

laradockを必ず停止

docker-compose stop
laradock/.env
APPLICATION=../
laradock/.env(編集後)
APPLICATION=../{PJ名}

laradock動作確認

docker-compose up -d nginx mysql phpmyadmin

http://localhost:8080
へアクセスしておなじみの画面が出ることを確認する


IBM Cloud PaaSへのデプロイ

  • laravelプロジェクトの作成
  • IBM Cloud用に設定を修正
  • IBM Cloudの設定
  • デプロイ

必要なファイル

path filename description
PJ/ manifest.yml CFアプリのデプロイ設定
PJ/ .cfignore .gitignoreと同じ
PJ/.bp-config/ options.json PHP導入パラメータ

デプロイ時に変更したほうが良いもの

path filename description
PJ/ composer.json post-instまわり
PJ/config database.php DBまわり

実際のファイル


manifest.yml

IBM Cloud PaaSのデプロイに必要な情報、domainとnameはセットアップ時のアプリURLをベースに都度変更しておく

applications:
- path: .
  name: laravel-test123
  memory: 128M
  domain: mybluemix.net
  buildpack: https://github.com/cloudfoundry/php-buildpack
env:
    APP_DEBUG: false
    CF_STAGING_TIMEOUT: 30
    CF_STARTUP_TIMEOUT: 30

.cfignore

.gitignoreと同じ内容を入れる。
IBM Cloud側でcomposer installが自動で行われるので、vendor含め他は不要。

composer.lock
vendor
node_modules
public/hot
public/storage
storage/*.key
.idea
.vscode
.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.env

composer.json

説明は後ほど。

composer.json
"post-install-cmd": [
    "mkdir -p /tmp/app/bootstrap/cache",
    "mkdir -p /tmp/app/storage/framework/sessions",
    "mkdir -p /tmp/app/storage/framework/views",
    "mkdir -p /tmp/app/storage/framework/cache",
    "Illuminate\\Foundation\\ComposerScripts::postInstall",
    "@php artisan key:generate",
    "@php artisan migrate"
],

composer.json
"post-update-cmd": [
    "mkdir -p /tmp/app/bootstrap/cache",
    "mkdir -p /tmp/app/storage/framework/sessions",
    "mkdir -p /tmp/app/storage/framework/views",
    "mkdir -p /tmp/app/storage/framework/cache",
    "Illuminate\\Foundation\\ComposerScripts::postUpdate",
    "@php artisan key:generate",
    "@php artisan migrate"
],

IBM Cloud PaaSへのデプロイ

  • laravelプロジェクトの作成
  • IBM Cloud用に設定を修正
  • IBM Cloudの設定
  • デプロイ

IBM Cloud PaaS PHP + Laravelでこんな事に困った・こうして解決したを紹介します。


あるある その1

デプロイ後、HTTP500 エラーでアクセスできない

AH01071: Got error 'PHP message: PHP Fatal error: Uncaught InvalidArgumentException: Please provide a valid cache path.

-> cacheなどのフォルダが作成されていない
composer.jsonを書き換えてpost-install-cmd / post-update-cmdなどで対応する


解決編

composer.json
"post-install-cmd": [
    "mkdir -p /tmp/app/bootstrap/cache",
    "mkdir -p /tmp/app/storage/framework/sessions",
    "mkdir -p /tmp/app/storage/framework/views",
    "mkdir -p /tmp/app/storage/framework/cache",
    "Illuminate\\Foundation\\ComposerScripts::postInstall",
    "@php artisan key:generate",
    "@php artisan migrate"
],

composer.json
"post-update-cmd": [
    "mkdir -p /tmp/app/bootstrap/cache",
    "mkdir -p /tmp/app/storage/framework/sessions",
    "mkdir -p /tmp/app/storage/framework/views",
    "mkdir -p /tmp/app/storage/framework/cache",
    "Illuminate\\Foundation\\ComposerScripts::postUpdate",
    "@php artisan key:generate",
    "@php artisan migrate"
],

あるある その2

DB認証情報を書き込まず渡したいけど・・・

VCAP_SERVICES内にjson形式で他サービスへの接続情報が入っている。
MySQLサービスをはじめとした、Compose for〜で始まるDBサービスの接続情報はURI形式で提供される。

["uri"]=>
string(80) "mysql://{user}:{pass}@{hostname}:{port}/compose"

解決編

環境変数からjsonデコードして配列として取得、
envではなく毎回情報を取得

config/database.php
$services = json_decode($_ENV['VCAP_SERVICES'], true);

$uri = $services['compose-for-mysql'][0]['credentials']['uri'];

$db_creds = parse_url($uri);

config/database.php
'connections' => [
()
'mysql' => [
            'driver' => 'mysql',
            'host' => $db_creds['host'],
            'port' => $db_creds['port'],
            'database' => 'compose',
            'username' => $db_creds['user'],
            'password' => $db_creds['pass'],
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
()

IBM Cloud PaaSへのデプロイ

  • laravelプロジェクトの作成
  • IBM Cloud用に設定を修正
  • IBM Cloudの設定
  • デプロイ

IBM Cloudの設定


PaaSのセットアップ

  • IBM Cloudコンソールへログイン
  • Catalog
    スクリーンショット 2018-09-08 10.52.57.png

  • PHPを選択
    スクリーンショット 2018-09-08 10.53.06.png


PaaSのデプロイ

App Name: アプリ名
Host Name: ホスト名
Domain: mybluemix.net (※デフォルト、他独自ドメインも設定可能)
Plan: 128G
スクリーンショット 2018-09-08 10.54.39.png


DB(Compose for MySQL)のデプロイ

ライトプラン上ではカタログ表示がなかった
-> Pay-As-You-Goアカウント以上で利用可能
DB容量 1GBバイトの無料枠が付属し、1GB以上単位でスケールし料金が発生します。


DB(Compose for MySQL)のデプロイ

デフォルトのままで可能。
データーベースのバージョンが現在5.7.20と5.7.22から選べる

スクリーンショット 2018-09-08 12.07.55.png


DBとPaaS(PHP)との接続

PaaSダッシュボードから、connectをクリックし、
Compose for MySQLを選択し、connect

service-bindという機能でIBM CloudのさまざまなサービスをPaaSから利用する事ができるように接続が可能となる。

※日本語UIの場合は接続となります。


ibmcloudへのログイン

ibmcloudコマンドでデプロイを実施

ibmcloud login

CloudFoundryのアプリ配置先情報の読み込み

ibmcloud target --cf

ibmcloudへのデプロイ

cd ~/work/laravel-test0908/{PJ名}
ibmcloud app push {App名}

スクリーンショット 2018-09-08 10.50.30.png

アプリURLにアクセスをクリックして開く


できなかったこと

  • vue.jsを入門したいのでlaravel mixのnpm installしたい

cloudfoundryのbuildpackでは、nodejsがセットアップされていない。composer経由でnodejsをインストールするものがあるが現時点でPaaS側にnodejs導入できずうまくいかない


今日やったこと

  • macbook上にコンテナのlaravel開発環境 "laradock"を初めて使う
  • IBM cloud のPaaS Service Cloud Foundry PHPへプロジェクトを公開してみる

参考にしたところ( ありがとうございます。)


ありがとうございました

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?