Kata Pengantar
Kali terakhir saya berhubung dengan Laravel ialah pada tahun 2015, ini masa ia berdasarkan CentOS7 LNMP (Linux, Nginx, MySQL, PHP) Mari kita hayati semula keseronokan penggunaan ketika itu. anda boleh tinggalkan mesej untuk konsultasi.
Kemas kini sejarah
21 Oktober 2020 - Draf pertama
Teks asal - https://wsgzao.github.io/post/laravel/
Versi perisian
Anda boleh memilih versi php 7.3 atau ke atas Saya sendiri yang memilih versi terkini 7.2
- CentOS Linux keluaran 7.x
- nginx. 1.16 .x
- MySQL 5.7.x
- php-fpm 7.2.x
- Komposer 1.x
- laravel 7.x
- nodejs v6.x
- npm 3.x
- benang 1.x
Naik taraf repositori EPEL
EPEL (Pakej Tambahan untuk Enterprise Linux , Extra Packages for Enterprise Linux) ialah projek repositori perisian yang diselenggara oleh pasukan Fedora untuk menyediakan RHEL/CentOS dengan pakej yang mereka tidak sediakan secara lalai. Sumber ini serasi dengan RHEL dan derivatif seperti CentOS dan Scientific Linux.
Maklumat lanjut boleh didapati di sini: EPEl
Kami memerlukan repositori EPEL untuk pemasangan Nginx, kerana pakej Nginx tidak wujud dalam repositori CentOS rasmi.
sudo yum -y install epel-release
Pasang Nginx
Gunakan persekitaran LNMP untuk menjalankan Laravel. Nginx ialah bahagian pelayan webnya dan boleh dipasang dari repositori EPEL.
# 安装Nginx sudo yum -y install nginx # 安装完成后,启动Nginx并将其添加到系统自启动 sudo systemctl start nginx sudo systemctl enable nginx # Nginx默认运行在80端口,使用下面的netstat命令检查。 netstat -plntu | grep 80
Pasang php-fpm
PHP 7.2 tidak wujud dalam repositori asas CentOS, kami perlu memasangnya daripada repositori pihak ketiga bernama remi
atau webtatic
.
Kaedah 1 gudang remi (disyorkan)
Sebab mengapa ia disyorkan adalah kerana ia sangat mudah untuk menukar versi PHP.
Untuk maklumat lanjut berkaitan gudang, sila rujuk di sini.
Pemasangan
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 # 建立软连接方便命令行使用
Selepas melaksanakan arahan di atas, PHP 7.2 telah dipasang pada sistem CentOS Direktori php72
yang dipasang berada dalam /etc/opt/remi/php72
, Anda juga boleh merujuk pautan ini untuk melihat lebih banyak butiran operasi.
Nyahpasang
remi
Gudang menyokong kewujudan berbilang versi PHP Nyahpasang tidak disyorkan melainkan sangat diperlukan
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 # 删除前记得备份配置
Pada ketika ini, PHP yang dipasang menggunakan repositori remi telah berjaya dinyahpasang.
Pemasangan berbilang versi
Pasang versi PHP7.3 yang lain sebagai contoh.
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 # 建立软连接方便命令行使用
Gudang webtatic Kaedah 2
Pemasangan
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
Untuk muat turun versi lain, anda boleh menyemak di sini: gudang webtatic.
Jika anda terus mendapat ralat semasa melaksanakan arahan di atascurl: (35) Encountered end of file
, anda boleh cuba menukar protokolhttps
di atas kepada protokolhttp
untuk mendapatkan sumber rpm.
Selepas melaksanakan arahan di atas, PHP 7.2 telah dipasang pada sistem CentOS, dan direktori php72w yang dipasang berada di bawah /etc/php
.
Nyahpasang
Nota: Jika anda ingin menukar kepada versi php5.6 atau 7.1, tukar terus kata kunciphp72w
di atas perintah yum Hanya gantikannya denganphp56w
atauphp71w
.
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
Pada ketika ini, PHP yang dipasang menggunakan repositori webtatic telah berjaya dinyahpasang.
Konfigurasikan php-fpm
Konfigurasikan PHP dengan menggunakan vim untuk mengedit fail konfigurasi php.ini
Fail konfigurasi utama yang dipasang oleh gudang remi disimpan dalam . Fail konfigurasi utama yang dipasang melalui /etc/opt/remi/php72/php.ini
gudang webtatic disimpan dalam . /etc/php.ini
cgi.fix_pathinfo=0
failphp-fpm
, lokasi storan fail konfigurasi yang dipasang oleh kaedah www.conf
repositori remi ialah dan lokasi storan fail konfigurasi yang dipasang oleh kaedah /etc/opt/remi/php72/php-fpm.d/www.conf
repositori webtatic Dalam . /etc/php-fpm.d/www.conf
akan dijalankan di bawah pengguna dan kumpulan php-fpm
Tukar nilai dua baris berikut kepada nginx
Sila pastikan pengguna dan kumpulan pengguna konsisten dengan nginx
. Nginx
# 用户和组保持和Nginx一致,使用命令 egrep '^(user|group)' /etc/nginx/nginx.conf 查看nginx进程的用户 user = nginx group = nginx
akan dijalankan di bawah fail soket dan bukannya menggunakan port pelayan yang dipasang dengan php-fpm
repositori remi boleh menukar nilai kepada , /run/php-fpm/remi-php72/php-fpm.sock
Untuk. PHP dipasang melalui gudang webtatic , sila tukar nilai 'dengar' kepada laluan . /run/php-fpm/php-fpm.sock
# remi listen = /run/php-fpm/remi-php72/php-fpm.sock # webtatic listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx listen.group = nginx listen.mode = 0660
env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
dan biarkan ia berjalan pada permulaan. php-fpm
# 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进程未正常启动