Giriş
Guacamole, istemci gerektirmeden tarayıcı üzerinden uzak masaüstü bağlantıları yapmanıza olanak tanıyan, açık kaynaklı bir remote desktop gateway çözümüdür. RDP, VNC ve SSH gibi protokolleri destekleyerek çok yönlü kullanım imkanı sunar. Guacamole doğrudan bir sunucuya kurulabilir, ancak bağımlılıklar, güncellemeler, taşınabilirlik açısından Docker ile kurulum yapmak daha pratik ve avantajlıdır. Bu yazımda, Guacamole’un Docker üzerinde nasıl kurulacağını ve yapılandırılacağını adım adım aktarmaya çalışacağım.
1. Docker Kurulumu Yapıyoruz
Docker ve Docker Compose’un kurulumunu aşağıdaki komutlarla gerçekleştiriyoruz.
sudo apt update
sudo apt install -y docker.io docker-compose
Kurulum tamamlandıktan sonra, Docker’ın çalışıp çalışmadığını kontrol ediyoruz. Aşağıdakine benzer bir çıktı görmemiz gerekiyor.
root@guacamole:~# docker --version
Docker version 26.1.3, build 26.1.3-0ubuntu1~24.04.1
root@guacamole:~# docker-compose --version
docker-compose version 1.29.2, build unknown
2. Guacamole ve PostgreSQL için Docker Compose Dosyası Oluşturuyoruz
Guacamole’un çalışması için 3 ana bileşene ihtiyacımız var:
guacd
Guacamole Daemon servisipostgres
Kullanıcı ve Bağlantılar için kullanacağımız veritabanıguacamole
Uygulamanın web arayüzü
Bu üç bileşenin docker üzerinde kurulumu için öncelikle terminalde şu komutları çalıştırarak bir klasör ve konfigürasyon dosyası oluşturuyoruz.
root@guacamole:~#mkdir guacamole-docker
root@guacamole:~#cd guacamole-docker
root@guacamole:~/guacamole-docker#nano docker-compose.yml
Docker Compose içeriğinde neler var?
Açılan docker-compose.yml
dosyasına servislerin kurulumu için gerekli olan içeriği ekliyoruz. Dosyanın içeriği ile ilgili tanımlar şu şekilde.
guacd
: Guacamole’un temel servisi.postgres
: PostgreSQL veritabanı servisi.guacamole
: Web arayüzünü sağlayan servis.volumes
: PostgreSQL’in verilerini kalıcı hale getirmek için kullanılıyor.
version: '3'
services:
guacd:
image: guacamole/guacd
container_name: guacd
restart: always
postgres:
image: postgres:13
container_name: guac-postgres
restart: always
environment:
POSTGRES_DB: guacamole_db
POSTGRES_USER: guacuser
POSTGRES_PASSWORD: guacpass
volumes:
- guac-postgres-data:/var/lib/postgresql/data
guacamole:
image: guacamole/guacamole
container_name: guacamole
restart: always
depends_on:
- guacd
- postgres
ports:
- "8080:8080"
environment:
GUACD_HOSTNAME: guacd
POSTGRES_HOSTNAME: postgres
POSTGRES_DATABASE: guacamole_db
POSTGRES_USER: guacuser
POSTGRES_PASSWORD: guacpass
volumes:
guac-postgres-data:
3. Docker Servislerini Çalıştırıyoruz
Hazırladığımız docker-compose.yml
dosyası ile aşağıdaki komutu kullanarak konteynerleri başlatıyoruz.
docker-compose up -d
Çalışan konteynerleri kontrol etmek için docker ps
komutunu kullanıyoruz.
root@guacamole:~/guacamole-docker# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3320aed26c8c guacamole/guacamole "/opt/guacamole/bin/…" 23 hours ago Up 3 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp guacamole
9599dface8ac guacamole/guacd "/bin/sh -c '/opt/gu…" 23 hours ago Up 3 minutes (health: starting) 4822/tcp guacd
c90d178d512d postgres:13 "docker-entrypoint.s…" 23 hours ago Up 3 minutes 5432/tcp guac-postgres
4. PostgreSQL için Veritabanını Yapılandırıyoruz
Guacamole bağlantı yönetimi, kullanıcı yönetimi gibi işlemleri veri tabanı üzerinden yapmaktadır. Veri tabanında bu verileri barındıracağımız tablolar için PostgreSQL içine bir şema yüklememiz gerekiyor. Şemayı yüklemek için öncelikle bir klasör oluşturuyoruz ve gerekli şemaları klasörün altına indiriyoruz.
root@guacamole:~#mkdir init-sql
root@guacamole:~#cd init-sql
root@guacamole:~/init-sql#wget https://raw.githubusercontent.com/apache/guacamole-client/master/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/schema/001-create-schema.sql
root@guacamole:~/init-sql#wget https://raw.githubusercontent.com/apache/guacamole-client/master/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/schema/002-create-admin-user.sql
root@guacamole:~/init-sql#cd ..
Veritabanı Şemalarını Yüklüyoruz
Şema yükleme işlemini yapmadan önce indirdiğimiz şema dosyalarını taşımamız gerekiyor. Şu anda dosyalarınız host makinenizde /init-sql/
dizini altında bulunuyor. Bu dosyaları Host makinenizdeki /init-sql/
klasörünü PostgreSQL konteynerinizin /init-sql/
dizinine kopyalamak için şu komutu çalıştırıyoruz.
docker cp init-sql/ guac-postgres:/init-sql/
Şimdi PostgreSQL konteynerine giriş yapıyoruz.
docker exec -it guac-postgres bash
Konteyner içinde init-sql
klasörünün geldiğini doğrulamak için ls komutu ile klasörün içeriğini kontrol ediyoruz.
ls /init-sql/
Eğer 001-create-schema.sql
ve 002-create-admin-user.sql
dosyalarını görüyorsak kopyalama işlemi başarılı olmuş demektir.
Şimdi şema dosyalarını yüklemek için PostgreSQL’e giriş yapıyoruz.
psql -U guacuser -d guacamole_db
PostgreSQL’e giriş yaptıktan sonra sırasıyla şu komutları çalıştırarak şema dosyalarını içe aktarıyoruz.
\i /init-sql/001-create-schema.sql;
\i /init-sql/002-create-admin-user.sql;
CREATE TABLE
, INSERT
, gibi mesajlar gördüğümüzde işlem başarılı olmuş demektir. exit
diyerek PostgreSQL’den çıkış yapıyoruz ve docker-compose.yml
olduğu dizine geri gidiyoruz.
Eğer docker-compose.yml
dosyanızın olduğu dizinde değilseniz, hatayla karşılaşırsınız. Önce doğru dizine gidin:
cd /guacamole-docker
Sonrasında konteynerleri tekrar başlatıyoruz.
docker-compose up -d
Artık Guacamole’ tarayıcımızdan erişebiliriz. (localhost
yerine sunucumuzun ip adresini yazıyoruz.)
Adres: http://localhost:8080/guacamole
Kullanıcı: guacadmin
Parola: guacadmin
Uygulamaya giriş yaptıktan sonra sağ üstteki menüden settings
altına gelerek kullanıcı, grup ve bağlantılar gibi seçenekleri yapılandırıyoruz.

