使用AWS的EC2暂时运行PHP Laravel
这次,我们会在这个EC2实例上安装PHP和Nginx,并使Laravel运行起来。
环境
PHP 7.3
Laravel 5.8
Amazon Linux 2
安装 PHP,nginx 和 php-fpm
在 AWS 上运行 Laravel 当然需要安装 PHP。另外,为了接收 HTTP 请求,需要安装 nginx,并安装一个名为 php-fpm 的模块来启动 PHP。因此,首先要安装这些软件。
安裝這些工具的方法有幾種選擇。
(1)使用诸如Ansible的配置管理工具(2)在服务器构建后直接使用命令进行安装(3)使用CloudFormation的UserData进行安装。
最理想的方法是使用(1)的ansible等工具,但由于尝试它有点太重了,所以这次我们选择直接使用(2)的命令进行安装。最后还会简单介绍使用CloudFormation的方法。
在Amazon Linux上安装PHP和php-fpm
安装PHP 7.3
同時に安装了php-fpm。
通过sudo amazon-linux-extras install php7.3 -y安装PHP7.3。
事先更新yum
使用sudo yum update -y命令进行更新
使用sudo yum upgrade -y命令进行升级
安装 PHP Laravel 所需的模块。
在中国境内,运行以下命令即可安装所需的 PHP 扩展包:sudo yum install php-devel php-opcache php-mbstring php-xml php-mcrypt pyp-mysqlnd -y。
启动php-fpm
请启动php-fpm服务:sudo systemctl start php-fpm.service。
在服务器启动时自动启动 php-fpm。
如有需要,请输入此指令。
sudo systemctl enable php-fpm.service
根据以上命令所写的模块,这些都是PHP Laravel所需要的。但是,如果没有充分利用Laravel的功能,可能有些模块是不必要的。另外,如果还引入了其他不是Laravel的库,可能需要除了上述模块之外的其他模块。不过,这些模块都是有益无害的,所以暂时只安装这些应该就足够了。
将Nginx安装到Amazon Linux中。
安装nginx
使用sudo命令,在Amazon Linux系统上安装nginx1.12,忽略所有提示信息。
启动nginx
请启动nginx服务。
服务器启动时自动启动nginx。
如果需要的话,请执行这个命令。
如果权限设置正确,应该可以在http://的IP地址上看到nginx的首页。
各種設定
nginx の設定
続いてnginxの設定をしていく。今回のConfigファイルたちは以下のリポジトリにすべてまとめられている。
github.com
Nginx的配置文件在以下路径:/etc/nginx/。默认配置如下所示。
ここで重要なのは、この部分である。
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
include /etc/nginx/conf.d/*.conf は /etc/nginx/conf.d 以下に .conf で終わるようなファイルがあると自動的に読み込む設定である。基本的にアプリケーションごとの設定はここに置くことになる。また、意図せずここに .conf で終わるファイルをおいてしまうとその設定が読み込まれてしまうので注意が必要。
server はデフォルトで書かれているサーバーの設定である。これがあるので、インストール直後にhttpでアクセスするとnginxのページが見られる。この設定の場合は /usr/share/nginx/html/index.html などが表示される。
この設定は不要なのでコメントアウトしてしまう。(includeは残しておくこと)
默认设置是不必要的,因此已被注释掉。
服务器 {
80 default_server的监听。
听取[::]:80 默认服务器;
服务器名称 _;
根目录为 “/usr/share/nginx/html”。
加载默认服务器块的配置文件。
包括/etc/nginx/default.d/*.conf;
位置/ {
请用中文进行本词汇练习的改述,只需要一种说法: “Please rephrase the following sentence in Chinese.”
错误页面404 /404.html;
路径= /40x.html {
请将以下内容用中文进行修饰:}
错误页面500 502 503 504会跳转到/50x.html。
location = /50x.html {
请用中文将以下句子翻译成同义句,只需给出一个选项:
– “I would love to go on a vacation in a tropical island.”
我很想去一个热带岛屿度假。
请把以下内容用中文进行本地化改写,仅需一种选项:
– “The sun is shining brightly in the sky.”
注释后的文件在这里。
接下来,创建/etc/nginx/conf.d/laravel.conf文件,并设置以下内容。配置参考了Laravel Homestead的配置。
server {
listen 80;
server_name _;
# /home///public
root “/home/laravel/laravel-app/public”;
}
服务器 {
监听 80;
服务器名称 _;
# /home///public
根目录 “/home/laravel/laravel-app/public”;
}
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/laravel.error.log error;
sendfile off;
client_max_body_size 100m;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
location ~ /\.ht {
deny all;
}
设定文件的整个内容可以在 https://github.com/yoshikyoto/aws-laravel-nginx-php/blob/master/nginx/conf.d/laravel.conf 上进行查看。下面将解释一些重要的要点。
只需要一个选项:
server_name
server_name _;
在这里,可以使用例如 server_name hoge.fuga.jp 的设置。如果设置为 server_name hoge.fuga.jp,则只有当通过 hoge.fuga.jp 访问时才使用此设置。用于在一个服务器上管理多个应用程序时使用。
这个设置将匹配所有的主机。
根目录
根目录 “/home/laravel/laravel-app/public”
设置为 Laravel 应用程序的 public 目录。
fastcgi_pass的最后一项内容非常重要。
快速通道传输unix:/var/run/php-fpm/www.sock;
安装php-fpm到Amazon Linux时,需要正确配置/var/run/php-fpm/www.sock作为nginx调用的php-fpm文件。
以下是 php-fpm 的设置。
虽然 php-fpm 的设置可以保持默认,但还有些需要了解的要点,现在我来解释一下。顺便提一下,php-fpm 的设置位于 /etc/php-fpm.d/ 目录下。
默认设置还是保持不变,但是配置文件在下面。
如果不了解用户和权限,可能会陷入困境,nginx和php-fpm的执行用户是很重要的。
項目で変更できます。php-fpmは、nginxユーザーから実行できるように設定する必要があります。php-fpmのデフォルトの実行ユーザーはapacheですが、Laravelのpublicディレクトリはapacheユーザーからの実行が必要です。nginxからphp-fpmを実行できるようにする必要があります。nginxのデフォルトの実行ユーザーはnginxです。これはnginx.confの項目で変更できます。
用户是nginx。
以下是一种可能的中文翻译:
由于nginx调用php-fpm的机制,php-fpm必须能够以nginx用户的身份运行。wwww.conf 文件负责设置这个配置。
listen.acl_users = apache,nginx
この記述である。デフォルトでは apache ユーザーと nginx ユーザーから実行可能になっている。nginxの実行ユーザーを変更したい場合は上記2箇所を変更しないといけないが、ここは nginx から変える必要性はあまりないのでそのままでいいだろう。
php-fpm から PHP のコードが実行可能になっていなければならない
続いて、php-fpm の実行ユーザーについてである。最終的に php-fpm が laravel の public/index.php などを実行するので、php-fpm が laravel の php を実行する権限が必要である。php-fpm はデフォルトで apache ユーザーで実行されるようになっているので、この場合2つの方法があり。
在 Laravel 目录下,给予 Apache 用户执行权限。
将 Laravel 目录的所有者与 PHP-FPM 的执行用户的所有者匹配。
因为前者更安全,所以我选择保持 PHP-FPM 的执行用户是默认的 Apache 用户,而给予 Laravel 目录执行权限从 Apache 用户那里。
本次是将根目录设置为 /home/laravel/laravel-app/public。laravel-app 目录默认权限为 755,所以没有问题。
在进行操作时,请注意确保父目录的权限正确设置为 755,否则可能会出现问题(我曾经就碰到过困境)。
注意:此处只提供一种翻译选项,可能存在其他表达方式。
应用程序代码有时可能会放在 /opt 目录中,如果可以正确指定权限,就没有问题。
只需一个选项,请将以下内容以中文母语的方式进行改写:
确认操作
安装composer并执行composer install等命令,执行.env以及php artisan key:generate,应该能够使Laravel正常运行。