GarageHQ S3 Server Kurulumu

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 :slight_smile:

Ö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. :slight_smile:

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>