Apache Guacamole: instalasi manual dengan docker-compose
![](https://miro.medium.com/v2/resize:fit:700/1*1Lfjgylw8PryVny8rFc7hQ.jpeg)
Diperbarui pada 23/11/2023 : Artikel ini telah direvisi untuk memasukkan informasi yang relevan dengan rilis Apache Guacamole versi 1.5.3 .
Apache Guacamole adalah salah satu alat sumber terbuka terbaik yang ada. Saya menyukainya dan menggunakannya setiap hari. Namun sayangnya, saya sudah mendengar banyak orang mengatakan bahwa alat ini terlalu sulit untuk diinstal. Jadi saya memutuskan untuk mematahkan mitos ini dan mempopulerkan penggunaan alat ini. Semua orang seharusnya mendapatkan manfaat darinya.
Apa itu Apache Guacamole?
Apache Guacamole adalah gateway desktop jarak jauh tanpa klien sumber terbuka dan gratis yang memungkinkan Anda mengakses mesin Desktop dan Server jarak jauh melalui peramban web. Gateway ini mendukung protokol standar seperti VNC, RDP, dan SSH, serta menggunakan HTML5 untuk koneksi jarak jauh. Gateway ini dapat berjalan di sebagian besar distribusi Linux, dan kliennya berjalan di peramban web modern apa pun. Anda tidak perlu memasang perangkat lunak apa pun di sistem Anda. Cukup telusuri dan sambungkan ke server jarak jauh mana pun yang ditetapkan di server Anda.
Dalam artikel ini, saya akan menunjukkan cara menginstal Apache Guacamole dengan Docker di server Linux.
Persyaratan
Untuk mengikuti tutorial ini, yang Anda perlukan hanyalah server/laptop Linux.
Penyebaran
Saya menjalankan semua perintah dalam artikel ini sebagai pengguna root . Jika Anda tidak menggunakan pengguna root, Anda harus mengawali setiap perintah dengan sudo .
Instal docker dan docker-compose
Unduh dan jalankan skrip praktis yang disediakan oleh docker .
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh | grep -qE "KESALAHAN: Distribusi 'rocky' tidak didukung|KESALAHAN: Distribusi 'almalinux' tidak didukung" && sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Aktifkan dan mulai layanan docker
sudo systemctl mulai docker
sudo systemctl aktifkan docker
Tambahkan pengguna saat ini ke grup docker untuk memungkinkannya menjalankan perintah docker tanpasudo
sudo usermod -a ${USER} -G buruh pelabuhan
Anda perlu keluar dan masuk kembali agar perubahan diterapkan.
Instal Guacamole
Buat folder untuk proyek
mkdir ${HOME} /tumpukan-docker
cd ${HOME} /tumpukan-docker
Inisialisasi database
Bahasa Indonesia: mkdir -p ${HOME} /docker-stack/guacamole/init
chmod -R +x ${HOME} /docker-stack/guacamole/init
jalankan docker -- rm guacamole/guacamole:1.5.3 /opt/guacamole/bin/initdb.sh --postgresql > ${HOME} /docker-stack/guacamole/init/initdb.sql
Anda harus mendapatkan output yang mirip dengan ini
![](https://miro.medium.com/v2/resize:fit:700/1*3P5KQL22nMcM8jjPXjZQzA.png)
Buat ${HOME}/docker-stack/guacamole/docker-compose.yml
file:
nano ${HOME} /docker-stack/guacamole/docker-compose.yml
Tempelkan konten berikut ke dalamnya:
versi: '3.9'
# jaringan
# buat jaringan 'guacamole_net' dalam mode 'bridged'
jaringan:
guacamole_net:
driver: bridge
haproxy_net:
eksternal: benar
#
layanan layanan:
# guacd
guacd:
nama_wadah: guacamole_backend
gambar: guacamole/guacd:1.5.3
jaringan:
guacamole_net:
mulai ulang: selalu
volume:
- ./drive:/drive:rw
- ./record:/var/lib/guacamole/recordings:rw
# postgres
postgres:
nama_wadah: guacamole_database
lingkungan:
PGDATA: /var/lib/postgresql/data/guacamole
POSTGRES_DB: guacamole_db
PASSWORD_POTGRES: '${POSTGRES_PASSWORD}'
POSTGRES_USER: '${POSTGRES_USER}'
gambar: postgres:15.0
jaringan:
guacamole_net:
mulai ulang: selalu
volume:
- ./init:/docker-entrypoint-initdb.d:ro
- ./data:/var/lib/postgresql/data:rw
# guacamole
guacamole:
nama_wadah: guacamole_frontend
bergantung_pada:
- guacd
- postgres
lingkungan:
NAMA_HOST_GUACD: guacd
BASIS_DATA_POTGRESQL: guacamole_db
NAMA_HOST_POTGRESQL: postgres
PASSWORD_POTGRESQL: '${POSTGRES_PASSWORD}'
PENGGUNA_POTGRESQL: '${POSTGRES_USER}'
POSTGRESQL_AUTO_CREATE_ACCOUNTS: benar
gambar: guacamole/guacamole:1.5.3
tautan:
- guacd
jaringan:
- guacamole_net
- haproxy_net
mulai ulang: selalu
volume:
- ./drive:/drive:rw
- ./record:/var/lib/guacamole/recordings
Anda mungkin bertanya-tanya apa yang terjadi di sini, jadi izinkan saya menjelaskannya. docker-compose.yml
Berkas ini berisi deklarasi semua kontainer docker yang diperlukan untuk menjalankan Apache Guacamole. Guacamole bukanlah aplikasi web yang berdiri sendiri dan terdiri dari banyak bagian. Secara default, Guacamole memerlukan 3 kontainer untuk berjalan:
- guacamole_frontend : UI web, bagian Guacamole tempat pengguna benar-benar berinteraksi.
- guacamole_backend : guacd adalah jantung dari Guacamole, yang secara dinamis memuat dukungan untuk protokol desktop jarak jauh (disebut “plugin klien”) dan menghubungkannya ke desktop jarak jauh berdasarkan instruksi yang diterima dari aplikasi web.
- guacamole_database : basis data yang akan digunakan Guacamole untuk autentikasi dan penyimpanan data konfigurasi koneksi.
Buat ${HOME}/docker-stack/guacamole/.env
file untuk menyimpan kredensial basis data. Seperti ini:
POSTGRES_PASSWORD = 'SilakanMasukkanKataSandiYangKuatDiSini'
POSTGRES_USER = 'pengguna_guacamole'
Berkas ini docker-compose.yml
juga berisi deklarasi dua jaringan:
- guacamole_net : jaringan docker untuk mengisolasi komunikasi antara berbagai layanan guacamole.
- haproxy_net: jaringan docker untuk menghubungkan kontainer guacamole_frontend dan kontainer HAProxy
Anda baru saja mengatakan HAProxy? Apa itu?
HAProxy adalah proxy terbalik yang dapat berjalan di dalam kontainer docker. Kita akan meletakkannya di depan tumpukan guacamole kita untuk meningkatkan UI Guacamole ke SSL/HTTPS.
Instal HAProxy
Buat folder untuk menyimpan konfigurasi HAProxy kita
mkdir -p ${HOME} /tumpukan-docker/haproxy
cd ${HOME} /tumpukan-docker/haproxy
Buat ${HOME}/docker-stack/haproxy/docker-compose.yml
filenya
nano ${HOME} /docker-stack/haproxy/docker-compose.yml
dan tempel konten berikut di dalamnya:
versi: '3.9'
layanan:
haproxy:
nama_kontainer: haproxy
gambar: haproxytech/haproxy-alpine:2.4
port:
- 80 :80
- 443 :443
- 8404 :8404
volume:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
jaringan:
- haproxy_net
mulai ulang: selalu
lingkungan:
TITIK AKHIR: '${ENDPOINT}'
jaringan:
haproxy_net:
nama: haproxy_net
driver: bridge
Mari kita definisikan file konfigurasi HAProxy.
Buat ${HOME}/docker-stack/haproxy/haproxy.cfg
file
nano ${HOME} /docker-stack/haproxy/haproxy.cfg
dan tempel konten berikut ke dalamnya:
Bahasa Indonesia: statistik global
soket /var/run/api.sock pengguna haproxy grup haproxy mode 660 level admin ekspos-fd pendengar
log stdout format mentah local0 info
maxconn 50000
resolver docker_resolver
nameserver dns 127.0.0.11:53
default
mode http
batas waktu klien 10dtk
batas waktu sambungkan 5dtk
batas waktu server 10dtk
batas waktu http-permintaan 10dtk
server-default init-addr none
log statistik global
frontend
bind *:8404
statistik aktifkan
statistik uri /
statistik segarkan 10dtk
frontend myfrontend
mode http
bind :80
gunakan_backend %[req.hdr(Host),lower]
backend " ${ENDPOINT} "
server guacamole guacamole:8080 periksa inter 10dtk resolver docker_resolver
Arahan ini digunakan untuk menentukan cara kerja proksi terbalik.
Mari kita tentukan Nama Domain Lengkap (FQDN) tempat kita ingin menjangkau UI web guacamole kita.
Buat file ${HOME}/docker-stack/haproxy/.env
dengan templat berikut.
ENDPOINT = "data Anda"
Dalam kasus saya, saya ingin menggunakan 161-35-39-33.traefik.me
FQDN. Di mana 161.35.39.33
alamat IP publik server saya yang menghosting aplikasi guacamole? Jadi dalam kasus saya, ini adalah ${HOME}/docker-stack/haproxy/.env
konten file:
TITIK AKHIR = '161-35-39-33.traefik.me'
Lalu bagaimana dengan .traefik.me yang ditambahkan di akhir?
Itu pertanyaan yang bagus!
traefik.me adalah nama domain ajaib yang dapat digunakan oleh siapa saja di internet. Nama ini menyediakan DNS wildcard untuk alamat IP apa pun. Misalnya alamat IP host Anda adalah 159.74.28.170 . Dengan menggunakan traefik.me,
- 159–74–28–170 .traefik.me diselesaikan menjadi 159.74.28.170
- 159.74.28.170 .traefik.me diselesaikan menjadi 159.74.28.170
- www. 159.74.28.170 .traefik.me diselesaikan menjadi 159.74.28.170
…dan seterusnya. Ini menghindarkan Anda dari membeli nama domain untuk menguji proyek atau mengedit /etc/hosts
di perangkat Anda. Selain itu, sertifikat SSL wildcard yang ditandatangani oleh Let's encrypt tersedia untuk *.traefik.me. Cukup ambil file dari traefik.me dan Anda siap memulai.
Mengapa Anda tidak menggunakan alamat IP server Anda saja untuk mengakses aplikasi Anda?
Itu juga kemungkinan tetapi seperti yang saya katakan, traefik.me menyediakan sertifikat SSL gratis yang ditandatangani oleh CA publik dan beberapa integrasi aplikasi tidak berfungsi dengan alamat IP.
Namun, sobat, silakan gunakan FQDN mana pun yang sesuai dengan Anda. Saya hanya memberi Anda kiat. Sekarang mari kita lanjutkan penerapan kita.
Pada akhirnya, arsitektur folder Anda akan terlihat seperti ini:
![](https://miro.medium.com/v2/resize:fit:700/1*ZBsTYYF5Kie_naJ2Bobffw.png)
Jangan lupa untuk mengubah kepemilikan file
chown -R ${PENGGUNA} : ${PENGGUNA} ${HOME} /docker-stack/
Sekarang mari kita bahas semuanya
docker menyusun -f ${HOME} /docker-stack/haproxy/docker-compose.yml naik -d
docker menyusun -f ${HOME} /docker-stack/guacamole/docker-compose.yml naik -d
Output Anda akan terlihat seperti ini:
![](https://miro.medium.com/v2/resize:fit:700/1*vFtXu3D_5acjmPaFTxd1zQ.png)
![](https://miro.medium.com/v2/resize:fit:700/1*LQU-SF7PfbqNriCsn3BtRw.png)
Dan voilàà!! Anda mendapatkan instance Guacamole Anda yang disebarkan
Akses Dashboard Apache Guacamole
Anda sekarang dapat mengakses antarmuka web Apache Guacamole menggunakan URL http://your-fqdn/guacamole. Dalam kasus saya, instance saya dapat diakses dihttp://161-35-39-33.traefik.me/guacamole
![](https://miro.medium.com/v2/resize:fit:700/1*YwCmazArsHCJXWNYP6kpJg.png)
Kredensial admin default adalah:
- nama pengguna: guacadmin
- kata sandi: guacadmin
Aktifkan SSL
Kami telah menerapkan aplikasi kami dan kami merasa senang. Namun, kepuasan belum mencapai puncaknya. Untuk saat ini, kami menggunakan protokol HTTP, yang secara default tidak terlalu aman. Jadi, kami akan menambahkan lapisan keamanan dengan sertifikat SSL/TLS. Ada banyak kemungkinan.
Gunakan sertifikat SSL dari traefik.me
Seperti yang saya katakan di bagian sebelumnya, traefik.me menawarkan sertifikat SSL wildcard gratis yang dikeluarkan oleh Let's encrypt .
Untuk menggunakannya, kita akan menambahkan kontainer docker baru ke berkas konfigurasi HAProxy docker-compose. Kontainer docker ini akan menggunakan citra alpine. Perannya adalah: mengunduh berkas sertifikat dari traefik.me, mengonversinya ke format yang didukung HAProxy, dan meneruskannya ke volume docker yang digunakan bersama oleh kedua kontainer.
Jadi perbarui ${HOME}/docker-stack/haproxy/docker-compose.yml
file Anda sebelumnya seperti ini:
versi: '3.9'
layanan:
haproxy:
nama_kontainer: haproxy
gambar: haproxytech/haproxy-alpine:2.4
port:
- 80 :80
- 443 :443
- 8404 :8404
volume:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
# Baris baru ditambahkan di sini
- certs:/usr/local/etc/haproxy/certs/
jaringan:
- haproxy_net
restart: selalu
lingkungan:
ENDPOINT: '${ENDPOINT}'
############# Bagian baru ditambahkan ##############
reverse-proxy-https-helper:
gambar: alpine
perintah: sh -c "cd /etc/ssl/traefik
&& wget traefik.me/cert.pem -O cert.pem
&& wget traefik.me/privkey.pem -O privkey.pem
&& cat cert.pem privkey.pem > traefik.me.pem"
volumes:
- certs:/etc/ssl/traefik
######################################################
networks:
haproxy_net:
name: haproxy_net
driver: bridge
############# Bagian baru ditambahkan ##############
volumes:
certs:
##############################################
Saya telah memberikan komentar untuk menyoroti perubahan yang dibuat.
Kita juga perlu mengedit berkas konfigurasi HAProxy ${HOME}/docker-stack/haproxy/haproxy.cfg
untuk menginstruksikan HAProxy menggunakan sertifikat SSL.
Perbarui frontend
bagian berkas tersebut.
frontend myfrontend
mode http
bind :80
# Baris baru ditambahkan di sini
bind :443 ssl crt /usr/local/etc/haproxy/certs/traefik.me.pem
#http-request skema pengalihan https kode 301 kecuali { ssl_fc }
use_backend %[req.hdr(Host),lower]
Hapus komentar pada baris tersebut
#http-request redirect scheme https code 301 unless { ssl_fc }
jika Anda ingin mengalihkan semua permintaan HTTP ke HTTPS.
Jalankan perintah berikut untuk menerapkan perubahan yang dibuat:
docker menyusun -f ${HOME} /docker-stack/haproxy/docker-compose.yml naik -d
docker memulai ulang haproxy
Sekarang Anda dapat mengakses instansi Anda dengan protokol HTTPS.
Dalam kasus saya, URL-nya adalah https://161-35-39-33.traefik.me/guacamole
![](https://miro.medium.com/v2/resize:fit:700/1*WT1rCMEujRW568ip9t9PGA.png)
Gunakan sertifikat SSL yang ditandatangani sendiri
Jika Anda ingin menggunakan sertifikat yang ditandatangani sendiri, berikut adalah langkah-langkah yang harus diikuti.
Hasilkan sertifikat
mkdir ${HOME} /docker-stack/haproxy/certs
openssl req -nodes -newkey rsa:2048 -new -x509 -keyout ${HOME} /docker-stack/haproxy/certs/self-ssl.key -out ${HOME} /docker-stack/haproxy/certs/self.cert -subj '/CN=your-fqdn' -addext 'subjectAltName=DNS:your-fqdn'
CATATAN: Di akhir perintah di atas, pastikan untuk mengganti
your-fqdn
dengan nilai FQDN yang benar.
Konversi sertifikat ke format yang didukung HAProxy
bash -c 'kucing ${HOME} /docker-stack/haproxy/sertifikat/self.cert ${HOME} /docker-stack/haproxy/sertifikat/self-ssl.key > ${HOME} /docker-stack/haproxy/sertifikat/haproxy-ssl.pem'
Perbarui ${HOME}/docker-stack/haproxy/docker-compose.yml
berkas seperti di bawah ini:
versi: '3.9'
layanan:
haproxy:
nama_kontainer: haproxy
gambar: haproxytech/haproxy-alpine:2.4
port:
- 80 :80
- 443 :443
- 8404 :8404
volume:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
# Baris baru ditambahkan di sini
- ./certs:/usr/local/etc/haproxy/certs/
jaringan:
- haproxy_net
restart: selalu
lingkungan:
ENDPOINT: '${ENDPOINT}'
jaringan:
haproxy_net:
nama: haproxy_net
driver: bridge
Perbedaan antara yang lama dan yang baru:
diff --label 'lama' -u --warna=selalu ${HOME}/docker-stack/haproxy/docker-compose.yml.a --label 'baru' ${HOME}/docker-stack/haproxy/docker-compose.yml
--- lama
+++ baru
@@ -9,6 +9,7 @@
- 8404:8404
volume:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
+ - ./certs:/usr/local/etc/haproxy/certs/
jaringan:
- haproxy_net
restart: selalu
Perbarui frontend
bagian ${HOME}/docker-stack/haproxy/haproxy.cfg
file
frontend myfrontend
mode http
bind :80
# Baris baru ditambahkan di sini
bind :443 ssl crt /usr/local/etc/haproxy/certs/haproxy-ssl.pem
#http-request skema pengalihan https kode 301 kecuali { ssl_fc }
use_backend %[req.hdr(Host),lower]
Kita dapat menggunakan diff
perintah ini untuk memeriksa perbedaan antara versi lama dan baru:
diff -u --color=always --label 'versi lama' ~/docker-stack/haproxy/hapr
oxy.cfg.a --label 'versi baru' ~/docker-stack/haproxy/haproxy.cfg
--- versi lama
+++ versi baru
@@ -24,6 +24,9 @@
frontend myfrontend
mode http
bind :80
+ # Baris baru ditambahkan di sini
+ bind :443 ssl crt /usr/local/etc/haproxy/certs/haproxy-ssl.pem
+ #http-request skema pengalihan kode https 301 kecuali { ssl_fc }
use_backend %[req.hdr(Host),lower]
Hapus komentar pada baris tersebut
#http-request redirect scheme https code 301 unless { ssl_fc }
jika Anda ingin mengalihkan semua permintaan HTTP ke HTTPS.
Jalankan perintah ini untuk menerapkan perubahan yang dibuat
docker menyusun -f ${HOME} /docker-stack/haproxy/docker-compose.yml naik -d
docker memulai ulang haproxy
Sekarang Anda dapat mengakses instansi Guacamole Anda dengan protokol HTTPS.
Gunakan sertifikat SSL yang ditandatangani CA
Untuk sertifikat yang diterbitkan oleh otoritas sertifikat publik, prosedurnya sama dengan sertifikat yang ditandatangani sendiri. Kecuali Anda tidak membuat sertifikat sendiri. Anda hanya perlu menyesuaikan jalurnya. Maksud saya mengganti self.crt
dan self-ssl.key
dengan nama berkas sertifikat dan kunci pribadi terkait.
Dalam artikel ini, kami menerapkan Apache Guacamole dengan docker dan HAProxy sebagai reverse proxy. Terima kasih telah membaca sampai akhir, dan sampai jumpa di artikel-artikel berikutnya.
Anda dapat menghubungi saya di bagian komentar atau di LinkedIn melalui tautan ini .
Tidak ada komentar:
Posting Komentar