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
- Bu komut WordPress proje klasörünü oluşturur.
mkdir nginx-conf
nano nginx-conf/nginx.conf
- 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)
- 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
- Bu bilgiler veritabanı erişimi için kullanılır.
nano .gitignore
.env
- Bu ayar gizli bilgilerin repoya eklenmesini engeller.
3. Docker Compose Servislerini Tanımlama
nano docker-compose.yml
- 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
- 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.
- 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 [email protected] --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
- Bu komut tüm servisleri başlatır.
docker-compose ps
- 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
- Bu dosya önerilen SSL ayarlarını indirir.
- 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
- 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.