Thứ sáu, 07/08/2020 | 00:00 GMT+7

Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 18.04

Ngay cả với sự phổ biến ngày càng tăng của các dịch vụ cloud , nhu cầu chạy các ứng dụng root vẫn tồn tại.

Bằng cách sử dụng noVNCTigerVNC , bạn có thể chạy các ứng dụng root bên trong containers Docker và truy cập chúng từ xa bằng trình duyệt web. Ngoài ra, bạn có thể chạy ứng dụng của bạn trên một server có nhiều tài nguyên hệ thống hơn khả năng sẵn có local , điều này có thể tăng tính linh hoạt khi chạy các ứng dụng lớn.

Trong hướng dẫn này, bạn sẽ chứa Mozilla Thunderbird , một ứng dụng email, sử dụng Docker. Sau đó, bạn sẽ bảo mật nó và cung cấp quyền truy cập từ xa bằng web server Caddy .

Khi hoàn tất, bạn có thể truy cập Thunderbird từ bất kỳ thiết bị nào chỉ bằng trình duyệt web. Theo tùy chọn, bạn cũng có thể truy cập local các file từ đó bằng cách sử dụng WebDAV . Bạn cũng sẽ có một Docker image hoàn toàn độc lập mà bạn có thể chạy ở mọi nơi.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần các thành phần sau :

Bước 1 - Tạo cấu hình người supervisord

Bây giờ server của bạn đang chạy và Docker được cài đặt, bạn đã sẵn sàng để bắt đầu cấu hình containers ứng dụng của bạn . Vì containers của bạn bao gồm nhiều thành phần, bạn cần sử dụng trình quản lý tiến trình để chạy và giám sát chúng. Ở đây, bạn sẽ sử dụng supervisord . supervisord là một trình quản lý tiến trình được viết bằng Python thường được sử dụng để sắp xếp các containers phức tạp.

Đầu tiên, hãy tạo và nhập một folder có tên là thunderbird cho containers của bạn:

  • mkdir ~/thunderbird
  • cd ~/thunderbird

Bây giờ, hãy tạo và mở một file có tên supervisord.conf bằng nano hoặc trình soạn thảo bạn muốn :

  • nano supervisord.conf

Bây giờ thêm khối mã đầu tiên này vào supervisord.conf , sẽ xác định các tùy chọn chung cho supervisord:

~ / thunderbird / supervisord.conf
[supervisord] nodaemon=true pidfile=/tmp/supervisord.pid logfile=/dev/fd/1 logfile_maxbytes=0 

Trong khối này, bạn đang cấu hình chính trình supervisord . Bạn cần đặt nodaemon thành true vì nó sẽ chạy bên trong containers Docker làm điểm nhập. Do đó, bạn muốn nó tiếp tục chạy ở phía trước. Bạn cũng đang đặt pidfile thành một đường dẫn mà user không phải root có thể truy cập (sẽ nói thêm về điều này sau) và logfile thành stdout để bạn có thể xem log .

Tiếp theo, thêm một khối mã nhỏ khác vào supervisord.conf . Khối này khởi động TigerVNC, là một server VNC / X11 kết hợp:

~ / thunderbird / supervisord.conf
... [program:x11] priority=0 command=/usr/bin/Xtigervnc -desktop "Thunderbird" -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0 autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true 

Trong khối này, bạn đang cài đặt server X11. X11 là một giao thức server hiển thị, cho phép các ứng dụng GUI chạy. Lưu ý trong tương lai nó sẽ được thay thế bằng Wayland , nhưng tính năng truy cập từ xa vẫn đang được phát triển.

Đối với containers này, bạn đang sử dụng TigerVNC và server VNC tích hợp của nó. Điều này có một số lợi thế so với việc sử dụng server X11 và VNC riêng biệt:

  • Thời gian phản hồi nhanh hơn, vì bản vẽ GUI được thực hiện trực tiếp đến server VNC thay vì được thực hiện với cache khung trung gian (bộ nhớ lưu trữ nội dung của màn hình).
  • Tự động thay đổi kích thước màn hình, cho phép ứng dụng từ xa tự động thay đổi kích thước để phù hợp với ứng dụng client (trong trường hợp này là cửa sổ trình duyệt web ).

