記一次 Laravel 程式碼部署到伺服器上(Ubuntu 18.04)

飛機飛過天空發表於2020-05-23

為什麼寫這篇文章

完成 第二套 教程後,正好手上有一臺閒置的伺服器,所以就想著搭建到伺服器上。一開始以為很簡單(因為之前弄過一次),沒想到還是弄了快一天才弄好。所以這裡記錄一下這次的搭建過程,以便下次省點力。

本次搭建的環境為 Ubuntu 18.04 LTS 。我會從初始化開始到安裝軟體再到部署 Laravel 程式碼。

注:本文命令全在 root 使用者下執行,如果你的是普通使用者,命令執行不成功,請在命令前面加上 sudo

安裝軟體

我是用的是 LNMP 所以要安裝 NginxMySQLPHP。因為涉及到快取,故要安裝 Redis。另外還要安裝版本控制工具:Git 和 PHP 包管理工具:Composer

更新軟體源

安裝軟體之前,我們先要更新軟體源:

$ apt update

然後升級軟體

$ apt upgrade

輸入 Y 或者直接回車,開始升級。

本地化配置

修改本地配置為 en_US.UTF-8

$ locale-gen en_US.UTF-8
$ update-locale LC_ALL=en_US.UTF-8

修改時區

$ timedatectl set-timezone Asia/Shanghai

安裝 Nginx

使用如下命令安裝 Nginx :

$ apt install nginx -y

這裡新增了 -y 選項,表示同意下載軟體,不會詢問你是否同意安裝軟體,下同。

檢視是否安裝成功

$ nginx -v
# 輸出
nginx version: nginx/1.14.0 (Ubuntu)

在 80 向外開放的前提下(在安全組中加上 80 埠),在瀏覽器中輸入伺服器的公網 IP ,會出現 Nginx 歡迎頁面,則代表 Nginx 執行成功。

安裝 PHP

新增軟體源

由於 Ubuntu 的官方軟體源通常不包含最新版本的 PHP,因此需要新增一個包含最新 PHP 的第三方軟體源。

在新增之前,我們首先安裝名為 software-properties-common 的軟體包,它提供了快速管理軟體源的實用指令碼:

$ apt install -y software-properties-common

隨後,執行以下指令碼新增第三方 PHP 軟體源:

$ add-apt-repository -y ppa:ondrej/php

成功後別忘記重新整理:

$ apt-get update

安裝 PHP 及其 擴充

我這裡安裝的是 PHP 7.4。執行下列命令,安裝 PHP 及其擴充:

$ apt install -y php7.4 php7.4-cli php7.4-fpm php7.4-mbstring php7.4-xml php7.4-bcmath php7.4-curl php7.4-gd php7.4-mysql php7.4-opcache php7.4-zip php7.4-sqlite3

檢視 PHP 是否安裝成功:

$ php -v 
# 輸出
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

安裝 MySQL

執行如下命令安裝 MySQL:

$ apt install mysql-server -y

安裝 MySQL 是我遇到的第一個坑,因為這裡不會像安裝其他 MySQL 版本一樣提示設定 root 密碼,而是通過一個指令碼來進行互動。前前後後弄了半天也弄不好。好在找到這篇 文章 解決了這個問題。

檢視 MySQL 是否安裝成功

$ mysql --version
# 輸出
mysql  Ver 14.14 Distrib 5.7.30, for Linux (x86_64) using  EditLine wrapper

安裝 Redis

執行如下命令安裝 Redis:

$ apt install redis -y

安裝完成後,使用命令 redis-cli ping 輸出 PONG 則代表 安裝成功。

安裝 Git

$ apt install -y git

檢視 Git 是否安裝成功

$ git --version
# 輸出
git version 2.17.1

安裝 composer

$ wget https://raw.githubusercontent.com/composer/getcomposer.org/master/web/installer -O - -q | php -- --filename=composer --install-dir=/usr/local/bin

這個下載可能有慢一點,建議多等一會。

檢查是否安裝成功:

