fix: 修复若干问题,添加java lsp
This commit is contained in:
@@ -1,22 +1,88 @@
|
||||
FROM golang:1.25-alpine AS builder
|
||||
# syntax=docker/dockerfile:1
|
||||
###############################################################################
|
||||
# All-in-one LSP Gateway Image
|
||||
# - Go → gopls
|
||||
# - JS / TS → typescript-language-server
|
||||
# - Java → Eclipse JDT Language Server (jdtls) + JDK 22
|
||||
###############################################################################
|
||||
|
||||
# ── Stage 1: Build Go gateway binary ────────────────────────────────────────
|
||||
FROM golang:1.25-bookworm AS builder
|
||||
WORKDIR /src
|
||||
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o /out/server ./cmd/server
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/server ./cmd/server
|
||||
|
||||
FROM alpine:3.20
|
||||
# ── Stage 2: Build gopls ────────────────────────────────────────────────────
|
||||
FROM golang:1.25-bookworm AS gopls-builder
|
||||
RUN go install golang.org/x/tools/gopls@latest
|
||||
|
||||
RUN addgroup -S app && adduser -S -G app app
|
||||
# ── Stage 3: Runtime ────────────────────────────────────────────────────────
|
||||
FROM eclipse-temurin:22-jdk-noble
|
||||
|
||||
ARG NODE_MAJOR=22
|
||||
|
||||
# ---- System deps: Node.js, python3 (jdtls launcher) ----
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends ca-certificates curl python3 && \
|
||||
curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - && \
|
||||
apt-get install -y --no-install-recommends nodejs && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# ---- typescript-language-server (covers JavaScript + TypeScript) ----
|
||||
RUN npm install -g typescript-language-server typescript && \
|
||||
npm cache clean --force
|
||||
|
||||
# ---- Go toolchain (gopls needs it at runtime for analysis) ----
|
||||
COPY --from=golang:1.25-bookworm /usr/local/go /usr/local/go
|
||||
ENV PATH="/usr/local/go/bin:/go/bin:${PATH}" \
|
||||
GOPATH="/go"
|
||||
|
||||
# ---- gopls ----
|
||||
COPY --from=gopls-builder /go/bin/gopls /go/bin/gopls
|
||||
|
||||
# ---- Eclipse JDT Language Server ----
|
||||
COPY jdt-language-server-1.57.0-202602111032 /opt/jdtls
|
||||
RUN chmod +x /opt/jdtls/bin/jdtls /opt/jdtls/bin/jdtls.py
|
||||
|
||||
# ---- Gateway binary ----
|
||||
WORKDIR /app
|
||||
COPY --from=builder /out/server /app/server
|
||||
COPY config.example.json /app/config.example.json
|
||||
|
||||
ENV PORT=8080
|
||||
# ---- Default config: all 4 LSP servers, Redis/Nacos off by default ----
|
||||
COPY <<'EOF' /app/config.json
|
||||
{
|
||||
"port": "8080",
|
||||
"workspaceDir": "/workspace",
|
||||
"allowOrigin": "*",
|
||||
"requestTimeout": "30s",
|
||||
"sessionTTL": "20m",
|
||||
"cleanupInterval": "2m",
|
||||
"maxSessions": 256,
|
||||
"enableRedis": false,
|
||||
"enableNacosRegister": false,
|
||||
"appEnv": "prod",
|
||||
"logLevel": "info",
|
||||
"logConsoleEnabled": true,
|
||||
"servers": [
|
||||
{ "language": "go", "languageId": "go", "command": "gopls", "args": [] },
|
||||
{ "language": "javascript", "languageId": "javascript", "command": "typescript-language-server", "args": ["--stdio"] },
|
||||
{ "language": "typescript", "languageId": "typescript", "command": "typescript-language-server", "args": ["--stdio"] },
|
||||
{ "language": "java", "languageId": "java", "command": "/opt/jdtls/bin/jdtls", "args": [] }
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
# ---- Directories & non-root user ----
|
||||
RUN mkdir -p /workspace /go && \
|
||||
groupadd --system app && \
|
||||
useradd --system --gid app --home-dir /home/app --create-home app && \
|
||||
chown -R app:app /app /workspace /go /home/app
|
||||
|
||||
ENV PORT=8080 \
|
||||
WORKSPACE_DIR=/workspace
|
||||
EXPOSE 8080
|
||||
|
||||
USER app
|
||||
|
||||
Reference in New Issue
Block a user