fix(.devcontainer): add home volume and fix code-server and filebrowser (#18648)

This commit is contained in:
Mathias Fredriksson
2025-06-30 09:32:17 +01:00
committed by GitHub
parent e97540afbd
commit d814fdfa1c
5 changed files with 56 additions and 41 deletions
+29 -4
View File
@@ -2,7 +2,6 @@
"name": "Development environments on your infrastructure",
"image": "codercom/oss-dogfood:latest",
"features": {
// See all possible options here https://github.com/devcontainers/features/tree/main/src/docker-in-docker
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"moby": "false"
},
@@ -10,7 +9,9 @@
"auth": "none",
"port": 13337
},
"./filebrowser": {}
"./filebrowser": {
"folder": "${containerWorkspaceFolder}"
}
},
// SYS_PTRACE to enable go debugging
"runArgs": ["--cap-add=SYS_PTRACE"],
@@ -43,15 +44,39 @@
"external": true,
"icon": "/icon/zed.svg",
"order": 5
},
// Reproduce `code-server` app here from the code-server
// feature so that we can set the correct folder and order.
// Currently, the order cannot be specified via option because
// we parse it as a number whereas variable interpolation
// results in a string. Additionally we set health check which
// is not yet set in the feature.
{
"slug": "code-server",
"displayName": "code-server",
"url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/?folder=${containerWorkspaceFolder}",
"openIn": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPOPENIN:slim-window}",
"share": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPSHARE:owner}",
"icon": "/icon/code.svg",
"group": "${localEnv:FEATURE_CODE_SERVER_OPTION_APPGROUP:Web Editors}",
"order": 3,
"healthCheck": {
"url": "http://${localEnv:FEATURE_CODE_SERVER_OPTION_HOST:127.0.0.1}:${localEnv:FEATURE_CODE_SERVER_OPTION_PORT:8080}/healthz",
"interval": 5,
"threshold": 2
}
}
]
}
},
"mounts": [
// Add a volume for the Coder home directory to persist shell history,
// and speed up dotfiles init and/or personalization.
"source=coder-coder-devcontainer-home,target=/home/coder,type=volume",
// Mount the entire home because conditional mounts are not supported.
// See: https://github.com/devcontainers/spec/issues/132
"source=${localEnv:HOME},target=/mnt/home/coder,type=bind,readonly"
],
"postCreateCommand": "./.devcontainer/postCreateCommand.sh",
"postStartCommand": "sudo service docker start"
"postCreateCommand": ["./.devcontainer/scripts/post_create.sh"],
"postStartCommand": ["./.devcontainer/scripts/post_start.sh"]
}
@@ -9,19 +9,15 @@
"default": "13339",
"description": "The port to run filebrowser on"
},
// "folder": {
// "type": "string",
// "default": "${containerWorkspaceFolder}",
// "description": "The root directory for filebrowser to serve"
// },
"auth": {
"folder": {
"type": "string",
"enum": [
"none",
"password"
],
"default": "none",
"description": "Authentication method (none or password)"
"default": "",
"description": "The root directory for filebrowser to serve"
},
"baseUrl": {
"type": "string",
"default": "",
"description": "The base URL for filebrowser (e.g., /filebrowser)"
}
},
"entrypoint": "/usr/local/bin/filebrowser-entrypoint",
@@ -41,7 +37,7 @@
"healthcheck": {
"url": "http://localhost:${localEnv:FEATURE_FILEBROWSER_OPTION_PORT:13339}/health",
"interval": 5,
"threshold": 6
"threshold": 2
}
}
]
+14 -24
View File
@@ -11,38 +11,29 @@ if ! command -v filebrowser &>/dev/null; then
curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
fi
printf "🥳 Installation complete!\n\n"
# Create run script.
# Create entrypoint.
cat >/usr/local/bin/filebrowser-entrypoint <<EOF
#!/bin/bash
#!/usr/bin/env bash
PORT="${PORT}"
FOLDER="${FOLDER:-}"
FOLDER="\${FOLDER:-\$(pwd)}"
BASEURL="${BASEURL:-}"
LOG_PATH=/tmp/filebrowser.log
export FB_DATABASE="\${HOME}/.filebrowser.db"
printf "🛠️ Configuring filebrowser\n\n"
AUTH="${AUTH}"
PORT="${PORT}"
FOLDER="$(pwd)"
LOG_PATH=/tmp/filebrowser.log
export FB_DATABASE="/tmp/filebrowser.db"
# Check if filebrowser db exists.
if [[ ! -f "\${FB_DATABASE}" ]]; then
filebrowser config init
if [[ "\$AUTH" == "password" ]]; then
filebrowser users add admin admin --perm.admin=true --viewMode=mosaic
fi
filebrowser config init >>\${LOG_PATH} 2>&1
filebrowser users add admin "" --perm.admin=true --viewMode=mosaic >>\${LOG_PATH} 2>&1
fi
# Configure filebrowser.
if [[ "\$AUTH" == "none" ]]; then
filebrowser config set --port="\${PORT}" --auth.method=noauth --root="\${FOLDER}"
else
filebrowser config set --port="\${PORT}" --auth.method=json --root="\${FOLDER}"
fi
set -euo pipefail
filebrowser config set --baseurl=\${BASEURL} --port=\${PORT} --auth.method=noauth --root=\${FOLDER} >>\${LOG_PATH} 2>&1
printf "👷 Starting filebrowser...\n\n"
printf "📂 Serving \${FOLDER} at http://localhost:\${PORT}\n\n"
filebrowser >>\${LOG_PATH} 2>&1 &
@@ -52,5 +43,4 @@ EOF
chmod +x /usr/local/bin/filebrowser-entrypoint
printf "✅ File Browser installed!\n\n"
printf "🚀 Run 'filebrowser-entrypoint' to start the service\n\n"
printf "🥳 Installation complete!\n\n"
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
# Start Docker service if not already running.
sudo service docker start