CentOS7基于LNMP安装配置Laravel
前言
距离上一次接触Laravel还是2015年的时候,这一次基于CentOS7的LNMP(Linux, Nginx, MySQL, PHP)再重新回味下当年部署的乐趣,文档里记录的是手动部署的步骤,ansible自动化部署代码我就不放出来了,有问题可以留言咨询。
更新历史
2020年10月21日 - 初稿
阅读原文 - https://wsgzao.github.io/post/laravel/
软件版本
php版本各位可以选择7.3以上,我自己选择了7.2的最新版
- CentOS Linux release 7.x
- nginx 1.16.x
- MySQL 5.7.x
- php-fpm 7.2.x
- Composer 1.x
- laravel 7.x
- nodejs v6.x
- npm 3.x
- yarn 1.x
升级EPEL仓库
EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和Scientific Linux这样的衍生版本。
更多详细介绍查看这里:EPEl
我们需要Nginx安装的EPEL仓库,因为官方CentOS仓库中不存在Nginx软件包。
1 | sudo yum -y install epel-release |
安装Nginx
使用LNMP环境下运行Laravel。Nginx是其中的Web服务器部分,可以从EPEL仓库安装。
1 | # 安装Nginx |
安装php-fpm
在CentOS基础库中不存在PHP 7.2,我们需要从名为remi
或webtatic
的第三方仓库中安装它。
方式一 remi仓库(推荐)
之所以推荐它是因为它非常方便切换PHP的版本。
更多仓库相关信息参考这里。
安装
1 | sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi |
执行完上面的命令后,CentOS系统上已经安装了PHP 7.2, 安装好的php72
目录在/etc/opt/remi/php72
, 也可以参考这个链接查看更多操作详情。
卸载
remi
仓库支持PHP的多版本共存,不到万不得已不建议使用卸载操作
1 | sudo yum-config-manager --disable remi-php72 # 禁用remi-php72仓库 |
至此,使用remi仓库安装的PHP已经成功卸载。
多版本安装
再安装一个PHP7.3版本为例,执行下面的操作即可完成PHP7.3版本的安装。
1 | sudo yum-config-manager --enable remi-php73 |
方式二 webtatic仓库
安装
1 | rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm |
其他版本下载可以查看这里:webtatic仓库。
如果执行上面的命令一直报错
curl: (35) Encountered end of file
,可以尝试将上面的https
协议改成http
协议获取rpm源。
执行完上面的命令后,CentOS系统上已经安装了PHP 7.2, 安装好的php72w目录在/etc/php
下。
卸载
注意: 如果想更换到php5.6或7.1版本, 直接把上面yum命令里面的关键字
php72w
换成php56w
或者php71w
就可以了。
1 | sudo systemctl stop php-fpm |
至此,使用webtatic仓库安装的PHP已经成功卸载。
配置php-fpm
通过使用vim编辑配置文件php.ini
来配置PHP,remi仓库方式安装的主配置文件存放位置在/etc/opt/remi/php72/php.ini
, webtatic仓库方式安装的主配置文件存放位置在/etc/php.ini
。
在文件中找如如下行,取消它的行注释并将值更改为0。
1 | cgi.fix_pathinfo=0 |
保存文件并退出编辑器。
编辑php-fpm
文件www.conf
,remi仓库方式安装的配置文件存放位置在/etc/opt/remi/php72/php-fpm.d/www.conf
,webtatic仓库方式安装的配置文件存放位置在/etc/php-fpm.d/www.conf
。
php-fpm
将在用户和组nginx
下运行,将下面两行的值更改为nginx
,这里用户和用户组请保持与Nginx
的用户和用户组一致。
1 | # 用户和组保持和Nginx一致,使用命令 egrep '^(user|group)' /etc/nginx/nginx.conf 查看nginx进程的用户 |
php-fpm
将在套接字文件下运行,而不是使用服务器端口,remi仓库方式安装的PHP可以将值改为/run/php-fpm/remi-php72/php-fpm.sock
, webtatic仓库方式安装的PHP请将’listen’值更改为路径/run/php-fpm/php-fpm.sock
。
1 | # remi |
套接字文件所有者将是“nginx”用户,权限模式为660,取消注释并更改所有值。
1 | listen.owner = nginx |
对于环境变量,取消注释这些行并设置值。
1 | env[HOSTNAME] = $HOSTNAME |
保存文件并退出vim编辑,然后启动php-fpm
并使其在启动时运行。
1 | # remi |
使用
remi
仓库的时候启动的时候可能会报错,由于php-fpm.sock
文件目录不存在,执行命令:sudo mkdir -p /run/php-fpm/remi-php72
后在启动就没有问题了。
检查php-fpm
php-fpm
在套接字文件下运行,使用以下命令检查。
1 | sudo netstat -pl | grep php-fpm.sock |
安装MySQL
可以使用MariaDB或PostgreSQL作为Laravel项目的数据库存储。 这里使用MySQL数据库服务器进行安装。 它在CentOS存储库中可用, 使用下面的yum
命令安装MySQL-server。
下载并安装MySQL5.7
1 | wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm |
执行上面的命令进行MySQL的安装,在安装的过程中两次按
Y
键,在同意后安装完成。
启动MySQL
使用下面的命令启动mysql
并使其随系统启动而启动。
1 | sudo systemctl start mysqld |
测试MySQL
MySQL已经启动并在3306端口上运行,可以使用netstat命令检查。
1 | netstat -plntu | grep 3306 # 检查端口 |
配置MySQL
获取安装时初始化密码
1 | sudo grep 'temporary password' /var/log/mysqld.log |
登录并重设root账户密码
1 | mysql -uroot -p # 回车输入上面获取到的密码 |
创建一个测试数据库和测试用户
1 | CREATE DATABASE laravel; -- 创建一个laravel数据库 |
至此,MySQL的安装和配置已经完成。
安装PHP Composer
PHP composer是PHP语言的包管理器。 它创建于2011年,灵感来自于Node.js的“npm”和Ruby的“bundler”安装程序。 使用curl
命令安装composer。
1 | php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" |
配置Packagist国内镜像
1 | composer config -g repo.packagist composer https://packagist.phpcomposer.com |
安装完成后,尝试使用“composer”命令,您将看到以下结果。
1 | composer |
至此,PHP Composer已经正常安装在了CentOS系统上。
NodeJS + NPM + Yarn
1 | sudo yum -y install nodejs npm |
安装Laravel测试LNMP
现在进入到 laravel 的根目录’/var/www/laravel’。
1 | sudo mkdir -p /var/www/laravel && cd /var/www/laravel |
Laravel提供了两种在服务器上安装框架的方法。可以用Laravel安装程序安装Laravel,也可以用PHP composer安装它。在这里我将通过使用composer命令创建一个新项目来安装Laravel,运行下面的命令来安装Laravel。
1 | composer create-project laravel/laravel . |
等待Laravel安装完成。 这可能需要一些时间。
安装完成后,将Laravel Web根目录的所有者更改为“nginx”用户,并使用以下命令将存储目录的权限更改为755。
1 | chown -R nginx:root /var/www/laravel |
至此,Laravel安装已经完成。
为Larvel配置Nginx配置
在这个步骤中,将为 Laravel 项目创建 Nginx 虚拟主机配置。 我们需要为此 Laravel 定义web根目录/var/www/laravel/public
。
接下来,cd
到 Nginx 目录,并在conf.d
目录中创建一个新的虚拟主机配置文件laravel.conf
1 | cd /etc/nginx |
将下面的配置粘贴到文件中:
1 | server { |
保存文件并退出vim编辑器。
测试并重启Nginx
测试nginx配置,确保没有错误,然后重新启动nginx服务。
1 | nginx -t # 测试配置是否正确 |
至此,Laravel的nginx虚拟主机配置已经完成。
测试Laravel
打开浏览器并输入服务器配置的Laravel URL,在Nginx虚拟主机文件中定义了Laravel的域名。 我的是laravel.domain.io
。
访问域名时,您将看到Laravel框架的首页。
CentOS 7上的Nginx、PHP-FPM、MySQL、Composer、NodeJS、Yarn和Laravel安装已经成功。
测试数据库和缓存
1 | # 我修改了REDIS_CLIENT=predis,需要先执行以下命令安装依赖包 |
问题记录
执行composer create-project laravel/laravel .
出现“proc_open(): fork failed - Cannot allocate memory”
原因通常是禁用了swap且内存太小导致,比较快速的解决方案是增加swap
1 | dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 |
访问laravel.domain.io
出现502 error code
原因建议优先检查/var/log/nginx/laravel-error.log
日志,可能的情况有
/var/wwww/laravel
路径的权限不正确导致permission denied,注意不同laravel版本间对子目录权限的要求/etc/nginx/conf.d/laravel.conf
配置文件fastcgi_pass设置有误- php-fpm进程未正常启动