# OmniRoute Fly.io Deployment Guide (မြန်မာ) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇪🇹 [am](../../../am/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇦🇿 [az](../../../az/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇩🇰 [da](../../../da/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇩🇪 [de](../../../de/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇬🇷 [el](../../../el/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇪🇸 [es](../../../es/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇪🇪 [et](../../../et/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇱 [he](../../../he/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇩 [id](../../../id/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇹 [it](../../../it/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇰🇭 [km](../../../km/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇳🇴 [no](../../../no/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [or](../../../or/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇱🇰 [si](../../../si/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇸🇪 [sv](../../../sv/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇮🇳 [te](../../../te/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇹🇭 [th](../../../th/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/FLY_IO_DEPLOYMENT_GUIDE.md) --- ဤစာတမ်းတွင် Fly.io ပေါ်သို့ OmniRoute ကို လက်တွေ့အသုံးပြုရန် ဖြန့်ချိသည့် လုပ်ငန်းစဉ်ကို အောက်ပါအခြေအနေများအတွက် ဖော်ပြထားသည်- - လက်ရှိပရောဂျက်ကို Fly.io ပေါ်သို့ ပထမဆုံးအကြိမ် ဖြန့်ချိခြင်း - နောက်ဆက်တွဲ ကုဒ်အပ်ဒိတ်များကို ထုတ်ဝေခြင်း - တူညီသော ဖြန့်ချိမှုလုပ်ငန်းစဉ်ကို လိုက်နာသည့် ပရောဂျက်အသစ်များ ဤလမ်းညွှန်သည် လက်ရှိပရောဂျက်အတွက် စစ်ဆေးအတည်ပြုပြီး အလုပ်လုပ်သည့် ဖွဲ့စည်းသတ်မှတ်ချက်ကို အခြေခံထားသည်။ အပလီကေးရှင်းအမည်မှာ `omniroute` ဖြစ်သည်။ --- ## 1. ဖြန့်ချိမှု ရည်မှန်းချက်များ - ပလက်ဖောင်း- Fly.io - ဖြန့်ချိမှုနည်းလမ်း- Local `flyctl` ဖြင့် တိုက်ရိုက်ထုတ်ဝေခြင်း - Runtime- Repository အတွင်းရှိ လက်ရှိ `Dockerfile` နှင့် `fly.toml` ကို အသုံးပြုခြင်း - ဒေတာတည်မြဲမှု- `/data` တွင် mount လုပ်ထားသော Fly Volume - ဝင်ရောက်အသုံးပြုနိုင်သည့် URL- `https://omniroute.fly.dev/` --- ## 2. လက်ရှိပရောဂျက်၏ အဓိကဖွဲ့စည်းသတ်မှတ်ချက် လက်ရှိ repository ရှိ `fly.toml` တွင် အောက်ပါအဓိကအချက်များ ပါဝင်ကြောင်း အတည်ပြုပြီးဖြစ်သည်- ```toml app = 'omniroute' primary_region = 'sin' [[mounts]] source = 'data' destination = '/data' [processes] app = 'node run-standalone.mjs' [http_service] internal_port = 20128 [env] TZ = "Asia/Shanghai" HOST = "0.0.0.0" HOSTNAME = "0.0.0.0" BIND = "0.0.0.0" ``` မှတ်ချက်များ- - `app = 'omniroute'` သည် ဖြန့်ချိမှုက ရည်ညွှန်းမည့် Fly အက်ပ်ကို သတ်မှတ်ပေးသည် - `destination = '/data'` သည် တည်မြဲသိုလှောင်မှု volume ကို mount လုပ်မည့် directory ကို သတ်မှတ်ပေးသည် - ဤပရောဂျက်တွင် `DATA_DIR=/data` ကို မဖြစ်မနေ သတ်မှတ်ရမည်။ မသတ်မှတ်ပါက database နှင့် key များကို container ၏ ယာယီ directory ထဲသို့ ရေးသားသွားမည် --- ## 3. ကြိုတင်လိုအပ်ချက်များ ### 3.1 Fly CLI ကို ထည့်သွင်းခြင်း Windows PowerShell- ```powershell pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex" ``` သင့်ပတ်ဝန်းကျင်တွင် install script အလုပ်မလုပ်ပါက `flyctl` binary ကို ကိုယ်တိုင်ဒေါင်းလုဒ်လုပ်ပြီး သင့် `PATH` ထဲသို့ ထည့်နိုင်သည်။ ### 3.2 သင်၏ Fly အကောင့်သို့ ဝင်ရောက်ခြင်း ```powershell flyctl auth login ``` ### 3.3 ဝင်ရောက်ထားမှုအခြေအနေကို စစ်ဆေးခြင်း ```powershell flyctl auth whoami flyctl version ``` --- ## 4. လက်ရှိပရောဂျက်ကို ပထမဆုံးအကြိမ် ဖြန့်ချိခြင်း ### 4.1 ကုဒ်ကို Clone လုပ်ပြီး Directory ထဲသို့ ဝင်ရောက်ခြင်း ```powershell git clone https://github.com/diegosouzapw/OmniRoute.git cd OmniRoute ``` ### 4.2 အက်ပ်အမည်ကို အတည်ပြုခြင်း `fly.toml` ကိုဖွင့်ပြီး အောက်ပါစာကြောင်းကို စစ်ဆေးပါ- ```toml app = 'omniroute' ``` သင်၏ကိုယ်ပိုင် အက်ပ်အသစ်သို့ ဖြန့်ချိနေပါက ၎င်းကို ကမ္ဘာတစ်ဝန်း ထပ်တူမရှိသည့် အမည်တစ်ခုသို့ ပြောင်းလဲနိုင်သည်။ ဥပမာ- ```toml app = 'omniroute-yourname' ``` မှတ်ချက်- - Console တွင် မြင်ရသော အက်ပ်အမည်သည် `fly.toml` ရှိ `app` တန်ဖိုးနှင့် ကိုက်ညီကြောင်း သေချာစေပါ - ယခင်က `oroute` ကဲ့သို့ မတူညီသောအမည်တစ်ခုကို အသုံးပြုခဲ့ပါက ၎င်းကို `omniroute` နှင့် မရောထွေးပါနှင့် ### 4.3 အက်ပ်ကို ဖန်တီးခြင်း အက်ပ် မရှိသေးပါက- ```powershell flyctl apps create omniroute ``` အက်ပ်အမည်ကို ပြောင်းထားပါက `omniroute` နေရာတွင် သင်ရွေးချယ်ထားသောအမည်ကို အစားထိုးပါ။ ### 4.4 ပထမဆုံး ဖြန့်ချိခြင်း ```powershell flyctl deploy ``` --- ## 5. မဖြစ်မနေလိုအပ်သော Parameter များ ဤပရောဂျက်အတွက် Fly.io ပေါ်တွင် အနည်းဆုံး အောက်ပါ parameter များကို ဖွဲ့စည်းသတ်မှတ်ရန် အကြံပြုထားသည်။ ### 5.1 အတည်ပြုပြီးသော Parameter များ ဤ parameter များကို လက်ရှိ `omniroute` အက်ပ်၏ လက်တွေ့ဖြန့်ချိမှုများတွင် အသုံးပြုပြီးဖြစ်သည်- - `API_KEY_SECRET` - `DATA_DIR` - `JWT_SECRET` - `MACHINE_ID_SALT` - `NEXT_PUBLIC_BASE_URL` - `OMNIROUTE_WS_BRIDGE_SECRET` (production တွင် မဖြစ်မနေလိုအပ်သည် — WebSocket bridge စစ်မှန်ကြောင်းအတည်ပြုမှုအတွက် အသုံးပြုသည်) - `STORAGE_ENCRYPTION_KEY` ### 5.2 `INITIAL_PASSWORD` အကြောင်း ဤဖြန့်ချိမှုတွင် `INITIAL_PASSWORD` ကို မလိုအပ်သဖြင့် လက်ရှိပရောဂျက်တွင် ၎င်းကို သတ်မှတ်မထားပါ။ ၎င်းကို မသတ်မှတ်ထားပါက- - စတင်လည်ပတ်မှု log တွင် မူလစကားဝှက်သည် `CHANGEME` ဖြစ်ကြောင်း ဖော်ပြမည် - ဖြန့်ချိပြီးသည်နှင့် စနစ်ဆက်တင်များတွင် ဝင်ရောက်အသုံးပြုသည့် စကားဝှက်ကို အမြန်ဆုံး ပြောင်းလဲသင့်သည် နောက်ကွယ်မှ အလိုအလျောက်လုပ်ဆောင်မှုဖြင့် backend စကားဝှက်ကို ကနဦးသတ်မှတ်လိုပါက နောက်ပိုင်းတွင် အောက်ပါတန်ဖိုးကို ထည့်သွင်းနိုင်သည်- - `INITIAL_PASSWORD` --- ## 6. အကြံပြုထားသော ပါရာမီတာများ ### 6.1 လျှို့ဝှက်တန်ဖိုးများ ဖွဲ့စည်းသတ်မှတ်ခြင်း Fly Secrets အတွက် အောက်ပါ variable များကို အကြံပြုထားသည်- | Variable | အကြံပြုချက် | ဖော်ပြချက် | | ------------------------------- | --------------------------------- | -------------------------------------------------------------------------- | | `API_KEY_SECRET` | မဖြစ်မနေလိုအပ်သည် | API Key ထုတ်လုပ်ခြင်းနှင့် အတည်ပြုခြင်းအတွက် အသုံးပြုသည် | | `JWT_SECRET` | မဖြစ်မနေလိုအပ်သည် | login session များနှင့် JWT လက်မှတ်ရေးထိုးခြင်းအတွက် အသုံးပြုသည် | | `OMNIROUTE_WS_BRIDGE_SECRET` | production တွင် မဖြစ်မနေလိုအပ်သည် | WebSocket bridge အထောက်အထားစစ်ဆေးမှု လျှို့ဝှက်တန်ဖိုး | | `STORAGE_ENCRYPTION_KEY` | အထူးအကြံပြုထားသည် | သိမ်းဆည်းထားသော အရေးကြီး connection အချက်အလက်များကို ကုဒ်ဝှက်ပေးသည် | | `MACHINE_ID_SALT` | အကြံပြုထားသည် | တည်ငြိမ်သော machine identifier တစ်ခုကို ထုတ်လုပ်ပေးသည် | | `INITIAL_PASSWORD` | ရွေးချယ်နိုင်သည် | ပထမဆုံး deployment ပြုလုပ်ချိန်တွင် မူလ backend password ကို သတ်မှတ်ပေးသည် | | OAuth/API သီးသန့်အထောက်အထားများ | လိုအပ်သလို | ပြင်ပ platform အထောက်အထားစစ်ဆေးမှု ဖွဲ့စည်းသတ်မှတ်ချက် | ### 6.2 လက်ရှိ Project အတွက် အကြံပြုထားသော တန်ဖိုးများ | Variable | အကြံပြုထားသော တန်ဖိုး | | ---------------------- | --------------------------- | | `DATA_DIR` | `/data` | | `NEXT_PUBLIC_BASE_URL` | `https://omniroute.fly.dev` | မှတ်ချက်များ- - `DATA_DIR=/data` သည် အလွန်အရေးကြီးပြီး Fly Volume mount point နှင့် ကိုက်ညီရမည် - `NEXT_PUBLIC_BASE_URL` ကို scheduler၊ frontend callback များနှင့် အလားတူအခြေအနေများတွင် အသုံးပြုသည် ### 6.3 OAuth Callback URL ဖွဲ့စည်းသတ်မှတ်ခြင်း Fly.io deployment တွင် OAuth အခြေပြု provider များ (ဥပမာ Antigravity၊ Gemini၊ Cursor) ကို ဖွင့်လိုပါက အောက်ပါအချက်နှစ်ချက်ကို သေချာစစ်ဆေးပါ- 1. **`NEXT_PUBLIC_BASE_URL` ကို သင်၏ အများသုံး HTTPS domain အဖြစ် သတ်မှတ်ပါ** ```powershell flyctl secrets set NEXT_PUBLIC_BASE_URL=https://omniroute.fly.dev -a omniroute ``` custom domain ကို အသုံးပြုနေပါက သက်ဆိုင်ရာ domain ဖြင့် အစားထိုးပါ (ဥပမာ `https://omniroute.yourdomain.com`)။ 2. **Provider console တွင် callback URL ကို ဖွဲ့စည်းသတ်မှတ်ပါ** OAuth provider အားလုံးသည် callback path တစ်ခုတည်းဖြစ်သော `/callback` ကို မျှဝေအသုံးပြုသည် — provider တစ်ခုစီအတွက် သီးခြား callback route မရှိပါ- ```text /callback ``` ဥပမာ Gemini၊ Antigravity၊ Cursor သို့မဟုတ် GitLab Duo မည်သည့်အရာဖြစ်စေ- - `https://omniroute.fly.dev/callback` `NEXT_PUBLIC_BASE_URL` သည် provider တွင် မှတ်ပုံတင်ထားသော callback URL နှင့် မကိုက်ညီပါက OAuth လုပ်ငန်းစဉ်သည် browser redirect အဆင့်တွင် မအောင်မြင်ပါ။ --- ## 7. Command တစ်ခုတည်းဖြင့် လျှို့ဝှက်တန်ဖိုးများ သတ်မှတ်ခြင်း အောက်ပါ command များသည် လုံခြုံသော ကျပန်းတန်ဖိုးများကို ထုတ်လုပ်ပြီး လက်ရှိ project အတွက် လိုအပ်သော parameter အားလုံးကို Fly Secrets သို့ အဆင့်တစ်ခုတည်းဖြင့် ရေးသွင်းပေးသည်။ မှတ်ချက်များ- - `INITIAL_PASSWORD` မပါဝင်ပါ - လက်ရှိ project `omniroute` အတွက် ရည်ရွယ်ထားသည် ```powershell $apiKeySecret = [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower() $jwtSecret = [Convert]::ToHexString((1..64 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower() $machineIdSalt = [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower() $storageKey = [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower() $wsBridgeSecret = [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower() flyctl secrets set ` API_KEY_SECRET=$apiKeySecret ` JWT_SECRET=$jwtSecret ` MACHINE_ID_SALT=$machineIdSalt ` STORAGE_ENCRYPTION_KEY=$storageKey ` OMNIROUTE_WS_BRIDGE_SECRET=$wsBridgeSecret ` DATA_DIR=/data ` NEXT_PUBLIC_BASE_URL=https://omniroute.fly.dev ` -a omniroute ``` Linux / macOS တွင် `openssl rand -hex 32` ကိုလည်း အသုံးပြုနိုင်သည်- ```bash flyctl secrets set OMNIROUTE_WS_BRIDGE_SECRET=$(openssl rand -hex 32) -a omniroute ``` မှတ်ချက်များ- - production တွင် `OMNIROUTE_WS_BRIDGE_SECRET` သည် မဖြစ်မနေလိုအပ်သည်။ ၎င်းမရှိပါက WebSocket bridge handshake ပျက်ကွက်မည် မူလ password တစ်ခုကိုလည်း သတ်မှတ်လိုပါက- ```powershell flyctl secrets set INITIAL_PASSWORD=your-strong-password -a omniroute ``` --- ## 8. လက်ရှိ Parameters များကို ကြည့်ရှုခြင်း ```powershell flyctl secrets list -a omniroute ``` Console ရှိ `Secrets` စာမျက်နှာတွင် မျှော်မှန်းထားသည့် variables များ မပေါ်ပါက အောက်ပါတို့ကို စစ်ဆေးပါ- - သင်သည် `omniroute` application ကို ကြည့်ရှုနေခြင်း ရှိ၊ မရှိ - `fly.toml` ရှိ `app` value သည် console ရှိ application နှင့် ကိုက်ညီမှု ရှိ၊ မရှိ --- ## 9. နောက်ဆက်တွဲ အပ်ဒိတ်များနှင့် Releases များ Code အပ်ဒိတ်လုပ်ပြီးနောက် release လုပ်ငန်းစဉ်သည် ရိုးရှင်းပါသည်- ```powershell git pull flyctl deploy ``` Code ကို မပြောင်းလဲဘဲ parameters များကိုသာ အပ်ဒိတ်လုပ်ရန် လိုအပ်ပါက- ```powershell flyctl secrets set KEY=value -a omniroute ``` Fly သည် machines များကို rolling update အလိုအလျောက် ပြုလုပ်ပေးမည်ဖြစ်သည်။ ### 9.1 သင့် Fork ၏ `fly.toml` ကို ထိန်းသိမ်းထားစဉ် Upstream Repository အပ်ဒိတ်များကို လိုက်လံရယူခြင်း လက်ရှိ repository သည် fork တစ်ခုဖြစ်ပြီး upstream `https://github.com/diegosouzapw/OmniRoute` မှ အပ်ဒိတ်များကို sync လုပ်လိုပါက အောက်ပါ workflow ကို လိုက်နာပါ။ ဦးစွာ သင့် remotes များကို အတည်ပြုပါ- ```powershell git remote -v ``` အနည်းဆုံး အောက်ပါတို့ကို မြင်ရသင့်သည်- - သင့်ကိုယ်ပိုင် fork ကို ညွှန်ပြနေသည့် `origin` - မူလ repository ကို ညွှန်ပြနေသည့် `upstream` `upstream` ကို မသတ်မှတ်ရသေးပါက ထည့်သွင်းပါ- ```powershell git remote add upstream https://github.com/diegosouzapw/OmniRoute.git ``` Upstream နှင့် sync မလုပ်မီ နောက်ဆုံး commits နှင့် tags များကို ရယူပါ- ```powershell git fetch upstream --tags ``` လက်ရှိ version နှင့် upstream tags များကို စစ်ဆေးပါ- ```powershell git describe --tags --always git show --no-patch --oneline v3.4.7 ``` > မှတ်ချက်- လက်ရှိ project version သည် `v3.8.0` ဖြစ်သည်။ အောက်ပါ `v3.4.7` ရည်ညွှန်းချက်များကို ယခင်က အသုံးပြုခဲ့သည့် နမူနာများအဖြစ်သာ ထားရှိထားခြင်းဖြစ်သည်။ အမှန်တကယ် releases များအတွက် `:latest` သို့မဟုတ် လက်ရှိ version tag (ဥပမာ `:v3.8.0`) ကို အသုံးပြုပါ။ သင့် fork ၏ `fly.toml` ကို အတင်းအကျပ် ထိန်းသိမ်းထားပြီး နောက်ဆုံး upstream `main` ကို merge လုပ်လိုပါက အောက်ပါ workflow ကို လိုက်နာပါ- ```powershell git merge upstream/main git checkout HEAD~1 -- fly.toml git add -- fly.toml git commit -m "chore(deploy): keep fork fly.toml" git push origin main ``` မှတ်ချက်များ- - `git merge upstream/main` သည် မူလ repository မှ နောက်ဆုံး code ကို sync လုပ်ပေးသည် - `git checkout HEAD~1 -- fly.toml` သည် merge မလုပ်မီက သင့် fork ကိုယ်ပိုင် `fly.toml` ကို ပြန်လည်ရယူပေးသည် - Upstream က `fly.toml` ကို မပြင်ဆင်ထားပါက ဤအဆင့်သည် မည်သည့် ကွာခြားချက်ကိုမျှ ဖြစ်ပေါ်စေမည်မဟုတ်ပါ - Upstream က `fly.toml` ကို ပြင်ဆင်ထားပါက ဤအဆင့်သည် သင့် Fly application အမည်၊ volume mount၊ region နှင့် အခြား fork အတွက် သီးသန့်ဖြစ်သော deployment configuration များကို overwrite မလုပ်မိစေရန် သေချာစေသည် သတ်မှတ်ထားသော release tag တစ်ခု (ဥပမာ `v3.4.7`) နှင့် ကိုက်ညီအောင် ပြုလုပ်လိုပါက ထို tag သည် `upstream/main` တွင် ပါဝင်ပြီးဖြစ်ကြောင်း ဦးစွာ အတည်ပြုပါ- ```powershell git merge-base --is-ancestor v3.4.7 upstream/main ``` အောင်မြင်စွာ ပြန်လာပါက `upstream/main` တွင် ထို version ပါဝင်ပြီးဖြစ်ကြောင်း ဆိုလိုသည်။ ထို့ကြောင့် `upstream/main` ကို ရိုးရှင်းစွာ merge လုပ်နိုင်သည်။ ### 9.2 Upstream ကို Sync လုပ်ပြီးနောက် ပုံမှန် Release အစီအစဉ် မူလ repository နှင့် sync လုပ်ပြီးနောက် အောက်ပါ အကြံပြုထားသော release အစီအစဉ်ကို လိုက်နာပါ- 1. `git fetch upstream --tags` 2. `git merge upstream/main` 3. Fork ၏ `fly.toml` ကို ပြန်လည်ရယူပါ 4. `git push origin main` 5. `flyctl deploy` 6. `flyctl status -a omniroute` 7. `flyctl logs --no-tail -a omniroute` ဤသည်မှာ လက်ရှိ project ကို `v3.4.7` သို့ အဆင့်မြှင့်တင်ရာတွင် အမှန်တကယ် အသုံးပြုခဲ့သော workflow ဖြစ်သည် (ဤနမူနာသည် ယခင် version တစ်ခုကို ရည်ညွှန်းထားပြီး လက်ရှိ အမှန်တကယ် version သည် `v3.8.0` ဖြစ်သည်)။ --- ## 10. ဖြန့်ချိပြီးနောက် စစ်ဆေးမှုများ ### 10.1 အပလီကေးရှင်းအခြေအနေကို စစ်ဆေးခြင်း ```powershell flyctl status -a omniroute ``` ### 10.2 စတင်လည်ပတ်မှု မှတ်တမ်းများကို ကြည့်ရှုခြင်း ```powershell flyctl logs --no-tail -a omniroute ``` ### 10.3 ဝဘ်ဆိုက် ဝင်ရောက်အသုံးပြုနိုင်မှုကို အတည်ပြုခြင်း ```powershell try { (Invoke-WebRequest -Uri "https://omniroute.fly.dev" -MaximumRedirection 5 -UseBasicParsing).StatusCode } catch { if ($_.Exception.Response) { $_.Exception.Response.StatusCode.value__ } else { throw } } ``` ပြန်လည်ရရှိသည့်တန်ဖိုး `200` ဖြစ်ပါက ဝဘ်ဆိုက်သည် ပုံမှန်တုံ့ပြန်နေကြောင်း ဖော်ပြသည်။ --- ## 11. အောင်မြင်မှုကို ဖော်ပြသည့် အချက်များ အောင်မြင်စွာ ဖြန့်ချိပြီးနောက် မှတ်တမ်းများတွင် အောက်ပါအကြောင်းအရာနှင့် ဆင်တူသော အချက်အလက်များကို ပြသသင့်သည်- ```text [bootstrap] Secrets persisted to: /data/server.env [DB] SQLite database ready: /data/storage.sqlite ``` အောက်ပါအချက်နှစ်ချက်သည် အလွန်အရေးကြီးသည်- - `/data/server.env` သည် runtime လျှို့ဝှက်တန်ဖိုးများကို persistent volume သို့ ရေးသားထားကြောင်း အတည်ပြုသည် - `/data/storage.sqlite` သည် database ကို persistent volume သို့ ရေးသားထားကြောင်း အတည်ပြုသည် ထိုအစား `/app/data/...` ကို တွေ့ရပါက `DATA_DIR` ကို မှားယွင်းစွာ သတ်မှတ်ထားခြင်းဖြစ်ပြီး ချက်ချင်းပြင်ဆင်ရမည်။ --- ## 12. အဖြစ်များသော ပြဿနာများ ### 12.1 `Secrets` စာမျက်နှာသည် ဗလာဖြစ်နေခြင်း ပုံမှန်အားဖြင့် အကြောင်းရင်းနှစ်ခုရှိသည်- - `flyctl secrets set` ကို မလုပ်ဆောင်ရသေးခြင်း - မတူညီသော အပလီကေးရှင်းတစ်ခုကို ကြည့်ရှုနေခြင်း (ဥပမာ `omniroute` အစား `oroute`) ### 12.2 `flyctl deploy` က `app not found` ဟု ဖော်ပြခြင်း အပလီကေးရှင်းကို ဦးစွာ ဖန်တီးပါ- ```powershell flyctl apps create omniroute ``` ### 12.3 `fly.toml` ကို Parse လုပ်ရာတွင် မအောင်မြင်ခြင်း အောက်ပါအချက်များကို စစ်ဆေးပါ- - မှတ်ချက်များထဲတွင် ပျက်ယွင်းနေသော စာလုံးများ ပါဝင်ခြင်းရှိ၊ မရှိ - TOML ၏ quote အသုံးပြုမှုနှင့် indentation မှန်ကန်ခြင်းရှိ၊ မရှိ ### 12.4 ဒေတာများ မတည်မြဲခြင်း အောက်ပါအချက်နှစ်ခုစလုံးကို အတည်ပြုပါ- - `fly.toml` တွင် `destination = '/data'` ပါဝင်ခြင်း - `DATA_DIR` ကို `/data` ဟု သတ်မှတ်ထားခြင်း ### 12.5 `INITIAL_PASSWORD` မပါဘဲ လည်ပတ်နိုင်ပါသလား? လည်ပတ်နိုင်ပါသည်။ မူလ `CHANGEME` စကားဝှက်ကို အစားထိုးအသုံးပြုမည်ဖြစ်သည်။ Production ပတ်ဝန်းကျင်တွင် backend စကားဝှက်ကို တတ်နိုင်သမျှ အမြန်ဆုံး ပြောင်းလဲရန် အကြံပြုပါသည်။ --- ## 13. ပရောဂျက်အသစ်များအတွက် ပြန်လည်အသုံးပြုခြင်း ဤစာတမ်းအတိုင်း ပရောဂျက်အသစ်တစ်ခုကို ဖြန့်ချိပါက အောက်ပါအချက်များကိုသာ ပြောင်းလဲရန် လိုအပ်သည်- 1. `fly.toml` ရှိ `app` တန်ဖိုးကို ပြောင်းလဲပါ 2. `NEXT_PUBLIC_BASE_URL` ကို ပြောင်းလဲပါ 3. `DATA_DIR=/data` ကို ဆက်လက်ထိန်းသိမ်းထားပါ 4. `API_KEY_SECRET`, `JWT_SECRET`, `MACHINE_ID_SALT` နှင့် `STORAGE_ENCRYPTION_KEY` တို့ကို အသစ်ပြန်လည်ထုတ်လုပ်ပါ 5. ပထမဆုံး ဖြန့်ချိပြီးနောက် မှတ်တမ်းများကို `/data` သို့ ရေးသားထားကြောင်း အတည်ပြုပါ ယခင်ပရောဂျက်မှ key များကို ပြန်လည်အသုံးမပြုပါနှင့်။ --- ## 14. လက်ရှိပရောဂျက်အတွက် အနည်းဆုံး Release စစ်ဆေးရန်စာရင်း နောက်ဆက်တွဲ release များအတွက် အသုံးအများဆုံး command များမှာ- ```powershell flyctl auth whoami flyctl status -a omniroute flyctl secrets list -a omniroute flyctl deploy flyctl logs --no-tail -a omniroute ``` ပုံမှန် release တစ်ခုအတွက် အဓိက command မှာ အောက်ပါတစ်ခုတည်းဖြစ်သည်- ```powershell flyctl deploy ``` ပတ်ဝန်းကျင်အသစ်တစ်ခုတွင် ပထမဆုံးအကြိမ် ဖြန့်ချိရန် အဓိကအဆင့်များမှာ- 1. `flyctl auth login` 2. `flyctl apps create omniroute` 3. `flyctl secrets set ... -a omniroute` 4. `flyctl deploy` 5. `flyctl logs --no-tail -a omniroute`