Git Deponuzun DigitalOcean Uzaylarına Nasıl Yedeklenir

Giriş

Sürüm oluşturma için bir kaynak kodu deposuna güvenmek, bir kod değişikliği uygulamanızın çökmesine veya hatalı davrandınlmasına neden olduğunda bizi yedekleyebilir ve çalıştırabilirsiniz en iyi uygulamadır. Bununla birlikte, tam bir şube gibi yanlışlıkla silinen veya bir havuza erişimi kaybeden bir felaket olayı durumunda, ek felaket kurtarma stratejilerini kullanmalıyız.

Kod deponuzu bir nesne depolama altyapısına yedeklediğimizde, ihtiyaç duyduğumuz zaman kurtarabildiğimiz verilerimizin dışında bir kopyası sağlanmaktadır. Uzaylar, dijital varlıkların, belgelerin ve kodun yedeklerini depolamak için kullanıcılara bir hedef sunan DigitalOcean'un nesne depolama çözümüdür.

S3 API ile uyumlu Spaces, S3cmd gibi S3 araçlarını onunla arabirim oluşturmak için kullanmamıza izin verir. S3cmd, komut satırı üzerinden veya komut dosyası aracılığıyla nesne depolama alanından veri yüklemek, almak ve yönetmek için kullanabileceğiniz bir istemci araçtır.

Bu yazıda S3cmd'yi kullanarak uzak bir Git deposunun DigitalOcean Uzayına nasıl yedekleneceğini göstereceğiz. Bu amaca ulaşmak için, Git'i kurup yapılandırıp, S3cmd'yi kuracağız ve Git havuzunu Uzaya yedeklemek için komut dizileri oluşturacağız.

Ön şartlar

Spaces ile çalışabilmek için bir DigitalOcean hesabına ihtiyacınız olacak. Zaten bir tane yoksa, kayıt sayfasında kayıt olabilirsiniz.

Buradan, DigitalOcean Uzayınızı kurmanız ve bir DigitalOcean Uzayı ve API Anahtarı Nasıl Oluşturulur adlı öğreticimizi izleyerek elde edebileceğiniz bir API anahtarı oluşturmanız gerekecek.

Yaratıldıktan sonra, Uzay kullanışlılığınızla ilgili aşağıdaki bilgileri saklamanız gerekir:

  • Erişim anahtarı
  • Gizli Anahtar (token olarak da adlandırılır)

Ek olarak, bir Ubuntu 16.04 sunucusunu bir sudo köklü olmayan kullanıcı ile kurmalısınız. Bunu ayarlamak için bu Ubuntu 16.04 ilk sunucu kurulum öğreticisini izleyerek rehberlik alabilirsiniz.

Uzaylar bilgisini ve sunucunuzu kurduktan sonra Git'i kurmak için bir sonraki bölüme geçin.

Git'i yükle

Bu yazıda, sunucumuza kopyalayacağımız uzak bir Git deposuyla çalışacağız. Ubuntu, Git yüklüdür ve varsayılan depolarında kullanılmaya hazırdır, ancak bu sürüm en yeni kullanılabilir sürümden daha eski olabilir.

Yerel paket indeksini güncellemek ve Git'in en güncel sürümünü indirip kurmak için apt paket yönetim araçlarını kullanabiliriz.

  • sudo apt-get güncelleme
  • sudo apt-get install git

Git'i kurmanın daha esnek bir yolu ve en yeni sürüme sahip olduğunuzdan emin olmak için, Source'dan Git'i yüklemeyi düşünebilirsiniz.

Git deponunun URL'inden yedekleneceğiz, bu nedenle bu öğreticide Git'i yapılandırmamız gerekmeyecek. Git'i yapılandırmayla ilgili talimatlar için, Git'i Nasıl Ayarlayacağınız konusundaki bu bölümü okuyun.

Şimdi uzak Git deponuzu klonlamaya devam edeceğiz.

Uzak Git depolarını klonlamak

Git deponuzu klonlamak için, görevi gerçekleştirecek bir komut dosyası oluşturacağız. Komut dosyası oluşturmak değişkenleri kullanmamızı sağlar ve komut satırında hatalar yapmamamıza yardımcı olur.

Çalıştırılabilir komut cloneremote.sh için, metin düzenleyici nano ile cloneremote.sh adında yeni bir kabuk komut dosyası oluştururuz.

  • nano cloneremote.sh

Bu boş dosya içinde, aşağıdaki komut dosyasını yazalım.

