Try   HackMD

Deploy first laravel 站建置紀錄

tags: Deploy 學習紀錄

Web

事前準備

domain

  • 給人看的文字網址,取代 IP 數字顯示用的
  • 一開始在 godaddy & google domain 中選擇了比較便宜且想要的一個網址,結果買了以後發現教學都是 godaddy 的
  • 自立自強,自己看 vultr & google 的文件自己來
  • google domain 的業務好像賣給 Squarespace 了

VPS

  • 租用一個能在世界各地連接到到 server
  • 會取得可連接到的 IP
  • 選擇 vultr
  • 一開始連接信用卡時跑去網路上找能用的優惠碼(大都是給新用戶用的),看到一個買多少送多少的優惠上限 100 美,讓我本來想存個 10 美的預計當場乘 10,難過的故事

project

  • 上線顯示網頁的專案
  • 我用的是 docker-compose 開啟以下環境建立 laravel 專案
    • php-fpm
    • nginx
    • postgres

目前的結構

  • kawa.homes
    • laravel 基底
    • 有後端、簡易後台、前端頁面
  • axum.kawa.homes
    • rust axum 基底
    • 正在慢慢建構中的網站 api server
    • 預計用這個替換掉 laravel 的後端
    • 完成後,把目前的 kawa.homes 指向 laravel.kawa.homes,把 kawa.homes 指向新建立的 vue 頁面
    • 用遊戲講法,這就是下一個大改版本
  • sg-vite.kawa.homes
    • vue vite 基底
    • vue 後台頁面,有 router、auth、類似 vuex 的 pinia 功能
  • vue.kawa.homes
    • vue vite 基底
    • 第一次使用三級域名新增的,當時正狂熱著的遊戲,遊戲資訊查詢頁面
  • surrealdb.kawa.homes
    • 之前接觸到的一個新的 DB,覺得有趣就架一個到線上了