Nếu muốn, bạn có thể thay đổi đối số cho tùy chọn -desktop từ Thunderbird thành một thứ khác mà bạn chọn. Server sẽ hiển thị lựa chọn của bạn làm tiêu đề của trang web được sử dụng để truy cập ứng dụng của bạn.

Bây giờ, hãy thêm khối mã thứ ba vào supervisord.conf để bắt đầu easy-novnc :

~ / thunderbird / supervisord.conf
... [program:easy-novnc] priority=0 command=/usr/local/bin/easy-novnc --addr :8080 --host localhost --port 5900 --no-url-password --novnc-params "resize=remote" autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true 

Trong khối này, bạn đang cài đặt easy-novnc , một server độc lập cung cấp một shell bọc xung quanh noVNC . Server này thực hiện hai role . Đầu tiên, nó cung cấp một trang kết nối đơn giản cho phép bạn cấu hình các tùy chọn cho kết nối và cho phép bạn đặt các tùy chọn mặc định. Thứ hai, nó ủy quyền cho VNC qua WebSocket , cho phép nó được truy cập thông qua một trình duyệt web thông thường.

Thông thường, việc thay đổi kích thước được thực hiện ở phía client (tức là chia tỷ lệ hình ảnh), nhưng bạn đang sử dụng tùy chọn resize=remote để tận dụng tối đa các điều chỉnh độ phân giải từ xa của TigerVNC. Điều này cũng cung cấp độ trễ thấp hơn trên các thiết bị chậm hơn, chẳng hạn như Chromebook cấp thấp hơn:

Lưu ý: Hướng dẫn này sử dụng easy-novnc . Nếu muốn, bạn có thể sử dụng websockify và một web server riêng thay thế. Ưu điểm của easy-novnc là thời gian sử dụng và khởi động bộ nhớ thấp hơn đáng kể và nó hoạt động khép kín. easy-novnc cũng cung cấp một trang kết nối rõ ràng hơn trang noVNC mặc định và cho phép cài đặt các tùy chọn mặc định hữu ích cho việc cài đặt này (chẳng hạn như resize=remote ).

Bây giờ hãy thêm khối sau vào cấu hình của bạn để khởi động OpenBox, trình quản lý cửa sổ:

~ / thunderbird / supervisord.conf
... [program:openbox] priority=1 command=/usr/bin/openbox environment=DISPLAY=:0 autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true 

Trong khối này, bạn đang cài đặt OpenBox , một trình quản lý cửa sổ X11 nhẹ. Bạn có thể bỏ qua bước này, nhưng nếu không có nó, bạn sẽ không có thanh tiêu đề hoặc không thể thay đổi kích thước cửa sổ.

Cuối cùng, hãy thêm khối cuối cùng vào supervisord.conf , khối này sẽ khởi động ứng dụng chính:

~ / thunderbird / supervisord.conf
... [program:app] priority=1 environment=DISPLAY=:0 command=/usr/bin/thunderbird autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true 

Trong khối cuối cùng này, bạn đang đặt priority thành 1 đảm bảo rằng Thunderbird chạy sau TigerVNC, nếu không nó sẽ gặp phải tình trạng đua và ngẫu nhiên không bắt đầu được. Ta cũng đặt autorestart=true để tự động mở lại ứng dụng nếu nó đóng nhầm. Biến môi trường DISPLAY cho ứng dụng biết hiển thị trên server VNC mà bạn đã cài đặt trước đó.

Đây là giao diện supervisord.conf đã hoàn thành của bạn:

~ / thunderbird / supervisord.conf
[supervisord] nodaemon=true pidfile=/tmp/supervisord.pid logfile=/dev/fd/1 logfile_maxbytes=0  [program:x11] priority=0 command=/usr/bin/Xtigervnc -desktop "Thunderbird" -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0 autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true  [program:easy-novnc] priority=0 command=/usr/local/bin/easy-novnc --addr :8080 --host localhost --port 5900 --no-url-password --novnc-params "resize=remote" autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true  [program:openbox] priority=1 command=/usr/bin/openbox environment=DISPLAY=:0 autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true  [program:app] priority=1 environment=DISPLAY=:0 command=/usr/bin/thunderbird autorestart=true stdout_logfile=/dev/fd/1 stdout_logfile_maxbytes=0 redirect_stderr=true 

