Linux, macOS yoki Windows
Git va Python 3.9+. O‘rnatuvchi yetishmayotgan Python’ni ayrim tizimlarda o‘zi o‘rnata oladi.
Kompyuteringizni tayyorlang, serveringizni ulang va loyihangizni ishga tushiring. Barcha qadamlar bir joyda.
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.
Git va Python 3.9+. O‘rnatuvchi yetishmayotgan Python’ni ayrim tizimlarda o‘zi o‘rnata oladi.
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.
Terminalni oching. Avval git --version va python3 --version bilan dasturlarni tekshiring. Git bo‘lmasa, distributivingiz paket menejeri orqali o‘rnating.
git clone https://github.com/akbarkhojayev/abzctl.git
cd abzctl
bash install.shO‘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:
abzctl --version
abzctl --helpGit 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:
brew install pythongit clone https://github.com/akbarkhojayev/abzctl.git
cd abzctl
bash install.shYangi terminal oynasini oching va abzctl --version bajaring. macOS’da o‘rnatuvchi Python’ni avtomatik o‘rnatmaydi; Python oldindan mavjud bo‘lishi kerak.
Git o‘rnating va PowerShell’ni oching. Repo’ni yuklab, o‘rnatuvchini ishga tushiring:
git clone https://github.com/akbarkhojayev/abzctl.git
cd abzctl
.\install.batYoki 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:
abzctl --version
abzctl --helpO‘rnatish joyi: %USERPROFILE%\.abzctl\venv. Buyruq yorlig‘i %USERPROFILE%\.abzctl\bin orqali PATH’ga qo‘shiladi.
Serveringizga birinchi marta oddiy SSH orqali ulaning. Ko‘rsatilgan fingerprint’ni server provayderi ma’lumoti bilan solishtiring va tekshirgandan keyin kalitni qabul qiling.
ssh -p 22 root@203.0.113.10Deploy boshlamasdan server holatini tekshiring:
abzctl check-server -h 203.0.113.10 -u root -p 22SSH kaliti bilan:
abzctl check-server -h 203.0.113.10 -u deploy --key-file ~/.ssh/id_ed25519Kalit 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.
Eng oson usul — parametrsiz ishga tushirish:
abzctlRepo odatda serverdagi /var/www/<loyiha> papkasiga yuklanadi. CLI loyihani tekshiradi, kerakli dasturlarni o‘rnatadi va konteynerlarni ishga tushiradi.
abzctl deploy -h 203.0.113.10 \
-r https://github.com/user/my-app.git \
--name my-app -d app.example.com| Repo ichida | Build usuli |
|---|---|
compose.yaml, compose.yml yoki docker-compose fayllari | Mavjud Compose ishlatiladi. |
Dockerfile | Dockerfile build qilinadi; EXPOSE orqali port aniqlashga harakat qilinadi. |
| Ikkalasi ham yo‘q | Railpack 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.
Haqiqiy .env faylini Git’ga yubormang. Repo’da kerakli sozlamalar uchun .env.example namunasini saqlang:
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.
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:
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_TOKENServerdagi .env va .abzctl/services.json fayllari 600 ruxsat bilan yoziladi. Server, zaxira nusxalar va ularga kirish huquqlarini o‘zingiz boshqarasiz.
app.example.com → SERVER_IP.abzctl deploy -h 203.0.113.10 \
-r https://github.com/user/my-app.git \
-d app.example.comCaddy domenni lokal ilova portiga yo‘naltiradi va sertifikatni avtomatik olishga harakat qiladi. DNS hali yangilanmagan bo‘lsa, HTTPS darhol ochilmasligi mumkin.
Generatsiya qilinadigan loyihalarda aiogram, telebot, telegraf, grammy kabi qo‘llab-quvvatlanadigan kutubxonalar topilsa, loyiha worker sifatida ishlatiladi. Bunda HTTP port va domen talab qilinmaydi.
abzctl deploy -h 203.0.113.10 \
-r https://github.com/user/my-bot.git --name my-botToken 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.
Generatsiya qilinadigan loyihalarda kutubxonalar va konfiguratsiyaga qarab kerakli servislar taklif qilinadi. Mavjud Compose bo‘lsa, uning bazalarini o‘zingiz boshqarasiz.
| Servis | Aniqlash misollari | Ulanish qiymatlari |
|---|---|---|
| PostgreSQL | pg, psycopg, asyncpg, Prisma PostgreSQL | DATABASE_URL, PG*, DB_* |
| MySQL | mysql2, pymysql, mysqlclient | DATABASE_URL, MYSQL_*, DB_* |
| MongoDB | mongoose, pymongo, motor | MONGODB_URI, MONGO_URL |
| Redis | redis, ioredis, bullmq | REDIS_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.
Kodingizni Git’ga push qiling va terminalda yana abzctl bajaring. Oxirgi muvaffaqiyatli deploy’ni yangilash taklif qilinadi.
abzctlabzctl klonlangan lokal papkada yangi kodni olib, o‘rnatuvchini qayta bajaring:
cd /path/to/abzctl
git pull --ff-only
bash install.shcd C:\path\to\abzctl
git pull --ff-only
.\install.batDeploy qilinadigan serverda Git hosting uchun SSH deploy key va hostning known_hosts yozuvini sozlang. Git amallari lokal kompyuteringizdan emas, serverdan bajariladi.
abzctl deploy -h 203.0.113.10 \
-r git@github.com:user/private-app.git --branch mainBarcha parametrlarni terminaldan ko‘ring:
abzctl --help
abzctl deploy --help
abzctl check-server --help| Flag | Vazifasi |
|---|---|
--host, -h | Server IP yoki host nomi. |
--user, -u | SSH foydalanuvchisi; odatda root. |
--port, -p | SSH port; odatda 22. |
--key-file, -k | Lokal SSH private key yo‘li. |
--password | SSH/sudo paroli; muhit orqali berish uchun ABZCTL_PASSWORD. |
--key-passphrase | Shifrlangan kalit paroli; ABZCTL_KEY_PASSPHRASE ham ishlatiladi. |
--repo, -r | Git repo havolasi. |
--branch, -b | Git branch. |
--name | Loyiha nomi; 1–63 belgi, kichik harf/raqam/_/-, harf yoki raqam bilan boshlansin. |
--domain, -d | Ilova domeni. |
--app-port | Hostdagi HTTP port. |
--env | NOM=QIYMAT; takrorlash mumkin. |
--skip-provision | Dasturlarni o‘rnatish bosqichlarini o‘tkazish; oldindan tayyor server uchun. |
--yes, -y | Interaktiv savollarni o‘chirish. |
--verbose, -v | Masofaviy buyruqlar chiqishini batafsil ko‘rsatish. |
SSH kaliti va tekshirilgan known_hosts yozuvini CI muhitida tayyorlang. Maxfiy qiymatlarni CI’ning secrets mexanizmi orqali muhitga uzating.
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 -yMajburiy qiymat yetishmasa yoki deploy tekshiruvi muvaffaqiyatsiz bo‘lsa, buyruq xato kodi bilan tugaydi. -y rejimida yetishmayotgan token so‘ralmaydi.
| Muammo | Tekshirish |
|---|---|
| abzctl: command not found | Terminalni qayta oching. Linux/macOS: ~/.local/bin; Windows: %USERPROFILE%\.abzctl\bin PATH’da bo‘lsin. |
| SSH kaliti topilmadi yoki o‘zgargan | Oddiy ssh bilan ulaning, server fingerprint’ini tekshiring. --key-file yo‘li mavjudligini tekshiring. |
| Permission denied / sudo | SSH foydalanuvchi, kalit va sudo huquqlarini tekshiring. check-server orqali holatni oling. |
| Private repo klonlanmadi | Serverdagi deploy key, Git host known_hosts va repo o‘qish huquqini tekshiring. |
| Loyiha turi aniqlanmadi | Repo’ga Dockerfile yoki Compose qo‘shing. |
| Ilova javob bermadi | Loglar, 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 ochilmayapti | DNS A-rekord, 80/443 portlari va Caddy holatini tekshiring. |
| Bot to‘xtab qolyapti | Token, requirements.txt va konteyner loglarini tekshiring. |
abzctl check-server -h 203.0.113.10
abzctl deploy -h 203.0.113.10 -r https://github.com/user/my-app.git -vQuyidagi buyruq abzctl yaratgan Compose uchun. Loyiha nomini almashtiring:
ssh root@203.0.113.10
cd /var/www/my-app
sudo docker compose -p my-app -f .abzctl/compose.yaml logs --tail 100 -fO‘z Compose faylingiz bo‘lsa, -f qiymatini unga moslang, masalan -f compose.yaml. Loglarda maxfiy qiymatlar bo‘lishi mumkin; ulashishdan oldin tekshiring.