Avant-propos
La dernière fois que je suis entré en contact avec Laravel, c'était en 2015. Cette fois basée sur CentOS7 LNMP (Linux, Nginx, MySQL, PHP), je vais revivez le plaisir du déploiement à l'époque. , le document enregistre les étapes du déploiement manuel. Je ne publierai pas le code de déploiement automatisé ansible. Si vous avez des questions, vous pouvez laisser un message pour consultation.
Historique des mises à jour
21 octobre 2020 - Première ébauche
Texte original - https://wsgzao.github.io/post/laravel/
Version du logiciel
Vous pouvez choisir la version php 7.3 ou supérieure, je choisis moi-même La dernière version de 7.2
- CentOS Linux release 7. v6 .x
- npm 3. /CentOS fournit des packages qu'ils ne fournissent pas par défaut. Cette source est compatible avec RHEL et ses dérivés comme CentOS et Scientific Linux.
- Voir ici pour plus de détails : EPEl
- Nous avons besoin du référentiel EPEL pour l'installation de Nginx, car le package Nginx n'existe pas dans le référentiel officiel CentOS.
sudo yum -y install epel-release
# 安装Nginx sudo yum -y install nginx # 安装完成后,启动Nginx并将其添加到系统自启动 sudo systemctl start nginx sudo systemctl enable nginx # Nginx默认运行在80端口,使用下面的netstat命令检查。 netstat -plntu | grep 80
remi
ou webtatic
. Méthode 1 remi Warehouse (recommandée)
Installation
sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm sudo yum-config-manager --enable remi-php72 # 默认remi仓库禁用的,在实际需要的时候启用 sudo yum update # sudo yum search php72 | more sudo yum install -y php72 php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache php72-php-pecl-zip sudo mkdir -p /run/php-fpm/remi-php72 # 创建一个sock存放的目录 sudo ln -s `which php72` /usr/local/sbin/php # 建立软连接方便命令行使用Après avoir exécuté la commande ci-dessus, PHP 7.2 a été installé sur le système CentOS. Le répertoire
php72
installé se trouve dans /etc/opt/remi/php72code>, vous pouvez également vous référer à ce lien pour afficher plus de détails sur l'opération. <p></p>
<h2>Désinstallation</h2>
<p></p>Le référentiel <code>remi
prend en charge la coexistence de plusieurs versions de PHP La désinstallation n'est pas recommandée sauf en cas d'absolue nécessité
sudo yum-config-manager --disable remi-php72 # 禁用remi-php72仓库 sudo systemctl stop php72-php-fpm.service yum remove php72 php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache sudo rmdir /run/php-fpm/remi-php72 sudo rm -rf /etc/opt/remi/remi-php72 # 删除前记得备份配置
remi
或webtatic
的第三方仓库中安装它。方式一 remi仓库(推荐)
之所以推荐它是因为它非常方便切换PHP的版本。
更多仓库相关信息参考这里。
安装
sudo yum-config-manager --enable remi-php73 sudo yum install php73 php73-php-fpm php73-php-gd php73-php-json php73-php-mbstring php73-php-mysqlnd php73-php-xml php73-php-xmlrpc php73-php-opcache sudo mkdir -p /run/php-fpm/remi-php73 # 创建一个sock存放的目录 sudo ln -s `which php73` /usr/local/sbin/php # 建立软连接方便命令行使用
执行完上面的命令后,CentOS系统上已经安装了PHP 7.2, 安装好的php72
目录在/etc/opt/remi/php72
, 也可以参考这个链接查看更多操作详情。
卸载
remi
仓库支持PHP的多版本共存,不到万不得已不建议使用卸载操作
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm sudo yum install -y php72w php72w-gd php72w-curl php72w-common php72w-cli php72w-mysql php72w-mbstring php72w-fpm php72w-xml php72w-pdo php72w-zip
至此,使用remi仓库安装的PHP已经成功卸载。
多版本安装
再安装一个PHP7.3版本为例,执行下面的操作即可完成PHP7.3版本的安装。
sudo systemctl stop php-fpm yum remove php72w php72w-curl php72w-common php72w-cli php72w-mysql php72w-mbstring php72w-fpm php72w-xml php72w-pdo php72w-zip
方式二 webtatic仓库
安装
cgi.fix_pathinfo=0
其他版本下载可以查看这里: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
就可以了。
# 用户和组保持和Nginx一致,使用命令 egrep '^(user|group)' /etc/nginx/nginx.conf 查看nginx进程的用户 user = nginx group = nginx
至此,使用webtatic仓库安装的PHP已经成功卸载。
配置php-fpm
通过使用vim编辑配置文件php.ini
来配置PHP,remi仓库方式安装的主配置文件存放位置在/etc/opt/remi/php72/php.ini
, webtatic仓库方式安装的主配置文件存放位置在/etc/php.ini
。
在文件中找如如下行,取消它的行注释并将值更改为0。
# remi listen = /run/php-fpm/remi-php72/php-fpm.sock # webtatic listen = /run/php-fpm/php-fpm.sock
保存文件并退出编辑器。
编辑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
的用户和用户组一致。
listen.owner = nginx listen.group = nginx listen.mode = 0660
php-fpm
将在套接字文件下运行,而不是使用服务器端口,remi仓库方式安装的PHP可以将值改为/run/php-fpm/remi-php72/php-fpm.sock
, webtatic仓库方式安装的PHP请将'listen'值更改为路径/run/php-fpm/php-fpm.sock
。
env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
套接字文件所有者将是“nginx”用户,权限模式为660,取消注释并更改所有值。
# remi sudo systemctl start php72-php-fpm.service sudo systemctl enable php72-php-fpm.service # webtatic sudo systemctl start php-fpm sudo systemctl enable php-fpm
对于环境变量,取消注释这些行并设置值。
sudo netstat -pl | grep php-fpm.sock
保存文件并退出vim编辑,然后启动php-fpm
À ce stade, PHP installé à l'aide du référentiel remi a été réussi. désinstallé.
Installation multi-version
🎜Prenons l'exemple de l'installation d'une autre version de PHP7.3 Effectuez les opérations suivantes pour terminer l'installation de la version PHP7.3. 🎜wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm sudo yum update sudo yum install -y mysql-server
Méthode 2 entrepôt webtatique
🎜🎜Installation🎜🎜sudo systemctl start mysqld sudo systemctl enable mysqld🎜Pour les téléchargements d'autres versions, vous pouvez vérifier ici : entrepôt webtatique. 🎜🎜Si vous continuez à recevoir l'erreur
curl : (35) Fin de fichier rencontrée
lors de l'exécution de la commande ci-dessus, vous pouvez essayer de changer le protocole https
ci-dessus en http
Le protocole récupère la source rpm. 🎜🎜Après avoir exécuté la commande ci-dessus, PHP 7.2 a été installé sur le système CentOS. Le répertoire php72w installé se trouve sous /etc/php
. 🎜🎜🎜Désinstaller🎜🎜🎜🎜Remarque :🎜 Si vous souhaitez passer à la version php5.6 ou 7.1, remplacez directement le mot-clé php72w
dans la commande yum ci-dessus par php56w
ou php71w
fera l'affaire. 🎜netstat -plntu | grep 3306 # 检查端口 ps aux|grep mysqld # 检查进程🎜À ce stade, PHP installé à l'aide du référentiel webtatic a été désinstallé avec succès. 🎜
Configurez php-fpm
🎜Configurez PHP en utilisant vim pour éditer le fichier de configurationphp.ini
Le fichier de configuration principal installé par 🎜remi Warehouse🎜 est stocké dans . /etc/opt/remi/php72/php.ini
, le fichier de configuration principal installé via 🎜webtatic Warehouse🎜 est stocké dans /etc/php.ini
. 🎜🎜Recherchez la ligne suivante dans le fichier, décommentez sa ligne et modifiez la valeur à 0. 🎜sudo grep 'temporary password' /var/log/mysqld.log🎜Enregistrez le fichier et quittez l'éditeur. 🎜🎜Modifiez le fichier
php-fpm
www.conf
, et le fichier de configuration installé par 🎜remi Warehouse🎜 est stocké dans /etc/opt/remi/php72 /php -fpm.d/www.conf
, le fichier de configuration installé via 🎜webtatic Warehouse🎜 est stocké dans /etc/php-fpm.d/www.conf
. 🎜🎜php-fpm
s'exécutera sous l'utilisateur et le groupe nginx
, changez la valeur des deux lignes suivantes en nginx
, ici utilisateur et groupe S'il vous plaît garder l'utilisateur et le groupe d'utilisateurs cohérents avec Nginx
. 🎜mysql -uroot -p # 回车输入上面获取到的密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPassword1!';🎜
php-fpm
s'exécutera sous le fichier socket au lieu d'utiliser le port du serveur. PHP installé via 🎜remi deposit🎜 peut changer la valeur en /run/php-fpm /remi-. php72/php-fpm.sock
, Pour PHP installé via 🎜webtatic Warehouse🎜, veuillez modifier la valeur 'listen' par le chemin /run/php-fpm/php-fpm.sock
. 🎜CREATE DATABASE laravel; -- 创建一个laravel数据库 GRANT ALL PRIVILEGES ON laravel.* TO laravel@localhost IDENTIFIED BY "LaravelPassword1!"; -- 创建一个对应的用户🎜 Le propriétaire du fichier socket sera l'utilisateur "nginx", le mode d'autorisation est 660, décommentez et modifiez toutes les valeurs. 🎜
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composer🎜Pour les variables d'environnement, décommentez ces lignes et définissez la valeur. 🎜
composer config -g repo.packagist composer https://packagist.phpcomposer.com🎜Enregistrez le fichier et quittez l'édition vim, puis démarrez
php-fpm
et laissez-le s'exécuter au démarrage. 🎜# remi sudo systemctl start php72-php-fpm.service sudo systemctl enable php72-php-fpm.service # webtatic sudo systemctl start php-fpm sudo systemctl enable php-fpm
使用remi
仓库的时候启动的时候可能会报错,由于php-fpm.sock
文件目录不存在,执行命令:sudo mkdir -p /run/php-fpm/remi-php72
后在启动就没有问题了。
检查php-fpm
php-fpm
在套接字文件下运行,使用以下命令检查。
sudo netstat -pl | grep php-fpm.sock
安装MySQL
可以使用MariaDB或PostgreSQL作为Laravel项目的数据库存储。 这里使用MySQL数据库服务器进行安装。 它在CentOS存储库中可用, 使用下面的yum
命令安装MySQL-server。
下载并安装MySQL5.7
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm sudo yum update sudo yum install -y mysql-server
执行上面的命令进行MySQL的安装,在安装的过程中两次按Y
键,在同意后安装完成。
启动MySQL
使用下面的命令启动mysql
并使其随系统启动而启动。
sudo systemctl start mysqld sudo systemctl enable mysqld
测试MySQL
MySQL已经启动并在3306端口上运行,可以使用netstat命令检查。
netstat -plntu | grep 3306 # 检查端口 ps aux|grep mysqld # 检查进程
配置MySQL
获取安装时初始化密码
sudo grep 'temporary password' /var/log/mysqld.log
登录并重设root账户密码
mysql -uroot -p # 回车输入上面获取到的密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPassword1!';
创建一个测试数据库和测试用户
CREATE DATABASE laravel; -- 创建一个laravel数据库 GRANT ALL PRIVILEGES ON laravel.* TO laravel@localhost IDENTIFIED BY "LaravelPassword1!"; -- 创建一个对应的用户
至此,MySQL的安装和配置已经完成。
安装PHP Composer
PHP composer是PHP语言的包管理器。 它创建于2011年,灵感来自于Node.js的“npm”和Ruby的“bundler”安装程序。 使用curl
命令安装composer。
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composer
配置Packagist国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
安装完成后,尝试使用“composer”命令,您将看到以下结果。
composer composer config -g repo.packagist -l # 查看配置的Packagist国内镜像
至此,PHP Composer已经正常安装在了CentOS系统上。
NodeJS + NPM + Yarn
sudo yum -y install nodejs npm curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo sudo yum install -y yarn
安装Laravel测试LNMP
现在进入到 laravel 的根目录'/var/www/laravel'。
sudo mkdir -p /var/www/laravel && cd /var/www/laravel
Laravel提供了两种在服务器上安装框架的方法。可以用Laravel安装程序安装Laravel,也可以用PHP composer安装它。在这里我将通过使用composer命令创建一个新项目来安装Laravel,运行下面的命令来安装Laravel。
composer create-project laravel/laravel .
等待Laravel安装完成。 这可能需要一些时间。
安装完成后,将Laravel Web根目录的所有者更改为“nginx”用户,并使用以下命令将存储目录的权限更改为755。
chown -R nginx:root /var/www/laravel chmod 755 -R /var/www/laravel/storage
至此,Laravel安装已经完成。
为Larvel配置Nginx配置
在这个步骤中,将为 Laravel 项目创建 Nginx 虚拟主机配置。 我们需要为此 Laravel 定义web根目录/var/www/laravel/public
。
接下来,cd
到 Nginx 目录,并在conf.d
目录中创建一个新的虚拟主机配置文件laravel.conf
cd /etc/nginx vim conf.d/laravel.conf
将下面的配置粘贴到文件中:
server { listen 80; # Log files for Debugging access_log /var/log/nginx/laravel-access.log; error_log /var/log/nginx/laravel-error.log; # Webroot Directory for Laravel project root /var/www/laravel/public; index index.php index.html index.htm; # Your Domain Name server_name laravel.domain.io; location / { try_files $uri $uri/ /index.php?$query_string; } # PHP-FPM Configuration Nginx location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; # fastcgi_pass unix:/run/php-fpm/php-fpm.sock; # webtatic fastcgi_pass unix:/run/php-fpm/remi-php72/php-fpm.sock; # remi fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
保存文件并退出vim编辑器。
测试并重启Nginx
测试nginx配置,确保没有错误,然后重新启动nginx服务。
nginx -t # 测试配置是否正确 sudo systemctl restart nginx # 重启Nginx
至此,Laravel的nginx虚拟主机配置已经完成。
测试Laravel
打开浏览器并输入服务器配置的Laravel URL,在Nginx虚拟主机文件中定义了Laravel的域名。 我的是laravel.domain.io
。
访问域名时,您将看到Laravel框架的首页。
CentOS 7上的Nginx、PHP-FPM、MySQL、Composer、NodeJS、Yarn和Laravel安装已经成功。
测试数据库和缓存
# 我修改了REDIS_CLIENT=predis,需要先执行以下命令安装依赖包 composer require predis/predis # 生成并修改.env,重点是DB和REDIS部分 /data/www/laravel/.env APP_NAME=Laravel APP_ENV=local APP_KEY=base64:6+QhPUSBPIjI7LZi93aHdHKNWDWVmrI4mtQ3UnVLMV0= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=laravel DB_PASSWORD=LaravelPassword1! BROADCAST_DRIVER=log #CACHE_DRIVER=file CACHE_DRIVER=redis QUEUE_CONNECTION=sync #SESSION_DRIVER=file SESSION_DRIVER=redis SESSION_LIFETIME=120 REDIS_CLIENT=predis REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" # 修改后需要测试mysql和redis时分别执行以下两个命令完成验证 php artisan migrate php artisan cache:clear
问题记录
执行composer create-project laravel/laravel .
出现“proc_open(): fork failed - Cannot allocate memory”
原因通常是禁用了swap且内存太小导致,比较快速的解决方案是增加swap
dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 mkswap /var/swap.1 swapon /var/swap.1
访问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进程未正常启动