diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..d4eb9eeb01 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +# Exclude a bunch of stuff which can make the build context a larger than it needs to be +.git/ +test/ +webapp/ +lib/ +node_modules/ +electron_app/ +karma-reports/ +.idea/ +.tmp/ +config.json* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..79ee1f68c3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +# Builder +FROM node:10-alpine as builder + +# Support custom branches of the react-sdk and js-sdk. This also helps us build +# images of riot-web develop. +ARG USE_CUSTOM_SDKS=false +ARG REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" +ARG REACT_SDK_BRANCH="master" +ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" +ARG JS_SDK_BRANCH="master" + +RUN apk add --no-cache git dos2unix + +WORKDIR /src + +COPY . /src +RUN dos2unix /src/scripts/docker-link-repos.sh && sh /src/scripts/docker-link-repos.sh +RUN yarn install +RUN yarn build + +# Copy the config now so that we don't create another layer in the app image +RUN cp /src/config.sample.json /src/webapp/config.json + + +# App +FROM nginx:latest + +COPY --from=builder /src/webapp /app + +RUN rm -rf /usr/share/nginx/html \ + && ln -s /app /usr/share/nginx/html diff --git a/README.md b/README.md index 28c6b2443c..3fea98150f 100644 --- a/README.md +++ b/README.md @@ -253,6 +253,42 @@ To change the config.json for the desktop app, create a config file which will b In the paths above, `$NAME` is typically `Riot`, unless you use `--profile $PROFILE` in which case it becomes `Riot-$PROFILE`. +Running from Docker +=================== + +The Docker image can be used to serve riot-web as a web server. The easiest way to use +it is to use the prebuilt image: +```bash +docker run -p 80:80 vectorim/riot-web +``` + +To supply your own custom `config.json`, map a volume to `/app/config.json`. For example, +if your custom config was located at `/etc/riot-web/config.json` then your Docker command +would be: +```bash +docker run -p 80:80 -v /etc/riot-web/config.json:/app/config.json vectorim/riot-web +``` + +To build the image yourself: +```bash +git clone https://github.com/vector-im/riot-web.git riot-web +cd riot-web +git checkout master +docker build -t vectorim/riot-web . +``` + +If you're building a custom branch, or want to use the develop branch, check out the appropriate +riot-web branch and then run: +```bash +docker build -t vectorim/riot-web:develop \ + --build-arg USE_CUSTOM_SDKS=true \ + --build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \ + --build-arg REACT_SDK_BRANCH="develop" \ + --build-arg JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" \ + --build-arg JS_SDK_BRANCH="develop" \ + . +``` + Labs Features ============= diff --git a/scripts/docker-link-repos.sh b/scripts/docker-link-repos.sh new file mode 100644 index 0000000000..816b2e040c --- /dev/null +++ b/scripts/docker-link-repos.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +set -ex + +if [ $USE_CUSTOM_SDKS == false ] +then + echo "skipping react-sdk and js-sdk installs: USE_CUSTOM_SDKS is false" + exit 0 +fi + +echo "Linking js-sdk" +git clone $JS_SDK_REPO js-sdk +cd js-sdk +git checkout $JS_SDK_BRANCH +yarn link +yarn install +cd ../ + +echo "Linking react-sdk" +git clone $REACT_SDK_REPO react-sdk +cd react-sdk +git checkout $REACT_SDK_BRANCH +yarn link +yarn link matrix-js-sdk +yarn install +cd ../ + +echo "Setting up riot-web with react-sdk and js-sdk packages" +yarn link matrix-js-sdk +yarn link matrix-react-sdk