GarageHQ S3 nedir?
GarageHQ S3 yazılımı Amazon AWS, Huawei Cloud, Google Cloud gibi yazılımların açık kaynak alternatifidir. Yerel cihazınıza veya sunucunuza kurarak bu ücretli ve boykot listesinde de bulunan servisleri kullanmaktan ve onlara bağımlı kalmaktan kurtulmuş olmak ile birlikte verilerinizi tamamen kendi kontrolünüzde barındırabilirsiniz.
Biz nerede kullanıyoruz?
Daha önceden açmış olduğumuz Pardus 23-25 Pangolin Kurulumu başlıklı konuda MinIO S3
kullandığımız dillendirmiştim. Ancak bir nebze sorunlar yaşadığımız için bu yazılımı kullanmaktan vazgeçtik ve bir başka açık kaynak alternatif olan GarageHQ’yü kullanmaya başladık. Bu yazılımı Arslanşah Sosyal Medya’nın medya içeriklerini depolaması için yerel cihazımızda kullanıyoruz. Önceki konuda anlattığımız sunucuya kurulu Pangolin yazılımı ise yerel cihazımızı URL ile dışarı açmamıza yarıyor. Gelecekte Arslanşah Video için de kullanmaya başlayacağız.
Not/Uyarı ve Sorumluluk Reddi
Bu işlemlerin uygulamasını öncelikle kullanılmayan bir cihaz veya sanal makinede yapmanızı öneririz. Yazılım veya dağıtım sürümlerinde farklılıklar oluşabilir. Bu yazı yalnızca bir rehber niteliğindedir.
Gerçek kullanımlarda oluşacak herhangi bir veri kaybı veya sorunda; şahsım, Pardus, Pardus Forum, Pardus Gönüllü veya Topluluklarına sorumluluk atfedilemez, yüklenemez.
Dökümanın hazırlanışındaki şartlar;
İşletim Sistemi: Debian 13
GarageHQ sürümü: v2.1.0
Kurulum
GarageHQ’nün kurulumunun basitliğine şaşırabilirsiniz
Öncelikle GarageHQ’nün config dosyasını olusturmamız gerekiyor. Bu config dosyasındaki bazı değerlerin anlamları:
metadata_dir: Veritabanı, şifreleme anahtarları ve yapının işleyişine dair config ayarları.
data_dir: Yedeklenecek verilerin tutulacağı dizin.
db_engine: Veritabanı türü
replication_factor: bu ayar biraz karmaşk. şuradan inceleyebilirsiniz: Configuration file format | Garage HQ
CONFIG dosyasındaki portları da isteğiniz gibi değiştirebilirsiniz. Bu yazıda portlar buradaki CONFIG dosyasına göredir.
cat > garage.toml <<EOF
metadata_dir = "/tmp/meta"
data_dir = "/tmp/data"
db_engine = "sqlite"
replication_factor = 2
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "$(openssl rand -hex 32)"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage.localhost"
[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.localhost"
index = "index.html"
[k2v_api]
api_bind_addr = "[::]:3904"
[admin]
api_bind_addr = "[::]:3903"
admin_token = "$(openssl rand -base64 32)"
metrics_token = "$(openssl rand -base64 32)"
EOF
GarageHQ Server’i çalıştırma
komut:
garage -c path/to/garage.toml server
Aslında burada kurulum işlemi tamamen bitti. Geri kalan kullanacağımız amaç doğrultusunda yazılımı yapılandırma işlemidir.
Garage durumu görüntüleme
Bu çıktıdan ID bilgisini kullanacağız. Kayıt edelim. Bu değer ilerleyen kısımlarda node_id
olarak geçecek.
Komut:
garage status
Çıktı:
==== HEALTHY NODES ====
ID Hostname Address Tags Zone Capacity DataAvail Version
a0bfa2883afc4f01 debian 127.0.0.1:3901 NO ROLE ASSIGNED v2.1.0
Küme düzeni oluşturma | Creating a cluster layout
garage layout assign -z <bolge-adi> -c <kapasite> <node_id>
bolge-adi: bir isim belirlemeniz gerekli. Sunucunun bulunduğu şehrin ismi/kodu veya alakasız bir şey olabilir. Genellikle tr_ist
gibi ülke kodu ve şehir kodu kullanılır.
kapasite: düzene ayrılan kapasitenin disk kapasitesi Örnek 100M
, 3G
, 600G
gibi.
Düzen uygulama
--version
değeri 1, 2, 3, 4, 5, 6, 7 olabilir. Bir hata alırsanız sırasıyla deneyebilirsiniz.
garage layout apply --version 1
Garage key oluşturma:
Bucketlere erişilebilmesi için anahtar değer oluşturuyoruz. Birden fazla anahtar değer oluşturabilirsiniz. İleride bu anahtar değerleri bucket/depo’ya bağlayıp belli izinler vereceğiz.
garage key create <key-ismi>
Burada çıktıdaki Key ID
ve Secret key
değerlerini bir köşeye kayıt ediniz. Erişimi bu değerler ile sağlayacaksınız.
Bucket oluşturma
Verilerin depolanacağı bucketi/depoyu oluşturuyoruz. Dilerseniz birden fazla depo oluşturabilirsiniz. Farklı yazılımlar kullanıyorsanız veya kategorilendiriyorsanız bu tavsiye edilir. Bu temel/ana dizin kabul edebilirsiniz.
garage bucket create <bucket-ismi>
Keye Bucket’te İzin Verme
Oluşturduğumuz anahtar değere bucket/depo’ya bağlanması için erişim izni veriyoruz. Bu örnekte okuma --read
ve yazma --write
izinleri allow
verilmiş.
garage bucket allow <bucket-ismi> --read --write --key <key-ismi>
(Opsiyonel) Bucket’e bağlanacak alan adını tanımlama
Bu alan adı uzaktaki sunucumuzun medya alan adı olabilir. Meselâ biz Arslanşah için medya.s3.arslansah.com.tr alan adını kullanıyoruz. Bu alan adını tanımlamazsanız dışarıdan key bilgisi olmadan içeriğe erişim sağlayamazlar. Mastodon için istediğimiz husus key bilgisi olmadan medyaların görüntülenebilir olması, bu izni ise sonraki adımda vereceğiz. Şimdi alan adını tanımladık.
garage bucket alias <bucket-ismi> <medyanın gösterileceği domain adresi>
(Opsiyonel) Bucket Website bağlantısı için izin vermek
garage bucket website --allow <bucket-ismi>
TEST BÖLÜMÜ
Test işlemini yapmamız için awscli
’ye ihtiyacımız var. Onu kurabilmemiz için ise pipx
paketine ihtiyacımız var. Öncelikle sudo apt install pipx
komutu ile pipx
paketini kuralım. Sonrasında ise pipx install awscli
komutu ile awscli kuralım.
Not: Bu bölümdeki çıktılar kendi sunucumuzdandır.
export AWS_ACCESS_KEY_ID='GKd8uizui54eia45ia2eai54a'
export AWS_SECRET_ACCESS_KEY='54a65uia45a898g2a54ia21iea4ie21aie4aaie56a4iea8ei5uieuie544uei54u'
export AWS_DEFAULT_REGION='garage'
export AWS_ENDPOINT_URL='http://localhost:3900'
Bucket Listesi Çekme
aws s3 ls
Bucket/depo listesini verir. Burada isimlerini ve oluşturulma zamanlarını görürsünüz.
Çıktı:
2025-09-29 21:09:44 arslansah-mastodon-data
Bucket/Depo Objelerini Alma
aws s3 ls s3://arslansah-mastodon-data
Çıktı:
PRE accounts/
PRE cache/
PRE custom_emojis/
PRE media_attachments/
PRE preview_cards/
PRE site_uploads/
İstemci ile Dosya Yükleme
aws s3 cp <dosya-ismi> s3://<bucket-ismi>
İstemci ile Dosya İndirme
aws s3 cp s3://<bucket-ismi>/<dosya veya dizin yolu> <konum>