Örnek olarak connection tabına gelerek bir sunucu ekliyorum.
- Sunucu için bir isim ve kullanacağımız ve yapacağımız bağlantı şeklini belirliyoruz.
- Sunucumuzun ip adresi ve bağlantıyı gerçekleştireceğimiz portu belirliyoruz.
- Sunucuya login olmak için gerekli olan kullanıcı bilgilerini yazıyoruz.

Bağlantıyı oluşturduktan sonra sağ üstteki menüden Home
‘a gidiyoruz ve bağlantımızı seçerek çift tıklayıp sunucuya bağlantı işlemini gerçekleştiriyoruz.


Sonuç
- Guacamole RDP SSH ve VNC gibi ihtiyaç duyacağımız birçok protokolü desteklemektedir.
- Herhangi bir istemciye ihtiyaç duymadan tarayıcı üzerinden çalıştığı için esnek bir kullanım alanına sahiptir.
- LDAP, RADIUS, OpenID ve CAS gibi kimlik doğrulama mekanizmalarıyla birlikte grup bazlı yönetimi de destekler. Bu sayede yönetimsel kolaylıkla birlikte ekstra güvenlik katmanı sağlar.
- Dosya transferi kopyala-yapıştır gibi özellikleri de barındırmaktadır.
- Kullanıcıların gerçekleştirdiği oturumların video kaydını almanıza imkan tanır.
- Bir sonraki yazımda oturumların video kaydının harici bir nfs sunucu üzerine nasıl yapıldığını ele alacağım.