From e357f2ed682e2adce6632349ae439be5741ee8e9 Mon Sep 17 00:00:00 2001 From: Daisuke Date: Wed, 11 Feb 2026 12:25:57 +0900 Subject: [PATCH] feat(container): add SSH server and rassumfrassum for LSP multiplexing - Install openssh-server and create SSH infrastructure in container - Install rassumfrassum (LSP multiplexer) via Python venv - Expose SSH port 2222 and mount user public key for TRAMP access - Update compose.yml to map port 2222 and mount SSH_PUBKEY_PATH - Document SSH setup and TRAMP /ssh: access method in README --- Containerfile | 13 +++++++++++-- README.md | 3 +++ compose.yml | 4 +++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Containerfile b/Containerfile index 5c72c1d..6940a2c 100644 --- a/Containerfile +++ b/Containerfile @@ -3,6 +3,15 @@ FROM node:lts-bookworm-slim WORKDIR /app +# SSH server for TRAMP /ssh: access +RUN apt-get update && apt-get install -y --no-install-recommends openssh-server python3-venv python3-pip \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /var/run/sshd /root/.ssh \ + && chmod 700 /root/.ssh \ + && ssh-keygen -A \ + && python3 -m venv /opt/rass && /opt/rass/bin/pip install --no-cache-dir rassumfrassum \ + && ln -s /opt/rass/bin/rass /usr/local/bin/rass + # Install dependencies first (better layer caching) COPY package.json package-lock.json ./ RUN npm ci @@ -10,6 +19,6 @@ RUN npm ci # Copy the rest of the project COPY . . -EXPOSE 4321 +EXPOSE 4321 22 -CMD ["npm","run","dev","--","--host","0.0.0.0","--port","4321"] +CMD ["/bin/sh","-lc","/usr/sbin/sshd && npm run dev -- --host 0.0.0.0 --port 4321"] diff --git a/README.md b/README.md index 29052b3..58ac0c9 100644 --- a/README.md +++ b/README.md @@ -44,11 +44,14 @@ This repo can be developed inside a Podman container to keep your host clean and ### Using podman compose ```sh +export SSH_PUBKEY_PATH="$HOME/.ssh/id_ed25519.pub" podman compose up --build ``` On WSL2/rootless Podman, if you hit netavark/nftables errors, this repo defaults to `slirp4netns` via `network_mode` in `compose.yml`. +If you want SSH access (for Emacs TRAMP `/ssh:`), `SSH_PUBKEY_PATH` must point to your public key and port 2222 will be exposed for SSH. + Then open: http://localhost:4321 Run other commands in the running container: diff --git a/compose.yml b/compose.yml index eed04fc..096aa63 100644 --- a/compose.yml +++ b/compose.yml @@ -7,10 +7,12 @@ services: network_mode: "slirp4netns:allow_host_loopback=true" ports: - "4321:4321" + - "2222:22" volumes: - .:/app - node_modules:/app/node_modules - command: npm run dev -- --host 0.0.0.0 --port 4321 + - ${SSH_PUBKEY_PATH}:/root/.ssh/authorized_keys:ro + command: /bin/sh -lc "/usr/sbin/sshd && npm run dev -- --host 0.0.0.0 --port 4321" volumes: node_modules: