mirror of
https://github.com/fcwu/docker-ubuntu-vnc-desktop
synced 2025-12-06 16:32:47 +01:00
Merge pull request #111 from olberger/master
Proposed description of the architecture
This commit is contained in:
commit
9d7e06c824
4 changed files with 78 additions and 5 deletions
41
ARCHITECTURE.md
Normal file
41
ARCHITECTURE.md
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
# Architecture of the container #
|
||||||
|
|
||||||
|
Components
|
||||||
|
============
|
||||||
|
|
||||||
|
The container contains the following components :
|
||||||
|
- An Ubuntu base system
|
||||||
|
- The tini + supervisord startup and daemon control system
|
||||||
|
- Nginx Web server
|
||||||
|
- A backend ("novnc2") Python Web app providing an API (written with
|
||||||
|
Flask) on port 6079
|
||||||
|
- A frontend VueJS Web app displayed to the user, which will wrap noVNC
|
||||||
|
- noVNC + WebSockify providing the Web VNC client in an HTML5 canvas
|
||||||
|
- Xvfb running the X11 server in memory
|
||||||
|
- x11vnc exporting the X11 display through VNC
|
||||||
|
- and all regular X applications, like the LXDE desktop and apps
|
||||||
|
|
||||||
|
Wiring them all
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Internally, Xvfb will be started in DISPLAY :1, then x11vnc will
|
||||||
|
provide access to it on the default VNC port (5900).
|
||||||
|
|
||||||
|
noVNC will be started listening to HTTP requests on port 6081.
|
||||||
|
It is possible to connect directly to port 6081 of the container, to
|
||||||
|
only use the regular noVNC Web interface (provided it is exported by
|
||||||
|
the container).
|
||||||
|
|
||||||
|
Above noVNC stands the VueJS frontend Web app provided by nginx, which
|
||||||
|
will proxy the noVNC canvas, and will add some useful features over
|
||||||
|
noVNC.
|
||||||
|
|
||||||
|
User-oriented features
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The Web frontend adds the following features :
|
||||||
|
- upon display of the Web page, the app will detect the size of the
|
||||||
|
Web browser's window, and will invoke the backend API so as to make
|
||||||
|
sure the noVNC rendering ajusts to that size
|
||||||
|
- provide a flash video rendering transporting the sound (???)
|
||||||
|
|
||||||
|
|
@ -4,7 +4,18 @@
|
||||||
git clone --recursive https://github.com/fcwu/docker-ubuntu-vnc-desktop
|
git clone --recursive https://github.com/fcwu/docker-ubuntu-vnc-desktop
|
||||||
```
|
```
|
||||||
|
|
||||||
# Run in local
|
or, if you have already cloned it, get submodules contents :
|
||||||
|
```
|
||||||
|
git submodule init; git submodule update
|
||||||
|
```
|
||||||
|
|
||||||
|
# Test local code
|
||||||
|
|
||||||
|
## Test-run in container rebuilt from local repo
|
||||||
|
|
||||||
|
You may edit the code in your local copy of the repo, rebuild the
|
||||||
|
container, and test the changes:
|
||||||
|
|
||||||
```
|
```
|
||||||
make clean
|
make clean
|
||||||
FLAVOR=lxqt ARCH=amd64 IMAGE=ubuntu:18.04 make build
|
FLAVOR=lxqt ARCH=amd64 IMAGE=ubuntu:18.04 make build
|
||||||
|
|
@ -12,14 +23,19 @@ make run
|
||||||
```
|
```
|
||||||
|
|
||||||
## develop backend
|
## develop backend
|
||||||
|
|
||||||
|
You may wish to work on the backend app. As the "make run" makes sure
|
||||||
|
to mount the current dir contents under /src in the container, you can
|
||||||
|
proceed as such (no compilation of the Python code):
|
||||||
```
|
```
|
||||||
make shell
|
make shell
|
||||||
supervisorctl stop web
|
supervisorctl -c /etc/supervisor/supervisord.conf stop web
|
||||||
cd /src/image/usr/local/lib/web/backend
|
cd /src/image/usr/local/lib/web/backend
|
||||||
./run.py --debug
|
./run.py --debug
|
||||||
```
|
```
|
||||||
|
|
||||||
## develop frontend
|
## develop frontend
|
||||||
|
|
||||||
```
|
```
|
||||||
cd web
|
cd web
|
||||||
yarn add
|
yarn add
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ FROM arm32v7/{{image}} as system
|
||||||
COPY --from=amd64 /usr/bin/qemu-arm-static /usr/bin/
|
COPY --from=amd64 /usr/bin/qemu-arm-static /usr/bin/
|
||||||
{%endif%}
|
{%endif%}
|
||||||
|
|
||||||
{% if localbuild %}
|
{% if localbuild == 1 %}
|
||||||
RUN sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list;
|
RUN sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
@ -94,7 +94,7 @@ RUN apt-get update \
|
||||||
################################################################################
|
################################################################################
|
||||||
FROM {{image}} as builder
|
FROM {{image}} as builder
|
||||||
|
|
||||||
{% if localbuild %}
|
{% if localbuild == 1 %}
|
||||||
RUN sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list;
|
RUN sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
||||||
18
Makefile
18
Makefile
|
|
@ -1,17 +1,26 @@
|
||||||
.PHONY: build run
|
.PHONY: build run
|
||||||
|
|
||||||
|
# Default values for variables
|
||||||
REPO ?= dorowu/ubuntu-desktop-lxde-vnc
|
REPO ?= dorowu/ubuntu-desktop-lxde-vnc
|
||||||
TAG ?= latest
|
TAG ?= latest
|
||||||
|
# you can choose other base image versions
|
||||||
IMAGE ?= ubuntu:18.04
|
IMAGE ?= ubuntu:18.04
|
||||||
|
# use tw.archive.ubuntu.com instead of archive.ubuntu.com
|
||||||
LOCALBUILD ?= 1
|
LOCALBUILD ?= 1
|
||||||
|
# choose from supported flavors (see available ones in ./flavors/*.yml)
|
||||||
FLAVOR ?= lxde
|
FLAVOR ?= lxde
|
||||||
|
# armhf or amd64
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
|
|
||||||
|
# These files will be generated from teh Jinja templates (.j2 sources)
|
||||||
templates = Dockerfile image/etc/supervisor/conf.d/supervisord.conf
|
templates = Dockerfile image/etc/supervisor/conf.d/supervisord.conf
|
||||||
|
|
||||||
|
# Rebuild the container image
|
||||||
build: $(templates)
|
build: $(templates)
|
||||||
docker build -t $(REPO):$(TAG) .
|
docker build -t $(REPO):$(TAG) .
|
||||||
|
|
||||||
|
# Test run the container
|
||||||
|
# the local dir will be mounted under /src read-only
|
||||||
run:
|
run:
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
-p 6080:80 -p 6081:443 \
|
-p 6080:80 -p 6081:443 \
|
||||||
|
|
@ -24,9 +33,11 @@ run:
|
||||||
--name ubuntu-desktop-lxde-test \
|
--name ubuntu-desktop-lxde-test \
|
||||||
$(REPO):$(TAG)
|
$(REPO):$(TAG)
|
||||||
|
|
||||||
|
# Connect inside the running container for debugging
|
||||||
shell:
|
shell:
|
||||||
docker exec -it ubuntu-desktop-lxde-test bash
|
docker exec -it ubuntu-desktop-lxde-test bash
|
||||||
|
|
||||||
|
# Generate the SSL/TLS config for HTTPS
|
||||||
gen-ssl:
|
gen-ssl:
|
||||||
mkdir -p ssl
|
mkdir -p ssl
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
||||||
|
|
@ -34,7 +45,12 @@ gen-ssl:
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(templates)
|
rm -f $(templates)
|
||||||
|
|
||||||
|
extra-clean:
|
||||||
|
docker rmi $(REPO):$(TAG)
|
||||||
|
docker image prune -f
|
||||||
|
|
||||||
|
# Run jinja2cli to parse Jinja template applying rules defined in the flavors definitions
|
||||||
%: %.j2 flavors/$(FLAVOR).yml
|
%: %.j2 flavors/$(FLAVOR).yml
|
||||||
docker run -v $(shell pwd):/data vikingco/jinja2cli \
|
docker run -v $(shell pwd):/data vikingco/jinja2cli \
|
||||||
-D flavor=$(FLAVOR) \
|
-D flavor=$(FLAVOR) \
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue