Initial commit
This commit is contained in:
commit
3d8657c5b5
5 changed files with 145 additions and 0 deletions
5
.env
Normal file
5
.env
Normal file
|
@ -0,0 +1,5 @@
|
|||
#CADDY_HTTP=127.0.0.1:80
|
||||
#CADDY_HTTPS=127.0.0.1:443
|
||||
#IPV4_NETWORK=
|
||||
#IPV6_NETWORK=
|
||||
#DISPLAY=
|
24
README.md
Normal file
24
README.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Desktop in Docker
|
||||
|
||||
This serves as a reference for how to run an arbitrary desktop environment, window manager or single application in docker and served securely in Browser using Guacamole.
|
||||
|
||||
## Run
|
||||
|
||||
First we need to prepare the database because Guacamole is a bit special in this regard.
|
||||
|
||||
It should also ask you what domain Caddy should use to serve Guacamole on, it should automatically try to get a valid certificate for your domain.
|
||||
|
||||
```
|
||||
$ ./prepare.sh
|
||||
Domain Guacamole should be served on [localhost]: desktop.mydomain.com
|
||||
Preparing folder guacamole/init and creating guacamole/init/initdb.sql
|
||||
done
|
||||
```
|
||||
|
||||
After that you can already start the containers using `docker-compose up -d`
|
||||
|
||||
## Config
|
||||
|
||||
There are a few environment variables you can set in `.env` that are used by `docker-compose` for the `compose.yml`.
|
||||
|
||||
If you want to serve it locally for tesing you can uncomment `CADDY_HTTP` and `CADDY_HTTPS` in the reference `.env` file. By default docker makes it listen on port `80` and `443` on all interfaces.
|
12
caddy/Caddyfile
Normal file
12
caddy/Caddyfile
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
servers {
|
||||
protocol {
|
||||
experimental_http3
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
localhost {
|
||||
redir / /guacamole/ 308
|
||||
reverse_proxy guacamole:8080
|
||||
}
|
86
compose.yml
Normal file
86
compose.yml
Normal file
|
@ -0,0 +1,86 @@
|
|||
---
|
||||
x-restart-policy: &restart_policy
|
||||
restart: unless-stopped
|
||||
x-pull-policy: &pull_policy
|
||||
pull_policy: always
|
||||
x-compose-defaults: &compose_defaults
|
||||
<<: *restart_policy
|
||||
<<: *pull_policy
|
||||
networks:
|
||||
desktop:
|
||||
|
||||
services:
|
||||
caddy:
|
||||
<<: *compose_defaults
|
||||
image: caddy:2-alpine
|
||||
container_name: caddy
|
||||
ports:
|
||||
- ${CADDY_HTTP:-80}:80
|
||||
- ${CADDY_HTTPs:-443}:443
|
||||
- ${CADDY_HTTPs:-443}:443/udp # HTTP/3
|
||||
volumes:
|
||||
- ./caddy/data:/data
|
||||
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||
|
||||
guacd:
|
||||
<<: *compose_defaults
|
||||
image: guacamole/guacd:latest
|
||||
container_name: guacd
|
||||
volumes:
|
||||
- ./guacamole/drive:/drive:rw
|
||||
- ./guacamole/record:/record:rw
|
||||
|
||||
guacamole:
|
||||
<<: *compose_defaults
|
||||
image: guacamole/guacamole:latest
|
||||
container_name: guacamole
|
||||
depends_on:
|
||||
- guacd
|
||||
- postgres
|
||||
links:
|
||||
- guacd
|
||||
- postgres
|
||||
environment:
|
||||
GUACD_HOSTNAME: guacd
|
||||
EXTENSIONS: auth-totp
|
||||
POSTGRES_DATABASE: guacamole_db
|
||||
POSTGRES_HOSTNAME: postgres
|
||||
POSTGRES_PASSWORD: 'SuperSecretPassword1234'
|
||||
POSTGRES_USER: guacamole_user
|
||||
volumes:
|
||||
- ./guacamole/data:/config
|
||||
expose:
|
||||
- 8080/tcp
|
||||
|
||||
postgres:
|
||||
<<: *compose_defaults
|
||||
image: postgres:14-alpine
|
||||
container_name: postgres-guacamole
|
||||
environment:
|
||||
POSTGRES_INITDB_ARGS: --auth-host=md5 # Guacamole cannot handle scram-sha-256
|
||||
PGDATA: /var/lib/postgresql/data/guacamole
|
||||
POSTGRES_DB: guacamole_db
|
||||
POSTGRES_PASSWORD: 'SuperSecretPassword1234'
|
||||
POSTGRES_USER: guacamole_user
|
||||
volumes:
|
||||
- ./guacamole/init:/docker-entrypoint-initdb.d:z
|
||||
- postgres:/var/lib/postgresql/data
|
||||
expose:
|
||||
- 5432/tcp
|
||||
|
||||
volumes:
|
||||
postgres:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
desktop:
|
||||
name: "desktop"
|
||||
driver: bridge
|
||||
driver_opts:
|
||||
com.docker.network.bridge.name: br-desktop
|
||||
enable_ipv6: true
|
||||
ipam:
|
||||
driver: default
|
||||
config:
|
||||
- subnet: ${IPV4_NETWORK:-172.20.1}.0/24
|
||||
- subnet: ${IPV6_NETWORK:-fd17:20:200:10::/64}
|
18
prepare.sh
Executable file
18
prepare.sh
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
# check if docker is running
|
||||
if ! (docker ps >/dev/null 2>&1)
|
||||
then
|
||||
echo "docker daemon not running, will exit here!"
|
||||
exit
|
||||
fi
|
||||
|
||||
read -e -p "Domain Guacamole should be served on [localhost]: " DOMAIN
|
||||
DOMAIN=${DOMAIN:-localhost}
|
||||
sed -i "s/localhost/$DOMAIN/g" caddy/Caddyfile
|
||||
|
||||
echo "Preparing folder guacamole/init and creating guacamole/init/initdb.sql"
|
||||
mkdir -p ./guacamole/init
|
||||
chmod -R +x ./guacamole/init
|
||||
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgres > ./guacamole/init/initdb.sql
|
||||
echo "done"
|
Loading…
Reference in a new issue