Nếu bạn muốn chứa một ứng dụng khác, hãy thay thế /usr/bin/thunderbird bằng đường dẫn đến file thực thi của ứng dụng của bạn. Nếu không, bây giờ bạn đã sẵn sàng để cấu hình menu chính của GUI.

Bước 2 - Cài đặt Menu OpenBox

Bây giờ trình quản lý tiến trình của bạn đã được cấu hình , hãy cài đặt menu OpenBox. Menu này cho phép ta chạy các ứng dụng bên trong containers . Ta cũng sẽ bao gồm một terminal và trình giám sát quá trình để gỡ lỗi nếu được yêu cầu.

Bên trong folder ứng dụng của bạn, sử dụng nano hoặc editor yêu thích của bạn để tạo và mở một file mới có tên menu.xml :

  • nano ~/thunderbird/menu.xml

Bây giờ, hãy thêm mã sau vào menu.xml :

~ / thunderbird / menu.xml
<?xml version="1.0" encoding="utf-8"?> <openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">     <menu id="root-menu" label="Openbox 3">         <item label="Thunderbird">             <action name="Execute">                 <execute>/usr/bin/thunderbird</execute>             </action>         </item>         <item label="Terminal">             <action name="Execute">                 <execute>/usr/bin/x-terminal-emulator</execute>             </action>         </item>         <item label="Htop">             <action name="Execute">                 <execute>/usr/bin/x-terminal-emulator -e htop</execute>             </action>         </item>     </menu> </openbox_menu> 

Tệp XML này chứa các mục menu sẽ xuất hiện khi bạn nhấp chuột phải vào màn hình. Mỗi mục bao gồm một nhãn và một hành động.

Nếu bạn muốn chứa một ứng dụng khác, hãy thay thế /usr/bin/thunderbird bằng đường dẫn đến file thực thi ứng dụng của bạn và thay đổi label của mục.

Bước 3 - Tạo Dockerfile

Bây giờ OpenBox đã được cấu hình, bạn sẽ tạo Dockerfile, liên kết mọi thứ với nhau.

Tạo một Dockerfile trong folder containers của bạn:

  • nano ~/thunderbird/Dockerfile

Để bắt đầu, hãy thêm một số mã để tạo easy-novnc :

~ / thunderbird / Dockerfile
FROM golang:1.14-buster AS easy-novnc-build WORKDIR /src RUN go mod init build && \     go get github.com/geek1011/easy-novnc@v1.1.0 && \     go build -o /bin/easy-novnc github.com/geek1011/easy-novnc 

Trong giai đoạn đầu tiên, bạn đang xây dựng easy-novnc . Điều này được thực hiện trong một giai đoạn riêng biệt để đơn giản và tiết kiệm dung lượng - bạn không cần toàn bộ chuỗi công cụ Go trong hình ảnh cuối cùng của bạn . Lưu ý @v1.1.0 trong lệnh xây dựng. Điều này đảm bảo kết quả là xác định, điều này rất quan trọng vì Docker lưu trữ kết quả của mỗi bước. Nếu bạn chưa chỉ định một version rõ ràng, Docker sẽ tham chiếu đến version easy-novnc tại thời điểm hình ảnh được tạo lần đầu tiên. Ngoài ra, bạn muốn đảm bảo bạn download một version cụ thể của easy-novnc , trong trường hợp các thay đổi vi phạm được thực hiện đối với giao diện CLI.

Bây giờ ta hãy tạo giai đoạn thứ hai, sẽ trở thành hình ảnh cuối cùng. Ở đây bạn sẽ sử dụng Debian 10 (buster) làm hình ảnh cơ sở. Lưu ý vì điều này đang chạy trong một containers , nó sẽ hoạt động dù phân phối mà bạn đang chạy trên server của bạn .

Tiếp theo, thêm khối sau vào Dockerfile của bạn:

~ / thunderbird / Dockerfile
... FROM debian:buster RUN apt-get update -y && \     apt-get install -y --no-install-recommends openbox tigervnc-standalone-server supervisor gosu && \     rm -rf /var/lib/apt/lists && \     mkdir -p /usr/share/desktop-directories 

