EC2サーバー構築(nginx, PHP, Composer編)
概要
EC2にてよく使うアプリケーションサーバーの構築手順を紹介します。(未来の私のためにw)
各種設定は、AWSのロードバランサーとEC2を使って、Laravelを動かすイメージです。
そのイメージの方はほぼそのまま使ってもらえると思いますー。
環境
- Amazon Linux2
- nginx 1.12.1
- PHP 8.0.6
- Composer 2.1.3
手順
1. システム設定
EC2 サーバー構築(基本設定)に詳細手順を記載しています。
2. Nginx
インストール
# nginxのトピックを確認
$ amazon-linux-extras list | grep nginx
38 nginx1 available [ =stable ]
$ amazon-linux-extras info nginx1
nginx1 recommends nginx # yum install nginx
$ sudo amazon-linux-extras install nginx1.12
$ nginx -v
nginx version: nginx/1.12.1
起動設定
#起動
$ sudo systemctl start nginx.service
#自動起動
$ sudo systemctl enable nginx.service
#自動起動確認
$ sudo systemctl is-enabled nginx.service
enabled
#状態確認
$ sudo systemctl status nginx.service
Active: active (running)
# 権限付与
$ sudo chmod 777 -R /var/log/nginx
サーバー名の長さ調整(DNSが長い場合など)
sudo vi /etc/nginx/nginx.conf
httpブロックのkeealive_timeout
とtypes_hash_max_size
の間くらいにserver_names_hash_bucket_size
を追記します。
/etc/nginx/nginx.conf
keepalive_timeout 65;
server_names_hash_bucket_size 128;
types_hash_max_size 2048;
タイムアウト設定
sudo vi /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
keepalive_timeout 65;
↓
keepalive_timeout 300;
独自の設定ファイル作成
sudo vi /etc/nginx/conf.d/app.conf
app.conf
server {
listen 80;
server_name {サーバー名};
index index.php;
root {ドキュメントルート};
charset utf-8;
etag off;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
location / {
try_files $uri $uri/ /index.php?$query_string;
index index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
サーバー名の例:
- ドメインを設定する場合:
develop.test.com
- ロードバランサーを設定する場合:
test-internal-1111111111.ap-northeast-1.elb.amazonaws.com
チェックと再起動
$ sudo nginx -t
$ sudo systemctl restart nginx.service
3. PHP
インストール
# nginxのトピックを確認
$ amazon-linux-extras list | grep php
15 php7.2 available \
17 lamp-mariadb10.2-php7.2 available \
31 php7.3 available \
42 php7.4 available [ =stable ]
51 php8.0 available [ =stable ]
$ amazon-linux-extras info php8.0
php8.0 recommends php-cli # yum install php-cli
php8.0 recommends php-pdo # yum install php-pdo
php8.0 recommends php-fpm # yum install php-fpm
php8.0 recommends php-mysqlnd # yum install php-mysqlnd
$ sudo amazon-linux-extras install php8.0
$ php -v
PHP 8.0.6 (cli) (built: May 13 2021 22:35:54) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.6, Copyright (c) Zend Technologies
$ php-fpm -v
PHP 8.0.6 (fpm-fcgi) (built: May 13 2021 22:37:48)
Copyright (c) The PHP Group
Zend Engine v4.0.6, Copyright (c) Zend Technologies
php設定
php.ini
この辺はお好みでどうぞ(笑)
$ sudo vi /etc/php.ini
/etc/php.ini
expose_php = Off
memory_limit = 256M
date.timezone = Asia/Tokyo
mbstring.language = Japanese
userとgroupの値をnginxに変更
sudo vi /etc/php-fpm.d/www.conf
/etc/php-fpm.d/www.conf
user = apache
group = apache
↓
user = nginx
group = nginx
PHP拡張インストール
この辺もお好みでどうぞ~
$ sudo yum install php-mbstring php-pecl-memcached php-gd php-apcu php-xml php-process php-fpm php-zip
PHP Intlを入れる場合
ICUを先に入れる必要があります。
$ sudo yum -y install icu
$ sudo yum -y install php-intl
php-fpmとnginxを再起動
$ sudo systemctl restart php-fpm.service
$ sudo systemctl restart nginx.service
4. composer インストール
composerも入れておきまーす。
$ cd /home/ec2-user
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.1.3 2021-06-09 16:31:20