iT邦幫忙

第 11 屆 iThome 鐵人賽

5
Software Development

PHP新手30天實戰金流系列 第 31

[GCP] Ubuntu 18 部署 Nginx server, Laravel 專案

GCP, Deployment, Nginx, Laravel6

事前

  1. 在自己電腦上安裝 gcloud sdk
  2. gcloud init
  3. gcloud auth login
  4. 查看 project gcloud config list project
    gcloud projects create==PROJECT_ID==)

Step 1 建立執行個體

  1. 建立一個名稱為"test1023"的執行個體(GCE):
    gcloud compute instances create test1023 --image-project ubuntu-os-cloud --image-family ubuntu-1804-lts

    若要指定網路區域可以下參數 --zone asia-east1-b,否則區域為 gcloud init 時設定的那個
    設定映像檔一定要這兩個參數:--image-project , --image-family

    • 若全都用預設,就只要下指令: gcloud compute instances create test1023即可
    • 查看可用映像檔
      查詢:gcloud compute images list
    • 查看可用區域
      查詢:gcloud compute zones list
    • 查詢目前VM個體:gcloud compute instances list
  2. 進入 gcloud compute ssh "test1023"
    (gcloud compute ssh --zone "asia-east1-b" "test1023")

  3. 輸入SSH 鑰匙密碼Enter passphrase for key '/Users/sarahcheng/.ssh/google_compute_engine':

  4. 開瀏覽器到 gcloud console 將防火牆打開

如果要刪除 gcloud compute instances delete test1023 --zone asia-east1-b

Step 2 安裝所需套件

  • 看作業系統: lsb_release -a cat /etc/*release

2-1 安裝 php

  1. 看 php 版本:php -v,更新到 7.4
    sudo apt-get install software-properties-common
    sudo add-apt-repository ppa:ondrej/php
    sudo apt-get update
    sudo apt -y --allow-unauthenticated install php7.4
    sudo apt-get install -y --allow-unauthenticated  php7.4-{bcmath,bz2,intl,gd,mbstring,mysql,zip,xml}
    
    • 再看一次確認安裝成功 php -v

2-2 安裝 composer

  • 安裝指令:curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
  • 查看是否安裝成功:composer -v

2-3 安裝 mysql

  1. sudo apt-get install mysql-server

    若要安裝特定版本sudo apt-get install mysql-server-5.7
    若要設密碼:$sudo mysql_secure_installation

  2. 啟動 mysql-server:
    sudo systemctl start mysql

  3. 查看是否成功啟動:
    systemctl |grep mysql

  4. 進入 mysql server:
    sudo mysql -u root

    查看目前使用者及其身份驗證方式:
    SELECT User, Host, plugin FROM mysql.user;

    1. CREATE USER 'sarah'@'localhost' IDENTIFIED WITH mysql_native_password BY '00000';
    2. 給予新建的使用者存取DB的權限:
      GRANT ALL PRIVILEGES ON *.* TO 'sarah'@'localhost';
      (*.* 代表所有DB的所有 table)
    3. 查看目前 mysql server的使用者:
      select user,plugin,authentication_string from mysql.user;

2-4 安裝 Nginx

  1. 查看Port 80 是否被佔用:sudo netstat -utlnp | grep 80
    (參數意義 udp, tcp, listen, numeric, process)

    numeric 的意思是將名稱數字化(IP),例:原本的 localhost 會變成 127.0.0.1

  2. Ubuntu 的映像檔已內建 Apache2,預設是開啟聽著 80 port, 查看 apache2 狀態:sudo systemctl status apache2
  3. 我們要改用 Nginx, 但是因為安裝 Nginx 後它也會自動聽 80 port,所以先把 apache2 停掉:sudo systemctl stop apache2
  4. 安裝 Nginx:sudo apt-get install nginx -y
  5. 安裝 Nginx 與 PHP溝通之套件 sudo apt-get -y --allow-unauthenticated install php7.4-fpm

2-5 安裝 git

  1. sudo apt-get update
  2. sudo apt-get upgrade -y --allow-unauthenticated
  3. sudo apt-get install git

Step 3 部署 github 專案

3-1 專案下載

  • git clone https://github.com/laravel/laravel.git

3-2 Nginx 設定

  1. 修改 Nginx 設定檔中的讀取路徑為我們要部署的專案
    sudo vim /etc/nginx/sites-available/default

    • 將專案路徑+/public 寫在 root 後
    #root /var/www/html;
    root /home/sarahcheng/laravel/public;
    # 加入 index.php
    index index.php
    

    如圖:

    location / {
                #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?$query_string;
        }
    
    
    • 拿掉 php 那段的註解
  2. 讓 niginx 重新載入修改完的設定檔:
    sudo nginx -s reload

  3. 進入專案安裝套件和設定環境:
    cd laravel

    1. sudo composer install
    2. mv .env.example .env
    3. 產生 access key:
      sudo php artisan key:generate

3-3 資料庫 Operation

  1. 進入 mysql -u sarah -p00000
    • CREATE DATABASE testdb;
    • show databases;
    • use testdb;
    • show tables; (現在是空的)
  2. 另外開一個 ssh 連線過去
    2. 進到專案目錄下:cd laravel
    3. 修改專案的環境設定 .env 檔: vim .env
    DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=sarah DB_PASSWORD=00000
    4. 執行指令建立 tabel: php artisan migrate (原本git clone 下來的專案就有寫好的 migration了)
  3. 回到 mysql
    • show tables; (現在多了三個 table)
    • 離開 mysql exit

3-4 更改權限

在專案目錄下:

  • 修改擁有群組為 www-data
    sudo chown -R sarahcheng.www-data .
    • "chown" change 擁有者
    • "-R" 往下層所有目錄遞迴
    • "sarahcheng.www-data" 擁有者.擁有群組
    • "." 代表當前目錄
  • sudo chmod -R 2770 ./storage/
    • "chmod" change mode
    • "-R" 往下層所有目錄遞迴
    • "2770" 2代表 SGID 參考
      • 770分別代表:
        • 擁有者的存取權限
        • 擁有群組的存取權限
        • 其他人的存取權限
    • "." 代表當前目錄
      到專案路徑下看擁有者是否更改成功 ls -al

P.S.

  • 目錄 /var/log/nginx 下有 access.log 和 error.log 可以查看 request
  • GCP instance 的 IP,可在 GCP GUI 複製 外部 IP
  • 將舊資料備份 mysqldump --opt -usarahcheng -p laravel_shop > test.sql
  • 透過 ssh 將檔案傳到 GCE instance gcloud compute scp test.sql test1023: --zone asia-east1-b
  • 匯入資料:mysql -u 使用者名稱 -p 資料庫名稱 < backup.sql
  • 查看目前機器中所有開放的 Port
    $ sudo netstat -utlnp
    
  • 基本上不用安裝laravel(不太可能在server上開發),不過還是提供參考指令:

    1. sudo composer global require laravel/installer
    2. vi ~/.bash_profile
      • export PATH="$HOME/.composer/vendor/bin:$PATH"
    3. source ~/.bash_profile
    4. laravel -V

    p.s.composer show -i 查看 composer 安裝了什麼(composer.json)


上一篇
[Day30]檔案權限, www-data,SUID, SGID, SBIT
下一篇
[GCP] Nginx server 之 HTTPS(SSL) 設定
系列文
PHP新手30天實戰金流34

尚未有邦友留言

立即登入留言