Skip to content

Commit 30dec0f

Browse files
authored
Add dockge to OVA images (#141)
* add dockge * upload latest ova * fix stacks directory * change stacks * restore pipelines * change path, make dockge optional * remove temporary build * remove npm * Set restart to unless-stopped and omit auto secrets
1 parent c38c764 commit 30dec0f

7 files changed

Lines changed: 92 additions & 68 deletions

File tree

.github/workflows/build-ova.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,14 @@ jobs:
6363
env:
6464
PACKER_LOG: 1
6565
run: |
66+
CORE_TAG="${{ github.event.inputs.core_tag }}"
67+
PROXY_TAG="${{ github.event.inputs.proxy_tag }}"
68+
GATEWAY_TAG="${{ github.event.inputs.gateway_tag }}"
6669
packer build \
6770
-var "iso_url=file://$PWD/ubuntu-24.04.4-live-server-amd64.iso" \
68-
-var "core_tag=${{ github.event.inputs.core_tag }}" \
69-
-var "proxy_tag=${{ github.event.inputs.proxy_tag }}" \
70-
-var "gateway_tag=${{ github.event.inputs.gateway_tag }}" \
71+
-var "core_tag=${CORE_TAG}" \
72+
-var "proxy_tag=${PROXY_TAG}" \
73+
-var "gateway_tag=${GATEWAY_TAG}" \
7174
defguard.pkr.hcl
7275
7376
- name: Upload OVA to S3
@@ -84,3 +87,5 @@ jobs:
8487
ls -lh output/defguard/defguard.ova
8588
aws s3 cp output/defguard/defguard.ova "s3://defguard-downloads/ova/${FILENAME}"
8689
echo "Uploaded: s3://defguard-downloads/ova/${FILENAME}"
90+
aws s3 cp output/defguard/defguard.ova "s3://defguard-downloads/ova/defguard-latest.ova" \
91+
--cache-control "no-cache"

ova/defguard.pkr.hcl

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,21 +95,21 @@ build {
9595
provisioner "shell" {
9696
inline = [
9797
"sudo bash /tmp/docker-setup.sh",
98-
"sudo mkdir -p /opt/defguard",
99-
"sudo mv /tmp/docker-compose.yaml /opt/defguard/docker-compose.yaml",
100-
"sudo mv /tmp/docker-compose.standalone.yaml /opt/defguard/docker-compose.standalone.yaml",
101-
"sudo mv /tmp/generate-env.sh /opt/defguard/generate-env.sh",
102-
"sudo chmod +x /opt/defguard/generate-env.sh",
103-
"sudo mv /tmp/start.sh /opt/defguard/start.sh",
104-
"sudo chmod +x /opt/defguard/start.sh",
105-
"echo 'DEFGUARD_CORE_TAG=${var.core_tag}' | sudo tee /opt/defguard/.image-tags > /dev/null",
106-
"echo 'DEFGUARD_PROXY_TAG=${var.proxy_tag}' | sudo tee -a /opt/defguard/.image-tags > /dev/null",
107-
"echo 'DEFGUARD_GATEWAY_TAG=${var.gateway_tag}' | sudo tee -a /opt/defguard/.image-tags > /dev/null",
98+
"sudo mkdir -p /opt/stacks/defguard",
99+
"sudo mv /tmp/docker-compose.yaml /opt/stacks/defguard/docker-compose.yaml",
100+
"sudo mv /tmp/docker-compose.standalone.yaml /opt/stacks/defguard/docker-compose.standalone.yaml",
101+
"sudo mv /tmp/generate-env.sh /opt/stacks/defguard/generate-env.sh",
102+
"sudo chmod +x /opt/stacks/defguard/generate-env.sh",
103+
"sudo mv /tmp/start.sh /opt/stacks/defguard/start.sh",
104+
"sudo chmod +x /opt/stacks/defguard/start.sh",
105+
"echo 'DEFGUARD_CORE_TAG=${var.core_tag}' | sudo tee /opt/stacks/defguard/.image-tags > /dev/null",
106+
"echo 'DEFGUARD_PROXY_TAG=${var.proxy_tag}' | sudo tee -a /opt/stacks/defguard/.image-tags > /dev/null",
107+
"echo 'DEFGUARD_GATEWAY_TAG=${var.gateway_tag}' | sudo tee -a /opt/stacks/defguard/.image-tags > /dev/null",
108108
"sudo mv /tmp/99-defguard.cfg /etc/cloud/cloud.cfg.d/99-defguard.cfg",
109109
"sudo mv /tmp/defguard-init.service /etc/systemd/system/defguard-init.service",
110110
"sudo systemctl daemon-reload",
111111
"sudo systemctl enable docker.service",
112-
"sudo chown -R ubuntu:ubuntu /opt/defguard",
112+
"sudo chown -R ubuntu:ubuntu /opt/stacks/defguard",
113113
"sudo rm -f /etc/netplan/00-installer-config.yaml /etc/netplan/50-cloud-init.yaml",
114114
"sudo cloud-init clean --logs",
115115
"sudo rm -f /etc/ssh/ssh_host_*",

ova/files/defguard-init.service

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ Wants=network-online.target docker.service
55

66
[Service]
77
Type=oneshot
8-
WorkingDirectory=/opt/defguard
8+
WorkingDirectory=/opt/stacks/defguard
99
StandardOutput=append:/var/log/defguard-startup.log
1010
StandardError=append:/var/log/defguard-startup.log
11-
ExecStart=/bin/bash /opt/defguard/generate-env.sh
12-
ExecStart=/bin/bash /opt/defguard/start.sh
11+
ExecStart=/bin/bash /opt/stacks/defguard/generate-env.sh
12+
ExecStart=/bin/bash /opt/stacks/defguard/start.sh

ova/files/docker-compose.standalone.yaml

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
core:
3-
restart: always
3+
restart: unless-stopped
44
profiles: [core]
55
image: ghcr.io/defguard/defguard:${DEFGUARD_CORE_TAG:?DEFGUARD_CORE_TAG is required}
66
env_file: .env
@@ -13,7 +13,7 @@ services:
1313
- "8000:8000"
1414

1515
edge:
16-
restart: always
16+
restart: unless-stopped
1717
profiles: [edge]
1818
image: ghcr.io/defguard/defguard-proxy:${DEFGUARD_PROXY_TAG:?DEFGUARD_PROXY_TAG is required}
1919
volumes:
@@ -23,7 +23,7 @@ services:
2323
- "50051:50051"
2424

2525
gateway:
26-
restart: always
26+
restart: unless-stopped
2727
profiles: [gateway]
2828
image: ghcr.io/defguard/gateway:${DEFGUARD_GATEWAY_TAG:?DEFGUARD_GATEWAY_TAG is required}
2929
cap_add:
@@ -35,25 +35,21 @@ services:
3535
DEFGUARD_STATS_PERIOD: 10
3636
HEALTH_PORT: 55003
3737

38-
npm:
39-
image: "jc21/nginx-proxy-manager:2.14.0"
38+
dockge:
39+
image: louislam/dockge:1
4040
restart: unless-stopped
41-
profiles: [edge, core]
42-
41+
profiles: [dockge]
4342
ports:
44-
- "80:80" # HTTP Port
45-
- "443:443" # HTTPS Port
46-
- "81:81" # Admin Web Port
47-
48-
environment:
49-
TZ: "UTC"
50-
43+
- "5001:5001"
5144
volumes:
52-
- ./.volumes/npm/data:/data
53-
- ./.volumes/npm/letsencrypt:/etc/letsencrypt
45+
- /var/run/docker.sock:/var/run/docker.sock
46+
- ./.volumes/dockge:/app/data
47+
- /opt/stacks:/opt/stacks
48+
environment:
49+
DOCKGE_STACKS_DIR: /opt/stacks
5450

5551
db:
56-
restart: always
52+
restart: unless-stopped
5753
profiles: [core]
5854
image: postgres:18-alpine
5955
env_file: .env

ova/files/docker-compose.yaml

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
services:
22
core:
3-
restart: always
3+
restart: unless-stopped
44
image: ghcr.io/defguard/defguard:${DEFGUARD_CORE_TAG:?DEFGUARD_CORE_TAG is required}
55
env_file: .env
66
environment:
@@ -18,15 +18,15 @@ services:
1818
- "8000:8000"
1919

2020
edge:
21-
restart: always
21+
restart: unless-stopped
2222
image: ghcr.io/defguard/defguard-proxy:${DEFGUARD_PROXY_TAG:?DEFGUARD_PROXY_TAG is required}
2323
volumes:
2424
- ./.volumes/certs/edge:/etc/defguard/certs
2525
ports:
2626
- "8080:8080"
2727

2828
gateway:
29-
restart: always
29+
restart: unless-stopped
3030
image: ghcr.io/defguard/gateway:${DEFGUARD_GATEWAY_TAG:?DEFGUARD_GATEWAY_TAG is required}
3131
cap_add:
3232
- NET_ADMIN
@@ -37,24 +37,21 @@ services:
3737
HEALTH_PORT: 55003
3838
network_mode: "host"
3939

40-
npm:
41-
image: "jc21/nginx-proxy-manager:2.14.0"
40+
dockge:
41+
image: louislam/dockge:1
4242
restart: unless-stopped
43-
43+
profiles: [dockge]
4444
ports:
45-
- "80:80" # HTTP Port
46-
- "443:443" # HTTPS Port
47-
- "81:81" # Admin Web Port
48-
49-
environment:
50-
TZ: "UTC"
51-
45+
- "5001:5001"
5246
volumes:
53-
- ./.volumes/npm/data:/data
54-
- ./.volumes/npm/letsencrypt:/etc/letsencrypt
47+
- /var/run/docker.sock:/var/run/docker.sock
48+
- ./.volumes/dockge:/app/data
49+
- /opt/stacks:/opt/stacks
50+
environment:
51+
DOCKGE_STACKS_DIR: /opt/stacks
5552

5653
db:
57-
restart: always
54+
restart: unless-stopped
5855
image: postgres:18-alpine
5956
env_file: .env
6057
volumes:

ova/files/generate-env.sh

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/bin/bash
2-
# Generates /opt/defguard/.env with random secrets on first boot.
2+
# Generates /opt/stacks/defguard/.env with random secrets on first boot.
33
# If .env already exists (e.g. provided via cloud-init), this script does nothing.
44

5-
ENV_FILE="/opt/defguard/.env"
5+
ENV_FILE="/opt/stacks/defguard/.env"
66

77
if [ -f "$ENV_FILE" ]; then
88
echo "DefGuard: .env already exists, skipping generation."
@@ -11,26 +11,19 @@ fi
1111

1212
echo "DefGuard: generating .env with random secrets..."
1313

14-
DEFGUARD_SECRET_KEY=$(openssl rand -hex 32)
15-
DEFGUARD_AUTH_SECRET=$(openssl rand -hex 32)
16-
DEFGUARD_GATEWAY_SECRET=$(openssl rand -hex 32)
17-
DEFGUARD_YUBIBRIDGE_SECRET=$(openssl rand -hex 32)
1814
DB_PASSWORD=$(openssl rand -hex 16)
1915

20-
if [ -f "/opt/defguard/.image-tags" ]; then
21-
source "/opt/defguard/.image-tags"
16+
if [ -f "/opt/stacks/defguard/.image-tags" ]; then
17+
source "/opt/stacks/defguard/.image-tags"
2218
fi
2319

2420
: "${DEFGUARD_CORE_TAG:?DEFGUARD_CORE_TAG is required}"
2521
: "${DEFGUARD_PROXY_TAG:?DEFGUARD_PROXY_TAG is required}"
2622
: "${DEFGUARD_GATEWAY_TAG:?DEFGUARD_GATEWAY_TAG is required}"
2723

2824
cat > "$ENV_FILE" <<EOF
29-
DEFGUARD_SECRET_KEY=${DEFGUARD_SECRET_KEY}
30-
DEFGUARD_AUTH_SECRET=${DEFGUARD_AUTH_SECRET}
31-
DEFGUARD_GATEWAY_SECRET=${DEFGUARD_GATEWAY_SECRET}
32-
DEFGUARD_YUBIBRIDGE_SECRET=${DEFGUARD_YUBIBRIDGE_SECRET}
3325
DEFGUARD_COOKIE_INSECURE=false
26+
3427
DEFGUARD_DB_HOST=db
3528
DEFGUARD_DB_PORT=5432
3629
DEFGUARD_DB_USER=defguard
@@ -39,6 +32,7 @@ DEFGUARD_DB_NAME=defguard
3932
POSTGRES_USER=defguard
4033
POSTGRES_PASSWORD=${DB_PASSWORD}
4134
POSTGRES_DB=defguard
35+
4236
DEFGUARD_CORE_TAG=${DEFGUARD_CORE_TAG}
4337
DEFGUARD_PROXY_TAG=${DEFGUARD_PROXY_TAG}
4438
DEFGUARD_GATEWAY_TAG=${DEFGUARD_GATEWAY_TAG}

ova/files/start.sh

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,53 @@
11
#!/bin/bash
22
# Starts defguard via docker compose.
33
# Default (no active-profiles file): starts the full all-in-one stack.
4-
# To select specific components, create /opt/defguard/active-profiles with a
4+
# To select specific components, create /opt/stacks/defguard/active-profiles with a
55
# space or newline-separated list of profiles: core, gateway, edge
6+
#
7+
# To enable the Dockge docker management UI (port 5001), create the file:
8+
# /opt/stacks/defguard/enable-docker-management
9+
# Example cloud-init:
10+
# write_files:
11+
# - path: /opt/stacks/defguard/enable-docker-management
12+
# content: ""
613

7-
PROFILES_FILE="/opt/defguard/active-profiles"
14+
PROFILES_FILE="/opt/stacks/defguard/active-profiles"
15+
ENABLE_DOCKER_MGMT_FILE="/opt/stacks/defguard/enable-docker-management"
16+
17+
# Append the dockge profile if the opt-in flag file is present
18+
_maybe_add_dockge() {
19+
local profiles="$1"
20+
if [ -f "$ENABLE_DOCKER_MGMT_FILE" ]; then
21+
if [ -z "$profiles" ]; then
22+
echo "dockge"
23+
else
24+
echo "${profiles},dockge"
25+
fi
26+
else
27+
echo "$profiles"
28+
fi
29+
}
830

931
if [ ! -f "$PROFILES_FILE" ]; then
10-
docker compose -f /opt/defguard/docker-compose.yaml up -d
32+
COMPOSE_PROFILES=$(_maybe_add_dockge "")
33+
if [ -n "$COMPOSE_PROFILES" ]; then
34+
export COMPOSE_PROFILES
35+
fi
36+
docker compose -f /opt/stacks/defguard/docker-compose.yaml up -d
1137
else
1238
COMPOSE_PROFILES=$(tr '[:space:]' ',' < "$PROFILES_FILE" | tr -s ',' | sed 's/,$//')
1339
if [ -z "$COMPOSE_PROFILES" ]; then
1440
echo "Warning: $PROFILES_FILE is empty or contains only whitespace; starting full all-in-one stack."
15-
unset COMPOSE_PROFILES
16-
docker compose -f /opt/defguard/docker-compose.yaml up -d
41+
COMPOSE_PROFILES=$(_maybe_add_dockge "")
42+
if [ -n "$COMPOSE_PROFILES" ]; then
43+
export COMPOSE_PROFILES
44+
else
45+
unset COMPOSE_PROFILES
46+
fi
47+
docker compose -f /opt/stacks/defguard/docker-compose.yaml up -d
1748
else
49+
COMPOSE_PROFILES=$(_maybe_add_dockge "$COMPOSE_PROFILES")
1850
export COMPOSE_PROFILES
19-
docker compose -f /opt/defguard/docker-compose.standalone.yaml up -d
51+
docker compose -f /opt/stacks/defguard/docker-compose.standalone.yaml up -d
2052
fi
2153
fi

0 commit comments

Comments
 (0)