From 2192308e08436d19d8cda12f2c8a9e1dfb525b34 Mon Sep 17 00:00:00 2001 From: Mindus Date: Wed, 25 Jan 2023 20:25:10 +0100 Subject: [PATCH] Add Dockerfile for easy hosting TavernAI-GUI on multiple platforms. Implements #18 --- .dockerignore | 4 ++++ Dockerfile | 35 +++++++++++++++++++++++++++++++++++ docker/docker-compose.yml | 14 ++++++++++++++ docker/docker-entrypoint.sh | 22 ++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker/docker-compose.yml create mode 100644 docker/docker-entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..70fd3b4da --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +node_modules +npm-debug.log +readme* +Start.bat \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..a6ac8d543 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +FROM node:19.1.0-alpine3.16 + +# Arguments +ARG APP_HOME=/home/node/app + +# Create app directory +WORKDIR ${APP_HOME} + + +# Install app dependencies +COPY package*.json ./ +RUN \ + echo "*** Install npm packages ***" && \ + npm install + +# Bundle app source +COPY . . + +# Copy default chats, characters and user avatars to .default folder +RUN \ + echo "*** Copy default chats, characters and user avatars to .default folder ***" && \ + mv "./public/chats" "./public/chats.default" && \ + mv "./public/characters" "./public/characters.default" && \ + mv "./public/User Avatars" "./public/User Avatars.default" + +# Cleanup unnecessary files +RUN \ + echo "*** Cleanup ***" && \ + mv "./docker/docker-entrypoint.sh" "./" && \ + rm -rf "./docker" && \ + rm -rf "./.git" + +EXPOSE 8000 + +ENTRYPOINT [ "/bin/sh", "-c", "./docker-entrypoint.sh" ] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 000000000..65eedbeec --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3" +services: + tavernai: + build: .. + container_name: tavernai + hostname: tavernai + image: tavernai/tavernai:latest + ports: + - "8000:8000" + volumes: + - "./config/characters:/home/node/app/public/characters" + - "./config/chats:/home/node/app/public/chats" + - "./config/User Avatars:/home/node/app/public/User Avatars" + restart: unless-stopped \ No newline at end of file diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100644 index 000000000..58178905b --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# Check if the "characters" directory is empty +if [ -z "$(ls -A /home/node/app/public/characters)" ]; then + echo "Characters directory is empty. Copying default characters." + mv /home/node/app/public/characters.default/ /home/node/app/public/characters/ +fi + +# Check if the "chats" directory is empty +if [ -z "$(ls -A /home/node/app/public/chats)" ]; then + echo "Chats directory is empty. Copying default chats." + mv /home/node/app/public/chats.default/ /home/node/app/public/chats/ +fi + +# Check if the "User Avatars" directory is empty +if [ -z "$(ls -A '/home/node/app/public/User Avatars')" ]; then + echo "User Avatars directory is empty. Copying default user avatars." + mv /home/node/app/public/User\ Avatars.default/ '/home/node/app/public/User Avatars/' +fi + +# Start the server +node /home/node/app/server.js \ No newline at end of file