Ana içeriğe geç

Docker Compose ile WordPress Kurulumu (Ubuntu)

📘 Bu Rehberde Ne Öğreneceksiniz?​

Bu rehberde Docker Compose kullanarak WordPress’i modern ve yönetilebilir bir mimariyle kuracağız.
MySQL, WordPress ve Nginx ayrı konteynerlerde çalışacak.
SSL sertifikaları Let’s Encrypt ile otomatik alınacak ve yenilenecek.


🧠 Teknik Özet​

Bu rehber Ubuntu üzerinde Docker Compose ile WordPress kurulumu anlatır.
Amaç klasik LAMP/LEMP kurulum karmaşasını ortadan kaldırmaktır.
Kurulum SSL, Nginx ve otomatik sertifika yenileme içerir.


Ön Hazırlıklar​

Başlamadan önce aşağıdakiler hazır olmalıdır:

  • Ubuntu 20.04 veya 22.04 yüklü bir sunucu
  • Docker ve Docker Compose kurulu olmalı
  • Alan adı DNS A kayıtları sunucu IP’sine yönlenmiş olmalı
  • 80 ve 443 portları açık olmalı

1. Nginx Yapılandırmasını Tanımlama​

Önce proje dizinini oluşturun:

mkdir wordpress && cd wordpress
  1. Bu komut WordPress proje klasörünü oluşturur.


mkdir nginx-conf
nano nginx-conf/nginx.conf
  1. Bu dosya Nginx yapılandırmasını içerir.


server {
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?$args;
}

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

Bu yapı SSL doğrulaması ve WordPress için gereklidir.


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

  1. Hassas bilgiler .env dosyasında tutulmalıdır.

nano .env

MYSQL_ROOT_PASSWORD=guclu_root_sifre
MYSQL_USER=wp_kullanici
MYSQL_PASSWORD=guclu_wp_sifre

  1. Bu bilgiler veritabanı erişimi için kullanılır.

nano .gitignore

.env
  1. Bu ayar gizli bilgilerin repoya eklenmesini engeller.

3. Docker Compose Servislerini Tanımlama​


nano docker-compose.yml
  1. MySQL Servisi

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

  1. Bu servis WordPress veritabanını çalıştırır.

2.1 WordPress Servisi


wordpress:
image: wordpress:php8.1-fpm
depends_on:
- db
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

Bu servis WordPress uygulamasını çalıştırır.


  1. Nginx Servisi

webserver:
image: nginx:alpine
depends_on:
- wordpress
ports:
- "80:80"
volumes:
- wordpress:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
Bu servis HTTP trafiğini yönetir.

3.1 Certbot Servisi (SSL)​


certbot:
image: certbot/certbot
volumes:
- wordpress:/var/www/html
- certbot-etc:/etc/letsencrypt
command: certonly --webroot --webroot-path=/var/www/html --email admin@siteadresiniz.com --agree-tos --no-eff-email --staging -d siteadresiniz.com -d www.siteadresiniz.com
  • --staging parametresi test amaçlıdır ve limitleri korur.

4. Konteynerleri Başlatma​


docker-compose up -d
  1. Bu komut tüm servisleri başlatır.

docker-compose ps
  1. Tüm servisler Up durumunda olmalıdır.

5. HTTPS Yapılandırması​


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. Bu dosya önerilen SSL ayarlarını indirir.

  1. Nginx yapılandırması HTTPS destekli güncellenir:

listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/siteadresiniz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/siteadresiniz.com/privkey.pem;

6. WordPress Kurulumu​

  1. Tarayıcıdan aşağıdaki adrese gidin:

https://siteadresiniz.com
  • Dil seçimi yapın ve yönetici bilgilerini girin.

7. Otomatik SSL Yenileme (Cron)​


nano ssl_renew.sh

#!/bin/bash
docker-compose run certbot renew && docker-compose kill -s SIGHUP webserver
  • Bu script sertifikaları yeniler.


chmod +x ssl_renew.sh
sudo crontab -e

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

Bu görev sertifikaları günlük kontrol eder.


❓ Sıkça Sorulan Sorular​

1. Docker Compose neden tercih edilmeli? Kurulum standarttır ve yönetimi kolaydır.

2. Veriler silinir mi? Hayır, volume yapısı verileri korur.

3. mysql_native_password neden gerekli? PHP uyumluluğu için gereklidir.

4. Staging neden kullanılır? SSL limitlerine takılmamak için.

🚀 Sonuç​

Docker Compose ile WordPress kurulumu hızlı ve güvenlidir. SSL ve otomatik yenileme ile bakım yükü azalır.

👉 Bu yapıyı Rabisu Bulut üzerinde dakikalar içinde kurabilirsiniz.