Selasa, 21 Januari 2025

APACHE-guacamole

 

Apache Guacamole: instalasi manual dengan docker-compose

https://theko2fi.medium.com/apache-guacamole-manual-installation-with-docker-compose-222cef1894e3
Kenneth KOFFI

Waktu baca 9 menit

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

Buat ${HOME}/docker-stack/guacamole/docker-compose.ymlfile:

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.ymlBerkas 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/.envfile 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.ymlfilenya

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.cfgfile

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/.envdengan templat berikut.

ENDPOINT = "data Anda"

Dalam kasus saya, saya ingin menggunakan 161-35-39-33.traefik.meFQDN. Di mana 161.35.39.33alamat IP publik server saya yang menghosting aplikasi guacamole? Jadi dalam kasus saya, ini adalah ${HOME}/docker-stack/haproxy/.envkonten 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,

…dan seterusnya. Ini menghindarkan Anda dari membeli nama domain untuk menguji proyek atau mengedit /etc/hostsdi 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:

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:

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

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.ymlfile 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.cfguntuk 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

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-fqdndengan 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.ymlberkas 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.cfgfile

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 diffperintah 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.crtdan self-ssl.keydengan 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