Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Bir web sitesini ya da uygulamayı yeni bir sağlayıcıya veya daha güçlü bir sunucuya taşımanın en güvenilir yollarından biri rsync ile sunucu taşıma yöntemidir. rsync yalnızca değişen dosyaları aktarır, kesilen aktarımı sürdürebilir ve izinleri korur. Böylece eski sunucu çalışırken veriyi önceden kopyalar, geçiş anında yalnızca son farkı eşitleyerek kesintiyi dakikalara indirirsiniz.
Bu rehber, VPS'ten VPS'e geçiş yapan sistem yöneticilerine yöneliktir. Taşınacak şey web dosyaları ve veritabanıdır; tüm işletim sistemini kopyalamayacağız, çünkü bu hem riskli hem gereksizdir. Süre, veri boyutuna bağlıdır; planlama ve test için 1-3 saat ayırın. Örnek IP adresleri belgelendirme aralığından alınmıştır: eski sunucu 198.51.100.10, yeni sunucu 203.0.113.20.
Gereksinimler
- Her iki sunucuda SSH erişimi ve sudo yetkisi
- Her iki sunucuda rsync paketi (
sudo apt install rsyncveyasudo dnf install rsync) - Yeni sunucuda eski sunucuyla uyumlu yazılım yığını (Nginx/Apache, PHP, MariaDB) kurulu olmalı
- Yeni sunucuda yeterli boş disk alanı (
df -hile kontrol edin) - Alan adı DNS kayıtlarını yönetebilme yetkisi; geçişten en az bir gün önce TTL değerini düşürmek
- Uzun aktarımlar için
tmuxveyascreen
Adım adım rsync ile sunucu taşıma
1. Taşıma planını yapın ve TTL'i düşürün
Neyi taşıyacağınızı listeleyin: web dizinleri, veritabanları, yapılandırma ve zamanlanmış görevler. DNS kaydının TTL değerini geçişten en az bir gün önce düşük bir değere (örneğin 300 saniye) çekin; böylece geçiş sırasında yeni IP'ye hızla yönlenilir. Eski sunucuyu geçişten sonra birkaç gün açık tutacaksınız.
2. Yeni sunucuda yazılım yığınını hazırlayın
Yeni sunucuda web sunucusu, PHP ve veritabanı yazılımını kurun; sürümlerin eskisiyle uyumlu olmasına dikkat edin. Eski sunucudaki ayar dosyalarını körü körüne kopyalamayın, yeni dağıtıma uyarlayın.
3. Sunucular arasında anahtar tabanlı SSH kurun
Eski sunucudan yeni sunucuya parolasız ve güvenli bağlanmak için eski sunucuda bir anahtar üretip ortak anahtarı yeni sunucuya ekleyin. Parolayı komut satırında vermeyin.
# Eski sunucuda
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/tasima_anahtari -C 'tasima'
ssh-copy-id -i ~/.ssh/tasima_anahtari.pub kullanici@203.0.113.20
ssh -i ~/.ssh/tasima_anahtari kullanici@203.0.113.20 'echo baglanti tamam'Taşıma bittikten sonra bu anahtarı yeni sunucudaki authorized_keys dosyasından kaldırmayı unutmayın.
4. İlk senkronizasyonu yapın (siteler çalışırken)
Önce --dry-run (-n) ile neyin aktarılacağını görün. Ardından gerçek aktarımı tmux içinde başlatın. -a izinleri ve zamanları korur, -H sabit bağlantıları, -A ACL'leri, -X genişletilmiş öznitelikleri korur. --numeric-ids kullanıcı kimliklerini adlara göre değil sayısal olarak eşler. Sahipliğin korunması için hedefte rsync root olarak çalışmalıdır; normal kullanıcıyla --rsync-path='sudo rsync' ekleyin (parolasız sudo gerekir) ya da sonradan chown yapın.
tmux new -s tasima
rsync -aHAXn --numeric-ids --info=stats2 -e 'ssh -i ~/.ssh/tasima_anahtari' /var/www/ kullanici@203.0.113.20:/var/www/
rsync -aHAX --numeric-ids --info=progress2 -e 'ssh -i ~/.ssh/tasima_anahtari' /var/www/ kullanici@203.0.113.20:/var/www/Dikkat: kaynak yolun sonundaki / işareti, dizinin içeriğini kopyalar; yoksa dizinin kendisi hedefte bir alt klasör olarak oluşur. Bant genişliğini sınırlamak için --bwlimit=20000 (KB/sn) ekleyebilirsiniz. Bağlantı koparsa aynı komutu yeniden çalıştırmanız yeterlidir; rsync kaldığı yerden devam eder.
5. Veritabanını dökün ve aktarın
Veritabanı dosyalarını doğrudan kopyalamayın; mantıksal döküm alın. --single-transaction InnoDB tablolarında tutarlı bir döküm sağlar. Döküm hassas veri içerir, bu yüzden umask 077 ile yalnızca sahibinin okuyabileceği dosya oluşturun. sudo mysqldump yerel kullanıcıyla unix_socket doğrulaması kullanıyorsa parola gerekmez.
umask 077
sudo mysqldump --all-databases --single-transaction --routines --events | gzip > ~/tum-veritabanlari.sql.gz
ls -l ~/tum-veritabanlari.sql.gz
rsync -av --info=progress2 -e 'ssh -i ~/.ssh/tasima_anahtari' ~/tum-veritabanlari.sql.gz kullanici@203.0.113.20:~/Yeni sunucuda içe aktarın. --all-databases dökümü mysql sistem veritabanını da içerir; farklı sürümler arasında bu risklidir. Taşınan uygulamaya ait veritabanlarını tek tek dökmek (mysqldump --databases uygulama_db) daha güvenlidir.
# Yeni sunucuda
gunzip < ~/tum-veritabanlari.sql.gz | sudo mariadb
sudo mariadb -e 'SHOW DATABASES;'6. Yeni sunucuda siteyi DNS'i değiştirmeden test edin
Alan adı hâlâ eski sunucuyu gösterirken yeni sunucuyu test etmek için curl --resolve kullanın. Böylece DNS'e dokunmadan yeni sunucudaki siteyi görürsünüz.
curl -sI --resolve example.com:80:203.0.113.20 http://example.com/ | head -n 5
curl -s --resolve example.com:80:203.0.113.20 http://example.com/ | head -n 207. Geçiş anı: yazma işlemlerini durdurun ve son eşitlemeyi yapın
Planlı bir kesinti penceresinde eski sunucuda siteyi bakım moduna alın veya web ve uygulama servislerini durdurun; böylece son eşitleme sırasında yeni veri yazılmaz. Sonra dosyaları ve veritabanını son kez eşitleyin. --delete seçeneği yeni sunucuda eski sunucuda olmayan dosyaları siler; yalnızca hedef dizinin tam bir kopya olması gerektiğinden eminseniz kullanın ve önce -n ile deneyin.
sudo systemctl stop nginx # veya apache2 / httpd, uygulamaya göre
rsync -aHAXn --numeric-ids --delete --itemize-changes -e 'ssh -i ~/.ssh/tasima_anahtari' /var/www/ kullanici@203.0.113.20:/var/www/
rsync -aHAX --numeric-ids --delete -e 'ssh -i ~/.ssh/tasima_anahtari' /var/www/ kullanici@203.0.113.20:/var/www/Ardından veritabanı dökümünü yeniden alıp yeni sunucuya aktarın (5. adımdaki komutlar; içe aktarım öncesi yeni sunucudaki test verisini silmeniz gerekebilir).
8. DNS'i yeni sunucuya yönlendirin
Alan adının A (ve varsa AAAA) kaydını yeni IP adresine çevirin. TTL düşük olduğu için değişim birkaç dakika içinde yayılır. Yeni sunucuda SSL sertifikasının geçerli olduğundan emin olun.
Doğrulama
Son eşitlemeden sonra iki sunucudaki verinin aynı olduğunu kanıtlayın. Kuru çalıştırma (-n) ve sağlama toplamı (-c) ile fark bulunmadığını görmelisiniz.
rsync -aHAXnc --numeric-ids --itemize-changes -e 'ssh -i ~/.ssh/tasima_anahtari' /var/www/ kullanici@203.0.113.20:/var/www/
du -sh /var/www
ssh -i ~/.ssh/tasima_anahtari kullanici@203.0.113.20 'du -sh /var/www'
dig +short example.com
curl -sI https://example.com/ | head -n 5Beklenen sonuç: rsync çıktısında listelenen dosya yok (boş çıktı, yalnızca özet), iki sunucuda benzer du boyutu, dig çıktısında yeni IP ve sitenin 200 yanıt vermesi.
Sık karşılaşılan sorunlar
- 'Permission denied' hataları: Hedef kullanıcının hedef dizine yazma izni yoktur. Dizin sahipliğini düzeltin veya dosyaları önce kendi ev dizinine aktarıp sudo ile taşıyın.
- Sahiplik beklenmedik şekilde değişti: Kullanıcı kimlikleri iki sunucuda farklıdır.
--numeric-idskullanın ve gerekirsechown -Rile web sunucusu kullanıcısına ayarlayın. - Bağlantı koptu: Aynı komutu tekrar çalıştırın; rsync yalnızca eksik kısmı tamamlar.
- Veritabanı içe aktarımı hata veriyor: Sürüm farkı veya karakter kümesi uyuşmazlığı olabilir. Hata mesajındaki satırı inceleyin; gerekirse tek tek veritabanı dökümü alın.
- Site yeni sunucuda 502/403 veriyor: Servis kullanıcısı, soket yolu, SELinux bağlamı veya PHP-FPM ayarı eski sunucudan farklıdır. Yapılandırmayı yeni dağıtıma göre uyarlayın.
Güvenlik ve bakım notları
--deletekullanmadan önce her zaman-n(kuru çalıştırma) ile sonucu inceleyin; yanlış yol büyük veri kaybına yol açabilir.- Veritabanı dökümlerini 600 izniyle saklayın, aktarım bitince her iki sunucudan da silin.
- Taşıma için oluşturduğunuz SSH anahtarını işiniz bitince yeni sunucudaki
authorized_keysdosyasından kaldırın. - Eski sunucuyu geçişten sonra en az birkaç gün açık tutun; sorun çıkarsa hızlıca geri dönebilirsiniz.
- Yeni sunucuda güvenlik duvarı, SSH sıkılaştırma ve otomatik güncellemeleri geçişle birlikte yeniden uygulayın.
Sık sorulan sorular
rsync ile geçişte ne kadar kesinti olur?
İlk senkronizasyon site çalışırken yapıldığı için kesinti yalnızca son eşitleme ve DNS geçişi sırasında olur. Veri boyutuna bağlı olarak bu birkaç dakikadan bir saate kadar değişebilir.
Tüm işletim sistemini rsync ile kopyalayabilir miyim?
Teknik olarak mümkün olsa da önerilmez; çekirdek, sürücü, ağ ve disk yapılandırması farklı olabileceğinden yeni sunucuyu bozabilir. Temiz kurulum yapıp yalnızca veriyi ve yapılandırmayı taşımak çok daha güvenlidir.
rsync mi scp mi daha uygun?
Büyük ve değişen veri kümelerinde rsync belirgin biçimde üstündür, çünkü yalnızca farkı gönderir ve kesintiden sonra devam eder. Tek seferlik küçük dosyalar için scp de yeterlidir.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Cron ve systemd timer ile zamanlanmış görevlerLinux sunucuda zamanlanmış görev kurun: cron söz dizimi, kilit ve günlükleme, systemd timer ve service çifti, OnCalendar ve Persistent ile güvenilir zamanlama.
- VPS’e LEMP yığını kurulumu (Nginx, MariaDB, PHP-FPM)Boş bir VPS’e LEMP yığınını kurun: Nginx, MariaDB ve PHP-FPM kurulumu, sunucu bloğu, veritabanı oluşturma, güvenlik duvarı ve test. Debian, Ubuntu, AlmaLinux ve Rocky için.
- SSH anahtarı oluşturma ve yönetimi (ed25519, ssh-agent, authorized_keys)ed25519 SSH anahtarı oluşturun, sunucuya ekleyin, ssh-agent ile parola girişini kolaylaştırın, authorized_keys dosyasını yönetin ve parolayla girişi güvenle kapatın.
- restic ile VPS yedeklemerestic ile VPS’inizi şifreli, artımlı ve tekilleştirilmiş şekilde yedekleyin: depo oluşturma, otomasyon, saklama politikası ve geri yükleme adımlarını öğrenin.