1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【備忘録】既存のlaravelのプロジェクトをubuntuにデプロイする手順

Last updated at Posted at 2021-05-06

#はじめに
この記事は、過去にローカルのdocker環境で動かしたlaravelのプロジェクトを、AWSに移行する際に行った手順を備忘録としてまとめたものになります。AWSにデプロイする際は、動作速度を鑑みて、Dockerを使わずに直接Linux環境にデプロイしました。

#環境
OS : Ubuntu 20.04.2 LTS
server : nginx 1.18
DB : mysql 8.0
PHP 7.4
PHP-FPM 7.4

#1. 動作環境の確認
docker-compose.yml や backend/composer.json の内容をもとに、動作環境の確認を行う。
互換性のないバージョンをインストールすると、後ほど行うcomposer install でエラーになるので注意。

backend/composer.json
    "require": {
        "php": "^7.3",
        "fideloper/proxy": "^4.2",
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^8.0",
        "laravel/tinker": "^2.0",
        "laravel/ui": "^3.0"
    }

※ ^(キャレット)について :

^1.2.3 は >=1.2.3 <2.0.0 と同等(1.2.3 以上の最新のバージョン。但し 2.0.0 未満)
バージョンが 1未満の場合: ^0.3 は >=0.3.0 <0.4.0 と扱われます
キャレット(^)を使うと後方互換性を維持する範囲で更新されます。

上記の例では、phpのバージョンは7.3以上8.0未満である必要があることを意味する。
composer.jsonについてや、記号の定義などは下記のサイトを参考
https://www.webdesignleaves.com/pr/php/php_composer.php

#2. nginxのインストールと起動
nginxをインストールする

sudo apt update
sudo apt install nginx

nginxを起動

sudo service nginx start

ブラウザからIPアドレスにアクセスしてみて、nginxのページが表示されればOK

#3. PHPのインストール
PHP7.4のインストールを行う。
※この記事を書いた当時の最新のバージョンは8.0であり、デプロイしたいプロジェクトのPHPのバージョンは7.3以上8.0未満である必要があったため、バージョンを指定してインストールを行っている。

sudo apt -y install php7.4

#4. php-fpmのインストール
php-fpmのインストールを行う。

sudo apt install -y php-fpm

※php-fpmはWebサーバー上でPHPを動作せるために必要なもの(のはず)
php-fpmの説明は、以下のサイトが分かりやすかった
https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc
https://www.bnote.net/centos/php-fpm_on_nginx.html#:~:text=PHP%2DFPM%E3%81%A8%E3%81%AF,%E3%82%88%E3%81%86%E5%AE%9F%E8%A3%85%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

#5. mysqlのインストールと下準備

下記のコマンドで、mysqlのインストールを行う

sudo apt install -y mysql-server

次に、mysqlに入り、ユーザーの作成・データベースの作成・権限の設定を行う。

sudo mysql
mysql> create user [ユーザー名]@localhost identified by '[パスワード]';
mysql> create database [データベース名];
mysql> grant all on [データベース名].* to [ユーザー名]@localhost;

#6. Laravelプロジェクトのクローンと設定
###① /var/www/直下にLaravelのプロジェクトを配置する

cd /var/www
sudo git clone [URL]

また、必要に応じてブランチを切り替える

sudo git fetch origin develop
sudo git checkout develop

###② 【重要】 権限の変更を行う。
nginxはデフォルトで、www-dataというユーザー名でソースにアクセスしているので、所有者をwww-dataというユーザーに変更する。

sudo chown -R www-data [プロジェクト名]/

確認
/var/www直下で下記を実行し、

ls -al
drwxr-xr-x  4 root     root 4096 May  6 04:42 .
drwxr-xr-x 14 root     root 4096 May  6 04:39 ..
drwxr-xr-x  5 www-data root 4096 May  6 05:04 hohehohe
drwxr-xr-x  2 root     root 4096 May  6 04:41 html

上記のように該当プロジェクトの所有者がwww-dataに変わっていればOK

###③ パッケージのインストール
laravelのプロジェクトを動かすのに必要なパッケージのインストールを行う。

cd /var/www/[プロジェクト名]/backend
sudo apt install composer
sudo apt install php-mbstring php-xml php-json
sudo composer install

やっていることとしては、backend直下にある「composer.json」の情報をもとに、依存パッケージをインストールし、vendor/に配置している。(下記サイト参照)
https://qiita.com/masarufuruya/items/23131a465b7e9c8f3060

確認
lsコマンドで、一覧を確認し、vendorディレクトリが生成されていることを確認する

/var/www/hohehohe/backend$ ls
README.md  composer.json  package-lock.json  resources   vendor
app        composer.lock  package.json       routes      webpack.mix.js
artisan    config         phpunit.xml        server.php  
bootstrap  database       public             storage

###④ .envファイルの変更

.envファイルを作成する
※既に.envファイルがある場合は不要

sudo /var/www/hohehohe/backend
sudo cp .env.example .env
sudo php artisan key:generate

.envファイルの変更。
mysqlで作成したユーザー名・パスワード・データベース名に変更する。

.env
    DB_DATABASE = [データベース名]
    DB_USERNAME = [ユーザー名]
    DB_PASSWORD = [パスワード]
    DB_HOST=localhost

###⑤ マイグレーションの実行

必要に応じて、マイグレーションを行う

sudo /var/www/hohehohe/backend
sudo apt-get install php7.4-mysql
sudo php artisan migrate

#7. nginxの設定ファイルを変更する
nginxの設定ファイルである /etc/nginx/sites-enabled/default を開き、編集を行う。

sudo vi /etc/nginx/sites-enabled/default

※正確には
/etc/nginx/nginx.conf に設定が書かれており、その中で、
/etc/nginx/sites-enabled/default
を読むように書かれているので、serverに関することはここに書く

下記の点を変更する

###① rootの変更
デフォルトでは、/var/www/htmlを見に行くようになっているので、先程クローンしたプロジェクトを見に行くように変更

# root /var/www/html; # 変更前
root /var/www/[プロジェクト名]/backend/public; # 変更後

###②index.phpの追加
今回はPHPのプロジェクトなので、index.phpも読むように設定

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php; #index.phpを追加

###③ locationの設定
指定されたファイルやディレクトリが存在しない場合に、/index.php$query_string へ内部リダイレクトするように設定

location / {
                # try_files $uri $uri/ =404; #変更前
                try_files $uri $uri/ /index.php?$query_string; #変更後
        }

※詳しい仕組みは、下記の記事が分かりやすかった
https://qiita.com/k_hoso/items/33ccb5e02e73a244ed31

###④ fastcgi_paramの設定
php-fpmを使う場合の設定を location ~ .php$ で行なっている。
この辺は何やっているのか、詳しくは分かっていないので、勉強します。。

        location ~ \.php$ {
                include snippets/fastcgi-php.conf; # コメントアウトを外す
                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # コメントアウトを外す
                # With php-cgi (or other tcp sockets):
                # fastcgi_pass 127.0.0.1:9000;
                fastcgi_split_path_info ^(.+\.php)(.*)$; # 追加
                fastcgi_param PATH_INFO $fastcgi_path_info; # 追加
        }

※公式サイトの例にあった
https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/

【重要】 修正後、nginxの再起動を行う

sudo service nginx restart

完成!!!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?