Cách cài đặt Apache Guacamole qua Docker trên Ubuntu 22.04

Apache Guacamole là một remote desktop gateway mã nguồn mở và miễn phí cho phép bạn kết nối từ xa với máy tính/máy chủ của mình bằng các giao thức khác nhau như SSH, RDP và VNC. Apache Guacamole được Apache Software Foundation duy trì và được cấp Giấy phép Apache 2.0.

Apache Guacamole là một remote desktop gateway không có client. Bạn có thể truy cập Apache Guacamole chỉ bằng trình duyệt web từ mọi nơi vào bất kỳ lúc nào. Bạn nên sử dụng Apache Guacamole nếu bạn có nhiều hệ điều hành từ xa với các giao thức khác nhau, chẳng hạn như Windows với RDP và hệ thống Linux với VNC và SSH.

Trong hướng dẫn này, bạn sẽ cài đặt Apache Guacamole – Remote Desktop/Server Gateway – thông qua Docker trên máy chủ Ubuntu 22.04. Điều này bao gồm cài đặt và cấu hình Nginx làm reverse proxy cho Apache Guacamole. Cuối cùng, bạn sẽ có Apache Guacamole chạy dưới dạng Docker container và bảo mật quá trình cài đặt thông qua chứng chỉ SSL/TLS trên reverse proxy Nginx.

Điều kiện tiên quyết

Để bắt đầu với hướng dẫn này, bạn phải có các yêu cầu sau:

  • Một máy chủ Linux chạy Ubuntu 22.04 Server.
  • Người dùng không phải root có đặc quyền admin sudo/root.
  • Một tên miền trỏ đến địa chỉ IP của máy chủ.

Khi các yêu cầu đã sẵn sàng, bây giờ, bạn có thể bắt đầu cài đặt Apache Guacamole.

Cài đặt Docker Engine và Docker Compose

Trong hướng dẫn này, bạn sẽ chạy và cài đặt Apache Guacamole dưới dạng dịch vụ container thông qua Docker và Docker Compose. Ví dụ này sử dụng máy chủ Ubuntu 22.04 mới, do đó, bao gồm cài đặt Docker và Docker Compose.

Để bắt đầu, hãy chạy lệnh apt bên dưới để cài đặt các dependency cơ bản. Nhập y khi được nhắc và nhấn ENTER để tiếp tục.

sudo apt install ca-certificates curl gnupg lsb-release

Đầu ra:

Cài đặt các dependency cơ bản
Cài đặt các dependency cơ bản

Tiếp theo, chạy lệnh bên dưới để thêm key GPG và kho lưu trữ cho các gói Docker.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Đầu ra:

Kho lưu trữ
Kho lưu trữ

Sau đó, cập nhật và làm mới chỉ mục gói Ubuntu của bạn thông qua lệnh apt bên dưới.

sudo apt update

Đầu ra:

Cập nhật kho lưu trữ
Cập nhật kho lưu trữ

Với kho lưu trữ Docker được thêm vào, giờ đây bạn có thể cài đặt công cụ Docker và plugin Docker Compose bằng lệnh apt bên dưới. Khi được nhắc, hãy nhập y, sau đó nhấn ENTER để tiếp tục.

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Đầu ra:

Cài đặt Docker và Docker Compose
Cài đặt Docker và Docker Compose

Service Docker sẽ khởi động và kích hoạt tự động. Bạn có thể xác minh service Docker thông qua tiện ích lệnh systemctl sau.

sudo systemctl is-enabled docker
sudo systemctl status docker

Bạn sẽ nhận được kết quả cho biết service Docker đã được bật và sẽ tự động chạy khi khởi động. Và trạng thái của service Docker là đang chạy.

Cuối cùng, để cho phép người dùng không phải root chạy Docker container, bạn phải thêm người dùng của mình vào nhóm 'docker'. Chạy lệnh usermod bên dưới để thêm người dùng của bạn vào nhóm 'docker'. Ngoài ra, hãy nhớ thay đổi username thành người dùng của bạn.

sudo usermod -aG docker alice

Bây giờ, bạn có thể đăng nhập với tư cách người dùng của mình và chạy Docker container thông qua lệnh bên dưới.

su - alice
docker run hello-world

Khi thành công, bạn sẽ nhận được thông báo hello-world từ Docker container như ảnh chụp màn hình sau.

Xác minh Docker chạy hello-world
Xác minh Docker chạy hello-world

Sau khi cài đặt Docker và Docker Compose, tiếp theo bạn sẽ bắt đầu tạo thư mục dự án để triển khai Apache Guacamole.

Thiết lập thư mục dự án