Trong hướng dẫn này, bạn đang cài đặt Debian 10 làm hình ảnh cơ sở và sau đó cài đặt mức tối thiểu cần thiết để chạy các ứng dụng GUI trong containers của bạn. Lưu ý bạn chạy apt-get update như một phần của hướng dẫn tương tự để ngăn chặn sự cố bộ nhớ đệm từ Docker. Để tiết kiệm dung lượng, bạn cũng sẽ xóa danh sách gói được download sau đó (bản thân các gói được lưu trong bộ nhớ cache sẽ bị xóa theo mặc định ). Bạn cũng đang tạo folder /usr/share/desktop-directories vì một số ứng dụng phụ thuộc vào folder hiện có.

Hãy thêm một khối mã nhỏ khác:

~ / thunderbird / Dockerfile
... RUN apt-get update -y && \     apt-get install -y --no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip && \     rm -rf /var/lib/apt/lists 

Trong hướng dẫn này, bạn đang cài đặt một số gói và tiện ích có mục đích chung hữu ích. Đặc biệt quan tâm ở đây là xdg-utils (cung cấp các lệnh cơ sở được sử dụng bởi các ứng dụng máy tính để bàn trên Linux) và ca-certificates (cài đặt certificate root để cho phép ta truy cập các trang web HTTPS).

Bây giờ, ta có thể thêm các hướng dẫn cho ứng dụng chính:

~ / thunderbird / Dockerfile
... RUN apt-get update -y && \     apt-get install -y --no-install-recommends thunderbird && \     rm -rf /var/lib/apt/lists 

Như trước đây, ở đây ta đang cài đặt ứng dụng. Nếu bạn đang chứa một ứng dụng khác, bạn có thể thay thế các lệnh này bằng các lệnh bắt buộc để cài đặt ứng dụng cụ thể của bạn. Một số ứng dụng sẽ yêu cầu thêm một chút công việc để chạy bên trong Docker. Ví dụ: nếu bạn đang cài đặt một ứng dụng sử dụng Chrome, Chromium hoặc QtWebEngine, bạn cần sử dụng đối số dòng lệnh --no-sandbox vì nó sẽ không được hỗ trợ trong Docker.

Tiếp theo, hãy bắt đầu thêm các hướng dẫn để thêm một vài file cuối cùng vào containers :

~ / thunderbird / Dockerfile
... COPY --from=easy-novnc-build /bin/easy-novnc /usr/local/bin/ COPY menu.xml /etc/xdg/openbox/ COPY supervisord.conf /etc/ EXPOSE 8080 

Ở đây bạn đang thêm các file cấu hình bạn đã tạo trước đó vào hình ảnh và sao chép easy-novnc binary easy-novnc từ giai đoạn đầu tiên.

Khối mã tiếp theo này tạo folder dữ liệu và thêm user chuyên dụng cho ứng dụng của bạn. Điều này rất quan trọng vì một số ứng dụng từ chối chạy dưới quyền root. Bạn cũng không nên chạy các ứng dụng dưới dạng root, ngay cả trong containers .

~ / thunderbird / Dockerfile
... RUN groupadd --gid 1000 app && \     useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && \     mkdir -p /data VOLUME /data 

Để đảm bảo UID/GID nhất quán cho các file , bạn đang đặt rõ ràng cả hai thành 1000 . Bạn cũng đang gắn một ổ đĩa vào folder dữ liệu đảm bảo ổ đĩa vẫn tồn tại giữa các lần khởi động lại.

Cuối cùng, hãy thêm các hướng dẫn để chạy mọi thứ:

~ / thunderbird / Dockerfile
... CMD ["sh", "-c", "chown app:app /data /dev/stdout && exec gosu app supervisord"] 