$ composer -V
# 輸出
Composer version 1.10.6 2020-05-06 10:28:10

配置 composer 映象源:

$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

全域性下載 Composer 多執行緒下載的工具:

$ composer global require hirak/prestissimo

使用 systemctl 管理服務

安裝完軟體後,我們還要知道如何使用安裝的服務,在 Linux 中,我們可以使用 systemctl 來管理服務的啟動/開機啟動與檢視狀態。

systemctl 的使用方法為:

$ systemctl [command] [unit]
command 主要有:
start    : 立即啟動 unit
stop     : 立即關閉 unit
restart  : 重新啟動 unit,即先執行 stop 在執行 strat 的意思
reload   : 不關閉 unit 的情況下,重新載入配置檔案,讓設定生效
enable   : 開啟 unit 下次開機自啟
disable  : 關閉 unit 下次開機自啟
status   : 檢視 unit 的狀態

這裡的 unit 則代表服務,例:Nginx 的服務就是 nginx.server 。

注意:PHP 的服務是 php7.4-fpm.service ,PHP-FPM 是使用者管理 PHP 程式,並提供 FastCGI 介面與 Nginx 互動;瀏覽網頁時的請求便是由 Nginx 交由 PHP-FPM 處理的。

檢視 nginx 狀態:

$ systemctl status nginx.server
# 會輸出如下資訊。
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-05-22 15:40:36 CST; 2min 17s ago
    .
    .
    .
  • Loaded:說明 nginx 是否開機自啟,enabled 為開機自啟,disabled 開機不會啟動。可以看到 第二個選項是 enabled 說明是開機自啟(注意,不要看到最後一個選項了,那是 vendor preset ,意為供應商預設)。如果是 disabled ,執行 systemctl enable nginx 命令來達到開機自啟。
  • Active:說明 Nginx 是正在執行(running)還是沒有執行(dead)。如果為 dead 的話,執行 systemctl start nginx 命令來啟動 Nginx。

部署程式碼

在部署程式碼之前,我們先建立資料庫:

$ mysql -u root -p
# 輸入密碼進入 mysql
# 建立資料庫
mysql> CREATE DATABASE [your_databases_name] DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

拉取程式碼,並進行基礎配置

# 切換至 www 目錄
$ cd /var/www
# 使用 Git 拉取程式碼
$ git clone https://gitee.com/good_man_yikang/laraveltow.git
# 進入專案目錄
$ cd laraveltow
# 使用 composer 安裝依賴,不下載開發下的依賴
$ composer install --optimize-autoloader --no-dev
# 生成 .env 檔案
$ php -r "file_exists('.env') || copy('.env.example', '.env');"
# 生成 APP_KEY
$ php artisan key:generate --ansi
# 修改目錄檔案使用者和使用者組
$ chown -R www-data:www-data .
# 修改檔案許可權
$ chmod -R 750 .
$ chmod -R 770 storage bootstrap/cache

根據自己的實際情況配置 .env 檔案,線上的話要將 APP_ENV 設定為 production(生產環境),APP_DENUG 設定為 false

配置完成後,執行 php artisan migrate 來執行遷移檔案,建立資料表。

配置 Nginx 站點

首先進入 Nginx 的配置目錄,接著建立配置檔案:

$ cd etc/nginx/sites-enabled
$ vim laraveltow.conf

根據 laravel 文件 我們可以快速寫出 Nginx 配置檔案:

server {
    listen 80;
    server_name 101.200.187.138; # 修改為伺服器公網 IP 或域名
    root /var/www/laraveltow/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.html index.htm 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/php7.4-fpm.sock; # 請注意核對 PHP 版本
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

配置完成後,使用 reload 來重新載入 nginx 配置檔案:

$ systemctl reload nginx

至此,訪問你的伺服器 IP 公網地址,即可看到網站主頁。

參考連結

  1. Ubuntu 18.04 通過 apt 安裝 MySQL 5.7
  2. 輕鬆部署 Laravel 應用
  3. 鳥哥的 Linux 私房菜
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章