透過學習 Wi1dcard 的 輕鬆部署 Laravel 應用 系列課程中的:
04. 手動部署 - 初始化系統
05. 手動部署 - 安裝 Nginx
06. 手動部署 - 安裝 PHP-FPM
07. 手動部署 - 安裝 Git 和 Composer
08. 手動部署 - 部署應用程式碼
09. 手動部署 - 配置 Nginx 站點
根據以上課程完成的本次部署和筆記,課程後面的最佳化部分暫未學習。
再次感謝 Wi1dcard !
配置:1核2G1M
系統:Ubuntu 20.04 server 64bit
PHP:8.0
Laravel:8
重新整理伺服器軟體源
從 軟體源 伺服器上獲取一份最新的包列表並建立本地快取,包括軟體名稱、描述、最新版本、下載地址等等。
在伺服器執行:
apt update
執行後類似輸出,稍等一會即可重新整理完成。
root@ecs-84096:~# apt update
Hit:1 http://repo.huaweicloud.com/ubuntu focal InRelease
Get:2 http://repo.huaweicloud.com/ubuntu focal-updates InRelease [114 kB]
Get:3 http://repo.huaweicloud.com/ubuntu focal-backports InRelease [108 kB]
Get:4 http://repo.huaweicloud.com/ubuntu focal-security InRelease [114 kB]
最終輸出結果:
176 packages can be upgraded. Run 'apt list --upgradable' to see them.
表示有 176 個軟體包可以升級,執行apt list --upgradable
命令來檢視它們。
執行升級:
升級不升級都可以,對後續部署基本沒有影響,根據伺服器效能不同升級快慢也不同。
apt upgrade
確認提示:
168 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
Need to get 225 MB of archives.
After this operation, 74.8 MB of additional disk space will be used.
Do you want to continue? [Y/n]
表示操作將佔用 225 MB 空間,輸入 y
或回車直接升級,等待升級完成即可。
小知識:在提供選項供使用者選擇時,以大寫項為預設值,
[Y/n]
那麼Y
即為預設值;同理,若是[a/b/c/D/e]
,那麼D
即為預設值。
安裝 Nginx
安裝 Nginx:
apt install nginx -y
在命令後面加
-y
,表示有選項時直接選預設值。
管理 Nginx
service nginx start # 啟動 Nginx
service nginx stop # 停止 Nginx
service nginx restart # 重啟 Nginx
使用 systemctl
命令開關服務的開機自啟:
通常情況下,在 APT 安裝後已預設啟用 Nginx 開機啟動。
systemctl enable nginx # 啟用 Nginx 開機啟動
systemctl disable nginx # 禁用 Nginx 開機啟動
檢視 Nginx 是否正常執行
在瀏覽器內輸入伺服器公網 IP(或域名)並開啟,出現預設歡迎頁面說明 Nginx 安裝成功並正常執行。
安裝MySQL
參考:ubuntu如何安裝mysql8.0.19 文章中的安裝部分。
依次執行以下命令:
sudo apt-get install mysql-server -y
sudo apt install mysql-client -y
sudo apt install libmysqlclient-dev -y
安裝成功!
篇幅有限,關於 MySQL 的配置和開啟遠端登陸檢視:Ubuntu 20.04 安裝和解除安裝 MySQL 8.0.27 學習筆記
mysql 常用命令
啟動 mysql:
service mysqld start
停止 mysql:
service mysqld stop
重啟 mysql:
service mysqld restart
登陸 mysql:
mysql -u root -p //root 表示 使用者
安裝 PHP
配置第三方軟體源
由於 Ubuntu 的官方軟體源通常不包含最新版本的 PHP,因此需要新增一個包含最新 PHP 的第三方軟體源。
先安裝 software-properties-common
軟體包,它提供了快速管理軟體源的實用指令碼。
add-apt-repository -y ppa:ondrej/php
然後新增第三方 PHP 軟體源。
add-apt-repository -y ppa:ondrej/php
新增成功後重新整理一下伺服器軟體源。
apt update
安裝 PHP
安裝 PHP 實際上是安裝 3 個軟體包:
PHP
- PHP 自身。PHP-CLI
- PHP 的命令列介面,通俗地說,在命令列內執行php
便依賴於此包。PHP-FPM
- 全稱為PHP FastCGI Process Manager
,用於管理 PHP 程式,並提供 FastCGI 介面與 Nginx 互動;瀏覽網頁時的請求便是由 Nginx 交由 PHP-FPM 處理的。
apt install
支援多引數,所以同時安裝 3 個軟體包:
這裡安裝的 PHP 是 8.0 版本。
apt install -y php8.0 php8.0-cli php8.0-fpm
管理 PHP-FPM 服務
透過 service
和 systemctl
命令管理 PHP-FPM 服務:
service php8.0-fpm restart # 重啟 PHP-FPM
service php8.0-fpm start # 啟動 PHP-FPM
service php8.0-fpm stop # 停止 PHP-FPM
# 預設設定
systemctl enable php8.0-fpm # 啟用 PHP-FPM 開機啟動
systemctl disable php8.0-fpm # 禁用 PHP-FPM 開機啟動
不同版本的 PHP-FPM 服務名是不一致的。例如 php8.0 為 php8.0-fpm
,8.1 為 php8.1-fpm
,以此類推。
檢視 PHP-FPM 是否執行
ps aux | grep php
ps aux
用於列出系統當前正在執行的所有程式的所有資訊|
名為管道運算子,將前一條命令的標準輸出連線到下一條命令的標準輸入。grep
是一款文字搜尋工具,常用來過濾命令列輸出;php
是搜尋的關鍵詞。ps
將程式資訊輸出到grep
進行過濾,後者篩選出包含php
字樣的行,再將它們輸出。
輸出結果:
root@ecs-84096:~# ps aux | grep php
root 56527 0.0 0.9 194608 19432 ? Ss 18:07 0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
www-data 56541 0.0 0.3 194848 6676 ? S 18:07 0:00 php-fpm: pool www
www-data 56542 0.0 0.3 194848 6676 ? S 18:07 0:00 php-fpm: pool www
root 56721 0.0 0.0 8900 736 pts/0 S+ 18:20 0:00 grep --color=auto php
可以觀察到有 php-fpm
在執行。
如果 php-fpm
未執行,輸出為:
root@ecs-84096:~# ps aux | grep php
root 56749 0.0 0.0 8900 724 pts/0 S+ 18:21 0:00 grep --color=auto php
安裝 Git
使用 apt
安裝:
apt install -y git
安裝 Conposer
透過 PHP 安裝 ,參照 :Composer 中文網 的安裝方法。
第一步:下載安裝指令碼 - composer-setup.php
- 到當前目錄:
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
下載下來的 composer-setup.php
指令碼將簡單地檢測 php.ini
中的引數設定,如果某些引數未正確設定則會給出警告;然後下載最新版本的 composer.phar
檔案到當前目錄。
第二步:執行安裝過程:
php composer-setup.php
第三步:刪除安裝指令碼:
php -r "unlink('composer-setup.php');"
第四步:全域性環境變數:
將前面下載的
composer.phar
檔案移動到/usr/local/bin/
目錄下
sudo mv composer.phar /usr/local/bin/composer
到這裡便安裝完了,可以使用 composer -v
檢視安裝的 Composer 的版本。
執行可能會收到收到這樣一條警告:
root@ecs-84096:~# composer -v
Do not run Composer as root/super user! See https://getcomposer.org/root for details
表示請勿使用 根使用者
執行 Composer,這裡暫時不管它,後續技術提高了再解決。
配置 Packagist 阿里雲映象
這個配置是可選的。
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
到這裡就已經安裝好基本的執行環境了,接下來就是將程式碼部署到伺服器上。
部署程式碼
使用 git 拉取專案程式碼到伺服器。
存放程式碼的資料夾是:
/var/www/
,是 Nginx 預設的站點存放目錄。
首先,切換到 /var/www/
資料夾:
cd /var/www/
然後將倉庫克隆到本地:
git clone git遠端倉庫URL
克隆成功後 /var/www/
資料夾下能看到剛克隆下來的專案資料夾。
安裝依賴
使用 Composer 安裝 Laravel 必備的依賴包。
這裡假設專案資料夾名為 laravel-1
,首先切換至 laravel-1
資料夾:
cd /var/www/laravel-1
使用 Conposer 安裝:
因為安裝的 PHP 是 8.0 ,不匹配 composer.json 要求的版本,使用
composer install
安裝報錯,所以使用--ignore-platform-reqs
設定忽略版本匹配。
參考:使用 Composer 安裝時與 PHP 版本不匹配(Your requirements … packages.) 。
composer install --ignore-platform-reqs
等待安裝完成即可。
配置環境變數
首先切換至 laravel-1
資料夾:
cd /var/www/laravel-1
php -r "file_exists('.env') || copy('.env.example', '.env');"
生成 App Key:
php artisan key:generate --ansi
配置檔案所有者
由於目前所在的工作目錄為
/var/www/laravel
,所以可用表示當前工作目錄的 . 代替之前的/var/www/laravel
,它們是等效的。
chown -R www-data:www-data .
在ubuntu上,www-data
是預設執行 web 服務的使用者/組,一般在透過 apt 安裝 web 服務程式時生成。搭建 web 服務的資料夾/檔案一般要設定成 www-data
的。
不過也可以不用 www-data
,自己建一個新的使用者和組,然後對 apache/ngnix 等 web 服務程式進行配置。不過這樣比較麻煩。
如果是編譯的,不會生成 www-data
使用者/組,需要自己配置。
伺服器上存放 Nginx 站點配置的目錄為:
/etc/nginx/sites-enabled/
建立站點配置檔案
首先跳轉至 /etc/nginx/sites-enabled/
目錄:
cd /etc/nginx/sites-enabled/
然後用 vim
文字編輯器生成配置檔案,檔案命名為 laravel-1.conf
:
vim laravel.conf
提示:vim
文字編輯器使用方法自行查閱,這裡不表。
配置檔案內容
根據 Laravel 8.5 部署文件 的說明,Nginx 配置檔案稍作調整:
server {
listen 80;
server_name example.com; # 必改項,替換為 伺服器公網IP 或 域名
root /var/www/example.com/public; # 必改項,指向站點根目標的 public 子目錄
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index 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; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock; # 必改項,對應 PHP 版本
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
以上檔案要修改 3 個地方:server_name
,root
和 fastcgi_pass
。
過載 Nginx
配置完成後,請務必重啟(Restart)或 過載(Reload)Nginx。
過載 Nginx
service nginx reload
# 另一種等效的方法
nginx -s reload
重啟 Nginx
service nginx restart
過載或重啟 Nginx 後,在瀏覽器輸入 伺服器公網IP 或 域名,即可訪問到站點。
恭喜你,部署成功!
本作品採用《CC 協議》,轉載必須註明作者和本文連結