Bằng cách đặt lệnh mặc định thành supervisord , người quản lý sẽ chạy các quy trình cần thiết để chạy ứng dụng của bạn. Trong trường hợp này, bạn đang sử dụng CMD chứ không phải ENTRYPOINT . Trong hầu hết các trường hợp, nó sẽ không tạo ra sự khác biệt, nhưng sử dụng CMD phù hợp hơn cho mục đích này vì một vài lý do. Đầu tiên, người supervisord không nhận bất kỳ đối số nào có liên quan đến ta và nếu bạn cung cấp đối số cho containers , chúng sẽ thay thế CMD và được nối vào ENTRYPOINT . Thứ hai, sử dụng CMD cho phép ta cung cấp một lệnh hoàn toàn khác (sẽ được thực thi bởi /bin/sh -c ) khi chuyển các đối số vào containers , điều này giúp việc gỡ lỗi dễ dàng hơn.

Và cuối cùng, bạn cần chạy chown với quyền là user root trước khi bắt đầu trình supervisord để ngăn chặn các vấn đề về quyền đối với data volumes và cho phép các quy trình con mở stdout . Điều này cũng nghĩa là bạn cần sử dụng gosu thay vì hướng dẫn USER để chuyển đổi user .

Đây là Dockerfile đã hoàn thành của bạn sẽ trông như thế nào:

~ / thunderbird / Dockerfile
FROM golang:1.14-buster AS easy-novnc-build WORKDIR /src RUN go mod init build && \     go get github.com/geek1011/easy-novnc@v1.1.0 && \     go build -o /bin/easy-novnc github.com/geek1011/easy-novnc  FROM debian:buster  RUN apt-get update -y && \     apt-get install -y --no-install-recommends openbox tigervnc-standalone-server supervisor gosu && \     rm -rf /var/lib/apt/lists && \     mkdir -p /usr/share/desktop-directories  RUN apt-get update -y && \     apt-get install -y --no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip && \     rm -rf /var/lib/apt/lists  RUN apt-get update -y && \     apt-get install -y --no-install-recommends thunderbird && \     rm -rf /var/lib/apt/lists  COPY --from=easy-novnc-build /bin/easy-novnc /usr/local/bin/ COPY menu.xml /etc/xdg/openbox/ COPY supervisord.conf /etc/ EXPOSE 8080  RUN groupadd --gid 1000 app && \     useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && \     mkdir -p /data VOLUME /data  CMD ["sh", "-c", "chown app:app /data /dev/stdout && exec gosu app supervisord"] 

Lưu và đóng Dockerfile của bạn. Bây giờ ta đã sẵn sàng xây dựng và chạy containers của bạn , sau đó truy cập Thunderbird - một ứng dụng GUI.

Bước 4 - Xây dựng và vận hành containers

Bước tiếp theo là xây dựng containers của bạn và đặt nó chạy khi khởi động. Bạn cũng sẽ cài đặt một ổ đĩa để lưu giữ dữ liệu ứng dụng giữa các lần khởi động lại và cập nhật.

Đầu tiên hãy xây dựng containers của bạn. Đảm bảo chạy các lệnh này trong folder ~/thunderbird :

  • docker build -t thunderbird .

Bây giờ, hãy tạo một mạng mới sẽ được chia sẻ giữa các containers của ứng dụng:

  • docker network create thunderbird-net

Sau đó, tạo một ổ đĩa để lưu trữ dữ liệu ứng dụng:

  • docker volume create thunderbird-data

Cuối cùng, chạy nó và đặt nó tự động khởi động lại:

  • docker run --detach --restart=always --volume=thunderbird-data:/data --net=thunderbird-net --name=thunderbird-app thunderbird

Lưu ý nếu muốn, bạn có thể thay thế thunderbird-app sau tùy chọn --name bằng một tên khác. Bất cứ điều gì bạn đã chọn, ứng dụng của bạn hiện đã được chứa và đang chạy. Bây giờ ta hãy sử dụng web server Caddy để bảo mật nó và kết nối từ xa với nó.

Bước 5 - Cài đặt Caddy

Trong bước này, bạn sẽ cài đặt web server Caddy để cung cấp xác thực và, tùy chọn, truy cập file từ xa qua WebDAV. Để đơn giản và để cho phép bạn sử dụng nó với Reverse Proxy hiện có của bạn , bạn sẽ chạy nó trong một containers khác.

Tạo một folder mới và sau đó di chuyển bên trong nó:

  • mkdir ~/caddy
  • cd ~/caddy

Bây giờ, hãy tạo một Dockerfile mới bằng nano hoặc trình soạn thảo bạn muốn :

  • nano ~/caddy/Dockerfile

