PHP, Nginx, MySQL, Redis va Mailpit bilan to‘liq Dockerized Laravel muhiti

Laravel loyihalarida development muhitini har safar qo‘lda sozlash vaqt talab qiladi. PHP versiyasi, Composer, Node.js, MySQL, Redis va web serverni alohida o‘rnatish esa bir nechta loyihada ishlaganda yanada noqulay bo‘lishi mumkin.
Shu sababli men Laravel loyihalari uchun Docker asosidagi starter kit tayyorladim.
Ushbu starter kit yordamida Laravel loyihasini quyidagi servislar bilan birga ishga tushirish mumkin:
- PHP 8.4-FPM
- Nginx 1.28.1
- MySQL 8.4
- Redis 7
- Node.js 22
- Composer 2
- Mailpit
- phpMyAdmin
- Laravel 13
---
Loyiha tuzilishi
Repository taxminan quyidagi tuzilishga ega:
laravel-docker-starterkit/
├── docker/
│ └── services/
│ ├── app/
│ │ ├── app.dockerfile
│ │ └── entrypoint.sh
│ └── web/
│ ├── web.dockerfile
│ └── vhost.conf
├── src/
│ ├── app/
│ ├── bootstrap/
│ ├── config/
│ ├── database/
│ ├── public/
│ ├── resources/
│ ├── routes/
│ ├── .env.example
│ ├── composer.json
│ └── package.json
├── docker-compose.yml
└── local.shsrc — Laravel application joylashadigan asosiy katalog.
docker katalogida esa application va web server uchun Docker konfiguratsiyalari mavjud.
---
Docker arxitekturasi
Bu starter kit ikki asosiy application qatlamidan foydalanadi:
Browser
│
▼
┌─────────────┐
│ Nginx │
│ :8000 │
└──────┬──────┘
│
│ FastCGI
▼
┌─────────────┐
│ PHP-FPM 8.4 │
│ app │
└──────┬──────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
MySQL Redis MailpitNginx HTTP so‘rovlarini qabul qiladi va PHP so‘rovlarini app:9000 orqali PHP-FPM containeriga yuboradi.
Laravel application esa MySQL, Redis va Mailpit bilan Docker network orqali bog‘lanadi.
---
PHP application container
Application container php:8.4-fpm-bookworm image asosida quriladi.
Unda Laravel development uchun kerak bo‘ladigan PHP extensionlar mavjud:
bcmathgdintlmbstringopcachepcntlpdo_mysqlzip- Redis extension
- Composer 2
- Node.js 22
- npm
Shuning uchun host tizimga PHP yoki Node.js o‘rnatmasdan turib Laravel development qilish mumkin.
Container ichidagi working directory:
/var/wwwHostdagi:
./srcshu katalog bilan bog‘langan.
---
Nginx
Web server sifatida Nginx 1.28.1 ishlatiladi.
Nginx Laravel'ning:
/var/www/publickatalogini web root sifatida ishlatadi.
PHP fayllari esa PHP-FPM containeriga yuboriladi:
fastcgi_pass app:9000;Bu yerda app — Docker Compose service nomi.
Hostdagi application porti default holatda:
8000Shuning uchun browser orqali:
http://localhost:8000manzilidan Laravel application'ni ochish mumkin.
---
MySQL
Database uchun MySQL 8.4 ishlatiladi.
Docker Compose'dagi database service:
databaseLaravel containeridan MySQL'ga ulanishda localhost emas, aynan service nomi ishlatiladi:
DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secretMySQL ma'lumotlari Docker named volume orqali saqlanadi.
Shuning uchun container qayta yaratilganda database ma'lumotlari avtomatik ravishda yo‘qolmaydi.
---
Redis
Redis 7 Alpine image asosida ishlaydi.
Laravel ichidan Redis service'iga quyidagicha murojaat qilish mumkin:
REDIS_HOST=redis
REDIS_PORT=6379Redis ham alohida Docker volume'ga ega.
Bu setup Laravel cache, session yoki queue kabi vazifalar uchun Redis'dan foydalanishga imkon beradi.
---
Mailpit
Email development uchun Mailpit ishlatiladi.
Laravel'dan yuborilgan email haqiqiy email serverga jo‘natilmaydi. U Mailpit tomonidan ushlab qolinadi va development vaqtida browser orqali ko‘rish mumkin.
Laravel .env:
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025Mailpit web interfeysi:
http://localhost:8025SMTP server esa:
localhost:1025Bu ayniqsa registration, password reset va notification kabi funksiyalarni development vaqtida test qilish uchun qulay.
---
phpMyAdmin
Database bilan ishlash uchun optional phpMyAdmin service ham mavjud.
U Docker Compose'da tools profile orqali ishga tushiriladi.
Default manzil:
http://localhost:8888phpMyAdmin orqali MySQL database'ni browserdan boshqarish mumkin.
Agar phpMyAdmin kerak bo‘lmasa, asosiy Laravel environment undan foydalanmasdan ham ishlayveradi.
---
Environment sozlamalari
Avval .env faylini yarating:
cp src/.env.example src/.envKeyin database va boshqa Docker servislarini Laravel bilan bog‘lang:
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret
REDIS_HOST=redis
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025Muhim nuqta: Docker ichidagi Laravel application uchun DB_HOST=localhost ishlatilmaydi.
Docker network ichida boshqa containerlarga service nomi orqali murojaat qilinadi:
database
redis
mailpit---
Birinchi ishga tushirish
Repository'ni clone qiling:
git clone https://github.com/mirrrjr/laravel-docker-starterkit.git
cd laravel-docker-starterkit.env yarating:
cp src/.env.example src/.envKeyin:
./local.sh initinit command quyidagi ishlarni bajaradi:
- Docker image'larni build qiladi.
- Containerlarni ishga tushiradi.
- Composer dependency'larini o‘rnatadi.
- Laravel application key yaratadi.
- Database migration'larini ishga tushiradi.
- npm dependency'larini o‘rnatadi.
Shundan keyin application:
http://localhost:8000manzilida ishlaydi.
---
local.sh
Starter kitdagi local.sh Docker commandlarini qisqartirish uchun yozilgan helper script.
Masalan:
./local.sh upcontainerlarni ishga tushiradi.
./local.sh downcontainerlarni to‘xtatadi va olib tashlaydi.
./local.sh restartrestart qiladi.
./local.sh rebuildDocker image'larni qayta build qiladi.
Loglarni ko‘rish:
./local.sh logsMa'lum service loglarini ko‘rish:
./local.sh logs appApplication containeriga kirish:
./local.sh shellLaravel Artisan commandlari:
./local.sh artisan migrateComposer:
./local.sh composer installnpm:
./local.sh npm installBu yondashuv uzun docker compose exec ... commandlarini har safar yozish zaruratini kamaytiradi.
---
Frontend development
Application containerida Node.js 22 va npm mavjud.
Dependency o‘rnatish:
./local.sh npm installDevelopment server:
./local.sh npm run devProduction build:
./local.sh npm run buildLaravel frontend assetlari Vite orqali boshqariladi.
---
Database bilan ishlash
Migration:
./local.sh artisan migrateFresh migration:
./local.sh artisan migrate:freshSeeder bilan:
./local.sh artisan migrate:fresh --seedLaravel Tinker:
./local.sh artisan tinkerShunday qilib Artisan commandlarini host tizimga PHP o‘rnatmasdan ham ishlatish mumkin.
---
Docker servislarining portlari
Default portlar:
| Service | Host port | Container port |
|---|---|---|
| --------------- | --------: | -------------: |
| Laravel / Nginx | 8000 | 80 |
| MySQL | 3306 | 3306 |
| Redis | 6379 | 6379 |
| Mailpit SMTP | 1025 | 1025 |
| Mailpit Web | 8025 | 8025 |
| phpMyAdmin | 8888 | 80 |
.env orqali o‘zgartirish mumkin.Masalan:
APP_PORT=8080Shunda Laravel:
http://localhost:8080orqali ochiladi.
---
Nima uchun Docker?
Bunday environment'ning asosiy afzalligi — development muhitini loyihadan ajratish.
Host tizimda:
PHP
MySQL
Redis
Node.js
Composer
Nginxo‘rnatib, har bir loyihada alohida versiyalar bilan kurashish shart emas.
Docker esa kerakli environment'ni loyiha bilan birga olib yuradi.
Masalan, boshqa developer repository'ni clone qilgach, bir xil PHP, Node.js, MySQL va Redis environment'ini oladi.
Bu esa:
- environment inconsistency'ni kamaytiradi;
- project setup vaqtini qisqartiradi;
- dependency versiyalarini boshqarishni osonlashtiradi;
- yangi developer uchun onboarding'ni soddalashtiradi.
Xulosa
Laravel Docker Starter Kit — Laravel loyihalarini lokal development qilish uchun tayyor Docker environment.
Uning asosiy qismlari:
Laravel
│
├── PHP 8.4-FPM
├── Nginx 1.28
├── MySQL 8.4
├── Redis 7
├── Node.js 22
├── Mailpit
└── phpMyAdminMaqsad esa oddiy: Docker environment bilan uzoq vaqt konfiguratsiya qilmasdan Laravel development'ni boshlash.
Repository'ni clone qiling, .envni sozlang va:
./local.sh initbuyrug‘i bilan development muhitini ishga tushiring.