Laravel PHP を Heroku へ deploy してみた

  • 0
    いいね
  • 0
    コメント

    HerokuLaravel を deploy してみたメモ

    前提条件

    • Heroku アカウント取得済み
    • heroku toolbelt を導入済み
    • Composer を導入済み
    • git 導入済み

    composer で Laravel Project を作成

    create-project
    $ composer create-project laravel/laravel
    Installing laravel/laravel (v5.4.9)
      - Installing laravel/laravel (v5.4.9) Downloading: 100%
    Created project in /Users/tabe/working/php/laravel/test/laravel
    > php -r "file_exists('.env') || copy('.env.example', '.env');"
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Package operations: 59 installs, 0 updates, 0 removals
      - Installing symfony/polyfill-mbstring (v1.3.0) Downloading: 100%
      - Installing symfony/var-dumper (v3.2.3) Downloading: 100%
      - Installing jakub-onderka/php-console-color (0.1) Downloading: 100%
      - Installing jakub-onderka/php-console-highlighter (v0.3.2) Downloading: 100%
      - Installing dnoegel/php-xdg-base-dir (0.1) Downloading: 100%
      - Installing nikic/php-parser (v3.0.4) Downloading: 100%
      - Installing psr/log (1.0.2) Downloading: 100%
      - Installing symfony/debug (v3.2.3) Downloading: 100%
      - Installing symfony/console (v3.2.3) Downloading: 100%
      - Installing psy/psysh (v0.8.1) Downloading: 100%
      - Installing vlucas/phpdotenv (v2.4.0) Downloading: 100%
      - Installing symfony/css-selector (v3.2.3) Downloading: 100%
      - Installing tijsverkoyen/css-to-inline-styles (2.2.0) Downloading: 100%
      - Installing symfony/routing (v3.2.3) Downloading: 100%
      - Installing symfony/process (v3.2.3) Downloading: 100%
      - Installing symfony/http-foundation (v3.2.3) Downloading: 100%
      - Installing symfony/event-dispatcher (v3.2.3) Downloading: 100%
      - Installing symfony/http-kernel (v3.2.3) Downloading: 100%
      - Installing symfony/finder (v3.2.3) Downloading: 100%
      - Installing swiftmailer/swiftmailer (v5.4.6) Downloading: 100%
      - Installing paragonie/random_compat (v2.0.4) Downloading: 100%
      - Installing ramsey/uuid (3.5.2) Downloading: 100%
      - Installing symfony/translation (v3.2.3) Downloading: 100%
      - Installing nesbot/carbon (1.22.1) Downloading: 100%
      - Installing mtdowling/cron-expression (v1.2.0) Downloading: 100%
      - Installing monolog/monolog (1.22.0) Downloading: 100%
      - Installing league/flysystem (1.0.35) Downloading: 100%
      - Installing erusev/parsedown (1.6.1) Downloading: 100%
      - Installing doctrine/inflector (v1.1.0) Downloading: 100%
      - Installing laravel/framework (v5.4.11) Downloading: 100%
      - Installing laravel/tinker (v1.0.0) Downloading: 100%
      - Installing fzaninotto/faker (v1.6.0) Downloading: 100%
      - Installing hamcrest/hamcrest-php (v1.2.2) Downloading: 100%
      - Installing mockery/mockery (0.9.8) Downloading: 100%
      - Installing symfony/yaml (v3.2.3) Downloading: 100%
      - Installing sebastian/version (2.0.1) Downloading: 100%
      - Installing sebastian/resource-operations (1.0.0) Downloading: 100%
      - Installing sebastian/recursion-context (2.0.0) Downloading: 100%
      - Installing sebastian/object-enumerator (2.0.0) Downloading: 100%
      - Installing sebastian/global-state (1.1.1) Downloading: 100%
      - Installing sebastian/exporter (2.0.0) Downloading: 100%
      - Installing sebastian/environment (2.0.0) Downloading: 100%
      - Installing sebastian/diff (1.4.1) Downloading: 100%
      - Installing sebastian/comparator (1.2.4) Downloading: 100%
      - Installing doctrine/instantiator (1.0.5) Downloading: 100%
      - Installing phpunit/php-text-template (1.2.1) Downloading: 100%
      - Installing phpunit/phpunit-mock-objects (3.4.3) Downloading: 100%
      - Installing phpunit/php-timer (1.0.8) Downloading: 100%
      - Installing phpunit/php-file-iterator (1.4.2) Downloading: 100%
      - Installing sebastian/code-unit-reverse-lookup (1.0.0) Downloading: 100%
      - Installing phpunit/php-token-stream (1.4.9) Downloading: 100%
      - Installing phpunit/php-code-coverage (4.0.5) Downloading: 100%
      - Installing webmozart/assert (1.2.0) Downloading: 100%
      - Installing phpdocumentor/reflection-common (1.0) Downloading: 100%
      - Installing phpdocumentor/type-resolver (0.2.1) Downloading: 100%
      - Installing phpdocumentor/reflection-docblock (3.1.1) Downloading: 100%
      - Installing phpspec/prophecy (v1.6.2) Downloading: 100%
      - Installing myclabs/deep-copy (1.6.0) Downloading: 100%
      - Installing phpunit/phpunit (5.7.13) Downloading: 100%
    symfony/var-dumper suggests installing ext-symfony_debug ()
    symfony/console suggests installing symfony/filesystem ()
    psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
    psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
    symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
    symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
    symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service)
    symfony/routing suggests installing symfony/expression-language (For using expression matching)
    symfony/event-dispatcher suggests installing symfony/dependency-injection ()
    symfony/http-kernel suggests installing symfony/browser-kit ()
    symfony/http-kernel suggests installing symfony/class-loader ()
    symfony/http-kernel suggests installing symfony/config ()
    symfony/http-kernel suggests installing symfony/dependency-injection ()
    paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
    ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)
    ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)
    ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator)
    ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
    ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
    ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
    symfony/translation suggests installing symfony/config ()
    monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
    monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
    monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
    monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
    monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
    monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
    monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
    monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
    monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
    monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
    monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
    league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)
    league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)
    league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)
    league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)
    league/flysystem suggests installing league/flysystem-copy (Allows you to use Copy.com storage)
    league/flysystem suggests installing league/flysystem-dropbox (Allows you to use Dropbox storage)
    league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)
    league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)
    league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)
    league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)
    league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)
    laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (~3.0).)
    laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (~2.5).)
    laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and theping methods on schedules (~6.0).)
    laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (~1.0).)
    laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (~1.0).)
    laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (~1.0).)
    laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (~3.0).)
    laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (~1.0).)
    laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (~2.0).)
    laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (~3.2).)
    laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (0.2.*).)
    sebastian/global-state suggests installing ext-uopz (*)
    phpunit/php-code-coverage suggests installing ext-xdebug (>=2.4.0)
    phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
    phpunit/phpunit suggests installing ext-xdebug (*)
    Writing lock file
    Generating autoload files
    > Illuminate\Foundation\ComposerScripts::postUpdate
    > php artisan optimize
    Generating optimized class loader
    The compiled services file has been removed.
    > php artisan key:generate
    Application key [base64:*********] set successfully.
    

    Procfile を準備

    Procfile
    $ cd laravel
    $ ls
    app             composer.json   database        public          routes          tests
    artisan         composer.lock   package.json    readme.md       server.php      vendor
    bootstrap       config          phpunit.xml     resources       storage         webpack.mix.js
    $ echo 'web: vendor/bin/heroku-php-apache2 public' >> Procfile
    

    git 初期化

    git-init
    $ git init
    Initialized empty Git repository in /****/laravel/.git/
    

    Heroku App を作成

    heroku-create
    $ heroku create
    Creating app... done, ⬢ afternoon-shelf-58335
    https://afternoon-shelf-58335.herokuapp.com/ | https://git.heroku.com/afternoon-shelf-58335.git
    

    .gitignore 作成

    gitignore
    $ gibo Composer Laravel >> .gitignore
    $ echo .env.example >> .gitignore
    

    .gitignore 内の bootstrap/cache/# をつけて、注釈しておく

    git commit

    git
    $ git add -A && git commit -am 'Laravel test'
    [master (root-commit) d9bbe8a] Laravel test
     79 files changed, 6281 insertions(+)
     create mode 100644 .gitattributes
     create mode 100644 .gitignore
     create mode 100644 Procfile
     create mode 100644 app/Console/Kernel.php
     create mode 100644 app/Exceptions/Handler.php
     create mode 100644 app/Http/Controllers/Auth/ForgotPasswordController.php
     create mode 100644 app/Http/Controllers/Auth/LoginController.php
     create mode 100644 app/Http/Controllers/Auth/RegisterController.php
     create mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php
     create mode 100644 app/Http/Controllers/Controller.php
     create mode 100644 app/Http/Kernel.php
     create mode 100644 app/Http/Middleware/EncryptCookies.php
     create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php
     create mode 100644 app/Http/Middleware/TrimStrings.php
     create mode 100644 app/Http/Middleware/VerifyCsrfToken.php
     create mode 100644 app/Providers/AppServiceProvider.php
     create mode 100644 app/Providers/AuthServiceProvider.php
     create mode 100644 app/Providers/BroadcastServiceProvider.php
     create mode 100644 app/Providers/EventServiceProvider.php
     create mode 100644 app/Providers/RouteServiceProvider.php
     create mode 100644 app/User.php
     create mode 100755 artisan
     create mode 100644 bootstrap/app.php
     create mode 100644 bootstrap/autoload.php
     create mode 100644 bootstrap/cache/service.php
     create mode 100644 composer.json
     create mode 100644 composer.lock
     create mode 100644 config/app.php
     create mode 100644 config/auth.php
     create mode 100644 config/broadcasting.php
     create mode 100644 config/cache.php
     create mode 100644 config/database.php
     create mode 100644 config/filesystems.php
     create mode 100644 config/mail.php
     create mode 100644 config/queue.php
     create mode 100644 config/services.php
     create mode 100644 config/session.php
     create mode 100644 config/view.php
     create mode 100644 database/.gitignore
     create mode 100644 database/factories/ModelFactory.php
     create mode 100644 database/migrations/2014_10_12_000000_create_users_table.php
     create mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php
     create mode 100644 database/seeds/DatabaseSeeder.php
     create mode 100644 package.json
     create mode 100644 phpunit.xml
     create mode 100644 public/.htaccess
     create mode 100644 public/css/app.css
     create mode 100644 public/favicon.ico
     create mode 100644 public/index.php
     create mode 100644 public/js/app.js
     create mode 100644 public/robots.txt
     create mode 100644 public/web.config
     create mode 100644 readme.md
     create mode 100644 resources/assets/js/app.js
     create mode 100644 resources/assets/js/bootstrap.js
     create mode 100644 resources/assets/js/components/Example.vue
     create mode 100644 resources/assets/sass/_variables.scss
     create mode 100644 resources/assets/sass/app.scss
     create mode 100644 resources/lang/en/auth.php
     create mode 100644 resources/lang/en/pagination.php
     create mode 100644 resources/lang/en/passwords.php
     create mode 100644 resources/lang/en/validation.php
     create mode 100644 resources/views/welcome.blade.php
     create mode 100644 routes/api.php
     create mode 100644 routes/channels.php
     create mode 100644 routes/console.php
     create mode 100644 routes/web.php
     create mode 100644 server.php
     create mode 100644 storage/app/.gitignore
     create mode 100644 storage/app/public/.gitignore
     create mode 100644 storage/framework/.gitignore
     create mode 100644 storage/framework/cache/.gitignore
     create mode 100644 storage/framework/sessions/.gitignore
     create mode 100644 storage/framework/views/.gitignore
     create mode 100644 storage/logs/.gitignore
     create mode 100644 tests/CreatesApplication.php
     create mode 100644 tests/Feature/ExampleTest.php
     create mode 100644 tests/TestCase.php
     create mode 100644 tests/Unit/ExampleTest.php
     create mode 100644 webpack.mix.js
    

    ひとまず deploy してみる

    git-push
    $ git push heroku master
    Counting objects: 114, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (96/96), done.
    Writing objects: 100% (114/114), 161.53 KiB | 0 bytes/s, done.
    Total 114 (delta 11), reused 0 (delta 0)
    remote: Compressing source files... done.
    remote: Building source:
    remote:
    remote:  !     Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
    remote:                         Detected buildpacks: PHP,Node.js
    remote:                         See https://devcenter.heroku.com/articles/buildpacks##buildpack-detect-order
    remote: -----> PHP app detected
    remote: -----> Bootstrapping...
    remote: -----> Installing platform packages...
    remote:        - php (7.1.1)
    remote:        - ext-mbstring (bundled with php)
    remote:        - apache (2.4.20)
    remote:        - nginx (1.8.1)
    remote: -----> Installing dependencies...
    remote:        Composer version 1.2.4 2016-12-06 22:00:51
    remote:        Loading composer repositories with package information
    remote:        Installing dependencies from lock file
    remote:          - Installing doctrine/inflector (v1.1.0)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing erusev/parsedown (1.6.1)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing jakub-onderka/php-console-color (0.1)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/polyfill-mbstring (v1.3.0)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/var-dumper (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing psr/log (1.0.2)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/debug (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/console (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing nikic/php-parser (v3.0.4)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing jakub-onderka/php-console-highlighter (v0.3.2)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing dnoegel/php-xdg-base-dir (0.1)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing psy/psysh (v0.8.1)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing vlucas/phpdotenv (v2.4.0)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/css-selector (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing tijsverkoyen/css-to-inline-styles (2.2.0)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/routing (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/process (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/http-foundation (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/event-dispatcher (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/http-kernel (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/finder (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing swiftmailer/swiftmailer (v5.4.6)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing paragonie/random_compat (v2.0.4)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing ramsey/uuid (3.5.2)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing symfony/translation (v3.2.3)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing nesbot/carbon (1.22.1)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing mtdowling/cron-expression (v1.2.0)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing monolog/monolog (1.22.0)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing league/flysystem (1.0.35)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing laravel/framework (v5.4.11)
    remote:            Downloading: 100%
    remote:
    remote:          - Installing laravel/tinker (v1.0.0)
    remote:            Downloading: 100%
    remote:
    remote:        Generating optimized autoload files
    remote:        > Illuminate\Foundation\ComposerScripts::postInstall
    remote:        > php artisan optimize
    remote:        Generating optimized class loader
    remote:        The compiled services file has been removed.
    remote: -----> Preparing runtime environment...
    remote: -----> Checking for additional extensions to install...
    remote: -----> Discovering process types
    remote:        Procfile declares types -> web
    remote:
    remote: -----> Compressing...
    remote:        Done: 16M
    remote: -----> Launching...
    remote:        Released v3
    remote:        https://sheltered-lake-94045.herokuapp.com/ deployed to Heroku
    remote:
    remote: Verifying deploy... done.
    To https://git.heroku.com/sheltered-lake-94045.git
     * [new branch]      master -> master
    

    APP_KEY を定義

    config
    $ heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)
    Setting APP_KEY and restarting ⬢ sheltered-lake-94045... done, v9
    APP_KEY: base64:NlWvRWrMlKFwA+EkX6fuE+njWyMIR7jwwe9uRP34LKw=
    

    起動確認

    open
    $ heroku open
    

    Screen Shot 2017-02-15 at 15.36.23.png

    完了