距離上一次接觸Laravel仍是2015年的時候,這一次基於CentOS7的LNMP(Linux, Nginx, MySQL, PHP)再從新回味下當年部署的樂趣,文檔裏記錄的是手動部署的步驟,ansible自動化部署代碼我就不放出來了,有問題能夠留言諮詢。php
2020年10月21日 - 初稿html
閱讀原文 - https://wsgzao.github.io/post...node
php版本各位能夠選擇7.3以上,我本身選擇了7.2的最新版
EPEL (Extra Packages for Enterprise Linux,企業版Linux的額外軟件包) 是Fedora小組維護的一個軟件倉庫項目,爲RHEL/CentOS提供他們默認不提供的軟件包。這個源兼容RHEL及像CentOS和Scientific Linux這樣的衍生版本。mysql
更多詳細介紹查看這裏:EPElnginx
咱們須要Nginx安裝的EPEL倉庫,由於官方CentOS倉庫中不存在Nginx軟件包。laravel
sudo yum -y install epel-release
使用LNMP環境下運行Laravel。Nginx是其中的Web服務器部分,能夠從EPEL倉庫安裝。git
# 安裝Nginx sudo yum -y install nginx # 安裝完成後,啓動Nginx並將其添加到系統自啓動 sudo systemctl start nginx sudo systemctl enable nginx # Nginx默認運行在80端口,使用下面的netstat命令檢查。 netstat -plntu | grep 80
在CentOS基礎庫中不存在PHP 7.2,咱們須要從名爲remi
或webtatic
的第三方倉庫中安裝它。github
之因此推薦它是由於它很是方便切換PHP的版本。
更多倉庫相關信息參考這裏。web
安裝redis
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 # 創建軟鏈接方便命令行使用
執行完上面的命令後,CentOS系統上已經安裝了PHP 7.2, 安裝好的php72
目錄在/etc/opt/remi/php72
, 也能夠參考這個連接查看更多操做詳情。
卸載
remi
倉庫支持PHP的多版本共存,不到萬不得已不建議使用卸載操做
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倉庫安裝的PHP已經成功卸載。
再安裝一個PHP7.3版本爲例,執行下面的操做便可完成PHP7.3版本的安裝。
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 # 創建軟鏈接方便命令行使用
安裝
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
其餘版本下載能夠查看這裏: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
就能夠了。
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倉庫安裝的PHP已經成功卸載。
經過使用vim編輯配置文件php.ini
來配置PHP,remi倉庫方式安裝的主配置文件存放位置在/etc/opt/remi/php72/php.ini
, webtatic倉庫方式安裝的主配置文件存放位置在/etc/php.ini
。
在文件中找如以下行,取消它的行註釋並將值更改成0。
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
的用戶和用戶組一致。
# 用戶和組保持和Nginx一致,使用命令 egrep '^(user|group)' /etc/nginx/nginx.conf 查看nginx進程的用戶 user = nginx group = nginx
php-fpm
將在套接字文件下運行,而不是使用服務器端口,remi倉庫方式安裝的PHP能夠將值改成/run/php-fpm/remi-php72/php-fpm.sock
, webtatic倉庫方式安裝的PHP請將'listen'值更改成路徑/run/php-fpm/php-fpm.sock
。
# remi listen = /run/php-fpm/remi-php72/php-fpm.sock # webtatic listen = /run/php-fpm/php-fpm.sock
套接字文件全部者將是「nginx」用戶,權限模式爲660,取消註釋並更改全部值。
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
保存文件並退出vim編輯,而後啓動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
在套接字文件下運行,使用如下命令檢查。
sudo netstat -pl | grep php-fpm.sock
可使用MariaDB或PostgreSQL做爲Laravel項目的數據庫存儲。 這裏使用MySQL數據庫服務器進行安裝。 它在CentOS存儲庫中可用, 使用下面的yum
命令安裝MySQL-server。
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
並使其隨系統啓動而啓動。
sudo systemctl start mysqld sudo systemctl enable mysqld
MySQL已經啓動並在3306端口上運行,可使用netstat命令檢查。
netstat -plntu | grep 3306 # 檢查端口 ps aux|grep mysqld # 檢查進程
獲取安裝時初始化密碼
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語言的包管理器。 它建立於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系統上。
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 的根目錄'/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安裝已經完成。
在這個步驟中,將爲 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 -t # 測試配置是否正確 sudo systemctl restart nginx # 重啓Nginx
至此,Laravel的nginx虛擬主機配置已經完成。
打開瀏覽器並輸入服務器配置的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設置有誤