Laravel 服務容器化

分享
Laravel 服務容器化
OIG1

開發的時候,都是直接在開發電腦上安裝 php, mysql, nodejs, nginx
但是要搬移到 server 的時候實在是痛苦不堪,所有的東西都要再安裝一次
php 尤其麻煩,還要安裝一堆擴充套件,要一個一個錯誤嘗試實在吐血

想要解決這個煩人的問題,當然就是服務容器化啦!
這樣以後要再次部署,但是那些 queue worker 要怎麼跑呢?放在跟主程式同一個 container 總覺得不太對勁,而且還不能平行擴展。還有那些排成怎麼辦呢?去 container 裡面設定 cronjob 嗎?
還好已經有許多強者做過這樣的操作了,我只要照著做一遍就可以了。

這裡提供我參考的網站,裡面寫得滿詳細的:Running the Laravel Scheduler and Queue with Docker

總結來說,就是讓每個 queue worker 去用跟 laravel server 一樣的設定,然後額外放一個 shell script 每 60 秒重複跑 artisan schedule:run 來達到跟原本要用 cronjob 才能做到的排程

shell script

set -e

type=${CONTAINER_TYPE:-app}

if [ "$type" = "app" ]; then
    exec php-fpm
elif [ "$type" = "queue" ]; then
    echo "Running the queue: default"
    php artisan queue:listen redis --queue=default --sleep=3
elif [ "$type" = "scheduler" ]; then
    echo "Running the scheduler"
    while [ true ]
    do
      php artisan schedule:run >> /dev/null 2>&1 --no-interaction &
      sleep 60
    done
else
    echo "Could not match the PHP container type \"type\""
    exit 1
fi

用 `.env` 去設置每個 docker-compose 中的 service 要執行哪個邏輯

queue-worker:
    build:
      context: ./php
      dockerfile: Dockerfile
    restart: always
    tty: true
    working_dir: /var/www
    volumes:
      - ./php/app:/var/www
      - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
      - ./start.sh:/var/www/start.sh # 把指令丟進去
    environment:
      CONTAINER_TYPE: queue
    entrypoint: [ "sh", "start.sh" ] # 啟動後執行這個命令
    depends_on:
      - mysql
      - redis
    networks:
      - app

感謝其他大神讓我可以順利的將 laravel 程式容器化,也希望這篇可以幫助到正在容器化 laravel 的你 :)

Read more

Gaze Guard 短影片旁白的 TTS 成本與隱私防護示意圖

短影片旁白的成本,其實比我想像低

我最近在做一支 Gaze Guard 的 20 秒產品介紹影片。 原本想說簡單做個動畫就好。 後來想說如果有配音,會感覺比較生動也比較能夠描述使用的情境和達成的效果。 這次我測了什麼 我測的是產品介紹影片用的英文旁白。 工具底層使用的是 Edge TTS,也就是 Microsoft Edge 的線上 Text-to-Speech 服務。常見的底層工具是 edge-tts。 這不是正式 Azure Speech API 的計費路徑。 在我這次的環境裡,它沒有要求 API key,也沒有回傳可見的 per-use billing。 所以這次測試本身,比較像是快速 prototype。 如果未來要正式商用、穩定大量產出,就要回頭看 Azure Speech、OpenAI TTS、ElevenLabs 這類正式付費方案。

By SteepingLogic
用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

# 用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard 我有一台 local Hermes。 平常它就在自己的機器上跑。 可能是家裡的桌機。 可能是 NAS。 可能是一台一直開著的 Linux box。 也可能只是我自己的筆電。 問題是,人一離開那個網路,Hermes dashboard 就變成一個只存在於 localhost 的東西。 我想在外面打開它。 但我沒有 static IP。 沒有買網域。 也不想進路由器開 port forwarding。 因為那條路通常長這樣: * 找 public IP * 設定 NAT * 開 port * 處理防火牆 * 補 HTTPS * 設定憑證 * 再擔心 origin IP 被掃 非常友善。 所以這篇先走另一條路:

By SteepingLogic
Invoshot 開發日記|正向回饋

Invoshot 開發日記|正向回饋

想信很多人在開發的時候都常常會做一件事,那就是: 不斷地反覆思考,在腦袋內把流程跑過很多次,然後思考哪裡可以做得更好 不限坐在電腦前的時後,可能是在捷運上,在人行道上, 在馬桶上或是在洗澡的時候 🤪 我不斷地在想:AI 辨識完一張發票後,使用者接下來最需要的是什麼? 每個欄位都要核對嗎? 這麼多欄位真的不會漏看嗎? 所以我在 Invoshot 裡加了提醒功能。 辨識結果出來後,系統會把比較需要注意的地方標出來。 不是把所有不確定都丟給使用者,而是把他真正需要介入的那幾秒鐘留出來。 今天收到一則訊息: 今天用了有新增提醒功能很棒! 真的有變輕鬆 😎 看到這句的時候,我第一個想到的是: 原來那些只是我腦內風暴的優化項目,使用者是真的可以感受到差異的! 感覺又有動力了!

By SteepingLogic