cloneremote.sh#!/bin/bash

remoterepo=your_remote_repository_url
localclonedir=repos
clonefilename=demoprojectlocal.git

git clone --mirror $remoterepo $localclonedir/$clonefilename

Bu senaryonun her bir unsurunu inceleyelim.

İlk satır – #!/bin/bash – komut dosyasının Bash kabuğu tarafından çalıştırılacağını belirtir. Buradan, komut dosyasında kullanılacak değişkenleri tanımlıyoruz, bu da komut dosyasını çalıştırdıktan sonra çalışacaktır. Bu değişkenler, aşağıdaki yapılandırmaları tanımlar:

  • remoterepo , yedeklemekte olacağımız uzak Git depo URL'si atanıyor.
  • localclonedir , uzaktaki depoyu kopyalayacağımız sunucu dizini veya klasörü anlamına gelir; bu durumda repos adlandırdık.
  • clonefilename , yerel olarak klonlanmış havuza sağlayacağımız dosya clonefilename belirtir, bu durumda demoprojectlocal.git adlandırdık.

Bu değişkenlerin her biri doğrudan komut dosyasının sonunda komut satırında çağrılır.

Komut dosyasının son satırı git komutu ile başlayan Git komut satırı istemcisini kullanır. Oradan, bir depo klonlamak talebinde clone ve birlikte Deponun bir ayna sürüm olarak yürütülmesi --mirror etiketi. Bu, klonlanan deponun orijinal ile aynı olacağı anlamına gelir. Yukarıda tanımladığımız üç değişken $ ile çağrılır.

Yazdığınız senaryonun doğru olduğundan emin olduğunuzda CTRL + x tuşlarını yazarak nano'dan çıkabilirsiniz ve dosyayı kaydetmek isteyip istemediğinizde y tuşuna basın.

Bu noktada aşağıdaki komutu kullanarak kabuk komut dosyasını çalıştırabiliriz.

  • sh cloneremote.sh

Komutu çalıştırdıktan sonra, aşağıdakine benzer bir çıktı alırsınız.

OutputCloning into bare repository './repos/demoprojectlocal.git'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

Bu noktada, geçerli dizinde öğeleri listelerseniz, yedek dizini orada görmelisiniz ve bu dizine geçerseniz, komut dosyasında sağladığınız dosya adıyla alt klasörü göreceksiniz. Bu alt klasör Git deposunun klonudur.

Uzaktaki Git depomuzun klonlanmasından sonra, depoyu nesne depolama alanına yedeklemek için kullanabildiğimiz S3cmd'yi kurmaya devam edebiliriz.

S3cmd'yi yükle

S3cmd aracı, komut satırından Uzay ortamına bağlanmamızı sağlar. S3cmd'nin en son sürümünü, genel GitHub deposundan indireceğiz ve kurulum için önerilen yönergeleri izleyeceğiz.

S3cmd'yi yüklemeden önce, kurulumumuzda yardımcı olacak şekilde Python'un Setuptools'u yüklemeliyiz (S3cmd, Python'da yazılmıştır).

  • sudo apt-get install python-setuptools

y etmek için y basın.

Bu indirildiğinde, şimdi curl ile S3cmd tar.gz dosyasını indirebiliriz.

  • cd / tmp
  • curl -LO https://github.com/s3tools/s3cmd/releases/download/v2.0.1/s3cmd-2.0.1.tar.gz

Dosyayı tmp dizinimize indirdiğimizi unutmayın. Dosyaları sunucumuza indirirken bu yaygın bir uygulamadır.

Kullanabileceğiniz daha yeni bir S3cmd sürümü olup olmadığını öğrenmek için aracın GitHub deposunun Releases (Bültenleri) sayfasını ziyaret edebilirsiniz. Daha yeni bir sürüm bulursanız, tar.gz URL'sini kopyalayıp yukarıdaki curl komutuna atayabilirsiniz.

İndirme tamamlandığında, tar yardımcı programını kullanarak dosyayı sıkıştırın ve ambalajından çıkarın:

  • cd ~
  • katran xf /tmp/s3cmd-*.tar.gz

Yukarıdaki komutlarda, ana dizinimize geri dönüp tar komutunu çalıştırdık. Komut ile iki bayrak kullandık; x , bir tar dosyasından e x tract yapmak istediğimizi ve f , hemen bitişik dizenin, genişletmek istediğimiz dosyanın tam yol adı olacağını gösterdiğini belirtir. Tar dosyasının dosya yolunda bunun tmp dizininde olduğunu da belirttik.

