# OmniRoute Fly.io Deployment Guide (Kiswahili) 🌐 **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) · 🇲🇲 [my](../../../my/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) · 🇮🇳 [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) --- Hati hii inaeleza mchakato halisi wa kupeleka OmniRoute kwenye Fly.io, ikijumuisha hali mbili: - Kupeleka mradi wa sasa kwenye Fly.io kwa mara ya kwanza - Kuchapisha masasisho ya baadaye ya msimbo - Miradi mipya inayofuata mtiririko huo huo wa upelekaji Mwongozo huu unatokana na usanidi uliothibitishwa kufanya kazi kwa mradi wa sasa. Jina la programu ni `omniroute`. --- ## 1. Malengo ya Upelekaji - Jukwaa: Fly.io - Mbinu ya upelekaji: Uchapishaji wa moja kwa moja kwa kutumia `flyctl` ya ndani - Mazingira ya utekelezaji: Kutumia `Dockerfile` na `fly.toml` zilizopo kwenye hifadhi - Uhifadhi endelevu wa data: Fly Volume iliyowekwa kwenye `/data` - URL ya ufikiaji: `https://omniroute.fly.dev/` --- ## 2. Usanidi Muhimu wa Mradi wa Sasa Imethibitishwa kuwa `fly.toml` katika hifadhi ya sasa ina vipengele muhimu vifuatavyo: ```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" ``` Maelezo: - `app = 'omniroute'` hubainisha programu ya Fly inayolengwa na upelekaji - `destination = '/data'` hubainisha saraka ya kupachika hifadhi endelevu - Mradi huu lazima uweke `DATA_DIR=/data`, vinginevyo hifadhidata na funguo zitaandikwa kwenye saraka ya muda ya kontena --- ## 3. Mahitaji ya Awali ### 3.1 Kusakinisha Fly CLI Windows PowerShell: ```powershell pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex" ``` Ikiwa hati ya usakinishaji itashindwa katika mazingira yako, unaweza pia kupakua faili ya kutekelezeka ya `flyctl` mwenyewe na kuiongeza kwenye `PATH` yako. ### 3.2 Kuingia kwenye Akaunti Yako ya Fly ```powershell flyctl auth login ``` ### 3.3 Kuthibitisha Hali ya Kuingia ```powershell flyctl auth whoami flyctl version ``` --- ## 4. Upelekaji wa Kwanza wa Mradi wa Sasa ### 4.1 Nakili Msimbo na Uingie kwenye Saraka ```powershell git clone https://github.com/diegosouzapw/OmniRoute.git cd OmniRoute ``` ### 4.2 Thibitisha Jina la Programu Fungua `fly.toml` na uthibitishe mstari ufuatao: ```toml app = 'omniroute' ``` Ikiwa unapeleka kwenye programu yako mpya, unaweza kulibadilisha kuwa jina la kipekee kimataifa, kwa mfano: ```toml app = 'omniroute-yourname' ``` Kumbuka: - Hakikisha programu unayoiona kwenye dashibodi inalingana na thamani ya `app` katika `fly.toml` - Ikiwa hapo awali ulitumia jina tofauti, kama vile `oroute`, usilichanganye na `omniroute` ### 4.3 Unda Programu Ikiwa programu bado haipo: ```powershell flyctl apps create omniroute ``` Ikiwa ulibadilisha jina la programu, badilisha `omniroute` na jina ulilochagua. ### 4.4 Upelekaji wa Kwanza ```powershell flyctl deploy ``` --- ## 5. Vigezo Vinavyohitajika Mradi huu unapendekeza kusanidi angalau vigezo vifuatavyo kwenye Fly.io. ### 5.1 Vigezo Vilivyothibitishwa Vigezo hivi vimetumika katika upelekaji halisi kwenye programu ya sasa ya `omniroute`: - `API_KEY_SECRET` - `DATA_DIR` - `JWT_SECRET` - `MACHINE_ID_SALT` - `NEXT_PUBLIC_BASE_URL` - `OMNIROUTE_WS_BRIDGE_SECRET` (inahitajika katika mazingira ya uzalishaji — hutumika kwa uthibitishaji wa daraja la WebSocket) - `STORAGE_ENCRYPTION_KEY` ### 5.2 Kuhusu `INITIAL_PASSWORD` Mradi wa sasa hauweki `INITIAL_PASSWORD` kwa sababu upelekaji huu hauihitaji. Ikiwa haijawekwa: - Kumbukumbu ya uanzishaji itaonyesha kuwa nenosiri chaguo-msingi ni `CHANGEME` - Unapaswa kubadilisha nenosiri la kuingia katika mipangilio ya mfumo haraka iwezekanavyo baada ya upelekaji Ikiwa unataka kuanzisha nenosiri la mfumo wa nyuma bila usimamizi wa moja kwa moja, unaweza kuliongeza baadaye: - `INITIAL_PASSWORD` --- ## 6. Vigezo Vinavyopendekezwa ### 6.1 Usanidi wa Siri Vigezo vifuatavyo vinapendekezwa kwa Fly Secrets: | Kigezo | Pendekezo | Maelezo | | ----------------------------------- | ------------------------------ | ------------------------------------------------------------------ | | `API_KEY_SECRET` | Kinahitajika | Hutumika kuzalisha na kuthibitisha Ufunguo wa API | | `JWT_SECRET` | Kinahitajika | Hutumika kwa vipindi vya kuingia na kutia saini JWT | | `OMNIROUTE_WS_BRIDGE_SECRET` | Kinahitajika katika uzalishaji | Siri ya uthibitishaji wa daraja la WebSocket | | `STORAGE_ENCRYPTION_KEY` | Kinapendekezwa sana | Husimba taarifa nyeti za muunganisho zilizohifadhiwa | | `MACHINE_ID_SALT` | Kinapendekezwa | Huzalisha kitambulisho thabiti cha mashine | | `INITIAL_PASSWORD` | Si lazima | Huweka nenosiri la awali la backend wakati wa usambazaji wa kwanza | | Vitambulisho vya siri vya OAuth/API | Kulingana na mahitaji | Usanidi wa uthibitishaji wa jukwaa la nje | ### 6.2 Thamani Zinazopendekezwa kwa Mradi wa Sasa | Kigezo | Thamani Inayopendekezwa | | ---------------------- | --------------------------- | | `DATA_DIR` | `/data` | | `NEXT_PUBLIC_BASE_URL` | `https://omniroute.fly.dev` | Maelezo: - `DATA_DIR=/data` ni muhimu sana na lazima ilingane na sehemu ya kupachikia Fly Volume - `NEXT_PUBLIC_BASE_URL` hutumiwa na kipanga ratiba, callbacks za frontend, na hali zinazofanana ### 6.3 Usanidi wa URL ya Callback ya OAuth Ikiwa unahitaji kuwezesha watoa huduma wanaotegemea OAuth (k.m. Antigravity, Gemini, Cursor) kwenye usambazaji wa Fly.io, hakikisha mambo mawili yafuatayo: 1. **Weka `NEXT_PUBLIC_BASE_URL` kuwa kikoa chako cha umma cha HTTPS** ```powershell flyctl secrets set NEXT_PUBLIC_BASE_URL=https://omniroute.fly.dev -a omniroute ``` Ikiwa unatumia kikoa maalum, kibadilishe kwa kikoa husika (k.m. `https://omniroute.yourdomain.com`). 2. **Sanidi URL ya callback kwenye dashibodi ya mtoa huduma** Watoa huduma wote wa OAuth hutumia njia moja ya callback `/callback` — HAKUNA njia tofauti ya callback kwa kila mtoa huduma: ```text /callback ``` Kwa mfano, iwe ni Gemini, Antigravity, Cursor, au GitLab Duo: - `https://omniroute.fly.dev/callback` Ikiwa `NEXT_PUBLIC_BASE_URL` hailingani na URL ya callback iliyosajiliwa kwa mtoa huduma, mtiririko wa OAuth utashindwa katika hatua ya kuelekeza upya kivinjari. --- ## 7. Usanidi wa Siri kwa Amri Moja Amri zifuatazo huzalisha thamani salama za nasibu na kuandika vigezo vyote vinavyohitajika kwa mradi wa sasa kwenye Fly Secrets kwa hatua moja. Maelezo: - Haijumuishi `INITIAL_PASSWORD` - Imekusudiwa kwa mradi wa sasa `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 ``` Kwenye Linux / macOS, unaweza pia kutumia `openssl rand -hex 32`: ```bash flyctl secrets set OMNIROUTE_WS_BRIDGE_SECRET=$(openssl rand -hex 32) -a omniroute ``` Maelezo: - `OMNIROUTE_WS_BRIDGE_SECRET` inahitajika katika uzalishaji; kutokuwepo kwake kutavuruga mchakato wa kuanzisha muunganisho wa daraja la WebSocket Ikiwa pia unataka kuweka nenosiri la awali: ```powershell flyctl secrets set INITIAL_PASSWORD=your-strong-password -a omniroute ``` --- ## 8. Kuangalia Vigezo vya Sasa ```powershell flyctl secrets list -a omniroute ``` Ikiwa ukurasa wa `Secrets` katika dashibodi hauonyeshi vigezo vinavyotarajiwa, hakikisha: - Kwamba unaangalia programu ya `omniroute` - Kwamba thamani ya `app` katika `fly.toml` inalingana na programu iliyo kwenye dashibodi --- ## 9. Masasisho na Matoleo Yanayofuata Baada ya masasisho ya msimbo, mchakato wa kutoa toleo ni rahisi: ```powershell git pull flyctl deploy ``` Ikiwa unahitaji tu kusasisha vigezo bila kubadilisha msimbo: ```powershell flyctl secrets set KEY=value -a omniroute ``` Fly itafanya kiotomatiki sasisho la hatua kwa hatua la mashine. ### 9.1 Kufuatilia Masasisho ya Hifadhi ya Upstream Huku Ukihifadhi `fly.toml` ya Fork Yako Ikiwa hifadhi ya sasa ni fork na unataka kusawazisha masasisho kutoka upstream `https://github.com/diegosouzapw/OmniRoute`, fuata mtiririko wa kazi ulio hapa chini. Kwanza, thibitisha remote zako: ```powershell git remote -v ``` Unapaswa kuona angalau: - `origin` ikielekeza kwenye fork yako mwenyewe - `upstream` ikielekeza kwenye hifadhi asili Ikiwa `upstream` haijasanidiwa, iongeze: ```powershell git remote add upstream https://github.com/diegosouzapw/OmniRoute.git ``` Kabla ya kusawazisha na upstream, pakua commit na tag za hivi karibuni: ```powershell git fetch upstream --tags ``` Angalia toleo la sasa na tag za upstream: ```powershell git describe --tags --always git show --no-patch --oneline v3.4.7 ``` > Kumbuka: Toleo la sasa la mradi ni `v3.8.0`. Marejeleo ya `v3.4.7` yaliyo hapa chini yamehifadhiwa kama mifano ya kihistoria pekee. Kwa matoleo halisi, tumia `:latest` au tag ya toleo la sasa (k.m. `:v3.8.0`). Ikiwa unataka kuunganisha `main` ya hivi karibuni ya upstream huku ukihifadhi kwa lazima `fly.toml` ya fork yako, fuata mtiririko huu wa kazi: ```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 ``` Maelezo: - `git merge upstream/main` husawazisha msimbo wa hivi karibuni kutoka hifadhi asili - `git checkout HEAD~1 -- fly.toml` hurejesha `fly.toml` ya fork yako kutoka hali ya kabla ya muunganisho - Ikiwa upstream haikubadilisha `fly.toml`, hatua hii haitaleta tofauti zozote - Ikiwa upstream ilibadilisha `fly.toml`, hatua hii huhakikisha kwamba jina la programu yako ya Fly, mount ya volume, region, na usanidi mwingine wa deployment unaohusu fork yako hauandikwi juu Ikiwa unataka kulandanisha na tag maalum ya toleo (k.m. `v3.4.7`), kwanza thibitisha kwamba tag hiyo tayari imejumuishwa katika `upstream/main`: ```powershell git merge-base --is-ancestor v3.4.7 upstream/main ``` Matokeo yenye mafanikio yanamaanisha kwamba `upstream/main` tayari ina toleo hilo; unaweza kuunganisha `upstream/main` moja kwa moja. ### 9.2 Mfuatano wa Kawaida wa Utoaji Baada ya Kusawazisha Upstream Baada ya kusawazisha na hifadhi asili, fuata mpangilio huu unaopendekezwa wa utoaji: 1. `git fetch upstream --tags` 2. `git merge upstream/main` 3. Rejesha `fly.toml` ya fork 4. `git push origin main` 5. `flyctl deploy` 6. `flyctl status -a omniroute` 7. `flyctl logs --no-tail -a omniroute` Huu ndio mtiririko halisi wa kazi uliotumika wakati wa kusasisha mradi wa sasa hadi `v3.4.7` (mfano huo unarejelea toleo la kihistoria; toleo halisi la sasa ni `v3.8.0`). --- ## 10. Ukaguzi Baada ya Usambazaji ### 10.1 Angalia Hali ya Programu ```powershell flyctl status -a omniroute ``` ### 10.2 Tazama Kumbukumbu za Uanzishaji ```powershell flyctl logs --no-tail -a omniroute ``` ### 10.3 Thibitisha Ufikiaji wa Tovuti ```powershell try { (Invoke-WebRequest -Uri "https://omniroute.fly.dev" -MaximumRedirection 5 -UseBasicParsing).StatusCode } catch { if ($_.Exception.Response) { $_.Exception.Response.StatusCode.value__ } else { throw } } ``` Thamani inayorejeshwa ya `200` inaonyesha kuwa tovuti inajibu kama kawaida. --- ## 11. Viashiria vya Mafanikio Baada ya usambazaji uliofanikiwa, kumbukumbu zinapaswa kuonyesha maudhui yanayofanana na: ```text [bootstrap] Secrets persisted to: /data/server.env [DB] SQLite database ready: /data/storage.sqlite ``` Mambo haya mawili ni muhimu: - `/data/server.env` inathibitisha kuwa siri za wakati wa utekelezaji zimeandikwa kwenye hifadhi endelevu - `/data/storage.sqlite` inathibitisha kuwa hifadhidata imeandikwa kwenye hifadhi endelevu Ukiona `/app/data/...` badala yake, `DATA_DIR` imesanidiwa kimakosa na lazima irekebishwe mara moja. --- ## 12. Matatizo ya Kawaida ### 12.1 Ukurasa wa `Secrets` Hauna Maudhui Kwa kawaida kuna sababu mbili: - Bado hujaendesha `flyctl secrets set` - Unatazama programu tofauti (kwa mfano, `oroute` badala ya `omniroute`) ### 12.2 `flyctl deploy` Inaripoti `app not found` Unda programu kwanza: ```powershell flyctl apps create omniroute ``` ### 12.3 Uchanganuzi wa `fly.toml` Unashindwa Angalia mambo yafuatayo: - Ikiwa kuna herufi zilizoharibika kwenye maoni - Ikiwa matumizi ya alama za kunukuu na ujongezaji wa TOML ni sahihi ### 12.4 Data Haihifadhiwi kwa Kudumu Thibitisha mambo yote mawili yafuatayo: - `fly.toml` ina `destination = '/data'` - `DATA_DIR` imewekwa kuwa `/data` ### 12.5 Je, Inaweza Kuendeshwa Bila `INITIAL_PASSWORD`? Ndiyo, inaweza kuendeshwa. Itatumia nenosiri chaguomsingi la `CHANGEME`. Inapendekezwa kubadilisha nenosiri la backend haraka iwezekanavyo katika mazingira ya uzalishaji. --- ## 13. Kutumia Tena kwa Miradi Mipya Ikiwa unasambaza mradi mpya kwa kufuata hati hii, unahitaji kubadilisha vipengee hivi pekee: 1. Badilisha thamani ya `app` katika `fly.toml` 2. Badilisha `NEXT_PUBLIC_BASE_URL` 3. Dumisha `DATA_DIR=/data` 4. Tengeneza upya `API_KEY_SECRET`, `JWT_SECRET`, `MACHINE_ID_SALT`, na `STORAGE_ENCRYPTION_KEY` 5. Baada ya usambazaji wa kwanza, thibitisha kuwa kumbukumbu zinaandikwa kwenye `/data` Usitumie tena funguo kutoka kwenye mradi uliopita. --- ## 14. Orodha Fupi ya Ukaguzi wa Toleo kwa Mradi wa Sasa Amri zinazotumiwa mara nyingi zaidi kwa matoleo yanayofuata ni: ```powershell flyctl auth whoami flyctl status -a omniroute flyctl secrets list -a omniroute flyctl deploy flyctl logs --no-tail -a omniroute ``` Kwa toleo la kawaida, amri kuu ni: ```powershell flyctl deploy ``` Kwa usambazaji wa mara ya kwanza katika mazingira mapya, hatua kuu ni: 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`