Skip to content

Commit 8ce9395

Browse files
committed
Add support for cloud run
1 parent 872f555 commit 8ce9395

File tree

12 files changed

+105
-15
lines changed

12 files changed

+105
-15
lines changed

Dockerfile.kernel-cloud

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ RUN chmod +x /images/chromium-headful/start-chromium.sh
182182
COPY kernel-images/images/chromium-headful/supervisord.conf /etc/supervisor/supervisord.conf
183183
COPY supervisord-cloudrun.conf /etc/supervisor/supervisord-cloudrun.conf
184184
COPY kernel-images/images/chromium-headful/supervisor/services/ /etc/supervisor/conf.d/services/
185+
# Copy Cloud Run-specific supervisor configs
186+
COPY supervisor-cloudrun/ /etc/supervisor/conf.d/services-cloudrun/
187+
# Copy Cloud Run-specific chromium start script
188+
COPY start-chromium-cloudrun.sh /start-chromium-cloudrun.sh
189+
RUN chmod +x /start-chromium-cloudrun.sh
185190

186191
# copy the kernel-images API binary built in the builder stage
187192
COPY --from=server-builder /out/kernel-images-api /usr/local/bin/kernel-images-api
@@ -193,8 +198,9 @@ COPY nginx.conf /etc/nginx/nginx.conf
193198
RUN mkdir -p /tmp/nginx_client_temp /tmp/nginx_proxy_temp /tmp/nginx_fastcgi_temp \
194199
/tmp/nginx_uwsgi_temp /tmp/nginx_scgi_temp \
195200
/var/log/supervisord/chromium /var/log/supervisord/neko /var/log/supervisord/xorg \
196-
/var/log/supervisord/dbus /var/log/supervisord/kernel-images-api /var/log/supervisord/mutter && \
197-
chown -R kernel:kernel /tmp/nginx_* /var/log/supervisord
201+
/var/log/supervisord/dbus /var/log/supervisord/kernel-images-api /var/log/supervisord/mutter \
202+
/tmp/supervisord /tmp/dbus && \
203+
chown -R kernel:kernel /tmp/nginx_* /var/log/supervisord /tmp/supervisord /tmp/dbus
198204

199205
# Create chromium flags file with Cloud Run optimized settings
200206
RUN mkdir -p /chromium && \

cloudrun-kernel-wrapper.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ echo "[cloudrun-kernel] Starting D-Bus..."
7272
supervisorctl -c /etc/supervisor/supervisord-cloudrun.conf start dbus
7373
echo "[cloudrun-kernel] Waiting for D-Bus system bus..."
7474
for i in {1..50}; do
75-
if [ -S /run/dbus/system_bus_socket ]; then
75+
if [ -S /tmp/dbus/system_bus_socket ]; then
7676
break
7777
fi
7878
sleep 0.2
7979
done
80-
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/dbus/system_bus_socket"
80+
export DBUS_SESSION_BUS_ADDRESS="unix:path=/tmp/dbus/system_bus_socket"
8181

8282
echo "[cloudrun-kernel] Starting Chromium..."
8383
supervisorctl -c /etc/supervisor/supervisord-cloudrun.conf start chromium

