ubuntuにLaravel 5を入れる 

# 概要
vagrant環境のubuntu14.04 LTSにLaravelを入れる

# 環境
vagrant環境

```
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
```

# 環境の準備
Laravel公式に以下の要件が指定されている
https://readouble.com/laravel/5.8/ja/installation.html
>PHP >= 7.1.3
OpenSSL PHP拡張
PDO PHP拡張
Mbstring PHP拡張
Tokenizer PHP拡張
XML PHP拡張
Ctype PHP拡張
JSON PHP拡張
BCMath PHP拡張

パッケージリストを最新化しておく

```
$ sudo apt-get update
```

### PHP >= 7.1.3
`add-apt-repository` を使用するため `software-properties-common` をインストールする

```
$ sudo apt install software-properties-common
```

php向けのリポジトリを追加
下記コマンドで
https://launchpad.net/~ondrej/+archive/ubuntu/php/
のリポジトリを追加する

```
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update
```

php及び必要なパッケージをインストール

```
$ sudo apt-get install php7.2 php7.2-fpm php7.2-mysql php7.2-mbstring php7.2-zip php7.2-xml

$ php -v
PHP 7.2.18-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: May  3 2019 09:24:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.18-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
```

done

### composerが入ってい無い場合は取得

```
$ curl -sS https://getcomposer.org/installer | php
$ sudo cp composer.phar /usr/local/bin/composer
$ sudo chmod +x /usr/local/bin/composer
$ composer -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.8.5 2019-04-09 17:46:47
```

### Laravelインストーラをダウンロード

```
$ composer global require laravel/installer
Changed current directory to /home/vagrant/.config/composer
Using version ^2.1 for laravel/installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 12 installs, 0 updates, 0 removals
As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' may remediate them.
  - Installing symfony/process (v4.2.8): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%)         
  - Installing symfony/filesystem (v4.2.8): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.11.0): Downloading (100%)         
  - Installing symfony/contracts (v1.1.0): Downloading (100%)         
  - Installing symfony/console (v4.2.8): Downloading (100%)         
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)         
  - Installing ralouphie/getallheaders (2.0.5): Downloading (100%)         
  - Installing psr/http-message (1.0.1): Downloading (100%)         
  - Installing guzzlehttp/psr7 (1.5.2): Downloading (100%)         
  - Installing guzzlehttp/guzzle (6.3.3): Downloading (100%)         
  - Installing laravel/installer (v2.1.0): Downloading (100%)         
symfony/contracts suggests installing psr/cache (When using the Cache contracts)
symfony/contracts suggests installing psr/container (When using the Service contracts)
symfony/contracts suggests installing symfony/cache-contracts-implementation
symfony/contracts suggests installing symfony/event-dispatcher-implementation
symfony/contracts suggests installing symfony/http-client-contracts-implementation
symfony/contracts suggests installing symfony/service-contracts-implementation
symfony/contracts suggests installing symfony/translation-contracts-implementation
symfony/console suggests installing symfony/event-dispatcher
symfony/console suggests installing symfony/lock
symfony/console suggests installing psr/log (For using the console logger)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files
```
(途中zipコマンドなかったからphpの拡張機能使ったわって言われている。入れておいた方が良いかも)

### LaravelコマンドのPATHを通す
```
export PATH="$HOME/.config/composer/vendor/bin:$PATH"
```
.bashrcや.zshrcに上記を追記しておく

*これで準備完了*

# プロジェクトの立ち上げ

### プロジェクトの作成
好きなプロジェクト名を指定して実行する。
(長いけどログ記載)

```
$ cd ~
$ laravel new blog
```

長いけどログ

