PHPackages                             nodir/db-sync - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. nodir/db-sync

ActiveLibrary[Database &amp; ORM](/categories/database)

nodir/db-sync
=============

Laravel uchun prod-local PostgreSQL sync

v1.1.0(3mo ago)05MITPHPPHP ^8.1

Since Apr 20Pushed 3mo agoCompare

[ Source](https://github.com/Nodir7393/db-sync)[ Packagist](https://packagist.org/packages/nodir/db-sync)[ RSS](/packages/nodir-db-sync/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (3)Versions (3)Used By (0)

Laravel DB Sync
===============

[](#laravel-db-sync)

 [![PHP](https://camo.githubusercontent.com/2a76401155e03bb1a6956d44c7d13238bcf1503be66020c791589dfc2398ec9d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253545382e312d3737374242343f7374796c653d666c6174266c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/2a76401155e03bb1a6956d44c7d13238bcf1503be66020c791589dfc2398ec9d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253545382e312d3737374242343f7374796c653d666c6174266c6f676f3d706870266c6f676f436f6c6f723d7768697465) [![Laravel](https://camo.githubusercontent.com/f9d932c84fb4cca115e1317c9e068c967ff4a8ab0b2e62ecad8969ba81dc5471/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3130253230253743253230313125323025374325323031322d4646324432303f7374796c653d666c6174266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/f9d932c84fb4cca115e1317c9e068c967ff4a8ab0b2e62ecad8969ba81dc5471/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3130253230253743253230313125323025374325323031322d4646324432303f7374796c653d666c6174266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465) [![PostgreSQL](https://camo.githubusercontent.com/eb4ef69188a18b3309c4669c707589f311b40e6b74cc1adc31eab32b230249fc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506f737467726553514c2d3331363139323f7374796c653d666c6174266c6f676f3d706f737467726573716c266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/eb4ef69188a18b3309c4669c707589f311b40e6b74cc1adc31eab32b230249fc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506f737467726553514c2d3331363139323f7374796c653d666c6174266c6f676f3d706f737467726573716c266c6f676f436f6c6f723d7768697465) [![Docker](https://camo.githubusercontent.com/99e4b6e3fbb08cc50903e055ac7cc4bf537bfa7d8b79b525ce62fdb6c03755a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d72656164792d3234393645443f7374796c653d666c6174266c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/99e4b6e3fbb08cc50903e055ac7cc4bf537bfa7d8b79b525ce62fdb6c03755a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d72656164792d3234393645443f7374796c653d666c6174266c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465) [![License](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)

> 🚀 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. **Docker** va **oddiy muhit** ikkalasida ham ishlaydi.

---

✨ Xususiyatlari
---------------

[](#-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
- 🐳 **Docker-ready** — Docker muhitida ham muammosiz ishlaydi

---

📋 Talablar
----------

[](#-talablar)

Ishlash uchun quyidagilar kerak:

ComponentVersiyaQayerdaPHP^8.1LocalLaravel10.x / 11.x / 12.xLocalPostgreSQL client14+Local (pg\_dump, pg\_restore)PostgreSQL server14+Prod serverSSHHar qandayLocal → Prod> ⚠️ **Muhim:** Local va Prod'dagi PostgreSQL versiyalari bir xil bo'lishi kerak! Aks holda `transaction_timeout` kabi versiya-spetsifik xatolar chiqishi mumkin.

**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
-----------

[](#-ornatish)

O'zingizga mos variantni tanlang:

- [Oddiy muhit (Docker'siz)](#oddiy-muhit-dockersiz)
- [Docker muhiti](#-docker-muhiti)

### Oddiy muhit (Docker'siz)

[](#oddiy-muhit-dockersiz)

#### 1-qadam: Composer orqali

[](#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)

[](#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.

---

### 🐳 Docker muhiti

[](#-docker-muhiti)

Docker'da ishlash uchun 3 ta qo'shimcha qadam bor: konteynerda `pg_dump`/`pg_restore` va SSH client bo'lishi kerak, SSH key'lar konteynerga uzatilishi kerak, va PostgreSQL versiyalari mos kelishi kerak.

#### 1-qadam: Dockerfile'ga dependency qo'shish

[](#1-qadam-dockerfilega-dependency-qoshish)

Dockerfile'ga `postgresql-client` va `openssh-client` qo'shing:

```
# PostgreSQL client (pg_dump, pg_restore) va SSH
RUN apt-get update && apt-get install -y \
    postgresql-client \
    openssh-client \
    && rm -rf /var/lib/apt/lists/*
```

#### 2-qadam: SSH key'larni konteynerga uzatish

[](#2-qadam-ssh-keylarni-konteynerga-uzatish)

`docker-compose.yml` dagi app service'ga volume qo'shing:

```
services:
  app:
    build: .
    volumes:
      - .:/var/www/html
      - ~/.ssh:/root/.ssh:ro    # SSH key'larni read-only ulash
```

> 💡 `:ro` = read-only — konteyner SSH key'larni o'zgartira olmaydi.

#### 3-qadam: PostgreSQL versiyasini moslashtirish

[](#3-qadam-postgresql-versiyasini-moslashtirish)

**Bu juda muhim!** Local va prod'dagi PostgreSQL versiyasi bir xil bo'lishi kerak.

Prod serverdagi versiyani tekshiring:

```
ssh user@your-server.com "psql --version"
```

Keyin `docker-compose.yml` dagi PostgreSQL image'ni shunga moslang:

```
services:
  db:
    image: postgres:17    # Prod bilan bir xil versiya!
```

Agar versiyani o'zgartirgan bo'lsangiz, eski volume'ni tozalash kerak:

```
docker compose down -v          # ⚠️ local bazadagi barcha ma'lumot o'chadi
docker compose up -d
docker compose exec app php artisan migrate
```

#### 4-qadam: Composer paketni o'rnatish

[](#4-qadam-composer-paketni-ornatish)

```
docker compose exec app composer require nodir/db-sync --dev
docker compose exec app php artisan vendor:publish --tag=db-sync-config
```

#### 5-qadam: SSH known\_hosts ga server qo'shish

[](#5-qadam-ssh-known_hosts-ga-server-qoshish)

Birinchi marta "host key verification" xatosi chiqmasligi uchun:

```
docker compose exec app ssh-keyscan -H your-server.com >> ~/.ssh/known_hosts
```

#### 6-qadam: Tekshirish

[](#6-qadam-tekshirish)

```
docker compose exec app bash

# Hammasi bormi?
pg_dump --version         # ✅ PostgreSQL client
pg_restore --version      # ✅ PostgreSQL restore
ssh user@server "echo OK" # ✅ SSH ulanish

# Sync!
php artisan db:sync-prod
```

#### Docker — to'liq docker-compose.yml namunasi

[](#docker--toliq-docker-composeyml-namunasi)

```
services:
  app:
    build: .
    volumes:
      - .:/var/www/html
      - ~/.ssh:/root/.ssh:ro
    environment:
      - DB_HOST=db              # localhost EMAS, service nomi!
      - DB_DATABASE=my_app
      - DB_USERNAME=postgres
      - DB_PASSWORD=secret
    depends_on:
      - db

  db:
    image: postgres:17          # Prod bilan bir xil versiya
    environment:
      POSTGRES_DB: my_app
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: secret
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
```

> ⚠️ **Docker'da `DB_HOST`**: `.env` da `DB_HOST=localhost` emas, balki PostgreSQL service nomi yozing (masalan, `DB_HOST=db`). Aks holda `pg_restore` local bazani topa olmaydi.

---

⚙️ Sozlash
----------

[](#️-sozlash)

### 1-qadam: SSH key sozlash

[](#1-qadam-ssh-key-sozlash)

Prod serverga parolsiz kirish uchun SSH key ulanishini sozlang:

```
# Oddiy muhitda:
ssh-copy-id user@your-server.com

# Docker'da: host mashinadan bajaring (konteyner ichidan EMAS)
ssh-copy-id user@your-server.com
```

Tekshiring — parolsiz ishlashi kerak:

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

### 2-qadam: `.env` faylga qo'shish

[](#2-qadam-env-faylga-qoshish)

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

[](#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
-------------

[](#-foydalanish)

### Oddiy sync

[](#oddiy-sync)

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

```
# Oddiy muhitda:
php artisan db:sync-prod

# Docker'da:
docker compose exec app 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

[](#boshqa-rejimlar)

BuyruqTavsif`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 saqlaydiFlaglarni birlashtirish mumkin:

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

---

🔐 Xavfsizlik
------------

[](#-xavfsizlik)

### Nima qilinadi

[](#nima-qilinadi)

BazaAmalTavsif**Prod**✅ Faqat o'qiladi`pg_dump` faqat SELECT qiladi, hech narsa o'zgartirmaydi**Local**⚠️ Qayta yoziladiEski jadvallar o'chadi, prod nusxasi bilan almashtiriladi### Ichki himoyalar

[](#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

[](#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
------------------------

[](#-muammolarni-hal-qilish)

### "Permission denied (publickey)"

[](#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"

[](#pg_dump-command-not-found)

Prod serverda PostgreSQL client o'rnatilmagan:

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

### "pg\_restore: command not found" (Docker)

[](#pg_restore-command-not-found-docker)

Konteyner ichida PostgreSQL client o'rnatilmagan. Dockerfile'ga qo'shing:

```
RUN apt-get update && apt-get install -y postgresql-client && rm -rf /var/lib/apt/lists/*
```

Keyin qayta build qiling: `docker compose build`

### "connection to server failed: fe\_sendauth: no password supplied"

[](#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"
```

### "unrecognized configuration parameter: transaction\_timeout"

[](#unrecognized-configuration-parameter-transaction_timeout)

Local va prod'dagi PostgreSQL versiyalari farq qiladi. `transaction_timeout` PostgreSQL 17 da qo'shilgan.

**Yechim:** Local PostgreSQL'ni prod bilan bir xil versiyaga ko'taring.

Docker'da `docker-compose.yml` ni o'zgartiring:

```
db:
  image: postgres:17    # Prod bilan bir xil versiya
```

Keyin:

```
docker compose down -v
docker compose up -d
docker compose exec app php artisan migrate
```

### "No identities found" (Docker)

[](#no-identities-found-docker)

SSH key konteynerga uzatilmagan. `docker-compose.yml` ga volume qo'shing:

```
volumes:
  - ~/.ssh:/root/.ssh:ro
```

Keyin: `docker compose restart`

### "Host key verification failed" (Docker)

[](#host-key-verification-failed-docker)

Server konteyner ichidagi `known_hosts` da yo'q:

```
docker compose exec app ssh-keyscan -H your-server.com >> ~/.ssh/known_hosts
```

### "pg\_restore: error: could not execute query"

[](#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

[](#katta-bazalarda-timeout)

`.env` ga qo'shing:

```
DB_SYNC_TIMEOUT=7200
```

(7200 soniya = 2 soat)

---

📖 Ichki ishlash tamoyili
------------------------

[](#-ichki-ishlash-tamoyili)

### Oddiy muhitda

[](#oddiy-muhitda)

```
┌──────────────┐      SSH      ┌──────────────┐
│    Local     │──────────────▶│     Prod     │
│              │  pg_dump      │              │
│              │◀──────────────│              │
│              │   .dump file  │              │
└──────┬───────┘               └──────────────┘
       │
       ▼ pg_restore
┌──────────────┐
│  Local DB    │
│  (yangilanadi)│
└──────────────┘

```

### Docker muhitida

[](#docker-muhitida)

```
┌─── Docker ──────────────────────────────┐
│                                         │
│  ┌───────────┐         ┌─────────────┐  │     SSH      ┌──────────────┐
│  │  App      │────────▶│  DB (pg17)  │  │─────────────▶│     Prod     │
│  │ Container │ restore │  Container  │  │   pg_dump    │   Server     │
│  │           │◀────────│             │  │◀─────────────│              │
│  └───────────┘         └─────────────┘  │  .dump file  └──────────────┘
│   ~/.ssh:ro                             │
│   (volume)                              │
└─────────────────────────────────────────┘

```

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
----------------

[](#️-yol-xaritasi)

Kelajakda qo'shilishi mumkin bo'lgan xususiyatlar:

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

---

🤝 Hissa qo'shish
----------------

[](#-hissa-qoshish)

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
------------

[](#-litsenziya)

[MIT License](LICENSE) - xohlaganingizcha ishlatishingiz mumkin.

---

👨‍💻 Muallif
-----------

[](#‍-muallif)

**Nodir** — Senior PHP Developer, Uzbekistan

- 🌐 GitHub: [@Nodir7393](https://github.com/Nodir7393)
- 💼 Ish: Laravel, Yii2, Next.js, PostgreSQL

---

⭐ Loyihaga yordam berish
------------------------

[](#-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 🇺🇿

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance82

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

2

Last Release

91d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/45604122?v=4)[Nodir7393](/maintainers/Nodir7393)[@Nodir7393](https://github.com/Nodir7393)

---

Top Contributors

[![Nodir7393](https://avatars.githubusercontent.com/u/45604122?v=4)](https://github.com/Nodir7393 "Nodir7393 (4 commits)")

### Embed Badge

![Health badge](/badges/nodir-db-sync/health.svg)

```
[![Health](https://phpackages.com/badges/nodir-db-sync/health.svg)](https://phpackages.com/packages/nodir-db-sync)
```

###  Alternatives

[illuminate/queue

The Illuminate Queue package.

20432.6M1.7k](/packages/illuminate-queue)[spatie/laravel-export

Create a static site bundle from a Laravel app

674146.0k6](/packages/spatie-laravel-export)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

77922.3M186](/packages/laravel-mcp)[spatie/laravel-health

Monitor the health of a Laravel application

87912.0M177](/packages/spatie-laravel-health)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M246](/packages/laravel-ai)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
