O‘rnatishdan
birinchi deploy’gacha.

Kompyuteringizni tayyorlang, serveringizni ulang va loyihangizni ishga tushiring. Barcha qadamlar bir joyda.

CLI v0.1.0
01

Boshlashdan oldin

#

abzctl — Git repozitoriydagi loyihani SSH orqali o‘z VPS serveringizga chiqaradigan CLI. Docker Compose, Dockerfile yoki Railpack orqali ilova build qilinadi. Domen tanlasangiz, Caddy orqali HTTPS sozlanadi.

01 / KOMPYUTER

Linux, macOS yoki Windows

Git va Python 3.9+. O‘rnatuvchi yetishmayotgan Python’ni ayrim tizimlarda o‘zi o‘rnata oladi.

02 / SERVER

Ubuntu yoki Debian VPS

SSH ulanishi, root yoki sudo huquqi va internetga chiqish imkoniyati kerak.

Qo‘llanmadagi 203.0.113.10, app.example.com va repo manzillari namuna. Ularni o‘z qiymatlaringizga almashtiring.

02

Linux’da o‘rnatish

#

Terminalni oching. Avval git --version va python3 --version bilan dasturlarni tekshiring. Git bo‘lmasa, distributivingiz paket menejeri orqali o‘rnating.

TERMINAL
git clone https://github.com/akbarkhojayev/abzctl.git
cd abzctl
bash install.sh

O‘rnatuvchi ~/.abzctl/venv virtual muhitini yaratadi va ~/.local/bin/abzctl buyrug‘ini tayyorlaydi. Debian/Ubuntu’da Python yoki venv yetishmasa, ularni o‘rnatish uchun sudo so‘ralishi mumkin.

Terminalni yopib qayta oching, so‘ng tekshiring:

TERMINAL
abzctl --version
abzctl --help
03

macOS’da o‘rnatish

#

Git va Python 3.9+ o‘rnatilgan bo‘lsin. Versiyalarni git --version va python3 --version bilan tekshiring. Homebrew ishlatsangiz, yetishmayotgan Python’ni quyidagicha o‘rnatishingiz mumkin:

TERMINAL
brew install python
TERMINAL
git clone https://github.com/akbarkhojayev/abzctl.git
cd abzctl
bash install.sh

Yangi terminal oynasini oching va abzctl --version bajaring. macOS’da o‘rnatuvchi Python’ni avtomatik o‘rnatmaydi; Python oldindan mavjud bo‘lishi kerak.

04

Windows’da o‘rnatish

#

Git o‘rnating va PowerShell’ni oching. Repo’ni yuklab, o‘rnatuvchini ishga tushiring:

POWERSHELL
git clone https://github.com/akbarkhojayev/abzctl.git
cd abzctl
.\install.bat

Yoki yuklab olingan repo ichidagi install.bat faylini ikki marta bosing. Python topilmasa, o‘rnatuvchi winget orqali o‘rnatishga harakat qiladi. winget bo‘lmasa, Python 3.9+ ni o‘zingiz o‘rnating.

Yangi PowerShell oynasini oching:

POWERSHELL
abzctl --version
abzctl --help

O‘rnatish joyi: %USERPROFILE%\.abzctl\venv. Buyruq yorlig‘i %USERPROFILE%\.abzctl\bin orqali PATH’ga qo‘shiladi.

05

Server va SSH ulanishi

#

Serveringizga birinchi marta oddiy SSH orqali ulaning. Ko‘rsatilgan fingerprint’ni server provayderi ma’lumoti bilan solishtiring va tekshirgandan keyin kalitni qabul qiling.

TERMINAL
ssh -p 22 root@203.0.113.10

Deploy boshlamasdan server holatini tekshiring:

TERMINAL
abzctl check-server -h 203.0.113.10 -u root -p 22

SSH kaliti bilan:

TERMINAL
abzctl check-server -h 203.0.113.10 -u deploy --key-file ~/.ssh/id_ed25519

Kalit orqali kirilgan root bo‘lmagan foydalanuvchi uchun provisioning paytida parolsiz sudo kerak bo‘lishi mumkin. Sudo parolini ABZCTL_PASSWORD orqali berish ham mumkin. SSH parollari profilga saqlanmaydi.

06

Birinchi deploy

#

Eng oson usul — parametrsiz ishga tushirish:

TERMINAL
abzctl
  1. Server IP manzili, foydalanuvchi, SSH port va kirish usulini kiriting.
  2. GitHub yoki GitLab repo havolasini bering.
  3. Kerakli muhit qiymatlarini to‘ldiring; domen ulashni tanlang.
  4. Rejani tasdiqlang va build tugashini kuting.

Repo odatda serverdagi /var/www/<loyiha> papkasiga yuklanadi. CLI loyihani tekshiradi, kerakli dasturlarni o‘rnatadi va konteynerlarni ishga tushiradi.

