Ana içeriğe geç

Docker Compose ile WordPress Kurulumu: Kapsamlı Rehber

Anahtar Kelime: Docker Compose WordPress Kurulumu


📘 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, klasik LAMP veya LEMP kurulumlarıyla uğraşmadan Docker Compose kullanarak modern bir WordPress altyapısı kuracaksınız.
MySQL veritabanı, Nginx web sunucusu ve Let’s Encrypt SSL sertifikalarını konteyner mimarisiyle entegre edeceksiniz.
Son aşamada SSL sertifikalarının otomatik yenilenmesini sağlayacaksınız.


🔧 Ön Hazırlıklar

Devam etmeden önce aşağıdakiler hazır olmalıdır:

  • Ubuntu yüklü bir sanal sunucu (Rabisu Bulut önerilir)
  • Docker ve Docker Compose kurulu olmalı
  • Alan adı ve DNS A kayıtları sunucu IP’sine yönlendirilmiÅŸ olmalı
  • 80 ve 443 portları açık olmalı

1️⃣ Web Sunucusu (Nginx) Yapılandırmasını Tanımlama

  1. İlk aşamada proje dizinini oluşturup Nginx yapılandırmasını hazırlıyoruz.
    Bu aşamada SSL henüz aktif edilmez.
mkdir wordpress && cd wordpress
  • Bu komut WordPress için ana proje dizinini oluÅŸturur.

mkdir nginx-conf
  • Nginx konfigürasyon dosyaları bu dizinde tutulur.


nano nginx-conf/nginx.conf
  • Bu komut Nginx yapılandırma dosyasını açar.

server {
listen 80;
listen [::]:80;

server_name siteadresiniz.com www.siteadresiniz.com;

root /var/www/html;
index index.php index.html;

location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass wordpress:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

location ~ /\.ht {
deny all;
}
}

Bu yapı PHP isteklerini WordPress konteynerine yönlendirir.

2️⃣ Ortam Değişkenlerini (.env) Tanımlama

  • Veritabanı ÅŸifrelerini güvenli ÅŸekilde saklamak için .env dosyası kullanılır.

nano .env

Bu dosya gizli verileri tutar.


MYSQL_ROOT_PASSWORD=guclu_root_sifresi
MYSQL_USER=wp_kullanici
MYSQL_PASSWORD=wp_db_sifresi
  • Bu bilgiler MySQL ve WordPress baÄŸlantısı için kullanılır.

  1. .env dosyasını sürüm kontrolünden hariç tutun:

nano .gitignore

.env

nano .dockerignore

.env
.git

3️⃣ Docker Compose Servislerini Oluşturma

  1. Tüm servisleri tek dosyada tanımlıyoruz.

nano docker-compose.yml

Bu dosya tüm konteynerleri yönetir.


version: '3'

services:
db:
image: mysql:8.0
container_name: db
restart: unless-stopped
env_file: .env
environment:
- MYSQL_DATABASE=wordpress
volumes:
- dbdata:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
networks:
- app-network

wordpress:
image: wordpress:php8.2-fpm
container_name: wordpress
depends_on:
- db
restart: unless-stopped
env_file: .env
environment:
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=${MYSQL_USER}
- WORDPRESS_DB_PASSWORD=${MYSQL_PASSWORD}
- WORDPRESS_DB_NAME=wordpress
volumes:
- wordpress:/var/www/html
networks:
- app-network

webserver:
image: nginx:alpine
container_name: webserver
depends_on:
- wordpress
restart: unless-stopped
ports:
- "80:80"
volumes:
- wordpress:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
- certbot-etc:/etc/letsencrypt
networks:
- app-network

certbot:
image: certbot/certbot
container_name: certbot
depends_on:
- webserver
volumes:
- certbot-etc:/etc/letsencrypt
- wordpress:/var/www/html
command: certonly --webroot --webroot-path=/var/www/html \
--email [email protected] --agree-tos --no-eff-email --staging \
-d siteadresiniz.com -d www.siteadresiniz.com

volumes:
dbdata:
wordpress:
certbot-etc:

networks:
app-network:
driver: bridge

--staging parametresi test sertifikası alır ve limitleri korur.


4️⃣ SSL Sertifikasını Alma


docker-compose up -d
  • Tüm servisler arka planda baÅŸlatılır.

docker-compose logs certbot

“Congratulations” mesajı sertifikanın alındığını gösterir.

Başarılıysa --staging kaldırılıp gerçek sertifika alınır:


docker-compose up --force-recreate --no-deps certbot

5️⃣ HTTPS Yapılandırmasını Tamamlama

  • Nginx yapılandırması HTTPS destekleyecek ÅŸekilde güncellenir.
  • HTTP trafiÄŸi otomatik olarak HTTPS’e yönlendirilir.
  1. Bu dosya önerilen SSL güvenlik ayarlarını indirir.

curl -sSLo nginx-conf/options-ssl-nginx.conf \
https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf

  1. 443 portunu aktif edin:

ports:
- "80:80"
- "443:443"

docker-compose up -d --force-recreate --no-deps webserver

6️⃣ WordPress Kurulumunu Web Arayüzünden Tamamlama

  1. Tarayıcıdan şu adrese gidin:

https://siteadresiniz.com
  1. Dil seçimi yapın, yönetici bilgilerini girin ve kurulumu tamamlayın.

7️⃣ SSL Sertifikasını Otomatik Yenileme


nano ssl_renew.sh


#!/bin/bash
cd /home/kullaniciadi/wordpress
docker-compose run certbot renew && docker-compose kill -s SIGHUP webserver


chmod +x ssl_renew.sh


sudo crontab -e


0 12 * * * /home/kullaniciadi/wordpress/ssl_renew.sh >> /var/log/cron.log 2>&1

Sertifikalar her gün otomatik kontrol edilir.


❓ Sıkça Sorulan Sorular (SSS)

1. Docker Compose neden tercih edilmeli? Kurulumu hızlandırır ve altyapıyı standartlaştırır.

2. Veriler silinir mi? Hayır, Docker volume kullanıldığı için kalıcıdır.

3. mysql_native_password neden gerekli? WordPress’in MySQL 8 uyumu için gereklidir.

4. SSL neden önce staging ile alınır? Let’s Encrypt limitlerine takılmamak için.

🏁 Sonuç Bu rehberle Docker Compose kullanarak güvenli ve ölçeklenebilir bir WordPress altyapısı kurdunuz. Nginx, MySQL ve SSL tamamen konteyner tabanlı çalışır. Otomatik yenilenen sertifikalarla kesintisiz güvenlik sağlanır.

Bu yapıyı Rabisu Bulut sunucularında dakikalar içinde hayata geçirebilirsiniz 🚀