A clean, ready-to-use Docker-based setup for quickly spinning up a modern web development environment with minimal effort.
This repository provides a fully dockerized stack tailored for PHP web development. With a single command, it launches a complete environment including:
- Latest NGINX web server
- PHP-FPM runtime for PHP applications 🐘
- MySQL/MariaDB database (with persistent sorage)
- phpMyAdmin GUI for database management
- SSL SSL with Certbot
The goal is to help developers build, test, and debug their PHP-based projects in an isolated and reproducible environment without the hassle of manual server configuration.
To use this project, ensure you have:
- Docker
- Docker Compose (version 2+)
Install them and tutorial via Docker's official documentation.
This setup supports two modes: Development (quick start) and Production (with SSL via Let's Encrypt).
Use this mode for local development and testing, without setting up domain or SSL certificates.
-
Clone the repository:
git clone https://github.com/amintoorchi/Web-Docker-Structure.git cd Web-Docker-Structure -
Set Default Server_name in NginxConfig (./Web-Docker-Structure/nginx/conf.d):
server_name localhost; -
Launch the Containers:
docker-compose up -d
-
Access services:
- Web app (HTTP): http://localhost
- phpMyAdmin: http://localhost:81
Follow these steps to deploy the stack with a valid SSL certificate for your custom domain, suitable for staging or production.
-
Clone the repository (if not already done):
git clone https://github.com/amintoorchi/Web-Docker-Structure.git cd Web-Docker-Structure -
Configure Environment Variables:
- Copy the example file:
cp .env.example .env
- Edit the
.envfile and set your email and domain (e.g.,YOUR_DOMAIN=example.com,YOUR_EMAIL=info@example.com). These are crucial for the SSL certificate request.
- Copy the example file:
-
Prepare the SSL Script:
- Grant execution permissions to the setup script:
chmod +x setup-ssl.sh
- Grant execution permissions to the setup script:
-
Request the SSL Certificate:
- Run the script to generate and obtain the Let's Encrypt certificate:
./setup-ssl.sh
- Note: The script will temporarily start NGINX to complete the ACME challenge.
- Run the script to generate and obtain the Let's Encrypt certificate:
-
Configure NGINX for SSL:
- Navigate to the NGINX configuration file:
nginx/conf.d/default.conf. - Modify/uncomment the necessary sections (as instructed within the
default.conffile) to enable SSL and point to the newly issued certificate files. - Critical Security Note: Ensure the domain and email values in
default.conf(server_name) exactly match the values you entered in the.envfile.
- Navigate to the NGINX configuration file:
-
Final Launch with SSL:
- Stop and remove containers and volumes to ensure a clean launch:
docker-compose down -v
- Relaunch the stack to load the new NGINX configuration and apply the SSL certificate:
docker-compose up -d
- Stop and remove containers and volumes to ensure a clean launch:
-
Access Secured Service:
- Web app (HTTPS):
https://your-domain.com
- Web app (HTTPS):
The project is organized as follows:
| Directory/File | Description |
|---|---|
www/ |
Your PHP/HTML/CSS/JS ... files (served by NGINX). |
mysql/ |
Database configuration and initialization scripts (e.g., init.sql for schema). |
nginx/ |
NGINX configuration files (e.g., conf.d/ for server blocks). |
php/ |
PHP-FPM Dockerfile and settings. |
docker-compose.yml |
Main configuration for all services. |
.env |
Environment variables (e.g., certbot credentials; ignored in .gitignore). |
Built with ❤️ by Amin Toorchi for the open-source community.
یک محیط آماده و ساده برای راهاندازی سریع محیط توسعه وب مدرن با حداقل تلاش.
این مخزن یک stack کاملاً داکریزهشده برای توسعه وب PHP ارائه میدهد. با یک دستور، محیطی کامل شامل موارد زیر راهاندازی میشود:
- وبسرور NGINX آخرین نسخه ⚙️
- محیط اجرایی PHP-FPM برای برنامههای PHP 🐘
- دیتابیس MySQL/MariaDB (با ذخیرهسازی پایدار) 🐬
- ابزار گرافیکی phpMyAdmin برای مدیریت دیتابیس 🛠️
- ابزار گرافیکی phpMyAdmin برای مدیریت دیتابیس 🛠️
- Certbot برای مدیریت و دریافت گواهی اس اس ال 🛠️
هدف، کمک به توسعهدهندگان برای ساخت، تست و دیباگ پروژههای PHP در محیطی ایزوله و قابلتکرار بدون دردسر تنظیمات دستی سرور است.
برای استفاده، نیاز دارید:
- Docker
- Docker Compose (نسخه ۲ یا بالاتر)
آنها را از مستندات رسمی داکر نصب کنید.
این ساختار از دو حالت پشتیبانی میکند: توسعه (Development) برای شروع سریع و تولید (Production) با گواهی SSL از Let's Encrypt.
از این حالت برای توسعه و تست محلی، بدون نیاز به تنظیم دامنه یا گواهی SSL استفاده کنید.
-
مخزن را کلون کنید:
git clone https://github.com/amintoorchi/Web-Docker-Structure.git cd Web-Docker-Structure -
یک دامنه دلخواه با توجه با DNS داخلی سیستم خود ست کنید:
server_name localhost 127.0.0.1; -
کانتینرها را راهاندازی کنید:
docker-compose up -d
-
به سرویسها دسترسی پیدا کنید:
- برنامه وب (HTTP): http://localhost
- phpMyAdmin: http://localhost:81
این مراحل را برای راهاندازی با گواهی SSL معتبر برای دامنه سفارشی خود دنبال کنید، که برای محیطهای استیجینگ یا تولید مناسب است.
-
مخزن را کلون کنید (اگر قبلاً انجام نشده):
git clone https://github.com/amintoorchi/Web-Docker-Structure.git cd Web-Docker-Structure -
تنظیم متغیرهای محیطی:
- از فایل نمونه کپی بگیرید:
cp .env.example .env
- فایل
.envرا ویرایش کنید و ایمیل و دامنه خود را تنظیم کنید (مثلاًYOUR_DOMAIN=example.com،YOUR_EMAIL=info@example.com). این مقادیر برای درخواست گواهی SSL حیاتی هستند.
- از فایل نمونه کپی بگیرید:
-
آمادهسازی اسکریپت SSL:
- مجوز اجرای اسکریپت را بدهید:
chmod +x setup-ssl.sh
- مجوز اجرای اسکریپت را بدهید:
-
دریافت گواهی SSL:
- اسکریپت را برای تولید و دریافت گواهی Let's Encrypt اجرا کنید:
./setup-ssl.sh
- توجه: اسکریپت بهطور موقت NGINX را برای تکمیل چالش ACME راهاندازی میکند.
- اسکریپت را برای تولید و دریافت گواهی Let's Encrypt اجرا کنید:
-
تنظیم NGINX برای SSL:
- به فایل تنظیمات NGINX بروید:
nginx/conf.d/default.conf. - بخشهای لازم را ویرایش/کامنت را بردارید (مطابق دستورالعملهای داخل فایل
default.conf) تا SSL فعال شود و به فایلهای گواهی صادرشده اشاره کند. - نکته امنیتی حیاتی: مطمئن شوید که مقادیر دامنه و ایمیل در
default.conf(server_nameو مسیرهای SSL) دقیقاً با مقادیری که در فایل.envوارد کردهاید، مطابقت داشته باشد.
- به فایل تنظیمات NGINX بروید:
-
راهاندازی نهایی با SSL:
- کانتینرها و volumeها را متوقف و حذف کنید تا مطمئن شوید تنظیمات جدید NGINX اعمال میشود:
docker-compose down -v
- ساختار را مجدداً راهاندازی کنید تا کانفیگ NGINX جدید و گواهی SSL صادرشده بارگذاری شود:
docker-compose up -d
- کانتینرها و volumeها را متوقف و حذف کنید تا مطمئن شوید تنظیمات جدید NGINX اعمال میشود:
-
دسترسی به سرویس ایمن:
- برنامه وب (HTTPS):
https://your-domain.com
- برنامه وب (HTTPS):
ساختار پروژه به این صورت است:
| Directory/File | Description |
|---|---|
www/ |
فایلهای PHP/HTML/CSS/JS و ... (توسط NGINX سرو میشود). |
mysql/ |
تنظیمات دیتابیس و اسکریپتهای اولیهسازی (مثل init.sql برای اسکیما). |
nginx/ |
فایلهای تنظیمات NGINX (مثل conf.d/ برای server blockها). |
php/ |
فایل Dockerfile و تنظیمات PHP-FPM. |
docker-compose.yml |
تنظیمات اصلی همه سرویسها. |
.env |
متغیرهای محیطی (مثل اعتبارنامه دیتابیس؛ در .gitignore نادیده گرفته شده). |
طراحی و توسعه با ❤️ توسط Amin Toorchi برای جامعه برنامهنویسان متن باز.