```
$ laravel new blog
Crafting application...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 76 installs, 0 updates, 0 removals
As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' may remediate them.
  - Installing doctrine/inflector (v1.3.0): Downloading (100%)         
  - Installing doctrine/lexer (v1.0.1): Downloading (100%)         
  - Installing dragonmantank/cron-expression (v2.3.0): Downloading (100%)         
  - Installing erusev/parsedown (1.7.3): Downloading (100%)         
  - Installing symfony/polyfill-ctype (v1.11.0): Loading from cache
  - Installing phpoption/phpoption (1.5.0): Downloading (100%)         
  - Installing vlucas/phpdotenv (v3.3.3): Downloading (100%)         
  - Installing symfony/css-selector (v4.2.8): Downloading (100%)         
  - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (100%)         
  - Installing symfony/polyfill-php72 (v1.11.0): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.11.0): Loading from cache
  - Installing symfony/var-dumper (v4.2.8): Downloading (100%)         
  - Installing symfony/routing (v4.2.8): Downloading (100%)         
  - Installing symfony/process (v4.2.8): Loading from cache
  - Installing symfony/http-foundation (v4.2.8): Downloading (100%)         
  - Installing symfony/contracts (v1.1.0): Loading from cache
  - Installing symfony/event-dispatcher (v4.2.8): Downloading (100%)         
  - Installing psr/log (1.1.0): Downloading (100%)         
  - Installing symfony/debug (v4.2.8): Downloading (100%)         
  - Installing symfony/http-kernel (v4.2.8): Downloading (100%)         
  - Installing symfony/finder (v4.2.8): Downloading (100%)         
  - Installing symfony/console (v4.2.8): Loading from cache
  - Installing symfony/polyfill-intl-idn (v1.11.0): Downloading (100%)         
  - Installing symfony/polyfill-iconv (v1.11.0): Downloading (100%)         
  - Installing egulias/email-validator (2.1.7): Downloading (100%)         
  - Installing swiftmailer/swiftmailer (v6.2.1): Downloading (100%)         
  - Installing paragonie/random_compat (v9.99.99): Downloading (100%)         
  - Installing ramsey/uuid (3.8.0): Downloading (100%)         
  - Installing psr/simple-cache (1.0.1): Downloading (100%)         
  - Installing psr/container (1.0.0): Downloading (100%)         
  - Installing opis/closure (3.2.0): Downloading (100%)         
  - Installing symfony/translation (v4.2.8): Downloading (100%)   
  - Installing nesbot/carbon (2.17.1): Downloading (100%)         
  - Installing monolog/monolog (1.24.0): Downloading (100%)         
  - Installing league/flysystem (1.0.51): Downloading (100%)         
  - Installing laravel/framework (v5.8.16): Downloading (100%)         
  - Installing fideloper/proxy (4.1.0): Downloading (100%)         
  - Installing jakub-onderka/php-console-color (v0.2): Downloading (100%)         
  - Installing nikic/php-parser (v4.2.1): Downloading (100%)         
  - Installing jakub-onderka/php-console-highlighter (v0.4): Downloading (100%)         
  - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%)         
  - Installing psy/psysh (v0.9.9): Downloading (100%)         
  - Installing laravel/tinker (v1.0.8): Downloading (100%)         
  - Installing beyondcode/laravel-dump-server (1.2.2): Downloading (100%)         
  - Installing fzaninotto/faker (v1.8.0): Downloading (100%)         
  - Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%)         
  - Installing mockery/mockery (1.2.2): Downloading (100%)         
  - Installing filp/whoops (2.3.1): Downloading (100%)         
  - Installing nunomaduro/collision (v3.0.1): Downloading (100%)         
  - Installing webmozart/assert (1.4.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-common (1.0.1): Downloading (100%)         
  - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-docblock (4.3.1): Downloading (100%)         
  - Installing phpunit/php-token-stream (3.0.1): Downloading (100%)         
  - Installing sebastian/version (2.0.1): Downloading (100%)         
  - Installing sebastian/resource-operations (2.0.1): Downloading (100%)         
  - Installing sebastian/recursion-context (3.0.0): Downloading (100%)         
  - Installing sebastian/object-reflector (1.1.1): Downloading (100%)         
  - Installing sebastian/object-enumerator (3.0.3): Downloading (100%)         
  - Installing sebastian/global-state (2.0.0): Downloading (100%)         
  - Installing sebastian/exporter (3.1.0): Downloading (100%)         
  - Installing sebastian/environment (4.2.2): Downloading (100%)         
  - Installing sebastian/diff (3.0.2): Downloading (100%)         
  - Installing sebastian/comparator (3.0.2): Downloading (100%)         
  - Installing phpunit/php-timer (2.1.1): Downloading (100%)         
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)         
  - Installing phpunit/php-file-iterator (2.0.2): Downloading (100%)         
  - Installing theseer/tokenizer (1.1.2): Downloading (100%)         
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%)         
  - Installing phpunit/php-code-coverage (6.1.4): Downloading (100%)         
  - Installing doctrine/instantiator (1.2.0): Downloading (100%)         
  - Installing phpspec/prophecy (1.8.0): Downloading (100%)         
  - Installing phar-io/version (2.0.1): Downloading (100%)         
  - Installing phar-io/manifest (1.0.3): Downloading (100%)         
  - Installing myclabs/deep-copy (1.9.1): Downloading (100%)         
  - Installing phpunit/phpunit (7.5.10): Downloading (100%)         
symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump)
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/expression-language (For using expression matching)
symfony/routing suggests installing symfony/yaml (For using the YAML loader)
symfony/contracts suggests installing psr/cache (When using the Cache contracts)
symfony/contracts suggests installing symfony/cache-contracts-implementation
symfony/contracts suggests installing symfony/event-dispatcher-implementation
symfony/contracts suggests installing symfony/http-client-contracts-implementation
symfony/contracts suggests installing symfony/service-contracts-implementation
symfony/event-dispatcher suggests installing symfony/dependency-injection
symfony/http-kernel suggests installing symfony/browser-kit
symfony/http-kernel suggests installing symfony/config
symfony/http-kernel suggests installing symfony/dependency-injection
symfony/console suggests installing symfony/lock
symfony/polyfill-intl-idn suggests installing ext-intl (For best performance)
egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation)
swiftmailer/swiftmailer suggests installing ext-intl (Needed to support internationalized email addresses)
swiftmailer/swiftmailer suggests installing true/punycode (Needed to support internationalized email addresses, if ext-intl is not installed)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
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 ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
symfony/translation suggests installing symfony/config
symfony/translation suggests installing symfony/yaml
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-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)
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)
league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications)
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.6).)
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping 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-cached-adapter (Required to use the Flysystem cache (^1.0).)
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (^1.0).)
laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (^1.0).)
laravel/framework suggests installing moontoast/math (Required to use ordered UUIDs (^1.1).)
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 (^4.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 (^3.0).)
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (^4.2).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to use PSR-7 bridging features (^1.1).)
laravel/framework suggests installing wildbit/swiftmailer-postmark (Required to use Postmark mail driver (^3.0).)
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.)
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0)
phpunit/phpunit suggests installing ext-soap (*)
phpunit/phpunit suggests installing ext-xdebug (*)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0)
Generating optimized autoload files
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
> @php artisan key:generate --ansi
Application key set successfully.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Application ready! Build something amazing.    
```

