nodir/db-sync

Laravel uchun prod-local PostgreSQL sync

Maintainers

Package info

github.com/Nodir7393/db-sync

pkg:composer/nodir/db-sync

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-04-20 07:48 UTC

This package is auto-updated.

Last update: 2026-04-20 07:55:24 UTC


README

PHP Laravel PostgreSQL License

πŸš€ Production PostgreSQL bazasini local muhitga bir buyruq bilan ko'chiring.

Laravel dasturchilari uchun oddiy va xavfsiz vosita β€” prod serverdagi PostgreSQL bazasini SSH orqali local kompyuteringizga sinxronlash. Real ma'lumotlar bilan ishlash, debug qilish va test qilishni osonlashtiradi.

✨ Xususiyatlari

  • πŸ”’ Xavfsiz β€” SSH orqali ulanish, prod bazaga faqat o'qish uchun kirish
  • ⚑ Tez β€” PostgreSQL'ning native pg_dump/pg_restore vositalaridan foydalanadi
  • 🎯 Oddiy β€” bitta buyruq (php artisan db:sync-prod)
  • πŸ›‘οΈ Himoyalangan β€” production muhitda ishlamaydi, har safar tasdiqlash so'raydi
  • πŸ”§ Avtomatik β€” sequence'larni o'zi to'g'rilaydi, dump fayllarni o'zi tozalaydi
  • πŸ“Š Moslashuvchan β€” faqat data, fresh migrate, dump saqlash kabi rejimlar bor

πŸ“‹ Talablar

Ishlash uchun quyidagilar kerak:

Component Versiya Qayerda
PHP ^8.1 Local
Laravel 10.x / 11.x / 12.x Local
PostgreSQL client 14+ Local (pg_dump, pg_restore)
PostgreSQL server 14+ Prod server
SSH Har qanday Local β†’ Prod

Local kompyuterda pg_dump va pg_restore o'rnatilganligini tekshiring:

pg_dump --version
pg_restore --version

Agar yo'q bo'lsa, Ubuntu/Debian'da:

sudo apt install postgresql-client

πŸ“¦ O'rnatish

1-qadam: Composer orqali

composer require nodir/db-sync --dev

πŸ’‘ Eslatma: --dev flagi bilan o'rnatilyapti, chunki bu vosita faqat development muhiti uchun.

2-qadam: Config faylni publish qilish (ixtiyoriy)

Sozlamalarni o'zgartirmoqchi bo'lsangiz:

php artisan vendor:publish --tag=db-sync-config

Bu config/db-sync.php faylini yaratadi.

βš™οΈ Sozlash

1-qadam: SSH key sozlash

Prod serverga parolsiz kirish uchun SSH key ulanishini sozlang:

ssh-copy-id user@your-server.com

Tekshiring β€” parolsiz ishlashi kerak:

ssh user@your-server.com "echo OK"

2-qadam: .env faylga qo'shish

Laravel loyihangizning .env fayliga quyidagi o'zgaruvchilarni qo'shing:

# SSH sozlamalari
PROD_SSH_HOST=your-server.com
PROD_SSH_USER=root
PROD_SSH_PORT=22

# Prod database sozlamalari
PROD_DB_NAME=your_production_db
PROD_DB_USER=postgres
PROD_DB_PASSWORD=your_production_db_password
PROD_DB_HOST=localhost
PROD_DB_PORT=5432

⚠️ Muhim: .env fayli .gitignore da borligiga ishonch hosil qiling. Prod parollari hech qachon Git'ga tushmasligi kerak!

3-qadam: Prod DB parolini topish

Prod serverdagi Laravel .env faylidan oling:

ssh user@your-server.com "cat /var/www/your-project/.env | grep DB_PASSWORD"

πŸš€ Foydalanish

Oddiy sync

Barcha ma'lumotlar va schema'ni ko'chirish:

php artisan db:sync-prod

Natija:

Local bazangiz 'my_app' to'liq qayta yoziladi.
Prod server: your-server.com β†’ production_db
Davom etamizmi? (yes/no) [no]: yes

πŸ“¦ Proddan dump olinmoqda...
βœ… Dump olindi: 24.5 MB
πŸ“₯ Localga tiklanmoqda...
πŸ”§ Sequence'lar to'g'rilanmoqda...
πŸ—‘  Dump fayl o'chirildi
πŸŽ‰ Sync muvaffaqiyatli yakunlandi!

Boshqa rejimlar

Buyruq Tavsif
php artisan db:sync-prod To'liq sync (schema + data)
php artisan db:sync-prod --fresh Avval migrate:fresh qiladi, keyin data yuklaydi
php artisan db:sync-prod --data-only Faqat ma'lumotlarni oladi (schema tegilmaydi)
php artisan db:sync-prod --keep-dump Dump faylini o'chirmaydi, storage/app/db-sync/ da saqlaydi

Flaglarni birlashtirish mumkin:

php artisan db:sync-prod --fresh --keep-dump

