En az 1 harf girin

Docker

Laravel Nasıl Dockerize Edilir ?

Ahmet ÇELİK

Ahmet ÇELİK

Yazılım Geliştirme Uzmanı

Laravel Nasıl Dockerize Edilir ?

Laravel projenizi docker ile run etmek istediğinizde iki temel dosyaya ve projenizin gereksinimlerini belirlemeye ihtiyacınız olacak.

Proje gereksinimleri nasıl belirlenir ?

Projenizde 

  • Kullanılan veritabanı
  • Kullanılan magic methodlar (bazı sunucularda bazı fonnksiyonlar güvenlik nedeniyle kapalı olabildğinden bunları belirtmeniz gerekebilir)
  • Kullanılan Cache tooları
  • Kullanılan Job tracking toolları
  • vb

Burada ihtiyacınız olan temel şeylerin listesi mevcut ancak burası projeye göre değişiklik gösterecektir.

Ben şimdi veritabanı postgresql olan nginx üzerinden yayın yapcak, cache için redis kullanacak bir proje için dockerfile ve docker compose yaml dosyalarını bırakacağım.

Docker File :


FROM php:8.2.1-fpm

# Set working directory
WORKDIR /var/www

# Add docker php ext repo
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

# Install php extensions
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
    install-php-extensions mbstring pdo_mysql pdo_pgsql pgsql zip exif pcntl gd memcached mongodb redis

# Install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    unzip \
    git \
    curl \
    lua-zlib-dev \
    libmemcached-dev

#RUN pecl install xdebug \
#    && docker-php-ext-enable xdebug



#COPY /docker/php/xdebug.ini "${PHP_INI_DIR}/conf.d"

# Install supervisor
RUN apt-get install -y supervisor

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy code to /var/www
COPY --chown=www:www-data . /var/www
RUN touch /var/www/storage/logs/laravel.log
RUN chmod -R 777 /var/www/storage/
RUN chmod -R 777 /var/www/bootstrap/cache/
# add root to www group
RUN chmod -R ug+w /var/www/storage

# Copy nginx/php/supervisor configs
RUN cp docker/supervisor.conf /etc/supervisord.conf
RUN cp docker/php/php.ini /usr/local/etc/php/conf.d/app.ini
#RUN cp docker/nginx/default.conf /etc/nginx/sites-enabled/default
RUN cp docker/php/php-fpm.conf /usr/local/etc/php-fpm.d/www.conf
#RUN cp docker/php/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
RUN cp docker/php/error_reporting.ini /usr/local/etc/php/conf.d/error_reporting.ini


# PHP Error Log Files
RUN mkdir /var/log/php
RUN touch /var/log/php/errors.log && chmod 777 /var/log/php/errors.log

# Deployment steps
RUN cp -rf .env.docker .env
RUN composer install  --optimize-autoloader
RUN chmod +x deploy-run.sh
ENTRYPOINT ["sh","deploy-run.sh"]

docker-compose.yaml :


networks:
  app:
    driver: bridge

services:
  redis-srv:
    container_name: redis-srv
    hostname: redis-srv
    image: 'redis'
    command: redis-server --save 20 1 --loglevel warning --requirepass password123
    ports:
      - '6379:6379'
    volumes:
      - './docker/data/redis_data:/data'
    networks:
      - app

  nginx:
    image: nginx:latest
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
    volumes:
      - ./:/var/www/
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - api
    networks:
      - app

  api:
    build:
      context: ./
      dockerfile: Dockerfile
    container_name: api
    hostname: api
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes:
      - ./:/var/www/
    networks:
      - app

  pgsql-srv:
    container_name: pgsql-srv
    image: postgres:14.7
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    volumes:
      - ./docker/postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: always
    networks:
      - app

Docker filda Entrypoint'te bahsettiğimiz deploy-run.sh :


#!/bin/bash

cd /var/www





#php artisan optimize:clear
php artisan optimize
php artisan view:cache
php artisan migrate
#php artisan db:seed
php artisan storage:link

/usr/bin/supervisord -c /etc/supervisord.conf

Eğer windows makinelerde docker compose up -d dediğinizde run sh ile ilgili bir hata alırsanız deploy-run.sh dosyasındaki bin/bash kısmını bin/sh olarak güncellemelisiniz.



Önceki Yazı
Daha fazla count + 1 yapma ! started

Was this article helpful?

Have more questions? Submit a request.