nginx.conf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ http {
4747

4848
# WebRTC client (main interface)
4949
location / {
50-
proxy_pass http://127.0.0.1:8081;
50+
proxy_pass http://127.0.0.1:8080;
5151
proxy_http_version 1.1;
5252
proxy_set_header Upgrade $http_upgrade;
5353
proxy_set_header Connection $connection_upgrade;
@@ -61,7 +61,7 @@ http {
6161

6262
# Chrome DevTools Protocol WebSocket
6363
location /ws {
64-
proxy_pass http://127.0.0.1:9222;
64+
proxy_pass http://127.0.0.1:9223;
6565
proxy_http_version 1.1;
6666
proxy_set_header Upgrade $http_upgrade;
6767
proxy_set_header Connection $connection_upgrade;
@@ -75,7 +75,7 @@ http {
7575

7676
# Chrome DevTools Protocol HTTP endpoints
7777
location /json {
78-
proxy_pass http://127.0.0.1:9222;
78+
proxy_pass http://127.0.0.1:9223;
7979
proxy_set_header Host $host;
8080
proxy_set_header X-Real-IP $remote_addr;
8181
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

service.yaml

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ spec:
1616
# Increase startup timeout
1717
run.googleapis.com/timeout: "3600"
1818
# Auto-scaling settings
19-
autoscaling.knative.dev/minScale: "0"
19+
autoscaling.knative.dev/minScale: "1"
2020
autoscaling.knative.dev/maxScale: "10"
2121
spec:
22-
# One browser instance per container
23-
containerConcurrency: 1
22+
# Allow multiple concurrent requests (browser can handle multiple tabs/requests)
23+
containerConcurrency: 10
2424
# 1 hour timeout for long browser sessions
2525
timeoutSeconds: 3600
2626
# Service account for GCP access
2727
serviceAccountName: kernel-browser-sa
2828
containers:
2929
- name: kernel-browser
3030
# This will be set during deployment
31-
image: gcr.io/PROJECT_ID/kernel-browser:latest
31+
image: gcr.io/browseroperator/kernel-browser:latest
3232
ports:
3333
- name: http1
3434
containerPort: 8080
@@ -58,9 +58,14 @@ spec:
5858
value: "768"
5959
- name: WIDTH
6060
value: "1024"
61-
# TURN server configuration for WebRTC (replace with your TURN server)
61+
# ICE servers configuration for WebRTC (includes both STUN and TURN)
6262
- name: NEKO_ICESERVERS
63-
value: '[{"urls": ["stun:stun.l.google.com:19302"]}]'
63+
value: '[{"urls":["stun:global.stun.twilio.com:3478"]},{"urls":["turn:global.turn.twilio.com:3478?transport=udp"],"username":"464cefa09d5a8b4030b34b3faf15871b5efe0eef8331e9324f3f4f9144158ada","credential":"1Fm/UdpnNFbvfDPBtETUSZ4BhQsi0cubgLBdbScluPs="}]'
64+
# WebRTC configuration
65+
- name: NEKO_WEBRTC_TCPPORT
66+
value: "8081"
67+
- name: NEKO_WEBRTC_UDPPORT
68+
value: "8082"
6469
# Optional: Google Cloud Storage bucket for recordings
6570
- name: GCS_BUCKET
6671
value: "kernel-browser-recordings"

start-chromium-cloudrun.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/bash
2+
3+
set -o pipefail -o errexit -o nounset
4+
5+
# Cloud Run optimized Chromium launcher - no runuser needed since we're already kernel user
6+
7+
echo "Starting Chromium launcher (Cloud Run mode)"
8+
9+
# Resolve internal port for the remote debugging interface
10+
INTERNAL_PORT="${INTERNAL_PORT:-9223}"
11+
12+
# Load additional Chromium flags from env and optional file
13+
CHROMIUM_FLAGS="${CHROMIUM_FLAGS:-}"
14+
if [[ -f /chromium/flags ]]; then
15+
CHROMIUM_FLAGS="$CHROMIUM_FLAGS $(cat /chromium/flags)"
16+
fi
17+
echo "CHROMIUM_FLAGS: $CHROMIUM_FLAGS"
18+
19+
# Always use display :1 and point DBus to the system bus socket
20+
export DISPLAY=":1"
21+
export DBUS_SESSION_BUS_ADDRESS="unix:path=/tmp/dbus/system_bus_socket"
22+
export XDG_CONFIG_HOME=/home/kernel/.config
23+
export XDG_CACHE_HOME=/home/kernel/.cache
24+
export HOME=/home/kernel
25+
26+
echo "Running chromium as kernel user (Cloud Run mode)"
27+
exec chromium \
28+
--remote-debugging-port="$INTERNAL_PORT" \
29+
--user-data-dir=/home/kernel/user-data \
30+
--password-store=basic \
31+
--no-first-run \
32+
${CHROMIUM_FLAGS:-}

supervisor-cloudrun/chromium.conf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[program:chromium]
2+
command=/bin/bash -lc '/start-chromium-cloudrun.sh'
3+
user=kernel
4+
autostart=false
5+
autorestart=true
6+
startsecs=5
7+
stdout_logfile=/tmp/supervisord/chromium
8+
redirect_stderr=true

supervisor-cloudrun/dbus.conf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[program:dbus]
2+
command=/bin/bash -lc 'mkdir -p /tmp/dbus && dbus-uuidgen --ensure=/tmp/dbus/machine-id && dbus-daemon --session --address=unix:path=/tmp/dbus/system_bus_socket --nopidfile --nosyslog --nofork'
3+
user=kernel
4+
autostart=false
5+
autorestart=true
6+
startsecs=2
7+
stdout_logfile=/tmp/supervisord/dbus
8+
redirect_stderr=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[program:kernel-images-api]
2+
command=/bin/bash -lc 'mkdir -p "${KERNEL_IMAGES_API_OUTPUT_DIR:-/recordings}" && PORT="${KERNEL_IMAGES_API_PORT:-10001}" FRAME_RATE="${KERNEL_IMAGES_API_FRAME_RATE:-10}" DISPLAY_NUM="${KERNEL_IMAGES_API_DISPLAY_NUM:-${DISPLAY_NUM:-1}}" MAX_SIZE_MB="${KERNEL_IMAGES_API_MAX_SIZE_MB:-500}" OUTPUT_DIR="${KERNEL_IMAGES_API_OUTPUT_DIR:-/recordings}" exec /usr/local/bin/kernel-images-api'
3+
user=kernel
4+
autostart=false
5+
autorestart=true
6+
startsecs=2
7+
stdout_logfile=/tmp/supervisord/kernel-images-api
8+
redirect_stderr=true

supervisor-cloudrun/mutter.conf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[program:mutter]
2+
command=/bin/bash -lc 'XDG_SESSION_TYPE=x11 mutter --replace --sm-disable'
3+
user=kernel
4+
autostart=false
5+
autorestart=true
6+
startsecs=2
7+
stdout_logfile=/tmp/supervisord/mutter
8+
redirect_stderr=true

supervisor-cloudrun/neko.conf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[program:neko]
2+
command=/usr/bin/neko serve --server.static /var/www --server.bind 0.0.0.0:8080
3+
user=kernel
4+
autostart=false
5+
autorestart=true
6+
startsecs=2
7+
stdout_logfile=/tmp/supervisord/neko
8+
redirect_stderr=true

0 commit comments

Comments
 (0)