Sau đó, thêm các lệnh sau:

~ / caddy / Dockerfile
FROM golang:1.14-buster AS caddy-build WORKDIR /src RUN echo 'module caddy' > go.mod && \     echo 'require github.com/caddyserver/caddy/v2 v2.1.1' >> go.mod && \     echo 'require github.com/mholt/caddy-webdav v0.0.0-20200523051447-bc5d19941ac3' >> go.mod RUN echo 'package main' > caddy.go && \     echo 'import caddycmd "github.com/caddyserver/caddy/v2/cmd"' >> caddy.go && \     echo 'import _ "github.com/caddyserver/caddy/v2/modules/standard"' >> caddy.go && \     echo 'import _ "github.com/mholt/caddy-webdav"' >> caddy.go && \     echo 'func main() { caddycmd.Main() }' >> caddy.go RUN go build -o /bin/caddy .  FROM debian:buster  RUN apt-get update -y && \     apt-get install -y --no-install-recommends gosu && \     rm -rf /var/lib/apt/lists  COPY --from=caddy-build /bin/caddy /usr/local/bin/ COPY Caddyfile /etc/ EXPOSE 8080  RUN groupadd --gid 1000 app && \     useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && \     mkdir -p /data VOLUME /data  WORKDIR /data CMD ["sh", "-c", "chown app:app /data && exec gosu app /usr/local/bin/caddy run -adapter caddyfile -config /etc/Caddyfile"] 

Dockerfile này xây dựng Caddy với plugin WebDAV được kích hoạt, sau đó chạy nó trên cổng 8080 với Caddyfile tại /etc/Caddyfile . Lưu và đóng file .

Tiếp theo, bạn sẽ cấu hình web server Caddy. Tạo một file có tên Caddyfile trong folder bạn vừa tạo:

  • nano ~/caddy/Caddyfile

Bây giờ hãy thêm khối mã sau vào Caddyfile của bạn:

