Bir sabah uyandığımda akıllı ampullerim çalışmıyordu. İnternet kesintisi yüzünden bulut servisleriyle bağlantı kuramıyorlardı ve evdeki basit otomasyonlar bile durmuştu. Bu durum, tüm akıllı ev altyapımı üçüncü parti bulut servislerine bağımlı kurmanın ne kadar büyük bir risk olduğunu net bir şekilde gösterdi. Kendi evimde, kendi kontrolümde çalışan, bulut bağımsız bir akıllı ev sistemi kurma ihtiyacı o gün ortaya çıktı.
Home Assistant, bu ihtiyacımı karşılayan açık kaynaklı bir platform. Piyasadaki yüzlerce akıllı cihazla entegre olabiliyor ve en güzeli de, cihazların çoğunu yerel ağ üzerinden kontrol edebilme yeteneği sunuyor. Bu yazıda, Home Assistant’ı kendi sunucunuzda, Docker Compose kullanarak nasıl kurabileceğinizi ve temel güvenlik adımlarını nasıl uygulayabileceğinizi adım adım anlatacağım. Amacım, ev otomasyonunuzu tamamen kendi kontrolünüze almanızı sağlamak.
Neden Kendi Home Assistant Sunucumu Kurdum? Bulut Bağımsızlığının Önemi
Akıllı ev cihazları pazarında birçok ürün ve platform var, ancak neredeyse hepsi bir üreticinin bulut servisine bağımlı çalışıyor. Bu bağımlılık, internet bağlantınız koptuğunda veya üretici bulut hizmetini sonlandırdığında cihazlarınızın kullanılamaz hale gelmesi anlamına geliyor. Örneğin, bir dönem kullandığım bir akıllı priz markasının bulut servisi birkaç gün kesintiye uğradığında, evdeki zamanlayıcılar ve uzaktan erişim tamamen durmuştu. Bu tür deneyimler, benim gibi sistemlerin kontrolünü elinde tutmayı sevenler için kabul edilemez.
Kendi Home Assistant sunucumu kurarak, veri gizliliği ve güvenlik konusunda da önemli bir adım attım. Hangi verinin kimin sunucularına gittiği, nasıl depolandığı ve kimlerle paylaşıldığı konularında her zaman şüphelerim olmuştur. Kendi sunucumda çalışan bir Home Assistant, tüm cihaz verilerini yerel olarak işleyerek bu endişeleri ortadan kaldırıyor. Ayrıca, internet bağlantısı olmasa bile evdeki otomasyonlarımın kesintisiz çalışmasını sağlıyor. Bu sayede, sabah kahve makinemim otomatik başlaması veya akşam ışıklarımın açılması gibi basit ama kritik otomasyonlar, dış etkenlerden etkilenmeden işlemeye devam ediyor. Kendi altyapımı yönetmenin getirdiği bu özgürlük ve güven, benim için her zaman öncelikli olmuştur.
Home Assistant Kurulumu İçin Donanım Seçimi ve İlk Adımlar
Home Assistant’ı çalıştırmak için birçok donanım seçeneği mevcut. Ben genellikle eski bir PC’yi veya bir Raspberry Pi gibi tek kart bilgisayarları tercih ediyorum. Her birinin kendine göre avantajları ve dezavantajları var. Raspberry Pi’ler düşük güç tüketimiyle öne çıkarken, eski bir PC daha fazla işlem gücü ve depolama alanı sunar. Benim tercihim, genellikle elimde atıl duran eski bir mini PC veya bir sunucu üzerinde sanal makine (VM) oluyor. Bu, hem mevcut donanımı değerlendirmemi sağlıyor hem de gerektiğinde kolayca kaynak artırabilme esnekliği sunuyor. Örneğin, bir dönem Home Assistant’ı bir Raspberry Pi 3 üzerinde çalıştırdım, ancak zamanla eklediğim entegrasyonlar ve otomasyonlar arttıkça performans sorunları yaşamaya başladım. Bunun üzerine, eski bir Intel NUC’a geçiş yaparak daha kararlı bir deneyim elde ettim.
İşletim sistemi olarak ise tercihim her zaman Linux oluyor. Home Assistant için özel olarak optimize edilmiş Home Assistant Operating System (HAOS) seçeneği olsa da, ben genel Linux deneyimimi sürdürmek ve sunucuyu başka amaçlar için de kullanabilmek adına Ubuntu Server veya Debian gibi dağıtımları tercih ediyorum. Bu, sunucu üzerinde Nginx, Redis veya başka yan ürünlerimi de rahatça barındırmamı sağlıyor. Kurulumdan önce, sunucunuzun sabit bir IP adresine sahip olduğundan ve ağınızda erişilebilir olduğundan emin olun. Ayrıca, yeterli depolama alanı ve en az 2GB RAM’in olması, Home Assistant’ın sorunsuz çalışması için iyi bir başlangıç noktasıdır. Benim kullandığım sunucuda 8GB RAM ve 256GB SSD var, bu da bana hem Home Assistant hem de diğer servisler için bolca alan sağlıyor.
Docker Compose ile Home Assistant Kurulumu Adımları
Home Assistant’ı kendi sunucumda çalıştırmanın en pratik yollarından biri Docker Compose kullanmaktır. Bu yöntem, bağımlılıkları yönetmeyi kolaylaştırır ve farklı servisleri izole bir şekilde çalıştırmamı sağlar. İlk olarak, sunucunuza Docker ve Docker Compose’u kurmanız gerekiyor. Linux üzerinde bu genellikle aşağıdaki komutlarla yapılır:
# Docker kurulumu
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
# Mevcut kullanıcıyı docker grubuna ekleme (restart gerekebilir)
sudo usermod -aG docker $USER
# Docker Compose kurulumu (en son sürümü kontrol edin)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Docker ve Docker Compose kurulduktan sonra, Home Assistant için bir docker-compose.yml dosyası oluşturmamız gerekiyor. Bu dosya, Home Assistant konteynerinin nasıl başlatılacağını, hangi portları kullanacağını ve hangi klasörlerin kalıcı depolama için eşleneceğini tanımlar. Ben genellikle /opt/homeassistant gibi bir dizin oluşturup docker-compose.yml dosyasını oraya yerleştiriyorum.
# /opt/homeassistant/docker-compose.yml
version: '3'
services:
homeassistant:
container_name: homeassistant
image: "ghcr.io/home-assistant/home-assistant:stable"
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
environment:
- TZ=Europe/Istanbul # Kendi zaman diliminizi ayarlayın
restart: unless-stopped
privileged: true # USB aygıtları (Zigbee/Z-Wave dongle) için gerekebilir
network_mode: host # Ağdaki cihazları otomatik keşfetmek için
ports:
- 8123:8123 # Home Assistant'ın varsayılan web arayüzü portu
Bu docker-compose.yml dosyasını kaydettikten sonra, aynı dizinde aşağıdaki komutu çalıştırarak Home Assistant’ı başlatabiliriz:
cd /opt/homeassistant
docker-compose up -d
network_mode: host kullanmak, Home Assistant’ın ağdaki cihazları daha kolay keşfetmesini sağlar. Ancak, bu durum konteynerin doğrudan host’un ağ arayüzünü kullanması anlamına gelir ve bazı güvenlik riskleri taşıyabilir. Daha izole bir yapı için ports tanımıyla belirli portları eşleştirebilirsiniz, ancak bu durumda cihaz keşfi için ek ayarlar gerekebilir. privileged: true ise, özellikle Zigbee veya Z-Wave USB dongle’ları gibi donanımları konteyner içinden erişilebilir kılmak için zorunlu olabilir. Bu adımları tamamladığımda, Home Assistant’ın web arayüzüne http://<sunucu_ip_adresi>:8123 üzerinden erişebiliyorum.
Temel Konfigürasyon ve Entegrasyonlar: Akıllı Cihazları Tanıtmak
Home Assistant başarıyla başlatıldıktan sonra, ilk eriştiğinizde bir kullanıcı hesabı oluşturmanız istenir. Bu adımı tamamladıktan sonra, Home Assistant sizi akıllı ev cihazlarını otomatik olarak keşfetmeye yönlendirecektir. Benim deneyimimde, Philips Hue köprüsü, ağdaki bazı akıllı prizler (e.g., Shelly marka) ve Chromecast gibi cihazlar genellikle otomatik olarak algılanır. Otomatik keşfedilmeyen cihazlar için ise “Ayarlar > Cihazlar ve Hizmetler > Entegrasyon Ekle” yolunu izleyerek manuel olarak eklemem gerekiyor. Bu noktada, cihazların yerel ağ IP adreslerini bilmek işimi çok kolaylaştırıyor.
Örneğin, bir Zigbee ağı kurmak için bir USB dongle (Conbee II veya Sonoff Zigbee 3.0 dongle gibi) kullanıyorum. Bu dongle’ı sunucuma taktıktan ve privileged: true ayarını docker-compose.yml dosyamda etkinleştirdikten sonra, Home Assistant’a “ZHA” (Zigbee Home Automation) veya “Zigbee2MQTT” entegrasyonunu ekleyerek Zigbee cihazlarımı eşleştirebiliyorum. Genellikle Zigbee2MQTT’yi tercih ediyorum çünkü daha fazla cihaz desteği ve daha detaylı kontrol imkanı sunuyor. Kurulumdan sonra, configuration.yaml dosyası Home Assistant’ın beyni gibidir. Bu dosyada sensörleri, otomasyonları, gösterge paneli elemanlarını ve diğer gelişmiş ayarları tanımlıyorum.
İşte basit bir configuration.yaml örneği (genellikle config klasörünün içinde bulunur):
# /opt/homeassistant/config/configuration.yaml
homeassistant:
name: Benim Evim
latitude: 38.68971
longitude: 27.84869
elevation: 100
unit_system: metric
time_zone: Europe/Istanbul
currency: TRY
# Örnek bir sensör tanımı (bu bir template sensör)
sensor:
- platform: template
sensors:
evin_sicakligi:
friendly_name: "Evin Ortalama Sıcaklığı"
value_template: "{{ states('sensor.mutfak_sicakligi') | float + states('sensor.salon_sicakligi') | float / 2 }}"
unit_of_measurement: "°C"
# Örnek bir otomasyon tanımı
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
!include direktifleri, configuration.yaml dosyasını daha düzenli tutmak için otomasyonları, script’leri ve sahneleri ayrı dosyalara bölmemi sağlıyor. Bu sayede, karmaşıklaşan kurulumlarda bile dosya yapısını kolayca yönetebiliyorum. Entegrasyonların ve cihazların doğru şekilde çalıştığından emin olmak için Home Assistant’ın loglarını (genellikle docker logs homeassistant komutuyla erişilebilir) düzenli olarak kontrol etmeyi ihmal etmiyorum.
Uzaktan Erişim ve Güvenlik: Nginx Reverse Proxy ve Let’s Encrypt
Ev ağımdayken Home Assistant’a erişmek kolay, ancak dışarıdan erişmek istediğimde bazı güvenlik ve yapılandırma adımları atmam gerekiyor. Doğrudan port yönlendirme yapmak (port forwarding) çoğu zaman güvenlik riski taşır ve tavsiye edilmez. Bunun yerine, bir Nginx reverse proxy kullanarak hem güvenliği artırıyorum hem de Let’s Encrypt ile ücretsiz SSL sertifikaları kullanarak trafiği şifreliyorum. Bu yöntem, aynı sunucu üzerinde başka web servislerim varsa, onları da tek bir IP adresi ve farklı domain isimleri üzerinden yayınlamamı sağlıyor.
İlk adım olarak, sunucunuzda Nginx’i kurmanız gerekiyor:
sudo apt install nginx -y
Ardından, Home Assistant için bir Nginx konfigürasyon dosyası oluşturuyorum. Bu dosya, Nginx’in belirli bir domain adına gelen istekleri Home Assistant’ın çalıştığı 8123 numaralı porta yönlendirmesini sağlar.
# /etc/nginx/sites-available/homeassistant
server {
listen 80;
server_name your_domain.com; # Kendi domain adınızı buraya yazın
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your_domain.com; # Kendi domain adınızı buraya yazın
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; # Certbot oluşturacak
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # Certbot oluşturacak
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:8123; # Home Assistant'ın çalıştığı adres
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 900; # Uzun süreli bağlantılar için
proxy_send_timeout 900; # Uzun süreli bağlantılar için
# WebSocket desteği için
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Bu dosyayı sites-available klasörüne kaydettikten sonra, bir sembolik link oluşturarak sites-enabled klasörüne bağlıyorum ve Nginx’i yeniden başlatıyorum:
sudo ln -s /etc/nginx/sites-available/homeassistant /etc/nginx/sites-enabled/
sudo nginx -t # Konfigürasyon kontrolü
sudo systemctl reload nginx
SSL sertifikaları için Let’s Encrypt ve Certbot kullanıyorum. Certbot, Nginx entegrasyonu sayesinde sertifika alma ve yenileme işlemlerini otomatikleştiriyor:
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx -d your_domain.com # Kendi domain adınızı yazın
Bu adımlardan sonra, evimin modem/router ayarlarından 80 ve 443 portlarını Nginx sunucuma yönlendirmem gerekiyor. Router’ın NAT veya Port Forwarding bölümünden bu ayarları yapmalıyım. Ayrıca, Home Assistant’ın configuration.yaml dosyasına external_url ve internal_url ayarlarını eklemeyi unutmuyorum:
homeassistant:
# ... diğer ayarlar ...
external_url: "https://your_domain.com"
internal_url: "http://192.168.1.100:8123" # Kendi yerel IP adresinizi yazın
Ek güvenlik önlemleri olarak, Nginx’e temel rate limiting ayarları ekleyebilir ve sunucumda fail2ban çalıştırarak SSH ve web giriş denemelerini izleyebilirim. Bu, brute-force saldırılarına karşı ek bir koruma katmanı sağlar. Güvenli bir şifre ve iki faktörlü kimlik doğrulama (2FA) kullanmak da Home Assistant hesabımın güvenliği için olmazsa olmazdır.
graph TD;
A["İstemci (Dış Ağ)"] --> |HTTPS (443)| B["Router/Modem"];
B --> |Port Forwarding (443)| C["Nginx Reverse Proxy (Sunucu)"];
C --> |HTTP (8123)| D["Home Assistant (Docker Konteyner)"];
D --> E["Akıllı Cihazlar (Yerel Ağ)"];
subgraph Yerel Ağ
C; D; E;
end
subgraph İnternet
A; B;
end
Yedekleme ve Bakım Stratejileri: Veri Kaybını Önlemek
Her sistemde olduğu gibi, Home Assistant kurulumunuzun da düzenli olarak yedeklenmesi kritik öneme sahiptir. Özellikle yeni entegrasyonlar eklerken veya büyük yapılandırma değişiklikleri yaparken bir geri dönüş noktasının olması, olası sorunlarda beni büyük bir dertten kurtarıyor. Benim yedekleme stratejim genellikle iki ana bölümden oluşuyor: Home Assistant’ın kendi yedekleme aracı ve sunucu seviyesinde yapılan düzenli dosya yedeklemeleri.
Home Assistant, Supervised veya OS kurulumlarında dahili bir yedekleme (snapshot) özelliği sunar. Docker Compose kurulumunda bu özellik doğrudan arayüzden erişilebilir olmasa da, ana konfigürasyon klasörünü (/opt/homeassistant/config) düzenli olarak yedeklemek yeterlidir. Bu klasör, tüm yapılandırma dosyalarınızı, veritabanınızı (varsayılan olarak SQLite) ve entegrasyon ayarlarınızı içerir. Ben genellikle basit bir cron işi ile bu klasörü tar komutuyla sıkıştırıp başka bir sunucuya veya bulut depolama alanına rsync ile aktarıyorum.
Örnek bir yedekleme betiği:
#!/bin/bash
BACKUP_DIR="/var/backups/homeassistant"
CONFIG_PATH="/opt/homeassistant/config"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="${BACKUP_DIR}/homeassistant_backup_${TIMESTAMP}.tar.gz"
mkdir -p "$BACKUP_DIR"
echo "Home Assistant yapılandırma dosyaları yedekleniyor..."
tar -czf "$BACKUP_FILE" -C "$CONFIG_PATH" .
if [ $? -eq 0 ]; then
echo "Yedekleme başarıyla tamamlandı: $BACKUP_FILE"
# Eski yedekleri temizle (örneğin son 7 yedeği sakla)
find "$BACKUP_DIR" -type f -name "homeassistant_backup_*.tar.gz" -mtime +7 -delete
echo "Eski yedekler temizlendi."
else
echo "Yedekleme sırasında bir hata oluştu!"
fi
Bu betiği /usr/local/bin/backup_ha.sh olarak kaydedip, chmod +x ile çalıştırılabilir hale getirdikten sonra, crontab -e ile haftalık veya günlük olarak çalışacak şekilde zamanlayabilirim:
0 3 * * * /usr/local/bin/backup_ha.sh > /dev/null 2>&1
Bakım tarafında ise, Home Assistant’ın ve Docker imajlarının güncel tutulması önemlidir. docker-compose pull ve docker-compose up -d komutlarını düzenli olarak çalıştırarak Home Assistant’ı en son sürüme güncelliyorum. Ayrıca, sunucunun işletim sistemini de sudo apt update && sudo apt upgrade -y komutlarıyla güncel tutuyorum. Bu, hem güvenlik açıklarını kapatmaya yardımcı oluyor hem de yeni özelliklerden faydalanmamı sağlıyor. Logları journalctl -u docker.service veya docker logs homeassistant ile düzenli olarak kontrol etmek, olası sorunları erkenden tespit etmemi sağlıyor. Özellikle cgroup limitleri veya memory.high gibi ayarlar konusunda bir hata yaparsam, journald bana ilk sinyali veriyor.
Sonuç: Kendi Evimin Akıllı Sahibi Olmak
Akıllı ev sistemimi bulut bağımsız bir şekilde kendi sunucumda kurmak, hem teknolojiye olan merakımı tatmin etti hem de ev otomasyonlarım üzerinde tam kontrol sağlamanın getirdiği huzuru yaşattı. İnternet kesintisi veya üretici bulut hizmetinin sonlanması gibi dış etkenler artık evimin akıllı işlevlerini etkilemiyor. Verilerimin gizliliği ve güvenliği tamamen benim kontrolümde, bu da benim için en büyük kazanımlardan biri.
Home Assistant’ın esnekliği ve geniş entegrasyon yelpazesi sayesinde, piyasadaki hemen hemen tüm akıllı cihazları tek bir platform altında birleştirebildim. Kurulum sürecinde Docker Compose’un sunduğu kolaylıklar ve Nginx ile Let’s Encrypt kullanarak sağladığım güvenli uzaktan erişim, bu projeyi benim için oldukça keyifli hale getirdi. Eğer siz de akıllı evinizi dış bağımlılıklardan kurtarmak ve kendi kontrolünüzde bir sistem kurmak istiyorsanız, Home Assistant’ı kendi sunucunuzda çalıştırmak kesinlikle denemeye değer bir yol. Bir sonraki adımda, Home Assistant’taki otomasyonları daha ileri seviyeye taşıyarak evimi gerçekten “akıllı” hale getirme üzerine bir şeyler yazmayı planlıyorum.