Trước tiên, hãy đảm bảo rằng bạn đã đăng nhập với tư cách người dùng không phải root bằng cách chạy lệnh sau.

su - alice

Tạo một thư mục dự án mới ‘~/guacamole-server’ và di chuyển thư mục làm việc của bạn vào đó.

mkdir -p guacamole-server; cd guacamole-server/

Sau đó, trong thư mục ‘~/guacamole-server‘, tạo thư mục mới ‘init‘ và file ‘docker-compose.yml‘.

mkdir -p init
touch docker-compose.yml

Tiếp theo, chạy lệnh 'docker pull' sau để tải xuống các image Docker cần thiết cho quá trình cài đặt Apache Guacamole. Bạn sẽ tải xuống 3 image khác nhau, guacd làm trình quản lý proxy, guacamole làm giao diện người dùng của Apache Guacamole và postgres:13 sẽ được sử dụng làm database backend cho container Apache Guacamole.

docker pull guacamole/guacd
docker pull guacamole/guacamole
docker pull postgres:13

Tải xuống image guacd.

Tải xuống image guacd
Tải xuống image guacd

Tải xuống image guacamole.

Tải xuống image guacamole
Tải xuống image guacamole

Tải xuống image PostgreSQL 13.

Tải xuống image postgresql
Tải xuống image postgresql

Khi các image Docker cần thiết được tải xuống, hãy thực thi lệnh sau để chạy container guacamole mới và chạy script 'initdb.sh' để tạo database schema cho quá trình triển khai của bạn. Bạn sẽ tạo database schema guacamole thành ‘init/initdb.sql’.

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgres > init/initdb.sql

Xác minh nội dung của database schema guacamole thông qua lệnh cat bên dưới.

cat init/initdb.sql

Đầu ra:

Tạo database schema
Tạo database schema

Thiết lập docker-compose.yml

Bây giờ, các image Docker cần thiết đã được tải xuống, bạn có thể bắt đầu cấu hình script 'docker-compose.yml' và thiết lập cài đặt Apache Guacamole.

Bắt đầu bằng cách mở file cấu hình ‘docker-compose.yml‘ bằng lệnh trình soạn thảo nano sau.

nano docker-compose.yml

Thêm các dòng sau vào file.

version: '3.7'
# networks
networks:
guacnet:
driver: bridge

# services
services:
guacd:
container_name: guac_guacd
image: guacamole/guacd
networks:
guacnet:
restart: always

postgres:
container_name: guac_postgres
environment:
PGDATA: /var/lib/postgresql/data/guacamole
POSTGRES_DB: guacamole_db
POSTGRES_PASSWORD: 'ChangeThisPassword'
POSTGRES_USER: guacamole_user
image: postgres:13
networks:
guacnet:
restart: always
volumes:
- ./init:/docker-entrypoint-initdb.d:ro
- ./data:/var/lib/postgresql/data:rw

guacamole:
container_name: guac_guacamole
depends_on:
- guacd
- postgres
environment:
GUACD_HOSTNAME: guacd
POSTGRES_DATABASE: guacamole_db
POSTGRES_HOSTNAME: postgres
POSTGRES_PASSWORD: 'ChangeThisPassword'
POSTGRES_USER: guacamole_user
image: guacamole/guacamole
links:
- guacd
networks:
guacnet:
ports:
- 8080:8080/tcp
restart: always

Lưu và đóng file 'docker-compose.yml' khi hoàn tất.

Với script ‘docker-compose.yml’ này, bạn sẽ tạo 3 container/service như sau:

  • guacd – thành phần chính của Apache Guacamole sẽ được sử dụng để ủy quyền cho nhiều giao thức như SSH, RDP, VNC, v.v...
  • postgres – database backend cho quá trình cài đặt Apache Guacamole của bạn. Dữ liệu của bạn sẽ được lưu trữ trong container này.
  • guacamole – ứng dụng web Apache Guacamole được kết nối với các service PostgreSQL và guacd. Container này sẽ hiển thị cổng 8080 trên máy chủ của bạn.

Khởi động Apache Guacamole

Trước khi bắt đầu, hãy đảm bảo rằng bạn đang ở trong thư mục dự án ‘guacamole-server’. Sau đó, chạy lệnh 'docker compose' sau để tạo và bắt đầu triển khai Apache Guacamole.

docker compose up -d

Bạn sẽ nhận được kết quả đầu ra như thế này – Có 3 container khác nhau guac_postgres, guac_guacdguac_guacamole được tạo và bắt đầu.

3 container khác nhau guac_postgres, guac_guacd và guac_guacamole
3 container khác nhau guac_postgres, guac_guacd và guac_guacamole