過程

  • google domain 買網址 kawa.homes
    • 一年(加不知道啥東東 5% 左右) 440 + 22 = 462
  • Vultr 開啟他介紹說效能較好的 6美/月的 VPS
    • 地點我選了好像挺近的新地點 Osaka ,應該是大阪
    • os ubuntu 20
    • (選擇)加入 ssh key
    • (選擇)安裝 docker
    • (取消)備份 要 20% 額外費用
  • vps 建立後使用 wsl2 的 ssh 連線進入 vultr 的 vps
    • apt-get update
    • apt-get install fail2ban
      • vim /etc/fail2ban/jail.local
        ​​​​​​​​​​​​[sshd]
        ​​​​​​​​​​​​enabled  = true
        ​​​​​​​​​​​​port     = ssh
        ​​​​​​​​​​​​filter   = sshd
        ​​​​​​​​​​​​logpath  = /var/log/auth.log
        
        ​​​​​​​​​​​​maxretry = 3
        ​​​​​​​​​​​​findtime = 600
        ​​​​​​​​​​​​bantime  = 1200
        ​​​​​​​​​​​​destmail = xxxx@gmail.com
        
      • service fail2ban restart
      • 查看紀錄 cat /var/log/fail2ban.log
    • git clone git@github.com:kawagami/docker-env.git
    • chmod -R 777 docker-env
    • cd docker-env
    • sh init.sh
  • 至此可用 IP 連上專案的首頁
  • 設定 domain & IP 的連結
  • vultr vps 設定 domain
  • google domain 設定 IP
  • domain & vps 商都設定完後即可使用 domain 直接連上 vps 的 IP 了
  • 接下來預計處理 ssl 憑證
  • 使用失敗後的第三種方法情境一手動處理 ssl 憑證
    • 隱患,後續嘗試修改成自動更新
    • 使用情境 2 的方式失敗狀況
  • 2023-02-05 調整專案成較易更新的結構
  • 接著應該做 nginx 訪問次數的限制
    • 2023-02-05 在 nginx 加入了一秒一次的請求限制
    • 還沒實測,不確定是否有效
  • 體驗架站後才有感會有人硬 try 帳密,我的還是小到毫無觸及的那種未完成網站的說
  • 2023-02-06 看 nginx logs 發現沒見過的警告訊息,待處理
  • 2023-02-07 rust 的範例好像能用來參考處理 golang L3 domain 的狀況
  • 2023-02-08 加上突然想做的小功能,像 HackMD 一樣,Ctrl + V 直接貼上圖片,目前是使用後端存入專案產生可用的實際 url
  • 2023-02-09 頁面目前看起來還是很陽春,調整頁面 & 專案結構拆分
  • docker 發生預料外的權限問題
  • 調整 VPS 使用者登入方式
  • 這次權限問題處理過程
  • 處理 nginx 接 rust rocket 的設定中
    • 繼續摸索 websocket 中
  • 加入短網址功能
  • 在 nginx 加入 header
  • 加入多語系 中文 & 英文 & 日文
  • 加上權限設定 & 後臺管理頁面
  • 使用 cloudflare 的 ssl 憑證
    • cloudflare 免費 ssl 設定到取得 nameserver 後去修改 domain nameserver 設定
    • 在 domain 購買的地方(我是 google)將 nameserver 換成 cloudflare 的 nameserver
    • 再回到 cloudflare 設定後續 & 點擊確定
    • 前面設定完後,專案遇到的問題
      • 使用 nginx 重新導向 443 的 laravel 專案要把重導向關閉,不然會重導向過多次
      • 且在 80 的區塊下加入 443 會做的處理,不然我這次遇到 404
    • 目前狀況是我原本的免費憑證好像被 cloudflare 延長了
    • 三個月後可能手動換成 cloudflare 的憑證,或讓 cloudflare 自動延長我憑證的時間
  • 加上自學的 CICD 功能
    • 目前 master 更新後會自動 deploy 上 vultr
    • 感覺很多地方可以改善,像是 composer install、migrate、docker 都有可以加強的地方
  • 目前的結構
    • kawa.homes
      • laravel 基底
      • 有後端、簡易後台、前端頁面
    • axum.kawa.homes
      • rust axum 基底
      • 正在慢慢建構中的網站 api server
      • 預計用這個替換掉 laravel 的後端
      • 完成後,把目前的 kawa.homes 指向 laravel.kawa.homes,把 kawa.homes 指向新建立的 vue 頁面
      • 用遊戲講法,這就是下一個大改版本
    • sg-vite.kawa.homes
      • vue 後台頁面,有 router、auth、類似 vuex 的 pinia 功能
    • vue.kawa.homes
      • 第一次使用三級域名新增的,當時正狂熱著的遊戲,遊戲資訊查詢頁面
    • surrealdb.kawa.homes
      • 之前接觸到的一個新的 DB,覺得有趣就架一個到線上了
      • 相關資訊
        ​​​​​​​​​​​​What(什麼):
        ​​​​​​​​​​​​SurrealDB是一個動態和適應性的業務平台,提供集成的先進數據庫解決方案、工具和服務。它將數據庫層、查詢層以及API和身份驗證層結合為一個平台,支持實時API、安全權限,並提供靈活的數據建模和高效的查詢。
        
        ​​​​​​​​​​​​Why(為什麼):
        ​​​​​​​​​​​​SurrealDB的設計旨在加速實時應用程序的構建和擴展,同時提供靈活的數據建模、實時查詢和動態權限管理。它的目標是讓開發者能夠更容易地構建和擴展實時應用程序。
        
        ​​​​​​​​​​​​How(如何):
        ​​​​​​​​​​​​SurrealDB結合了數據庫、實時API層和安全權限,使開發者能夠直接從網頁瀏覽器和客戶端設備連接和查詢數據。它支持多種查詢方式,包括SurrealQL、GraphQL、CRUD支持,並允許使用JavaScript和WebAssembly擴展數據庫功能。
        
        ​​​​​​​​​​​​Where(在哪裡):
        ​​​​​​​​​​​​SurrealDB旨在嵌入到應用程序中,可以作為嵌入式數據庫庫使用,也可以作為分佈式集群中的數據庫服務器運行。它使用Rust編程語言構建,旨在在各種環境中運行,包括雲端和本地。
        

想加的功能

遇到的問題

加新專案的流程

  • 在 docker-env 中加入以下資料
    • 該專案資料夾
      • docker-compose.dev.yml
      • docker-compose.prod.yml
      • dev.conf
      • prod.conf
    • .evn 中 COMPOSE_FILE 的值加入上面對應的 .yml 檔案
      • 開發環境 => docker-compose.dev.yml
      • 線上環境 => docker-compose.prod.yml