# 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) · 🇰🇭 [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) · 🇰🇪 [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) --- ეს დოკუმენტი აღწერს OmniRoute-ის Fly.io-ზე განთავსების რეალურ პროცესს და მოიცავს შემდეგ სცენარებს: - მიმდინარე პროექტის Fly.io-ზე პირველად განთავსება - კოდის შემდგომი განახლებების გამოქვეყნება - ახალი პროექტების განთავსება იმავე სამუშაო პროცესის გამოყენებით ეს სახელმძღვანელო ეფუძნება მიმდინარე პროექტისთვის შემოწმებულ და გამართულ კონფიგურაციას. აპლიკაციის სახელია `omniroute`. --- ## 1. განთავსების მიზნები - პლატფორმა: Fly.io - განთავსების მეთოდი: ადგილობრივი `flyctl`-იდან პირდაპირი გამოქვეყნება - შესრულების გარემო: რეპოზიტორიაში არსებული `Dockerfile`-ისა და `fly.toml`-ის გამოყენება - მონაცემთა მუდმივი შენახვა: `/data`-ზე დამონტაჟებული Fly Volume - წვდომის URL: `https://omniroute.fly.dev/` --- ## 2. მიმდინარე პროექტის ძირითადი კონფიგურაცია დადასტურებულია, რომ მიმდინარე რეპოზიტორიაში არსებული `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'` განსაზღვრავს მუდმივი ტომის დამონტაჟების დირექტორიას - ამ პროექტში აუცილებელია `DATA_DIR=/data`-ის დაყენება, წინააღმდეგ შემთხვევაში მონაცემთა ბაზა და გასაღებები კონტეინერის დროებით დირექტორიაში ჩაიწერება --- ## 3. წინაპირობები ### 3.1 Fly CLI-ის დაყენება Windows PowerShell: ```powershell pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex" ``` თუ დაყენების სკრიპტი თქვენს გარემოში ვერ შესრულდება, ასევე შეგიძლიათ ხელით ჩამოტვირთოთ `flyctl`-ის ბინარული ფაილი და დაამატოთ ის თქვენს `PATH`-ში. ### 3.2 თქვენს Fly ანგარიშში შესვლა ```powershell flyctl auth login ``` ### 3.3 ავტორიზაციის სტატუსის შემოწმება ```powershell flyctl auth whoami flyctl version ``` --- ## 4. მიმდინარე პროექტის პირველად განთავსება ### 4.1 კოდის კლონირება და დირექტორიაში გადასვლა ```powershell git clone https://github.com/diegosouzapw/OmniRoute.git cd OmniRoute ``` ### 4.2 აპლიკაციის სახელის დადასტურება გახსენით `fly.toml` და შეამოწმეთ შემდეგი სტრიქონი: ```toml app = 'omniroute' ``` თუ პროექტს თქვენს ახალ აპლიკაციაში ათავსებთ, შეგიძლიათ სახელი გლობალურად უნიკალური სახელით შეცვალოთ, მაგალითად: ```toml app = 'omniroute-yourname' ``` შენიშვნა: - დარწმუნდით, რომ კონსოლში ნაჩვენები აპლიკაცია ემთხვევა `fly.toml`-ში მითითებულ `app` მნიშვნელობას - თუ ადრე სხვა სახელს იყენებდით, მაგალითად `oroute`, არ აგერიოთ ის `omniroute`-ში ### 4.3 აპლიკაციის შექმნა თუ აპლიკაცია ჯერ არ არსებობს: ```powershell flyctl apps create omniroute ``` თუ აპლიკაციის სახელი შეცვალეთ, ჩაანაცვლეთ `omniroute` თქვენ მიერ არჩეული სახელით. ### 4.4 პირველი განთავსება ```powershell flyctl deploy ``` --- ## 5. აუცილებელი პარამეტრები ამ პროექტისთვის რეკომენდებულია Fly.io-ზე სულ მცირე შემდეგი პარამეტრების კონფიგურაცია. ### 5.1 შემოწმებული პარამეტრები ეს პარამეტრები გამოყენებულია მიმდინარე `omniroute` აპლიკაციის რეალური განთავსებისას: - `API_KEY_SECRET` - `DATA_DIR` - `JWT_SECRET` - `MACHINE_ID_SALT` - `NEXT_PUBLIC_BASE_URL` - `OMNIROUTE_WS_BRIDGE_SECRET` (აუცილებელია საწარმოო გარემოში — გამოიყენება WebSocket-ხიდის ავთენტიფიკაციისთვის) - `STORAGE_ENCRYPTION_KEY` ### 5.2 `INITIAL_PASSWORD`-ის შესახებ მიმდინარე პროექტში `INITIAL_PASSWORD` დაყენებული არ არის, რადგან ამ განთავსებისთვის ის საჭირო არ არის. თუ ის არ არის დაყენებული: - გაშვების ჟურნალი მიუთითებს, რომ ნაგულისხმევი პაროლია `CHANGEME` - განთავსების შემდეგ სისტემის პარამეტრებში შესვლის პაროლი რაც შეიძლება მალე უნდა შეცვალოთ თუ გსურთ, რომ ბეკენდის პაროლის ინიციალიზაცია ავტომატურად მოხდეს, მისი დამატება მოგვიანებით შეგიძლიათ: - `INITIAL_PASSWORD` --- ## 6. რეკომენდებული პარამეტრები ### 6.1 საიდუმლო მნიშვნელობების კონფიგურაცია Fly Secrets-ისათვის რეკომენდებულია შემდეგი ცვლადები: | ცვლადი | რეკომენდაცია | აღწერა | | ------------------------------ | ----------------------- | ------------------------------------------------------- | | `API_KEY_SECRET` | სავალდებულო | გამოიყენება API გასაღების გენერაციისა და ვალიდაციისთვის | | `JWT_SECRET` | სავალდებულო | გამოიყენება შესვლის სესიებისა და JWT-ის ხელმოწერისთვის | | `OMNIROUTE_WS_BRIDGE_SECRET` | სავალდებულოა წარმოებაში | WebSocket-ხიდის ავთენტიფიკაციის საიდუმლო მნიშვნელობა | | `STORAGE_ENCRYPTION_KEY` | მკაცრად რეკომენდებული | შიფრავს შენახულ სენსიტიურ კავშირის ინფორმაციას | | `MACHINE_ID_SALT` | რეკომენდებული | ქმნის სტაბილურ მოწყობილობის იდენტიფიკატორს | | `INITIAL_PASSWORD` | არასავალდებულო | პირველი განთავსებისას ადგენს ბექენდის საწყის პაროლს | | OAuth/API-ის პირადი მონაცემები | საჭიროებისამებრ | გარე პლატფორმის ავთენტიფიკაციის კონფიგურაცია | ### 6.2 რეკომენდებული მნიშვნელობები მიმდინარე პროექტისთვის | ცვლადი | რეკომენდებული მნიშვნელობა | | ---------------------- | --------------------------- | | `DATA_DIR` | `/data` | | `NEXT_PUBLIC_BASE_URL` | `https://omniroute.fly.dev` | შენიშვნები: - `DATA_DIR=/data` კრიტიკულად მნიშვნელოვანია და უნდა ემთხვეოდეს Fly Volume-ის მონტაჟის წერტილს - `NEXT_PUBLIC_BASE_URL` გამოიყენება დამგეგმავის, ფრონტენდის უკუგამოძახებებისა და მსგავსი სცენარებისთვის ### 6.3 OAuth-ის უკუგამოძახების URL-ის კონფიგურაცია თუ Fly.io-ზე განთავსებულ ვერსიაში OAuth-ზე დაფუძნებული მომწოდებლების (მაგ., Antigravity, Gemini, Cursor) ჩართვა გჭირდებათ, დარწმუნდით შემდეგ ორ პუნქტში: 1. **დააყენეთ `NEXT_PUBLIC_BASE_URL` თქვენს საჯარო HTTPS დომენზე** ```powershell flyctl secrets set NEXT_PUBLIC_BASE_URL=https://omniroute.fly.dev -a omniroute ``` თუ საკუთარ დომენს იყენებთ, ჩაანაცვლეთ ის შესაბამისი დომენით (მაგ., `https://omniroute.yourdomain.com`). 2. **მომწოდებლის კონსოლში დააკონფიგურირეთ უკუგამოძახების URL** ყველა OAuth-მომწოდებელი იყენებს ერთიან უკუგამოძახების გზას `/callback` — თითოეული მომწოდებლისთვის ცალკე უკუგამოძახების მარშრუტი არ არსებობს: ```text /callback ``` მაგალითად, Gemini-ის, Antigravity-ის, Cursor-ის ან GitLab Duo-ს მიუხედავად: - `https://omniroute.fly.dev/callback` თუ `NEXT_PUBLIC_BASE_URL` არ ემთხვევა მომწოდებელთან რეგისტრირებულ უკუგამოძახების URL-ს, OAuth-ის პროცესი ბრაუზერის გადამისამართების ეტაპზე წარუმატებელი იქნება. --- ## 7. საიდუმლო მნიშვნელობების ერთი ბრძანებით დაყენება შემდეგი ბრძანებები ქმნის უსაფრთხო შემთხვევით მნიშვნელობებს და მიმდინარე პროექტისთვის საჭირო ყველა პარამეტრს ერთი ნაბიჯით წერს Fly Secrets-ში. შენიშვნები: - არ მოიცავს `INITIAL_PASSWORD`-ს - განკუთვნილია მიმდინარე პროექტისთვის `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 ``` შენიშვნები: - `OMNIROUTE_WS_BRIDGE_SECRET` წარმოების გარემოში სავალდებულოა; მისი არარსებობა WebSocket-ხიდის ხელის ჩამორთმევის პროცესს დაარღვევს თუ საწყისი პაროლის დაყენებაც გსურთ: ```powershell flyctl secrets set INITIAL_PASSWORD=your-strong-password -a omniroute ``` --- ## 8. მიმდინარე პარამეტრების ნახვა ```powershell flyctl secrets list -a omniroute ``` თუ კონსოლში `Secrets` გვერდი მოსალოდნელ ცვლადებს არ აჩვენებს, შეამოწმეთ: - რომ გახსნილი გაქვთ `omniroute` აპლიკაცია - რომ `fly.toml`-ში `app` მნიშვნელობა ემთხვევა კონსოლში არსებულ აპლიკაციას --- ## 9. შემდგომი განახლებები და გამოშვებები კოდის განახლების შემდეგ გამოშვების პროცესი მარტივია: ```powershell git pull flyctl deploy ``` თუ კოდის შეცვლის გარეშე მხოლოდ პარამეტრების განახლება გჭირდებათ: ```powershell flyctl secrets set KEY=value -a omniroute ``` Fly ავტომატურად შეასრულებს მანქანების ეტაპობრივ განახლებას. ### 9.1 ზედა დონის რეპოზიტორიის განახლებების თვალყურის დევნება თქვენი ფორკის `fly.toml`-ის შენარჩუნებით თუ მიმდინარე რეპოზიტორია ფორკია და გსურთ განახლებების სინქრონიზაცია ზედა დონის `https://github.com/diegosouzapw/OmniRoute` რეპოზიტორიიდან, მიჰყევით ქვემოთ მოცემულ სამუშაო პროცესს. პირველ რიგში, გადაამოწმეთ თქვენი დისტანციური რეპოზიტორიები: ```powershell git remote -v ``` სულ მცირე, უნდა ხედავდეთ: - `origin`, რომელიც მიუთითებს თქვენს საკუთარ ფორკზე - `upstream`, რომელიც მიუთითებს თავდაპირველ რეპოზიტორიაზე თუ `upstream` კონფიგურირებული არ არის, დაამატეთ ის: ```powershell git remote add upstream https://github.com/diegosouzapw/OmniRoute.git ``` ზედა დონის რეპოზიტორიასთან სინქრონიზაციამდე ჩამოტვირთეთ უახლესი კომიტები და ტეგები: ```powershell git fetch upstream --tags ``` შეამოწმეთ მიმდინარე ვერსია და ზედა დონის რეპოზიტორიის ტეგები: ```powershell git describe --tags --always git show --no-patch --oneline v3.4.7 ``` > შენიშვნა: პროექტის მიმდინარე ვერსიაა `v3.8.0`. ქვემოთ `v3.4.7`-ზე მითითებები შენარჩუნებულია მხოლოდ ისტორიული მაგალითების სახით. რეალური გამოშვებებისთვის გამოიყენეთ `:latest` ან მიმდინარე ვერსიის ტეგი (მაგ., `:v3.8.0`). თუ გსურთ ზედა დონის რეპოზიტორიის უახლესი `main` შტოს შერწყმა და ამავდროულად თქვენი ფორკის `fly.toml`-ის იძულებით შენარჩუნება, მიჰყევით ამ სამუშაო პროცესს: ```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` ასინქრონებს უახლეს კოდს თავდაპირველი რეპოზიტორიიდან - `git checkout HEAD~1 -- fly.toml` აღადგენს თქვენი ფორკის საკუთარ `fly.toml`-ს შერწყმამდე არსებული მდგომარეობიდან - თუ ზედა დონის რეპოზიტორიაში `fly.toml` არ შეცვლილა, ეს ნაბიჯი არანაირ განსხვავებას არ შექმნის - თუ ზედა დონის რეპოზიტორიაში `fly.toml` შეიცვალა, ეს ნაბიჯი უზრუნველყოფს, რომ თქვენი Fly აპლიკაციის სახელი, ტომის მიერთება, რეგიონი და ფორკისთვის სპეციფიკური განთავსების სხვა კონფიგურაცია არ გადაიწეროს თუ გსურთ კონკრეტულ გამოშვების ტეგთან გასწორება (მაგ., `v3.4.7`), პირველ რიგში გადაამოწმეთ, რომ ტეგი უკვე შედის `upstream/main`-ში: ```powershell git merge-base --is-ancestor v3.4.7 upstream/main ``` წარმატებული შედეგი ნიშნავს, რომ `upstream/main` უკვე შეიცავს ამ ვერსიას; შეგიძლიათ უბრალოდ შეასრულოთ `upstream/main`-ის შერწყმა. ### 9.2 სტანდარტული გამოშვების თანმიმდევრობა ზედა დონის რეპოზიტორიასთან სინქრონიზაციის შემდეგ თავდაპირველ რეპოზიტორიასთან სინქრონიზაციის შემდეგ მიჰყევით გამოშვების ამ რეკომენდებულ თანმიმდევრობას: 1. `git fetch upstream --tags` 2. `git merge upstream/main` 3. აღადგინეთ ფორკის `fly.toml` 4. `git push origin main` 5. `flyctl deploy` 6. `flyctl status -a omniroute` 7. `flyctl logs --no-tail -a omniroute` ეს არის რეალური სამუშაო პროცესი, რომელიც გამოყენებულ იქნა მიმდინარე პროექტის `v3.4.7`-ზე განახლებისას (მაგალითი ეხება ისტორიულ ვერსიას; მიმდინარე რეალური ვერსიაა `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` ადასტურებს, რომ შესრულების გარემოს საიდუმლო მონაცემები მუდმივ ტომში იწერება - `/data/storage.sqlite` ადასტურებს, რომ მონაცემთა ბაზა მუდმივ ტომში იწერება თუ სანაცვლოდ `/app/data/...`-ს ხედავთ, `DATA_DIR` არასწორადაა კონფიგურირებული და დაუყოვნებლივ უნდა გასწორდეს. --- ## 12. გავრცელებული პრობლემები ### 12.1 `Secrets` გვერდი ცარიელია ამას, ჩვეულებრივ, ორი მიზეზი აქვს: - ჯერ არ გაგიშვიათ `flyctl secrets set` - სხვა აპლიკაციას ათვალიერებთ (მაგალითად, `oroute`-ს `omniroute`-ის ნაცვლად) ### 12.2 `flyctl deploy` აჩვენებს შეცდომას `app not found` ჯერ შექმენით აპლიკაცია: ```powershell flyctl apps create omniroute ``` ### 12.3 `fly.toml`-ის დამუშავება ვერ ხერხდება შეამოწმეთ შემდეგი: - არის თუ არა კომენტარებში დაზიანებული სიმბოლოები - სწორია თუ არა TOML-ის ბრჭყალები და შეწევა ### 12.4 მონაცემები მუდმივად არ ინახება შეამოწმეთ ორივე პირობა: - `fly.toml` შეიცავს `destination = '/data'`-ს - `DATA_DIR` დაყენებულია `/data`-ზე ### 12.5 შეუძლია თუ არა `INITIAL_PASSWORD`-ის გარეშე მუშაობა? დიახ, შეუძლია. ასეთ შემთხვევაში გამოყენებული იქნება ნაგულისხმევი პაროლი `CHANGEME`. სამუშაო გარემოში რეკომენდებულია ბეკენდის პაროლის რაც შეიძლება მალე შეცვლა. --- ## 13. ხელახლა გამოყენება ახალი პროექტებისთვის თუ ამ დოკუმენტის მიხედვით ახალ პროექტს განათავსებთ, მხოლოდ შემდეგი ელემენტების შეცვლაა საჭირო: 1. შეცვალეთ `app`-ის მნიშვნელობა `fly.toml`-ში 2. შეცვალეთ `NEXT_PUBLIC_BASE_URL` 3. შეინარჩუნეთ `DATA_DIR=/data` 4. ხელახლა დააგენერირეთ `API_KEY_SECRET`, `JWT_SECRET`, `MACHINE_ID_SALT` და `STORAGE_ENCRYPTION_KEY` 5. პირველი განთავსების შემდეგ გადაამოწმეთ, რომ ჟურნალები `/data`-ში იწერება არ გამოიყენოთ წინა პროექტის გასაღებები ხელახლა. --- ## 14. მიმდინარე პროექტის რელიზის მინიმალური საკონტროლო სია შემდგომი რელიზებისთვის ყველაზე ხშირად გამოიყენება შემდეგი ბრძანებები: ```powershell flyctl auth whoami flyctl status -a omniroute flyctl secrets list -a omniroute flyctl deploy flyctl logs --no-tail -a omniroute ``` ჩვეულებრივი რელიზისთვის ძირითადი ბრძანება უბრალოდ ესაა: ```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`