πŸ” Xavfsizlik

Nima qilinadi

Baza Amal Tavsif
Prod βœ… Faqat o'qiladi pg_dump faqat SELECT qiladi, hech narsa o'zgartirmaydi
Local ⚠️ Qayta yoziladi Eski jadvallar o'chadi, prod nusxasi bilan almashtiriladi

Ichki himoyalar

  • ❌ Production'da ishlamaydi β€” APP_ENV=production bo'lsa, darhol to'xtaydi
  • βœ‹ Tasdiqlash so'raydi β€” har safar yes javobi kerak
  • πŸ”‘ SSH orqali β€” PostgreSQL portini tashqariga ochmaydi
  • 🧹 Tozalash β€” dump fayllar avtomatik o'chadi (agar --keep-dump qo'shilmasa)

Tavsiyalar

  1. Sensitive data β€” agar prod'da real foydalanuvchi ma'lumotlari bo'lsa, sync'dan keyin anonymizatsiya qiling:

    DB::table('users')->update([
        'email' => DB::raw("CONCAT('user', id, '@test.local')"),
        'phone' => DB::raw("CONCAT('+99890', LPAD(id::text, 7, '0'))"),
    ]);
  2. Backup β€” birinchi marta ishlatishdan oldin local bazani backup qiling:

    pg_dump -U postgres -d local_db -F c -f backup.dump
  3. Alohida backup user β€” production'da root o'rniga faqat pg_dump huquqiga ega alohida SSH user yarating.

πŸ› Muammolarni hal qilish

"Permission denied (publickey)"

SSH key to'g'ri sozlanmagan. Qayta sozlang:

ssh-copy-id user@your-server.com
ssh user@your-server.com "echo OK"

"pg_dump: command not found"

Prod serverda PostgreSQL client o'rnatilmagan:

ssh user@your-server.com "sudo apt install postgresql-client"

"connection to server failed: fe_sendauth: no password supplied"

.env da PROD_DB_PASSWORD yo'q yoki noto'g'ri. Tekshiring:

ssh user@your-server.com "cat /var/www/your-project/.env | grep DB_PASSWORD"

"pg_restore: error: could not execute query"

Odatda FK (foreign key) ogohlantirishlari, xavfsiz. Agar jiddiy xato bo'lsa, --fresh flagi bilan qayta urinib ko'ring:

php artisan db:sync-prod --fresh

Katta bazalarda timeout

.env ga qo'shing:

DB_SYNC_TIMEOUT=7200

(7200 soniya = 2 soat)

πŸ“– Ichki ishlash tamoyili

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      SSH      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    Local     │──────────────▢│     Prod     β”‚
β”‚              β”‚  pg_dump      β”‚              β”‚
β”‚              │◀──────────────│              β”‚
β”‚              β”‚   .dump file  β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό pg_restore
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Local DB    β”‚
β”‚  (yangilanadi)β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  1. SSH orqali prod serverga ulanadi
  2. Prod'da pg_dump ishga tushadi, natija local'ga stream bilan kelib tushadi
  3. Local'da pg_restore orqali bazaga yoziladi
  4. Sequence'lar avtomatik to'g'rilanadi
  5. Dump fayl tozalanadi

πŸ›£οΈ Yo'l xaritasi

Kelajakda qo'shilishi mumkin bo'lgan xususiyatlar:

  • MySQL qo'llab-quvvatlash
  • Bir nechta prod baza profillari
  • Faqat tanlangan jadvallarni sync qilish (--tables=users,orders)
  • Avtomatik anonymizatsiya konfiguratsiyasi
  • Progress bar
  • Docker'da PostgreSQL qo'llab-quvvatlash

🀝 Hissa qo'shish

Pull request'lar xush kelibsiz! Katta o'zgarishlar uchun avval issue oching.

  1. Repository'ni fork qiling
  2. Feature branch yarating (git checkout -b feature/zo-r-narsa)
  3. Commit qiling (git commit -m 'Zo"r narsa qo"shildi')
  4. Push qiling (git push origin feature/zo-r-narsa)
  5. Pull Request oching

πŸ“„ Litsenziya

MIT License - xohlaganingizcha ishlatishingiz mumkin.

πŸ‘¨β€πŸ’» Muallif

Nodir β€” Senior PHP Developer, Uzbekistan

  • 🌐 GitHub: @Nodir7393
  • πŸ’Ό Ish: Laravel, Yii2, Next.js, PostgreSQL

⭐ Loyihaga yordam berish

Agar paket yoqdi va ishingizga yaragan bo'lsa:

  • ⭐ GitHub'da yulduzcha qo'ying
  • πŸ› Topilgan bug'lar haqida xabar bering
  • πŸ’‘ Yangi g'oyalar bilan bo'lishing
  • πŸ“’ Do'stlaringiz bilan ulashing

Made with ❀️ in Uzbekistan πŸ‡ΊπŸ‡Ώ