Dosya çıkarıldıktan sonra, sonuç dizinine geçin ve yazılımı sudo kullanarak yükleyin:

  • cd s3cmd- *
  • sudo python setup.py install

Yukarıdaki komutun çalıştırılması için sudo kullanmamız gerekir. python komutu, setup.py Python komut dosyasını yüklemek için Python yorumlayıcıya yapılan bir çağrıdır.

S3cmd'ye sürüm bilgileri için başvurarak yüklemeyi test edin:

  • s3cmd --version

Outputs3cmd version 2.0.1

Benzer çıktıyı görürseniz, S3cmd başarıyla yüklenmiştir. Sonra, S3cmd'yi nesne depolama hizmetimize bağlanacak şekilde konfigüre edeceğiz.

S3cmd'yi yapılandır

S3cmd, nesne depolama sunucumuza bağlanmak için gereken yapılandırma dosyasını oluşturabilen etkileşimli bir yapılandırma sürecine sahiptir. Konfigürasyon işlemi sırasında, Erişim Anahtarı ve Gizli Anahtarı sizden istenecektir, bu yüzden bunları hazır bulundurun.

Aşağıdaki komutu yazarak yapılandırma işlemine başlayalım:

  • s3cmd - yapılandırma

Anahtarlarımızı girmemiz isteniyor, bu yüzden onları yapıştıralım ve ardından US Varsayılan Bölge olarak kabul edelim. Varsayılan Bölgesi'ni değiştirebilme özelliği, S3cmd aracının başlangıçta birlikte çalışmak üzere oluşturulduğu AWS altyapısıyla alakalı olduğunu belirtmek isteriz. DigitalOcean, yapılandırma için daha az bilgi parçasına ihtiyaç duyduğundan, bu, alakalı değildir, bu nedenle varsayılan kabul ediyoruz.

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key []: EXAMPLE7UQOTHDTF3GK4
Secret Key []: b8e1ec97b97bff326955375c5example
Default Region [US]:

Ardından DigitalOcean uç nokta nyc3.digitaloceanspaces.com .

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: nyc3.digitaloceanspaces.com

Spaces, DNS tabanlı kovaları desteklediğinden, bir sonraki adımda kovanın değerini gerekli biçimde sağlayacağız:

%(bucket)s.nyc3.digitaloceanspaces.com
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars c
an be used if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket []: %(bucket)s.nyc3.digitaloceanspaces.com

Bu noktada, bir şifreleme parolası sağlamamız isteniyor. Şifreleme kullanmak istediğimizde kullanılabilmesi için bir şifre gireceğiz.

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: secure_password
Path to GPG program [/usr/bin/gpg]:

Ardından HTTPS ile bağlanmanız isteniyor, ancak DigitalOcean Spaces şifrelenmemiş aktarımı desteklemiyor, bu nedenle varsayılanı kabul etmek için ENTER basacağız, Yes .

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]:

Bir HTTP Proxy sunucusu kullanmadığımız için sonraki istemi boş bırakıp ENTER tuşuna ENTER .

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

HTTP Proxy sunucu adının sorulmasından sonra, yapılandırma komut dosyası kullanacağı değerlerin bir özetini ve bunları test etme fırsatı sunar. Test başarıyla tamamlandığında, ayarları kaydetmek için Y girin.

Konfigürasyonu kaydettikten sonra konumunun onayını alırsınız.

Tüm yükleme adımlarını tamamladığınızda, aşağıdaki komutu çalıştırarak kurulumunuzun doğru olup olmadığını iki kez kontrol edebilirsiniz.

  • s3cmd ls

Bu komut, sağladığınız kimlik bilgileri kapsamında kullanabileceğiniz Uzayların listesini çıkarmalıdır.

Output2017-12-15 02:52 s3://demospace

Bu, DigitalOcean Uzamlarına başarıyla bağlandığımızı teyit eder. Git deponuzu nesne depolama alanına yedeklemeye devam edebiliriz.

Git deposunu nesne deposuna yedekle

Tüm araçlarımız kurulu ve yapılandırılmış olarak şimdi, yerel depoyu zipleyip DigitalOcean Uzay alanımıza itecek bir betik oluşturacağız.

Ev dizinimizden, komut movetospaces.sh arayıp nano'da movetospaces.sh .

  • cd ~
  • nano movetospaces.sh

