伺服器 (Ubuntu 20.04) 手動部署 LNMP

不正發表於2022-02-26

透過學習 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 安裝成功並正常執行。

PHP


安裝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 個軟體包:

  1. PHP - PHP 自身。
  2. PHP-CLI - PHP 的命令列介面,通俗地說,在命令列內執行php 便依賴於此包。
  3. 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 服務

透過 servicesystemctl 命令管理 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
  1. ps aux 用於列出系統當前正在執行的所有程式的所有資訊
  2. | 名為管道運算子,將前一條命令的標準輸出連線到下一條命令的標準輸入。
  3. grep 是一款文字搜尋工具,常用來過濾命令列輸出;php 是搜尋的關鍵詞。
  4. 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_namerootfastcgi_pass

過載 Nginx

配置完成後,請務必重啟(Restart)或 過載(Reload)Nginx。
過載 Nginx

service nginx reload

# 另一種等效的方法
nginx -s reload

重啟 Nginx

service nginx restart

過載或重啟 Nginx 後,在瀏覽器輸入 伺服器公網IP 或 域名,即可訪問到站點。

PHP

恭喜你,部署成功!

本作品採用《CC 協議》,轉載必須註明作者和本文連結
敢於爭先 @ 不正

相關文章