iT邦幫忙

第 11 屆 iThome 鐵人賽

5
Software Development

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

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

  • 分享至 

  • twitterImage
  •  
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
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言