Senaryomuzu şöyle yazacağız.

movetospaces.sh#!/bin/sh

tar -zcvf archivedemoproject.tar.gz /repos/demoprojectlocal.git
./s3cmd-2.0.1/s3cmd put archivedemoproject.tar.gz s3://demospace

Daha önce bu eğitimde, biz kullandım tar halletmek için s3cmd , şimdi kullandığınız tar Spaces göndermeden önce Git deposunu zip. tar komutunda dört bayrak belirtiriz:

  • z , gzip yöntemini kullanarak sıkıştırır
  • c varolan dosyayı kullanmak yerine yeni bir dosya oluşturur
  • v , sıkıştırılmış dosyaya dahil edilen dosyalar hakkında ayrıntılı bilgiler verdiğimizi gösterir
  • f sonucundaki dosyayı bir sonraki dizede tanımlanan adla adlandırır

Bayrakları takiben, sıkıştırılmış dosya için bir dosya adı sağlıyoruz, bu durumda archivedemoproject.tar.gz . Ayrıca zip /repos/demoprojectlocal.git yapmak istediğimiz dizinin adını da /repos/demoprojectlocal.git .

Daha sonra komut dosyası yürütür s3cmd put göndermek için archivedemoproject.tar.gz bizim hedef Uzay için s3://demospace .

S3cmd ile sıklıkla kullanabileceğiniz komutlar arasında, put komutu dosyaları Uzay'a gönderir. Yararlı olabilecek diğer komutlar, dosyaları Alan'dan indirmek için get komutunu ve dosyaları delete için delete komutunu içerir. Hiçbir seçeneğe sahip olmayan s3cmd çalıştırarak s3cmd tarafından kabul edilen tüm komutların listesini elde edebilirsiniz.

Yedeklemenizi Uzaya kopyalamak için, senaryoyu yürütürüz.

  • sh movetospaces.sh

Aşağıdaki çıktıyı göreceksiniz:

Outputdemoprojectlocal.git/
...
demoprojectlocal.git/packed-refs
upload: 'archivedemoproject.tar.gz' -> 's3://demobucket/archivedemoproject.tar.gz' [1 of 1]
6866 of 6866 100% in 0s 89.77 kB/s done

Aşağıdaki komutu çalıştırarak işlemin doğru çalıştığını kontrol edebilirsiniz:

  • s3cmd ls s3: // demospace

Dosyanın Uzaydaki olduğunu belirten aşağıdaki çıktıyı görürsünüz.

Output2017-12-18 20:31 6866 s3://demospace/archivedemoproject.tar.gz

Artık Git deponuzu DigitalOcean Space'e başarıyla yedekledik.

Sonuç

Gerekirse kodun çabucak kurtarılabilmesini sağlamak için yedeklemeleri korumak önemlidir. Bu yazıda, Git, S3cmd istemcisi ve kabuk komut dosyalarını kullanarak uzak bir Git deposunu bir DigitalOcean Uzayına yedeklemeyi ele aldık. Bu, felaket kurtarma ve veri tutarlılık stratejilerinizde yardımcı olması için Spaces'i kullanabileceğiniz olası onlar senaryolarından sadece biridir.

Aşağıdaki eğitimler okuyarak, nesne depolama alanına saklayabileceğimiz konusunda daha fazla bilgi edinebilirsiniz:

  • Logrotate ve S3cmd'yi Ubuntu 16.04'te Nesne Depolama Birimlerine Arşivlemek İçin Nasıl Kullanılır
  • Restic Backup Client ile Nesne Depolama Hizmetine Verileri Yedekleme
  • Bir Synology NAS'yi DigitalOcean Uzaylarına Nasıl Yedeklenir?

Bir önceki yazımız olan Altyapınızı ve Uygulamalarınızdan Metrik Toplama başlıklı makalemizi de okumanızı öneririz.

About This Author

Uzun yıllardır yazılım ile uğraşıyorum. PHP ile başladığım yazılım hayatıma şu an PHP'nin yanında Swift ve Python ile devam ediyorum. Bu güne kadar bir çok proje geliştirdim ve yeni projeler geliştirmeye de devam ediyorum. Bu sitede yazılımseverlere faydalı bilgiler vermeye, yazılım geliştirmeye, öğrendiklerimi paylaşmaya, yeni başlayanlara yol göstermeye ve onlara yardımcı olmaya çalışıyorum.

Comments are closed

%d blogcu bunu beğendi: