docker

Drupal sitesini geliştirmenin eski yolları böyle olurdu: drupal kaynak kodlarınızı Shared Hosting'e yükler ve ardından apache sunucunuzu yapılandırır, sonra FTP üzerinden değişiklik yapar ve sonra emin olmak için arada bir MySQL veritabanı yedeklemesi yaparsınız. O günler artık geçti. 2019'da, Drupal sitesini verimli bir şekilde geliştirip korumamıza ve farklı ekiplerin yanı sıra altyapıya göre ölçeklendirmemize olanak tanıyan birçok araç ve en iyi uygulamalar vardır. Bu araçla Drupal'ı geliştirmek, web sitemizin daha iyi performans göstermesini sağlar ve geliştirme hızı da artar.

Gerekli Uygulamalar

  • Apache
  • Composer
  • Docker
  • Docker Compose
  • Drupal 8
  • Drush
  • Git
  • MariaDB or MySQL
  • PHP7

Docker

Docker'i OSX'de Homebrew ile kurmak çok kolaydır. Eğer Homebrew kurulu değilse aşağıdaki komut satırıyla kurabilirsiniz.

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew'i kurduktan sonra Docker'i sıradaki komut ile kurunuz.

$ brew install docker
$ brew cask install docker // GUI interface for Docker

Proje

Bu blog yazısı için "MyBloge" adlı Drupal tabanlı bir blog oluşturacağız.

$ mkdir -p ~/Project/my-bloge
$ cd ~/Project/my-bloge

Dockerfile Oluştur

Dockerfile, bir kullanıcının bir image'yi birleştirmek için komut satırından arayabileceği tüm komutları içeren bir metin belgesidir.

$ touch ~/Project/my-bloge/Dockerfile

Aşağıdakilerle Dockerfile dosyasın doldurun:

FROM drupal:8.6-apache

RUN apt-get update && apt-get install -y \
    curl \
    git \
    mysql-client \
    vim \
    wget

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    mv composer.phar /usr/local/bin/composer && \
    php -r "unlink('composer-setup.php');"

RUN wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/download/0.4.2/drush.phar && \
    chmod +x drush.phar && \
    mv drush.phar /usr/local/bin/drush

RUN rm -rf /var/www/html/*

COPY apache-drupal.conf /etc/apache2/sites-enabled/000-default.conf

WORKDIR /app

Açıklama

  1. Bu resmi Docker Kütüphanesi Drupal Image. Bu image'ı kullanarak Apache ve PHP'yi ayarlamamımza gerek kalmaz.
FROM drupal:8.6-apache
  1. Docker Image'e Drupal geliştirmede gerekli uygulamaları kuruyoruz
RUN apt-get update && apt-get install -y \
    curl \
    git \
    mysql-client \
    vim \
    wget
  1. Sonra aşağıdaki komut ile composer kuruyoruz:
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
php composer-setup.php && \
mv composer.phar /usr/local/bin/composer && \
php -r "unlink('composer-setup.php');"
  1. Drush kuruyoruz:
RUN wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/download/0.4.2/drush.phar && \
chmod +x drush.phar && \
mv drush.phar /usr/local/bin/drush
  1. Docker İmage'de mevcut olan Drupal'i siliyoruz. Composer ile Drupal kuracağız.
RUN rm -rf /var/www/html/*
  1. Apache Conf.
COPY apache-drupal.conf /etc/apache2/sites-enabled/000-default.conf

Burda lokal'de olan apache-drupal.conf dosyası ile image'in içinde olan 000-default.conf ile senkronize ediyoruz. apache-drupal.conf dosyasında yapılan değişiklikler otomatik olarak image'in içindeki 000-default.conf dosyasına yansıyacaktır.

Apache VHost Config Dosyası Oluştur

Aşağıdaki içerikle apache-drupal.conf dosyası oluşturun.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /app/web

    <Directory /app/web>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Docker Compose Dosyası Oluştur

Drupal sitemiz iki Docker imagesinden oluşacak. Drupal'a özgü şeyleri tutan ana image, oluşturduğumuz Dockerfile dosyası ile bu image oluşturmuştuk, ayrıca veritabanı image'nı de oluşturmuştuk. Docker Compose bize bu image'lardan container oluşturmayı sağlar ve bu containerin arasında bağlantısını otomak olarak sağlayacak.

Docker Compose dosyası da projemizin kökünde oluşturulmalıdır, ./docker-compose.yml.

version: '3'
services:
  db:
    image: mariadb:10.2
    environment:
      MYSQL_DATABASE: drupal
      MYSQL_ROOT_PASSWORD: drupalPassword
    volumes:
      - db_data:/var/lib/mysql
    restart: always
  drupal:
    depends_on:
      - db
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./app:/app
    restart: always
volumes:
  db_data:

Açıklama

  1. Docker Compose'un sürümü.
version: '3'
  1. Veritaban (db) container'in drupal veritaban olarak ve drupalPassword şifreli oluşturuyoruz.
services:
  db:
    image: mariadb:10.2
    environment:
      MYSQL_DATABASE: drupal
      MYSQL_ROOT_PASSWORD: drupalPassword
  1. /var/lib/mysql içeriğini saklamak için db_data adlı bir Docker Birimi kullanmak istediğimizi belirtiyoruz.Bu dizin, MariaDB'nin içerdiği veritabanları için bilgilerini sakladığı yerdir.
 volumes:
      - db_data:/var/lib/mysql
1. Burada ikinci container `db` olarak adlandırılan başka bir container bağlı olan `drupal` olarak belirliyoruz.
drupal:
    depends_on:
      - db
  1. DB için yaptığımız gibi bir resim kullanmak ve ardından bir Docker resmi belirlemek yerine bu Docker Compose'a yerel Dockerfile dosyasını imajımızın temeli olarak kullanmasını söyler. Bu, hızlı bir değişiklik yapmak için ortak bir Docker deposuna zorlayarak ayrı bir komut çalıştırmadan ya da daha kötüsüyle anında inşa edebileceğimiz anlamına gelir.
build: .
  1. Yerel bölgemizdeki 8080 numaralı bağlantı portunu Docker makinesindeki 80 numaralı bağlantı portuna eşleme. Bu, Drupal web sitemize yerel makinemizden erişmenizi sağlayacaktır.
ports:
      - "8080:80"
  1. Bu, projenin kökü olan ./app klasörünü Docker container'in içindeki /app klasörüne bağlar.
  volumes:
      - ./app:/app

Uygulama Dizini Oluştur

Projemizin kökünde bir app dizini oluşturun.

mkdir app

Building The Drupal 8 Website

Docker yapılandırıldığında artık konteynerlerimizi aşağıdaki komutu kullanarak oluşturabiliriz:

docker-compose up -d --build

--build, Docker Compose'e bu komutu çalıştırdığımızda 'Dockerfile' kodumuzu taze oluşturmasını söyler.

Aşağıdaki komutu kullanarak konteynere giriş yapın:

docker exec -it MyBloge bash

Container'e giriş yaptıktan sonra Composer ile Drupal 8 kurabiliriz.

/app #  composer create-project drupal-composer/drupal-project:8.x-dev /app --stability dev --no-interaction
/app #  mkdir -p /app/config/sync
/app #  chown -R www-data:www-data /app/web

Şimdi tarayıcınızda http://localhost:8080 adresini ziyaret edin ve Drupal'i arayüz'den kurabilirsiniz.