はじめに
こんにちは mako です。
Laravelをさくらのレンタルサーバで外部に公開した方法を簡単に紹介します!!
いつもローカル環境(MAMP)で動かしていて外部に公開するときにデータベースの設定につまずいたので、そこについても紹介していきます。
階層一覧
home/
├ bin/
│ └ composer
├ www/
│ └ {'projectname'}/
│ └ config/
│ └ database.php
│ └ public/
│ └ など...
│ └ .env
└ など...
さくらでサブドメインを作成
さくらレンタルサーバ上に新しいドメインを追加します。
好きなドメイン名とフォルダの階層パスを設定します。
- ドメイン名
- 好きなドメインを決める
- パス
- 指定フォルダの箇所に「/home/{'アカウント名'}/www/{'プロジェクトルート'}/public」で設定する
ssh接続してlaravel設定
手順
- ssh接続
- composerのインストール
- プロジェクトをclone
- .htaccess設定
- データベース設定
- アプリケーションキーを生成
- マイグレーションする
①ssh接続
最初にsshクライアントでレンタルサーバにログインする。
ssh (username)@(hostname).sakura.ne.jp
password : 'password'
②composerのインストール
ライブラリの依存関係を解決するために入れる。
今回は「home/bin」にcomposerをインストールする。
mkdir bin
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin --filename=composer
composer self-update
③プロジェクトをclone
今回はwwwフォルダの配下へ直接配置しますが、セキュリティなどの関係上シンボリックリンクを作って別のところに配置した方がいいらしいです。
個人的にgithubからcloneするのが簡単かなと思います。
cd ~/www/
git clone 'repository'
% composer install
% composer dump-autoload --optimize
④.htaccess設定
「{'project_root'}/public/.htaccess」を設定しないといけないらしい。
参考サイト:https://codezine.jp/article/detail/11370
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
+ RewriteBase /
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
⑤データベース設定
Laravelのhomeディレクトリにある「.env」を編集する。
cd ~/{'projectname'}
vi .env
「.env」の以下の箇所を変更する
DB_CONNECTION=mysql
DB_HOST=dbhost.db.sakura.ne.jp
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbysername
DB_PASSWORD=dbpassword
⑥アプリケーションキーを生成
APP_KEYがデフォルト値のままなので変更する。
php artisan key:generate
⑦マイグレーションする
php artisan migrate
ここでエラーをはかなかったからさくらのMySQLの方にデータベースが正常に作成されているはずです。
シーダーもここで行えます。
マイグレーションが上手くいかなかった(筆者の場合)
データベースが見つからないとエラーがでた
In Connection.php line 664:
SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations)
データベースのホスト名,ユーザ名,データベース名前,パスワード何回も確認しても間違えてないし調べまくったらどうも「database.php」てのが影響してることが分かった。
それで調べたとうり修正したらマイグレーションが実行できた。
原因として「'unix_socket'」がどうも違ったらしい。
さくらの方でデータベースにログインしてソケット調べたとうりに入力したはずなのにな。。。
(※修正部分「'unix_socket'」部分を空欄にしたらできた。)
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'dbname'),
'username' => env('DB_USERNAME', 'dbysername'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
まとめ
さくらのレンタルサーバで作成したLaravelを外部に公開することができました!
レンタルサーバの仕組みとかvimの使い方など勉強になりいい経験となりました!
今回つまずいた原因としてまだしっかりLaravelとMySQLの接続の仕組みを理解してなかったのでしっかり勉強していこうと思います。
「.env」「config / database.php」について参考になったサイト
こちら データベースの環境設定