Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

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

Production Ortamına Dağıtım

Bu eğitimde, 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ı okumanızı tercih ederiz.

API Platform (FrankenPHP de kullanır) kullanıyorsanız, çerçevenin dağıtım dokümanına başvurabilirsiniz.

# 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

# Projeniz "public" dizinini web kökü olarak kullanmıyorsa, burada ayarlayabilirsiniz:
# ENV SERVER_ROOT=web/

# 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, PHP eklentilerini ve Caddy modüllerini nasıl kuracağınızı öğrenin.

Projeniz Composer kullanıyorsa, Docker imajına dahil etmeyi ve bağımlılıklarınızı kurmayı unutmayın.

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 volume'ler
volumes:
  caddy_data:
  caddy_config:

Note

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

FrankenPHP kullanan Symfony Docker projesine, çok aşamalı imajlar, Composer, ek PHP eklentileri vb. kullanan daha gelişmiş bir örnek için göz atabilirsiniz.

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 eğitimde, 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.

FrankenPHP’yi Docker ile DigitalOcean’a Dağıtma

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 “Finalize and create” düğmesine tıklayı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, yalın IP adreslerinin kullanılmasını desteklemez. Let’s Encrypt’i kullanmak için bir 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 (<project-name>) ve uygulamayı production modunda başlatın:

docker compose up --wait

Sunucunuz aktif ve çalışıyor, ve sizin için otomatik olarak bir HTTPS sertifikası oluşturulmuştur. 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.

# Ters Proxy Arkasında Çalıştırma

FrankenPHP bir ters proxy veya yük dengeleyicinin (örn. Nginx, AWS ELB, Google Cloud LB) arkasında çalışıyorsa, Caddy’nin gelen X-Forwarded-* başlıklarına güvenmesini sağlamak için Caddyfile dosyanızdaki trusted_proxies genel seçeneğini yapılandırmanız gerekir:

{
	servers {
		trusted_proxies static <your-IPs>
	}
}

Gerektiğinde <your-IPs> değerini proxy’nizin gerçek IP aralıklarıyla değiştirin.

Ek olarak, PHP çerçeveniz de proxy’ye güvenecek şekilde yapılandırılmalıdır. Örneğin, Symfony için TRUSTED_PROXIES ortam değişkenini ayarlayın, veya Laravel için trustedproxies ara yazılımını kullanın.

Her iki yapılandırma da olmazsa, X-Forwarded-For ve X-Forwarded-Proto gibi başlıklar göz ardı edilecek, bu da yanlış HTTPS algılaması veya hatalı istemci IP adresleri gibi sorunlara neden olabilir.

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

Uygulamanızı bir makine kümesine dağıtmak istiyorsanız, sağlanan Compose dosyalarıyla uyumlu olan Docker Swarm kullanabilirsiniz. Kubernetes üzerinde dağıtım yapmak için FrankenPHP kullanan API Platformu ile sağlanan Helm grafiğini inceleyebilirsiniz.

Bu sayfayı düzenleyin