Dockerize NodeJS-based Ydoc (#10811)

Initial image for Ydoc, along with instructions.
Closes #10751.
This commit is contained in:
Hubert Plociniczak 2024-08-15 15:04:53 +02:00 committed by GitHub
parent e836373d9b
commit a168baddb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 82 additions and 0 deletions

View File

@ -24,3 +24,42 @@ with the chosen name:
```bash ```bash
docker run -t <my-custom-name> docker run -t <my-custom-name>
``` ```
# Ydoc NodeJS Docker
## Building
To build a NodeJS-based Ydoc, you need to first ensure that you have the
distributable sources:
```bash
pnpm -r compile
```
the resulting artifacts are located in `app/ydoc-server-nodejs/dist` directory.
Having the right NodeJS sources in place, one can now build the docker image:
```bash
ocker build -t ydoc-server-nodejs:latest -f tools/ci/docker/ydoc-server/Dockerfile --build-context docker-tools=tools/ci/docker/ydoc-server app/ydoc-server-nodejs
```
## Running
One should always start Ydoc with the right configuration:
- PORT - the port number under which Ydoc will be available
- HOSTNAME - the hostname under which Ydoc will be available
- LANGUAGE_SERVER_URL - the full url (with port number) of the language server
to connect to
```bash
docker run -it -e PORT=1234 -e HOSTNAME='0.0.0.0' -e LANGUAGE_SERVER_URL=ws://localhost:59876 ydoc-server-nodejs:latest
```
When correctly setup the network layer one can also hit Ydoc's healthcheck
endpoint:
```bash
> curl http://${HOSTNAME}:${PORT}/_health
OK
```

View File

@ -0,0 +1,39 @@
FROM node:20.16-bookworm-slim
USER root
ARG LOG_LEVEL=info
ARG YDOC_SERVER_PORT=5976
ARG YDOC_SERVER_HOSTNAME=localhost
ARG YDOC_SERVER_LANGUAGE_SERVER_URL
ARG YDOC_SERVER_DEBUG=false
RUN useradd -u 2000 -c 'Enso Developer' -U -m ensodev
RUN mkdir /opt/ydoc-server-nodejs
RUN mkdir /opt/ydoc-server-nodejs/logs
RUN mkdir /opt/ydoc-server-nodejs/bin
ADD dist/* /opt/ydoc-server-nodejs
COPY --from=docker-tools ydoc-server-entrypoint.sh /opt/ydoc-server-nodejs/bin/
RUN chown -hR ensodev:ensodev /opt/ydoc-server-nodejs
RUN chmod -R u=rX,g=rX /opt/ydoc-server-nodejs
RUN chmod a+rw /opt/ydoc-server-nodejs/logs
RUN chmod a+rw /opt/ydoc-server-nodejs/logs
RUN chmod a+x /opt/ydoc-server-nodejs/bin/*
USER ensodev:ensodev
WORKDIR /opt/ydoc-server-nodejs
ENTRYPOINT [ "/opt/ydoc-server-nodejs/bin/ydoc-server-entrypoint.sh" ]
ENV LOG_LEVEL=${LOG_LEVEL}
ENV PORT=${YDOC_SERVER_PORT}
ENV HOSTNAME=${YDOC_SERVER_HOSTNAME}
ENV LANGUAGE_SERVER_URL=${YDOC_SERVER_LANGUAGE_SERVER_URL}
ENV ENSO_YDOC_LS_DEBUG=${YDOC_SERVER_DEBUG}
EXPOSE ${PORT}

View File

@ -0,0 +1,4 @@
#!/bin/bash
set -e
node main.mjs "$@"