Tarafından desteklenmektedir
Production Ortamına Dağıtım

Production Ortamına Dağıtım

Bu dokümanda, Docker Compose kullanarak bir PHP uygulamasını tek bir sunucuya nasıl dağıtacağımızı öğreneceğiz.

Symfony kullanıyorsanız, Symfony Docker projesinin (FrankenPHP kullanan) “Production ortamına dağıtım” dokümanını okumayı tercih edebilirsiniz.

API Platform (FrankenPHP de kullanır) tercih ediyorsanız, çerçevenin dağıtım dokümanına bakabilirsiniz.

# Uygulamanızı Hazırlama

İlk olarak, PHP projenizin kök dizininde bir Dockerfile oluşturun:

FROM dunglas/frankenphp

# "your-domain-name.example.com" yerine kendi alan adınızı yazdığınızdan emin olun
ENV SERVER_NAME=your-domain-name.example.com
# HTTPS'yi devre dışı bırakmak istiyorsanız, bunun yerine bu değeri kullanın:
#ENV SERVER_NAME=:80

# PHP production ayarlarını etkinleştirin
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

# Projenizin PHP dosyalarını genel dizine kopyalayın
COPY . /app/public
# Symfony veya Laravel kullanıyorsanız, bunun yerine tüm projeyi kopyalamanız gerekir:
#COPY . /app

Daha fazla ayrıntı ve seçenek için “Özel Docker İmajı Oluşturma” bölümüne bakın, ve yapılandırmayı nasıl özelleştireceğinizi öğrenmek için PHP eklentilerini ve Caddy modüllerini yükleyin.

Projeniz Composer kullanıyorsa, Docker imajına dahil ettiğinizden ve bağımlılıklarınızı yüklediğinizden emin olun.

Ardından, bir compose.yaml dosyası ekleyin:

services:
  php:
    image: dunglas/frankenphp
    restart: always
    ports:
      - "80:80" # HTTP
      - "443:443" # HTTPS
      - "443:443/udp" # HTTP/3
    volumes:
      - caddy_data:/data
      - caddy_config:/config

# Caddy sertifikaları ve yapılandırması için gereken yığınlar (volumes)
volumes:
  caddy_data:
  caddy_config:

Note

Önceki örnekler production kullanımı için tasarlanmıştır. Geliştirme aşamasında, bir yığın (volume), farklı bir PHP yapılandırması ve SERVER_NAME ortam değişkeni için farklı bir değer kullanmak isteyebilirsiniz.

(FrankenPHP kullanan) çok aşamalı Composer, ekstra PHP eklentileri vb. içeren imajlara başvuran daha gelişmiş bir örnek için Symfony Docker projesine bir göz atın.

Son olarak, eğer Git kullanıyorsanız, bu dosyaları commit edin ve push edin.

# Sunucu Hazırlama

Uygulamanızı production ortamına dağıtmak için bir sunucuya ihtiyacınız vardır. Bu dokümanda, DigitalOcean tarafından sağlanan bir sanal makine kullanacağız, ancak herhangi bir Linux sunucusu çalışabilir. Docker yüklü bir Linux sunucunuz varsa, doğrudan bir sonraki bölüme geçebilirsiniz.

Aksi takdirde, 200 $ ücretsiz kredi almak için bu ortaklık bağlantısını kullanın, bir hesap oluşturun ve ardından “Create a Droplet” seçeneğine tıklayın. Ardından, “Bir imaj seçin” bölümünün altındaki “Marketplace” sekmesine tıklayın ve “Docker” adlı uygulamayı bulun. Bu, Docker ve Docker Compose’un en son sürümlerinin zaten yüklü olduğu bir Ubuntu sunucusu sağlayacaktır!

Test amaçlı kullanım için en ucuz planlar yeterli olacaktır. Gerçek production kullanımı için, muhtemelen ihtiyaçlarınıza uyacak şekilde “genel amaçlı” bölümünden bir plan seçmek isteyeceksiniz.

Docker ile DigitalOcean FrankenPHP

Diğer ayarlar için varsayılanları koruyabilir veya ihtiyaçlarınıza göre değiştirebilirsiniz. SSH anahtarınızı eklemeyi veya bir parola oluşturmayı unutmayın, ardından “Sonlandır ve oluştur” düğmesine basın.

Ardından, Droplet’iniz hazırlanırken birkaç saniye bekleyin. Droplet’iniz hazır olduğunda, bağlanmak için SSH kullanın:

ssh root@<droplet-ip>

# Alan Adı Yapılandırma

Çoğu durumda sitenizle bir alan adını ilişkilendirmek isteyeceksiniz. Henüz bir alan adınız yoksa, bir kayıt şirketi aracılığıyla bir alan adı satın almanız gerekir.

Daha sonra alan adınız için sunucunuzun IP adresini işaret eden A türünde bir DNS kaydı oluşturun:

your-domain-name.example.com.  IN  A     207.154.233.113

DigitalOcean Alan Adları hizmetiyle ilgili örnek (“Networking” > “Domains”):

DigitalOcean’da DNS Yapılandırma

Note

FrankenPHP tarafından varsayılan olarak otomatik olarak TLS sertifikası oluşturmak için kullanılan hizmet olan Let’s Encrypt, direkt IP adreslerinin kullanılmasını desteklemez. Let’s Encrypt’i kullanmak için alan adı kullanmak zorunludur.

# Dağıtım

Projenizi git clone, scp veya ihtiyacınıza uygun başka bir araç kullanarak sunucuya kopyalayın. GitHub kullanıyorsanız bir dağıtım anahtarı kullanmak isteyebilirsiniz. Dağıtım anahtarları ayrıca GitLab tarafından desteklenir.

Git ile örnek:

git clone git@github.com:<username>/<project-name>.git

Projenizi içeren dizine gidin (<proje-adı>) ve uygulamayı production modunda başlatın:

docker compose up -d --wait

Sunucunuz hazır ve çalışıyor. Sizin için otomatik olarak bir HTTPS sertifikası oluşturuldu. https://your-domain-name.example.com adresine gidin ve keyfini çıkarın!

Caution

Docker bir önbellek katmanına sahip olabilir, her dağıtım için doğru derlemeye sahip olduğunuzdan emin olun veya önbellek sorununu önlemek için projenizi --no-cache seçeneği ile yeniden oluşturun.

# Birden Fazla Düğümde Dağıtım

Uygulamanızı bir makine kümesine dağıtmak istiyorsanız, Docker Swarm kullanabilirsiniz, sağlanan Compose dosyaları ile uyumludur. Kubernetes üzerinde dağıtım yapmak için FrankenPHP kullanan API Platformu ile sağlanan Helm grafiğine göz atın.

Bu sayfayı düzenleyin