概要
AWSのEC2インスタンスにてCentOSを載せた仮想サーバーにLaravelのプロジェクトをデプロイする手順を紹介します。
前提条件
・開発環境で動作してGit管理されているLaravelのプロジェクトをCentOS7にデプロイします。
・今回紹介するのはCentOSにssh接続して作業する内容のみ紹介します。
・DBはAmazon RDSに接続します。
作業内容
1.ミドルウェアインストール(Apache、mysql-community-client、PHP7.3)
2.OSの設定変更(SELinuxの停止、タイムゾーン、ロケール)
3.RDS接続、DB作成、設定
4.Composerインストール
5.ソースコードClone
6.動作するよう設定(Apache、Laravel)
1. ミドルウェアインストール(Apache、mysql-community-client、PHP7.3)
PCからサーバーにSSH接続します。
% ssh -i ~/.ssh/xxxxx.pem centos@xxx.xx.x.xxx
##1.1 rootに変更、更新するパッケージ確認、全パッケージの更新 、再起動
rootに変更
root権限がないと権限が足りずパッケージの更新ができない事もあるのでrootに変更します。
$ sudo -i
アップデートされるパッケージ確認
メディアからインストールされたCentOSは含まれているパッケージが古いことがあるため、事前に全パッケージのアップデートします。以下のコマンドで今回アップデートされるパッケージを確認できます。
[root]
$ yum check-update
全パッケージをアップデート
[root]
$ yum update
再起動
再起動が必要なプロセスもあるため再起動します。
※「$needs-restarting」コマンドで再起動必要なプロセスを調べられます。
[root]
$reboot
※yumとは、RedHat系ディストリビューションのパッケージ管理システムの事です。
リポジトリと呼ばれるパッケージ置き場からのパッケージをダウンロードし、インストール、アンインストール、更新をする事ができます。
1.2 リポジトリ追加(epel、remi)
epelリポジトリ追加
[root]
$yum install epel-release.noarch
※epelリポジトリ: CentOS 標準のリポジトリでは提供されていないパッケージを、yum コマンドでインストールすることを可能にするリポジトリ
remiリポジトリの追加
[root]
$rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
※remiリポジトリ: 最新のPHPスタックが使え、その他のソフトウェアを、できる限りvanillaな(そのままの)バージョンのまま利用できるようにするためのリポジトリ
##1.3 Apacheインストール、起動、自動起動設定
Apacheインストール
[root]
$yum install httpd
Apache起動
[root]
$ systemctl start httpd.service
Apache自動起動設定
[root]
$systemctl enable httpd.service
Apacheステータス確認
Loadedの()内に「enabled」と表示されているのと「Active: active (running) 」と表示されていればOKです。
[root]
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since 金 2020-11-06 04:57:30 UTC; 42s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 8618 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─8618 /usr/sbin/httpd -DFOREGROUND
├─8619 /usr/sbin/httpd -DFOREGROUND
├─8620 /usr/sbin/httpd -DFOREGROUND
├─8621 /usr/sbin/httpd -DFOREGROUND
├─8622 /usr/sbin/httpd -DFOREGROUND
└─8623 /usr/sbin/httpd -DFOREGROUND
1.4 MYSQLリポジトリ追加、mysql-community-clientをインストール、接続確認
MYSQLリポジトリ追加
[root]
$yum install http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
mysql-community-clientをインストール
今回はAmazon RDSにあるMysqlに接続ができればいい為、Mysqlコマンドが実行できればOKです。その為「mysql-community-client」のみインストールします。
サーバー内にDBを作成する場合は「mysql-community-server」をインストールしてください。
欲しいバージョンが有効になっていることを確認(5.7)
yum infoコマンドを使ってmysql-community-clientが使用できることを確認する
[root]
$yum info mysql-community-client
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
37 packages excluded due to repository priority protections
インストール済みパッケージ
名前 : mysql-community-client
アーキテクチャー : x86_64
バージョン : 5.7.32
リリース : 1.el7
容量 : 101 M
リポジトリー : installed
提供元リポジトリー : mysql57-community
要約 : MySQL database client applications and tools
URL : http://www.mysql.com/
....
yum repolistコマンドをでmysqlリポジトリが有効(enabled)になっていることを確認します。
[root]
$yum repolist enabled | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 175
mysql-tools-community/x86_64 MySQL Tools Community 120
mysql57-community/x86_64 MySQL 5.7 Community Server 464
mysql-community-clientをインストール
[root]
$yum install mysql-community-client.x86_64
接続確認
RDSに接続します。mysqlに接続できていることを確認できればOKです。
[root]
$ mysql -u [DBユーザー] -p -h [エンドポイント] -P 3306
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 322
Server version: 5.7.31-log Source distribution
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
1.5 PHP7.3のインストール
remi-php73を使用してphpインストール
[root]
$yum install php php-cli php-common php-devel php-gd php-mbstring php-mysqlnd php-pecl-mysql php-pdo php-xml php-pecl-memcache --enablerepo=remi-php73
$yum install --enablerepo=remi-php73 php-zip
PHPのバージョンが7.3系であることを確認
[root]
$php -v
PHP 7.3.24 (cli) (built: Oct 27 2020 11:01:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.24, Copyright (c) 1998-2018 Zend Technologies
これにてApache、Mysql、PHPが動作する環境が整いました。
1.6 Git、zip、unzip、postfixインストール
ここでは適宜必要なリポジトリを追加してください。
[root]
$yum install git
$yum install zip unzip
$yum install postfix
2.OSの設定変更(SELinuxの停止、タイムゾーン、ロケール)
2.1SELinuxの停止
SELinuxはカーネルの制御機能のひとつでSecurity-Enhanced-Linuxの略称です。SELinuxを利用すると細かいアクセス制御が可能になる。しかし、難関な上に余計な挙動をしたりと管理しにくいので無効にします。
SELinuxの状態の確認(Enforcingだったら有効になっている)
[root]
$ getenforce
Enforcing
無効化する(SELINUXの値をdisabledにする)
[root]
$vi /etc/selinux/config
SELINUX=disabled
再起動
[root]
$ reboot
無効になっていることを確認
$ getenforce
Disabled
2.2 タイムゾーンの変更
デフォルトの状態だと時刻の設定が「UTC, +0000」になっています。これを日本時間に変更します。
$timedatectl status
Local time: 土 2020-11-07 05:31:41 UTC
Universal time: 土 2020-11-07 05:31:41 UTC
RTC time: 土 2020-11-07 05:31:41
Time zone: n/a (UTC, +0000)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
timezoneのAsia/Tokyoをセット
[root]
$timedatectl set-timezone Asia/Tokyo
タムゾーンが変更されているか確認
「Time zone: Asia/Tokyo (JST, +0900)」となっていればOKです。
[root]
$ timedatectl status
Local time: 金 2020-11-06 14:22:07 JST
Universal time: 金 2020-11-06 05:22:07 UTC
RTC time: 金 2020-11-06 05:22:07
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
##2.3 ロケールの変更
現在のロケール設定を確認
[root]
$localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
ロケール変更
[root]
$localectl set-locale LANG=ja_JP.UTF-8
###日本語106キーボードに設定する
[root]
$localectl set-keymap jp106
###ロケールの変更を確認
[root]
$localectl status
localectl status
System Locale: LANG=ja_JP.UTF-8
VC Keymap: jp106
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp
#3.RDS接続、DB作成、アプリユーザー作成
1.4の作業でMYSQLに接続できるようになったので次はDBの作成とデータベースユーザーを作成していきます。
RDSに接続
[root]
$mysql -u [DBユーザー] -p -h [エンドポイント] -P 3306
DB作成
mysql> create database [DB名];
Query OK, 1 row affected (0.00 sec)
###データベースユーザーの作成
mysql>GRANT USAGE ON [DB名].* to [新DBユーザー]@"%" IDENTIFIED BY '[パスワード]';
Query OK, 0 rows affected, 1 warning (0.00 sec)
データベースに対するユーザーのアクセス権限付与
mysql>GRANT ALL PRIVILEGES ON [DB名].* TO [新DBユーザー]@"%";
Query OK, 0 rows affected (0.00 sec)
ユーザーの権限確認
以下のようになっていればOKです。
mysql>show grants for [新DBユーザー]@%
+---------------------------------------------------------+
| Grants for [新DBユーザー]@% |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO '[新DBユーザー]'@'%' |
| GRANT ALL PRIVILEGES ON `[DB名]`.* TO '[新DBユーザー]'@'%' |
+---------------------------------------------------------+
2 rows in set (0.00 sec)
[新DBユーザー]ユーザーで接続できるか確認
EC2に戻って今回作成したユーザーでログインできるか確認します。
[root]
$mysql -u [新DBユーザー] -p -h [エンドポイント] -P 3306
4.composerインストール
###php コマンドで copy を実行して composer-setup.php をダウンロード
$php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
「composer-setup.php」がコピーされます。
$ll
合計 272
-rw-rw-r-- 1 centos centos 276190 11月 6 16:55 composer-setup.php
ダウンロードした composer-setup.php を実行して、Composer の実行ファイル(phar)を作成
$php composer-setup.php
All settings correct for using Composer
Downloading...
Composer (version 2.0.4) successfully installed to: /home/centos/composer.phar
Use it: php composer.phar
/home/centosに「composer.phar」が追加されました。
インストーラを削除する
$php -r "unlink('composer-setup.php');"
$ ll
合計 2132
-rwxr-xr-x 1 centos centos 2180422 11月 6 16:56 composer.phar
グローバルで使えるように移動
$mv composer.phar /usr/local/bin/composer
composer動いていることを確認
$ composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.0.4 2020-10-30 22:39:11
.......
#5. LaravelのソースコードをClone
配置するディレクトリに移動
今回は/var/wwwの直下にLaravelプロへジェクトを配置します。
$ cd /var/www/
ソースをclone
$ git clone リモートリポジトリ.git
fatal: could not create work tree dir 'xxxx'.: ????????
cloneするディレクトリに権限がない為エラーとなりました。
権限変更
「www」の所有者と所有グループが「root」になっていたので「centos」に変更します。
[root]
$ ll
drwxr-xr-x. 4 root root 33 11月 6 13:56 www
$ chown centos:centos www
$ ll
drwxr-xr-x. 4 centos centos 33 11月 6 13:56 www
もう一度ソースをcloneしてきます。
$ git clone リモートリポジトリ.git
remote: Enumerating objects: 2841, done.
remote: Counting objects: 100% (2841/2841), done.
remote: Compressing objects: 100% (2767/2767), done.
remote: Total 2841 (delta 1874), reused 110 (delta 22)
Receiving objects: 100% (2841/2841), 33.21 MiB | 35.94 MiB/s, done.
Resolving deltas: 100% (1874/1874), done.
$ ll
合計 4
drwxrwxr-x 13 centos centos 4096 11月 6 17:15 xxxx(cloneしたソース)
drwxr-xr-x. 2 root root 6 4月 2 2020 cgi-bin
drwxr-xr-x. 2 root root 6 4月 2 2020 html
cloneに成功しました。ただディレクトリ の中を見ると「cgi-bin」と「html」ディレクトリ が存在します。今回は使用しないので削除します。
cgi-binとhtmlを削除
[root]
$ rm -r html
rm: ディレクトリ `html' を削除しますか? yes
$ rm -r cgi-bin
rm: ディレクトリ `cgi-bin' を削除しますか? yes
$ ll
合計 4
drwxrwxr-x 13 centos centos 4096 11月 6 17:15 xxxx(cloneしたソース)
5.動作するよう設定(Apache、Laravel)
5.1Apacheの設定
httpd.confに以下を追記
「ServerName」と「DocumentRoot」.htaccessが動くように以下を追記します。
$vi /etc/httpd/conf/httpd.conf
ServerName xxxx.com:80
DocumentRoot "/var/www/xxxx/public"
<Directory /var/www/xxxx/public>
AllowOverride All
</Directory>
Apache再起動
設定を反映させるために再起動します。
[root]
$ systemctl restart httpd
5.2 Laravelの設定
ここからはLaravelが動作するように設定を変更します。
composer install
cd /var/www/xxxx
$ composer install
config, routeのキャッシュクリア
$ php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!
$ php artisan route:cache
Route cache cleared!
パーミッション変更
$ chmod 777 storage -R
$ chmod 777 bootstrap -R
確認
パーミッションが変更されていることを確認します。
$ ll
drwxrwxrwx 5 centos centos 46 11月 6 17:15 storage
drwxrwxrwx 3 centos centos 34 11月 6 17:15 bootstrap
.env設定
次にLaravelの環境設定を行う「.env」を編集していきます。
$cp .env.example .env
$vi .env
APP_ENV=production
APP_URL=xxxx.com
APP_DEBUG=false
DB_HOST=[エンドポイント]
DB_PORT=3306
DB_DATABASE=[DB名]
DB_USERNAME=[新DBユーザー]
DB_PASSWORD=[パスワード]
キーを作成し、キャッシュをクリアする
$ php artisan key:generate
Application key set successfully.
$ php artisan config:clear
Configuration cache cleared!
シンボリックリンクの作成
$ php artisan storage:link
The [public/storage] directory has been linked.
dumpをインポート
今回はこの環境で動くか一時的に確認がしたかったので開発環境のdumpファイルをDBにインポートして確認します。
mysqldump -u admin -p -h [エンドポイント] -P 3306 [DB名] < xxxx.dump
上記ではdumpファイルを入れて動作確認しましたが、しない場合は以下のコマンドでDBのマイグレートを実行します。
php artisan migrate
ここでエラーになる場合は「.env」のDBの設定に間違いがないか確認してみてくだいさい。
アクセスして確認
xxxx.comにアクセスしてページが表示されていれば完了です。
まだドメインを取得してない場合はIPに直接アクセスしても確認できるかと思います。
以上でCentOS7でLaravelプロジェクトをデプロイする方法でした。