Skip to main content

Docker Deployment Guide | Tadreeb LMS

DOCKERFILE:

# Dockerfile

```dockerfile
FROM php:8.3-apache

RUN apt-get update && apt-get install -y \
curl \
unzip \
zip \
libzip-dev \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
libxml2-dev \
libonig-dev \
libldap2-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-configure ldap \
&& docker-php-ext-install \
pdo \
pdo_mysql \
mysqli \
mbstring \
xml \
zip \
bcmath \
gd \
exif \
ldap

COPY --from=composer:2.7.8 /usr/bin/composer /usr/local/bin/composer

WORKDIR /var/www/html

COPY . .

RUN mkdir -p \
storage/framework/cache/data \
storage/framework/sessions \
storage/framework/views \
storage/logs \
bootstrap/cache \
&& chown -R www-data:www-data /var/www/html \
&& chmod -R 775 /var/www/html

RUN a2enmod rewrite

RUN sed -i 's!/var/www/html!/var/www/html/public!g' \
/etc/apache2/sites-available/000-default.conf

EXPOSE 80

CMD ["apache2-foreground"]
```

✅ Step 1: Install Docker

curl -fsSL https://get.docker.com | sh
sudo apt update
sudo systemctl enable docker
sudo systemctl start docker

✅ Step 2: Create docker-compose.yml

nano docker-compose.yml

Paste the following:

# docker-compose.yml

```yaml
services:
app:
container_name: tadreeblms_app
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "8000:80"
volumes:
- laravel_storage:/var/www/html/storage
- laravel_cache:/var/www/html/bootstrap/cache
networks:
- appnet

db:
container_name: tadreeblms_db
image: mysql:8.0
restart: unless-stopped
env_file:
- .env.example
volumes:
- mysql_data:/var/lib/mysql
networks:
- appnet

networks:
appnet:

volumes:
mysql_data:
laravel_storage:
laravel_cache:
```

Save:
- Press `CTRL + O` → Enter
- Press `CTRL + X`

---

## ✅ Step 3: Run Containers
```bash
sudo docker-compose up -d

✅ Step 4: Open Port 8000 (AWS EC2)

Go to AWS EC2 → Security Groups → Inbound Rules

Add rule:

  • Type: Custom TCP
  • Port: 8000
  • Source: 0.0.0.0/0

✅ Step 5: Access Application

Open in browser:

http://<your-server-ip>:8000

✅ Step 6: Run Installer

Enter database details:

  • Host: db
  • Port: 3306
  • Database: tadreeblms
  • Username: tadreeb
  • Password: secret

🔍 Troubleshooting

Check running containers:

docker ps

Check logs:

docker-compose logs -f

Check DB logs:

docker-compose logs -f db

🧠 Notes

  • No need to clone project on server
  • No need Dockerfile on server
  • Image is pulled from Docker Hub
  • docker-compose is only used to run services

🔥 Final Flow

Install Docker → Create compose → Run → Open port → Access app → Install