Yakın zamanda Wordpress üzerine geçtiğimi biliyorsunuz. CDN kullanımı yapıyordum lakin astarı yüzünden pahalı olmaya başlayıp çok fazla para istedikleri için bende bunu bir şekilde kurtarmalıyım diye düşünüp. Hemen Amazon hesabımın başına geçtim ve bir S3 bucket oluşturdum. Daha sonra dosyaları taşıyıp daha sonradan yüklenecekleri de otomatik yüklenmesi ve organize edilmesi için uğraşacağız.
1. Eski Dosyaların Amazon S3 Üzerine Aktarılması
Bu işlemi yapmak için sunucumuza amazonun ufak bir toolu olan bir aracı kuracağız. Bu araç bize her türlü esnekliği sağlayacak ve dosyalarımız üzerinde sahiplik ve upload işleirni yapabileceğiz.
pip install awscli
Şimdi kurulum tamamlandıktan sonra bir sonraki adım olarak aws configure komutunu veriyorsunuz ve gerekli ayarlamaları yapıyoruz. bu aşamada bize api anahtarı ve kullanacağımız lokasyon gerekecek
AWS Access Key ID [None]: AKIAI44QH8DHBEXAMPLE
AWS Secret Access Key [None]: je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: text
Bu işlemi tamamladığımızda direk olarak senkronizasyon işlemlerine başlayacağız. Sunucumuzda bulunan tüm dosya işlemleri aktaracağız. Bunu yapmak için çok basit olacak burada önemli olan nokta bucket isminizi verecek olmanız ben mertcangokgoz
adlı bucketi kullanacağım için onu giriyorum.
aws s3 sync wp-content/uploads s3://mertcangokgoz/wp-content/uploads --acl public-read
Senkronizasyon komutum böyle bir şeye benziyordu. Sizinki, URL yapısına bağlı olarak değişebilir. Genel görüntüleme için ACL yapısını ayarlamanın kritik olduğunu unutmayın. Mevcut dosyalar için değişiklik yapacaksanız dikkatli olunuz direk olarak geçiş yapmayın. Komutun beklediğim şekilde çalıştığından emin olmak için birkaç dosyadan birkaç test yaptım. Sorunsuz çalıştığını fark ettiğim için tüm dosyaları taşıdım.
2. Wordpress Makale İçerisindeki Eski Medyaların Taşınma İşlemi
En zor kısım işte burası mevcut dosyalarınızı direk olarak değiştirebilecek bir eklenti bulunmuyor. Bunu yapabilmek için SQL üzerinde oynamalar yapmamız gerekecek. Burada iki adet sıkıntı karşımıza çıkabilir. Yapıya göre post_content içerisinde ki yapı değiştiğinden dolayı geçmişte eklemiş olduğunuz bir kaç yazınızdan yapıya bakmanızı öneririm. Buna göre tüm içeriklerdeki değişiklikleri şekillendirmek kolaylaşacak
Benim bulunduğum yapıda her ne hikmetse direk olarak /wp-content/uploads/
şeklinde bir yapı ile kayıtlıydı bunları değiştirmek için direk aşağıdaki komutu kullanmayı planladım.
UPDATE tkmyuwul_posts SET post_content = replace(post_content, '/wp-content/uploads/', 'https://s3-eu-central-1.amazonaws.com/mertcangokgoz/wp-content/uploads/');
Lakin bu durumda eğer kod blokları arasında örnekler yaptıysam ve bunun içerisinde yukarıdaki gibi bir URL bilgisi geçiyorsa onunda link ile değişeceğini bildiğimden dolayı bunu yapmaktan vazgeçtim. Kodu aşağıdaki gibi yeniden şekillendirdim. Böylelikle sadece görseller içerisinde değişiklik yapmasını sağlamış olacaktım.
UPDATE tkmyuwul_posts SET post_content = replace(post_content, '
Yaklaşık olarak benim bugüne kadar eklemiş olduğum içerikler içerisinde 301 adet değişmesi gereken alan olduğunu görmüştüm. Bu komut ilede bunların gerçekten uygulandığını anlamış oldum tabi 299 adeti düzeltilmişti. Geriye kan 2 taneside benim daha önceden eklediğim içerik olduğu için istediğim url yapısı zaten onlarda mevcutmuştu.
Bu işlemleri tamamladığımızda kontrol amacı ile içeriklerimize baktığımızda çalıştığını gördük. Yani geçişimiz sırasında bir sorun ile karşılaşmayacağız. Eski içerikler içerisinde ki görsellere de baktığımızda işlem tamamlanmış olacak.
3. Web Sunucu Yönlendirmeleri
Herşeyi güzelce yaptık ama eski assetler ve google tarafından bir takım istekler gelmeye devam edecek bunları direk olarak hiçbir şekilde değiştiremeyeceğimiz içinde aşağıdaki gibi web sunucusu tarafında yönlendirme yapmamız gerekecek.
NGINX kullandığım için şu şekilde bir düzenlemeye gittim.
location ~ "^/wp-content/uploads/(.*)$" {
try_files $uri @amazons3;
}
location @amazons3{
rewrite "^/wp-content/uploads/(.*)$" "https://s3-eu-central-1.amazonaws.com/mertcangokgoz/wp-content/uploads/\" redirect;
}
Yerinde test yapmak için bir kez, her şey beklendiği gibi çalıştığından emin olmak için eski yüklemeleri genel dizinin dışına taşıdım, daha sonra çalıştığını gördükten hemen sonra dosyaları web sunucusundan sildim.
Apache kullanan arkadaşlarıda unutmadım.
# rewrite missing images to load from AWS S3
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png|ico)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule wp-content/uploads/(.*) [L]
Son olarak sonradan yükleceğiniz içeriklerin S3 servisine yüklenmesini sağlayacak olan eklentiyi Wordpress in resmi deposundan indirip sisteminize dahil etmeniz gerekmektedir. Bu işlem için WP Offload S3 Lite kullanabilirsiniz. Böylelikle yeni yükledikleriniz de otomatik olarak yüklenecek ve servis edilmeye başlayacak. Kullanacağınız URL yapısını da eklenti üzerinden görüp gerekli adımları atabilirsiniz.
4. Ücretlendirme
S3 gibi storage sağlayıcıları gibi pek çok servis bulunuyor. Hem kullanım kolaylığı hemde ücret açısından yormadığı için kullanmayı tercih ediyoruz.