dev_arc_aws/backend/Dockerfile

44 lines
1.6 KiB
Text
Raw Normal View History

FROM node:22-alpine AS build
WORKDIR /app
# Native modules (better-sqlite3, ssh2, node-pty) need a toolchain to compile.
RUN apk add --no-cache python3 make g++
COPY package.json package-lock.json* ./
RUN npm install --omit=dev=false
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
# Toolchain is needed again here: production deps are reinstalled fresh, and the
# native modules (better-sqlite3, ssh2, node-pty) compile from source on install.
Fix integration save data loss; add SSH host card collapse (#16) * Add editable display-name field to generic integrations Lets users set a custom name for Proxmox, Docker, AWS, Remote Desktop, Netbird, Cloudflare, Uptime Kuma, and Weather integrations, separate from the host/IP field, mirroring the SSH host rename pattern. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016kF4hZWEkRCPPvCZTeXxn4 * Surface the new-integration name field as a labeled input The name field for new generic integrations was a faint header input with only placeholder text, easy to miss. Move it into the form grid as a proper labeled "Name" field next to the other connection fields. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016kF4hZWEkRCPPvCZTeXxn4 * Add file upload for SSH private key and certificate fields Lets users pick a key file from disk (e.g. ~/.ssh) instead of pasting its contents into the Private Key / OPKSSH Certificate fields. * Fix SSH private key paste corrupting multi-line PEM format Private Key and Certificate fields were single-line <input> elements, which strip newlines on paste and corrupt PEM-formatted keys (causing 'Unsupported key format' errors). Render them as multi-line textareas instead so pasted keys keep their line breaks. * Fix integration save wiping untouched config fields The PUT /api/integrations/:id route fully overwrites config_json with whatever config object is sent (no merge), but buildPayload only included fields the user had actually edited. Saving after editing just one field (e.g. pasting a new SSH key) silently dropped every other config field. Merge the existing integration's config into the payload before sending. * Add collapse/expand for SSH host cards Click the chevron to collapse a host's card once it's configured. Collapsed cards keep all field state in memory (just hidden), and auto-collapse after a successful Save. * Install openssh-client in backend image for certificate-auth SSH Certificate-based SSH connections shell out to the system ssh binary via node-pty (ssh2 has no OpenSSH certificate support), but the alpine runtime image never installed openssh-client. This caused 'execvp(3) failed: No such file or directory' for any host with an OPKSSH certificate configured. --------- Co-authored-by: Claude <noreply@anthropic.com>
2026-06-20 08:30:21 -04:00
# openssh-client provides the `ssh` binary, which node-pty shells out to for
# certificate-based auth (ssh2 has no OpenSSH certificate support).
# iputils provides `ping`, used by the mesh-gate reachability check.
RUN apk add --no-cache python3 make g++ openssh-client iputils
COPY package.json package-lock.json* ./
RUN npm install --omit=dev
COPY --from=build /app/dist ./dist
Enable OpenSSL legacy provider for old-format encrypted SSH keys (#17) * Add editable display-name field to generic integrations Lets users set a custom name for Proxmox, Docker, AWS, Remote Desktop, Netbird, Cloudflare, Uptime Kuma, and Weather integrations, separate from the host/IP field, mirroring the SSH host rename pattern. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016kF4hZWEkRCPPvCZTeXxn4 * Surface the new-integration name field as a labeled input The name field for new generic integrations was a faint header input with only placeholder text, easy to miss. Move it into the form grid as a proper labeled "Name" field next to the other connection fields. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016kF4hZWEkRCPPvCZTeXxn4 * Add file upload for SSH private key and certificate fields Lets users pick a key file from disk (e.g. ~/.ssh) instead of pasting its contents into the Private Key / OPKSSH Certificate fields. * Fix SSH private key paste corrupting multi-line PEM format Private Key and Certificate fields were single-line <input> elements, which strip newlines on paste and corrupt PEM-formatted keys (causing 'Unsupported key format' errors). Render them as multi-line textareas instead so pasted keys keep their line breaks. * Enable OpenSSL legacy provider for old-format encrypted SSH keys OpenSSL 3's default provider disables the MD5-based KDF used by traditional encrypted PEM keys (BEGIN RSA PRIVATE KEY + DEK-Info headers), causing "error in libcrypto: unsupported" when the ssh binary tries to decrypt them for certificate-based auth. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016kF4hZWEkRCPPvCZTeXxn4 --------- Co-authored-by: Claude <noreply@anthropic.com>
2026-06-20 08:45:02 -04:00
# Old-format encrypted PEM keys (e.g. "BEGIN RSA PRIVATE KEY" + DEK-Info) rely on an
# MD5-based KDF that OpenSSL 3's default provider disables. Enable the legacy provider
# so `ssh` (used for certificate-based auth) can still decrypt these keys.
RUN { \
echo 'openssl_conf = openssl_init'; \
echo ''; \
echo '[openssl_init]'; \
echo 'providers = provider_sect'; \
echo ''; \
echo '[provider_sect]'; \
echo 'default = default_sect'; \
echo 'legacy = legacy_sect'; \
echo ''; \
echo '[default_sect]'; \
echo 'activate = 1'; \
echo ''; \
echo '[legacy_sect]'; \
echo 'activate = 1'; \
} > /etc/ssl/openssl-legacy.cnf
ENV OPENSSL_CONF=/etc/ssl/openssl-legacy.cnf
EXPOSE 4000
CMD ["node", "dist/server.js"]