TERMINAL
abzctl deploy -h 203.0.113.10 \
  -r https://github.com/user/my-app.git \
  --name my-app -d app.example.com
Repo ichidaBuild usuli
compose.yaml, compose.yml yoki docker-compose fayllariMavjud Compose ishlatiladi.
DockerfileDockerfile build qilinadi; EXPOSE orqali port aniqlashga harakat qilinadi.
Ikkalasi ham yo‘qRailpack orqali qo‘llab-quvvatlanadigan loyiha turi aniqlanadi.

Mavjud Compose konfiguratsiyasi bo‘lsa, port, servis va restart sozlamalarini unda to‘g‘ri berish sizning zimmangizda. Bir nechta published port topilsa, --app-port bilan asosiy HTTP portni tanlang.

07

.env va maxfiy qiymatlar

#

Haqiqiy .env faylini Git’ga yubormang. Repo’da kerakli sozlamalar uchun .env.example namunasini saqlang:

.ENV.EXAMPLE
BOT_TOKEN=
SECRET_KEY=
DATABASE_URL=

abzctl namuna va koddagi qo‘llab-quvvatlanadigan muhit chaqiruvlaridan qiymatlarni aniqlashga harakat qiladi. Ayrim maxfiy kalitlar avtomatik yaratiladi; tashqi tokenlarni o‘zingiz kiritasiz. Aniqlanmagan sozlamalarni qo‘lda berish kerak.

TERMINAL
abzctl deploy -h 203.0.113.10 \
  -r https://github.com/user/my-app.git \
  --env APP_ENV=production --env DEBUG=false

--env mavjud server .env faylidagi tegishli qiymatni ham yangilaydi. Boshqa qiymatlar saqlanadi. Maxfiy qiymatni argumentga yozmaslik uchun lokal muhit o‘zgaruvchisidan foydalanish mumkin:

BASH / ZSH
export ABZCTL_ENV_BOT_TOKEN='YOUR_BOT_TOKEN'
abzctl deploy -h 203.0.113.10 -r https://github.com/user/bot.git -y
unset ABZCTL_ENV_BOT_TOKEN

Serverdagi .env va .abzctl/services.json fayllari 600 ruxsat bilan yoziladi. Server, zaxira nusxalar va ularga kirish huquqlarini o‘zingiz boshqarasiz.

08

Domen va HTTPS

#
  1. Domen provayderingizda A-rekord yarating: app.example.com → SERVER_IP.
  2. Server va bulut provayderi firewall’ida TCP 80 va 443 portlarini oching.
  3. Deploy’da domenni bering yoki interaktiv so‘rovda kiriting.
TERMINAL
abzctl deploy -h 203.0.113.10 \
  -r https://github.com/user/my-app.git \
  -d app.example.com

Caddy domenni lokal ilova portiga yo‘naltiradi va sertifikatni avtomatik olishga harakat qiladi. DNS hali yangilanmagan bo‘lsa, HTTPS darhol ochilmasligi mumkin.

09

Telegram bot va fon jarayonlari

#

Generatsiya qilinadigan loyihalarda aiogram, telebot, telegraf, grammy kabi qo‘llab-quvvatlanadigan kutubxonalar topilsa, loyiha worker sifatida ishlatiladi. Bunda HTTP port va domen talab qilinmaydi.

TERMINAL
abzctl deploy -h 203.0.113.10 \
  -r https://github.com/user/my-bot.git --name my-bot

Token so‘ralganda kiriting. Python botda requirements.txt bo‘lmasa, importlardan kutubxonalarni aniqlashga harakat qilinadi. Ishonchli natija uchun requirements.txt ni o‘zingiz saqlang.

O‘z Compose faylingiz bo‘lsa, bot aniqlash va generatsiya qilingan worker oqimi avtomatik qo‘llanmaydi; Compose servislaringizni o‘zingiz sozlang.

10

Ma’lumotlar bazalari

#

Generatsiya qilinadigan loyihalarda kutubxonalar va konfiguratsiyaga qarab kerakli servislar taklif qilinadi. Mavjud Compose bo‘lsa, uning bazalarini o‘zingiz boshqarasiz.

ServisAniqlash misollariUlanish qiymatlari
PostgreSQLpg, psycopg, asyncpg, Prisma PostgreSQLDATABASE_URL, PG*, DB_*
MySQLmysql2, pymysql, mysqlclientDATABASE_URL, MYSQL_*, DB_*
MongoDBmongoose, pymongo, motorMONGODB_URI, MONGO_URL
Redisredis, ioredis, bullmqREDIS_URL, REDIS_HOST

Kerakli parollar avtomatik yaratiladi. Servis rekvizitlari /var/www/<loyiha>/.abzctl/services.json ichida saqlanadi. abzctl yaratgan baza ulanish qiymatlari generatsiya qilingan konteyner muhitida ustun turadi.

11

Yangilash va private repo

#

