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
- Bu resmi Docker Kütüphanesi Drupal Image. Bu image'ı kullanarak Apache ve PHP'yi ayarlamamımza gerek kalmaz.
FROM drupal:8.6-apache
- Docker Image'e Drupal geliştirmede gerekli uygulamaları kuruyoruz
RUN apt-get update && apt-get install -y \
curl \
git \
mysql-client \
vim \
wget
- 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');"
- 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
- Docker İmage'de mevcut olan Drupal'i siliyoruz. Composer ile Drupal kuracağız.
RUN rm -rf /var/www/html/*
- 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
- Docker Compose'un sürümü.
version: '3'
- Veritaban (
db
) container'indrupal
veritaban olarak vedrupalPassword
şifreli oluşturuyoruz.
services:
db:
image: mariadb:10.2
environment:
MYSQL_DATABASE: drupal
MYSQL_ROOT_PASSWORD: drupalPassword
- /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
- 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: .
- 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"
- 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.