Xác minh danh sách các service/container đang chạy trên dự án Apache Guacamole của bạn thông qua lệnh sau.

docker compose ps

Nếu bạn thấy 'STATUS''Up' thì nghĩa là container/service đang chạy. Trên phần 'PORTS', bạn sẽ thấy các cổng được hiển thị theo container cho máy chủ.

Container 'guac_guacamole' hiển thị cổng TCP 8080 trên cả container và máy chủ Docker. Với điều này, bạn có thể truy cập cài đặt Apache Guacamole của mình.

Truy cập cài đặt Apache Guacamole
Truy cập cài đặt Apache Guacamole

Mở trình duyệt web và truy cập địa chỉ IP máy chủ, sau đó là cổng 8080 (tức là: http://192.168.5.100:8080/). Bạn sẽ thấy trang đăng nhập Apache Guacamole.

Đăng nhập thông qua người dùng mặc định ‘guacadmin‘ và mật khẩu ‘guacadmin‘. Sau đó nhấn Login để xác nhận.

Đăng nhập vào Apache Guacamole
Đăng nhập vào Apache Guacamole

Khi thành công, bạn sẽ nhận được bảng điều khiển người dùng Apache Guacamole.

Bảng điều khiển Guacamole
Bảng điều khiển Guacamole

Cùng với đó, xác nhận rằng quá trình cài đặt Apache Guacamole thông qua Docker và Docker Compose đã hoàn tất và thành công. Tuy nhiên, đối với hướng dẫn này, vẫn còn một số hành động cần được thực hiện để bảo đảm việc triển khai Apache Guacamole của bạn.

Ngoài ra, khi khắc phục lỗi khi triển khai Apache Guacamole, bạn có thể kiểm tra nhật ký cho từng container thông qua lệnh 'docker compose' bên dưới.

Cách sử dụng cơ bản 'docker compose' để kiểm tra nhật ký.

docker compose logs
docker compose logs SERVICE

Kiểm tra nhật ký cho các container/service cụ thể thông qua lệnh 'docker compose'.

docker compose logs guacamole
docker compose logs guacd
docker compose logs postgres

Cài đặt web server Nginx

Đối với hướng dẫn này, bạn sẽ chạy Apache Guacamole với reverse proxy Nginx. Trong phần này, bạn sẽ cài đặt web server Nginx và công cụ Certbot để tạo chứng chỉ SSL/TLS. Sau đó, bạn sẽ xác minh service Nginx để đảm bảo rằng service này đã được bật và đang chạy.

Chạy lệnh apt sau để cài đặt plugin Nginx, Certbot và Certbot Nginx. Nhập y khi được nhắc xác nhận và nhấn ENTER để tiếp tục.

sudo apt install nginx certbot python3-certbot-nginx
Cài đặt Certbot Nginx
Cài đặt Certbot Nginx

Sau khi Nginx và Certbot được cài đặt, hãy chạy lệnh sau để xác minh trạng thái service Nginx. Điều này sẽ đảm bảo rằng service Nginx được kích hoạt và chạy trên hệ thống của bạn.

sudo systemctl is-enabled nginx
sudo systemctl status nginx

Đầu ra 'enabled' xác nhận rằng service Nginx đã được bật và sẽ tự động chạy khi khởi động hệ thống. Đầu ra 'active (running)' xác nhận rằng service Nginx đang chạy.

Xác minh Nginx
Xác minh Nginx

Thiết lập tường lửa UFW

Sau khi cài đặt Nginx, tiếp theo bạn sẽ thiết lập tường lửa UFW được cài đặt mặc định trên hệ thống Ubuntu của mình. Trong phần này, bạn sẽ thêm service OpenSSH để mở cổng 22 và thêm service ‘Nginx Full’ để mở cả cổng HTTP và HTTPS trên ufw. Sau đó, bạn sẽ bắt đầu và kích hoạt ufw. Cuối cùng, bạn sẽ xác minh trạng thái của tường lửa ufw.

Nhập lệnh sau để thêm service OpenSSH và ‘Nginx Full‘ vào tường lửa ufw. Đầu ra 'Rules updated' xác nhận rằng quy tắc mới đã được thêm vào ufw.

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'

Tiếp theo, nhập lệnh sau để khởi động và kích hoạt tường lửa ufw. Nhập y khi được nhắc và nhấn ENTER để tiếp tục.

sudo ufw enable

Bây giờ, bạn sẽ nhận được kết quả đầu ra như 'Firewall is active and enabled on system startup', có nghĩa là tường lửa ufw đang chạy và được bật và sẽ tự động khởi động khi khởi động hệ thống.

Thiết lập ufw
Thiết lập ufw

Xác minh trạng thái của tường lửa ufw bằng cách nhập lệnh sau.

sudo ufw status

Bạn sẽ nhận được trạng thái của tường lửa ufw là 'active' và các service được kích hoạt 'OpenSSH' sẽ mở cổng SSH 22 và service 'Nginx Full' sẽ mở cả hai cổng HTTP và HTTPS.

Xác minh ufw
Xác minh ufw

Thiết lập Nginx làm reverse proxy

Để bảo đảm việc triển khai Apache Guacamole của bạn, bạn sẽ sử dụng Nginx làm reverse proxy và bật các kết nối bảo mật HTTPS trên đó.

Trong phần này, bạn sẽ tạo cấu hình block máy chủ Nginx mới sẽ được sử dụng làm reverse proxy cho Apache Guacamole, sau đó tạo chứng chỉ SSL/TLS thông qua Certbot và Letsencrypt để bảo mật việc triển khai Apache Guacamole.

Tạo cấu hình block máy chủ Nginx mới ‘/etc/nginx/sites-available/guacamole.conf’ bằng cách sử dụng lệnh soạn thảo nano sau.

sudo nano /etc/nginx/sites-available/guacamole.conf

Thêm các dòng sau vào file và đảm bảo thay đổi tên miền trong cấu hình bên dưới. Với điều này, bạn sẽ thiết lập Nginx làm reverse proxy cho container Apache Guacamole đã hiển thị cổng 8080 trên máy chủ Docker.

server {
  listen 80;
server_name guacamole.hwdomain.io;
root /var/www/html;

index index.html index.htm index.nginx-debian.html;

access_log  /var/log/nginx/guac_access.log;
error_log  /var/log/nginx/guac_error.log;

location / {
proxy_pass http://127.0.0.1:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_cookie_path /guacamole/ /;
}
}

Lưu và đóng file khi hoàn tất.

Tiếp theo, chạy lệnh bên dưới để kích hoạt file block máy chủ Nginx ‘/etc/nginx/sites-available/guacamole.conf‘. Sau đó, xác minh cấu hình Nginx để đảm bảo rằng bạn có cài đặt phù hợp.

sudo ln -s /etc/nginx/sites-available/guacamole.conf /etc/nginx/sites-enabled/
sudo nginx -t

Nếu thành công, bạn sẽ nhận được kết quả như ‘test successful – syntax ok‘.

Bây giờ, hãy chạy tiện ích lệnh systemctl sau để khởi động lại service Nginx và áp dụng các thay đổi.

sudo systemctl restart nginx

Đầu ra:

Thiết lập reverse proxy Nginx
Thiết lập reverse proxy Nginx

Tại thời điểm này, Apache Guacamole đang chạy với Nginx làm reverse proxy với tên miền của bạn – ví dụ này sử dụng tên miền ‘guacamole.hwdomain.io’. Bây giờ để bảo mật việc triển khai Apache Guacamole của bạn, bạn sẽ cần tạo chứng chỉ SSL/TLS thông qua Certbot và Letsencrypt.

Nhập lệnh certbot sau để tạo chứng chỉ SSL mới cho máy chủ ảo Nginx của bạn. Đảm bảo thay đổi chi tiết tên miền và địa chỉ email trong lệnh sau.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email alice@hwdomain.io -d guacamole.hwdomain.io

Sau khi được tạo, chứng chỉ SSL của bạn sẽ có sẵn trong thư mục ‘/etc/letsencrypt/live/guacamole.hwdomain.io/‘. Ngoài ra, block máy chủ Nginx của bạn sẽ tự động được thay đổi khi bật SSL và tự động chuyển hướng từ HTTP sang HTTPS.

Truy cập Apache Guacamole

Mở trình duyệt web của bạn và truy cập tên miền của cài đặt Apache Guacamole (ví dụ, https://guacamole.hwdomain.io/).

Đăng nhập bằng người dùng và mật khẩu mặc định ‘guacadmin‘.

Đăng nhập guacamole
Đăng nhập guacamole

Khi thành công, bạn sẽ nhận được bảng điều khiển người dùng Apache Guacamole.

Reverse proxy Guacamole Nginx
Reverse proxy Guacamole Nginx

Tại thời điểm này, bạn đã hoàn tất quá trình cài đặt Apache Guacamole thông qua Docker và Docker Compose. Ngoài ra, bạn đã cấu hình Nginx làm reverse proxy cho Apache Guacamole và bảo mật nó thông qua chứng chỉ SSL/TLS từ Letsencrypt.

Chủ Nhật, 24/09/2023 10:02
53 👨 378
0 Bình luận
Sắp xếp theo
    ❖ Linux