Ilova kodini yangilash

Kodingizni Git’ga push qiling va terminalda yana abzctl bajaring. Oxirgi muvaffaqiyatli deploy’ni yangilash taklif qilinadi.

TERMINAL
abzctl

abzctl’ning o‘zini yangilash

abzctl klonlangan lokal papkada yangi kodni olib, o‘rnatuvchini qayta bajaring:

LINUX / MACOS
cd /path/to/abzctl
git pull --ff-only
bash install.sh
WINDOWS / POWERSHELL
cd C:\path\to\abzctl
git pull --ff-only
.\install.bat

Private repozitoriy

Deploy qilinadigan serverda Git hosting uchun SSH deploy key va hostning known_hosts yozuvini sozlang. Git amallari lokal kompyuteringizdan emas, serverdan bajariladi.

TERMINAL
abzctl deploy -h 203.0.113.10 \
  -r git@github.com:user/private-app.git --branch main
12

Buyruqlar va CI

#

Barcha parametrlarni terminaldan ko‘ring:

TERMINAL
abzctl --help
abzctl deploy --help
abzctl check-server --help
FlagVazifasi
--host, -hServer IP yoki host nomi.
--user, -uSSH foydalanuvchisi; odatda root.
--port, -pSSH port; odatda 22.
--key-file, -kLokal SSH private key yo‘li.
--passwordSSH/sudo paroli; muhit orqali berish uchun ABZCTL_PASSWORD.
--key-passphraseShifrlangan kalit paroli; ABZCTL_KEY_PASSPHRASE ham ishlatiladi.
--repo, -rGit repo havolasi.
--branch, -bGit branch.
--nameLoyiha nomi; 1–63 belgi, kichik harf/raqam/_/-, harf yoki raqam bilan boshlansin.
--domain, -dIlova domeni.
--app-portHostdagi HTTP port.
--envNOM=QIYMAT; takrorlash mumkin.
--skip-provisionDasturlarni o‘rnatish bosqichlarini o‘tkazish; oldindan tayyor server uchun.
--yes, -yInteraktiv savollarni o‘chirish.
--verbose, -vMasofaviy buyruqlar chiqishini batafsil ko‘rsatish.

CI / skript uchun namuna

SSH kaliti va tekshirilgan known_hosts yozuvini CI muhitida tayyorlang. Maxfiy qiymatlarni CI’ning secrets mexanizmi orqali muhitga uzating.

TERMINAL
abzctl deploy -h 203.0.113.10 \
  -r https://github.com/user/my-app.git \
  --key-file ~/.ssh/id_ed25519 \
  --name my-app -d app.example.com -y

Majburiy qiymat yetishmasa yoki deploy tekshiruvi muvaffaqiyatsiz bo‘lsa, buyruq xato kodi bilan tugaydi. -y rejimida yetishmayotgan token so‘ralmaydi.

13

Muammolarni hal qilish

#
MuammoTekshirish
abzctl: command not foundTerminalni qayta oching. Linux/macOS: ~/.local/bin; Windows: %USERPROFILE%\.abzctl\bin PATH’da bo‘lsin.
SSH kaliti topilmadi yoki o‘zgarganOddiy ssh bilan ulaning, server fingerprint’ini tekshiring. --key-file yo‘li mavjudligini tekshiring.
Permission denied / sudoSSH foydalanuvchi, kalit va sudo huquqlarini tekshiring. check-server orqali holatni oling.
Private repo klonlanmadiServerdagi deploy key, Git host known_hosts va repo o‘qish huquqini tekshiring.
Loyiha turi aniqlanmadiRepo’ga Dockerfile yoki Compose qo‘shing.
Ilova javob bermadiLoglar, PORT qiymati va konteyner ichidagi 0.0.0.0 tinglash manzilini tekshiring.
Bir nechta port topildi--app-port bilan asosiy host HTTP portini aniq bering.
HTTPS ochilmayaptiDNS A-rekord, 80/443 portlari va Caddy holatini tekshiring.
Bot to‘xtab qolyaptiToken, requirements.txt va konteyner loglarini tekshiring.
TERMINAL
abzctl check-server -h 203.0.113.10
abzctl deploy -h 203.0.113.10 -r https://github.com/user/my-app.git -v

Serverda loglarni ko‘rish

Quyidagi buyruq abzctl yaratgan Compose uchun. Loyiha nomini almashtiring:

TERMINAL
ssh root@203.0.113.10
cd /var/www/my-app
sudo docker compose -p my-app -f .abzctl/compose.yaml logs --tail 100 -f

O‘z Compose faylingiz bo‘lsa, -f qiymatini unga moslang, masalan -f compose.yaml. Loglarda maxfiy qiymatlar bo‘lishi mumkin; ulashishdan oldin tekshiring.

Deploy qilishga tayyormisiz?

Terminalni oching va abzctl bajaring.

Birinchi deploy’ga qaytish ↗