為什麼寫這篇文章
完成 第二套 教程後,正好手上有一臺閒置的伺服器,所以就想著搭建到伺服器上。一開始以為很簡單(因為之前弄過一次),沒想到還是弄了快一天才弄好。所以這裡記錄一下這次的搭建過程,以便下次省點力。
本次搭建的環境為 Ubuntu 18.04 LTS 。我會從初始化開始到安裝軟體再到部署 Laravel 程式碼。
注:本文命令全在 root 使用者下執行,如果你的是普通使用者,命令執行不成功,請在命令前面加上 sudo
安裝軟體
我是用的是 LNMP 所以要安裝 Nginx
,MySQL
,PHP
。因為涉及到快取,故要安裝 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 公網地址,即可看到網站主頁。
參考連結
- Ubuntu 18.04 通過 apt 安裝 MySQL 5.7
- 輕鬆部署 Laravel 應用
- 鳥哥的 Linux 私房菜
本作品採用《CC 協議》,轉載必須註明作者和本文連結