確認

```
$ ls -la blog/
total 452
drwxrwxr-x 12 vagrant vagrant   4096 May 12 15:27 .
drwxr-xr-x  8 vagrant vagrant   4096 May 12 15:25 ..
drwxrwxr-x  6 vagrant vagrant   4096 May 12 15:25 app
-rw-rw-r--  1 vagrant vagrant   1686 May 12 15:25 artisan
drwxrwxr-x  3 vagrant vagrant   4096 May 12 15:25 bootstrap
-rw-rw-r--  1 vagrant vagrant   1550 May 12 15:25 composer.json
-rw-rw-r--  1 vagrant vagrant 159029 May 12 15:25 composer.lock
drwxrwxr-x  2 vagrant vagrant   4096 May 12 15:25 config
drwxrwxr-x  5 vagrant vagrant   4096 May 12 15:25 database
-rw-rw-r--  1 vagrant vagrant    213 May 12 15:25 .editorconfig
-rw-rw-r--  1 vagrant vagrant    790 May 12 15:27 .env
-rw-rw-r--  1 vagrant vagrant    739 May 12 15:25 .env.example
-rw-rw-r--  1 vagrant vagrant    111 May 12 15:25 .gitattributes
-rw-rw-r--  1 vagrant vagrant    151 May 12 15:25 .gitignore
-rw-rw-r--  1 vagrant vagrant   1125 May 12 15:25 package.json
-rw-rw-r--  1 vagrant vagrant   1156 May 12 15:25 phpunit.xml
drwxrwxr-x  4 vagrant vagrant   4096 May 12 15:25 public
drwxrwxr-x  6 vagrant vagrant   4096 May 12 15:25 resources
drwxrwxr-x  2 vagrant vagrant   4096 May 12 15:25 routes
-rw-rw-r--  1 vagrant vagrant    563 May 12 15:25 server.php
drwxr-xr-x  5 vagrant vagrant   4096 May 12 15:25 storage
-rw-rw-r--  1 vagrant vagrant    174 May 12 15:25 .styleci.yml
drwxrwxr-x  4 vagrant vagrant   4096 May 12 15:25 tests
drwxrwxr-x 40 vagrant vagrant   4096 May 12 15:27 vendor
-rw-rw-r--  1 vagrant vagrant    538 May 12 15:25 webpack.mix.js
-rw-rw-r--  1 vagrant vagrant 201800 May 12 15:25 yarn.lock
```

*プロジェクトの立ち上げ完了*

### ドキュメントルートに設置
＊今回は `/var/www/html/public` にapacheのドキュメントルートを通している。

既存のディレクトリを退避

```
$ cd /var/www
$ mv html html.org
```

作成したプロゲクトをドキュメントルートに設置する

```
$ cp ~/blog /var/www/html

# index.phpが通ったことを確認
$ ls -l /var/www/html/public/index.php 
-rw-rw-r-- 1 root root 1823 May 12 15:25 /var/www/html/public/index.php
```

### その他対応
ログ設置ディレクトリに書き込めるよう権限変更

```
$ cd /var/www/html
$ sudo chmod 777 -R storage
```

立ち上げている環境のURLにアクセスし、確認する

![スクリーンショット 2019-05-13 19.26.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115125/e1206b63-0a60-c91a-6a1b-d9dbb02dac20.png)

done

# 参考
https://readouble.com/laravel/5.8/ja/installation.html
https://weblion303.net/901/
ありがとうございましたmm