~ / caddy / Caddyfile
{     order webdav last } :8080 {     log     root * /data     reverse_proxy thunderbird-app:8080      handle_path /files/* {                  file_server browse     }     redir /files /files/      handle /webdav/* {         webdav {                          prefix /webdav                  }     }     redir /webdav /webdav/      basicauth /* {         {env.APP_USERNAME} {env.APP_PASSWORD_HASH}     } } 

Caddyfile này ủy quyền folder root tới containers thunderbird-app mà bạn đã tạo ở Bước 4 (Docker phân giải nó thành IP chính xác). Nó cũng sẽ phục vụ trình duyệt file dựa trên web chỉ đọc trên /files và chạy server WebDAV trên /webdav mà bạn có thể mount local để truy cập file của bạn . Tên user và password được đọc từ các biến môi trường APP_USERNAMEAPP_PASSWORD_HASH .

Bây giờ xây dựng containers :

  • docker build -t thunderbird-caddy .

Caddy v.2 yêu cầu bạn băm password mong muốn. Chạy lệnh sau và nhớ thay thế mypass bằng một password mạnh mà bạn chọn:

  • docker run --rm -it thunderbird-caddy caddy hash-password -plaintext 'mypass'

Lệnh này sẽ xuất ra một chuỗi ký tự. Sao chép file này vào clipboard của bạn để chuẩn bị chạy lệnh tiếp theo.

Đến đây bạn đã sẵn sàng để chạy containers . Đảm bảo thay thế myuser bằng tên user bạn chọn và thay mypass-hash bằng kết quả của lệnh bạn đã chạy ở bước trước. Bạn cũng có thể thay đổi cổng ( 8080 tại đây) để truy cập server của bạn trên một cổng khác:

  • docker run --detach --restart=always --volume=thunderbird-data:/data --net=thunderbird-net --name=thunderbird-web --env=APP_USERNAME="myuser" --env=APP_PASSWORD_HASH="mypass-hash" --publish=8080:8080 thunderbird-caddy

Hiện ta đã sẵn sàng truy cập và thử nghiệm ứng dụng của bạn .

Bước 6 - Kiểm tra và quản lý ứng dụng

Hãy truy cập ứng dụng của bạn và đảm bảo nó đang hoạt động.

Trước tiên, mở http:// your_server_ip : 8080 trong trình duyệt web,
đăng nhập bằng thông tin đăng nhập bạn đã chọn trước đó và nhấp vào Kết nối .

Trang kết nối NoVNC

Đến đây bạn sẽ có thể tương tác với ứng dụng và nó sẽ tự động thay đổi kích thước để phù hợp với cửa sổ trình duyệt của bạn.

Menu chính của Thunderbird

Nếu bạn nhấp chuột phải vào màn hình nền màu đen, bạn sẽ thấy một menu cho phép bạn truy cập một terminal . Nếu bạn nhấp chuột giữa, bạn sẽ thấy danh sách các cửa sổ.

NoVNC nhấp chuột phải

Bây giờ, hãy mở http:// your_server_ip : 8080 /files/ trong trình duyệt web. Bạn có thể truy cập các file của bạn .

NoVNC truy cập file  webdav

Theo tùy chọn, bạn có thể thử gắn http:// your_server_ip : 8080 /webdav/ trong ứng dụng client WebDAV. Bạn có thể truy cập và sửa đổi các file của bạn trực tiếp. Nếu bạn sử dụng tùy chọn ổ đĩa mạng Bản đồ trong Windows Explorer, bạn cần sử dụng Reverse Proxy để thêm HTTPS hoặc đặt HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel thành DWORD:2 .

Trong cả hai trường hợp, ứng dụng GUI root của bạn hiện đã sẵn sàng để sử dụng từ xa.

Kết luận

Đến đây bạn đã cài đặt thành công containers Docker cho Thunderbird và sau đó, bằng cách sử dụng Caddy, bạn đã cấu hình quyền truy cập vào nó thông qua trình duyệt web. Nếu bạn cần nâng cấp ứng dụng của bạn , hãy dừng containers , chạy docker rm thunderbird-app thunderbird-web , tạo lại hình ảnh và sau đó chạy lại các lệnh docker run từ các bước trước ở trên. Dữ liệu sẽ vẫn được bảo toàn vì nó được lưu trữ trong một ổ đĩa.

Nếu bạn muốn tìm hiểu thêm về các lệnh Docker cơ bản, bạn có thể đọc hướng dẫn này hoặc bảng cheatsheet này . Để sử dụng lâu dài hơn, bạn cũng có thể cần xem xét bật HTTPS (điều này yêu cầu domain ) để tăng cường bảo mật.

Ngoài ra, nếu bạn đang triển khai nhiều ứng dụng, bạn có thể cần sử dụng Docker Compose hoặc Kubernetes thay vì khởi động từng containers theo cách thủ công. Và hãy nhớ rằng, hướng dẫn này có thể dùng làm cơ sở để chạy bất kỳ ứng dụng Linux nào khác trên server của bạn, bao gồm:

  • Wine , một lớp tương thích để chạy các ứng dụng Windows trên Linux.
  • GIMP , một editor hình ảnh open-souce .
  • Cutter , một nền tảng kỹ thuật đảo ngược open-souce .

Tùy chọn cuối cùng này cho thấy tiềm năng lớn của việc chứa và truy cập từ xa các ứng dụng GUI. Với cài đặt này, giờ đây bạn có thể sử dụng một server có sức mạnh tính toán cao hơn đáng kể so với khả năng local của bạn để chạy các công cụ sử dụng nhiều tài nguyên như Cutter.


Tags:

Các tin trước

Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 9 2020-08-07
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 10 2020-08-07
Cách loại bỏ image Docker, container và khối lượng 2020-08-06
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 20.04 2020-08-04
Cách mở rộng và bảo mật một ứng dụng Django với Docker, Nginx và Let's Encrypt 2020-07-10
Cách tạo ứng dụng Node.js với Docker trên Ubuntu 20.04 2020-06-30
Cách cài đặt Docker Compose trên Ubuntu 20.04 [Quickstart] 2020-06-11
Cách cài đặt và thiết lập Laravel với Docker Compose trên Ubuntu 20.04 2020-06-09
Cách cài đặt và sử dụng Docker trên Ubuntu 20.04 2020-06-09
Cách cài đặt và sử dụng Docker Compose trên Ubuntu 20.04 2020-06-05