From 3d05a49a3e20233fcc272303067ffc98fd2652f5 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Wed, 30 May 2018 21:23:03 -0500 Subject: [PATCH] added docker support --- .dockerignore | 2 + .gitignore | 1 + Dockerfile | 64 ++++++++--------------- build_client.sh | 13 ----- client/package-lock.json | 2 +- client/package.json | 2 +- config.template.json | 10 ++-- docker-build.sh | 1 + docker-compose.yml | 9 ++++ makefile | 4 +- readme.md | 32 ++++++++---- server/bothandlers/sounds.go | 8 +-- server/config/config.go | 65 ++++++++--------------- server/db/db.go | 3 +- main.go => server/main.go | 8 --- server/webserver/handlers/downloader.go | 7 +-- server/webserver/handlers/soundlist.go | 69 ++++++++++--------------- server/webserver/handlers/upload.go | 15 ++---- server/webserver/middleware/jwt.go | 4 +- server/webserver/server.go | 2 +- 20 files changed, 125 insertions(+), 196 deletions(-) create mode 100644 .dockerignore delete mode 100755 build_client.sh create mode 100755 docker-build.sh create mode 100644 docker-compose.yml rename main.go => server/main.go (80%) diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..91df08a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +./client/node_modules +./server/vendor diff --git a/.gitignore b/.gitignore index 34a7a46..0e2d0f8 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ youtube go-discord-bot data.db .wwp-cache +data diff --git a/Dockerfile b/Dockerfile index fb6166d..56da3f7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,48 +1,28 @@ -FROM ubuntu +FROM node:8.11.1-alpine -WORKDIR /home/temp +WORKDIR /home/client +ADD ./client . +RUN npm install +RUN npm run build -RUN apt-get -qq update -# install git -RUN apt-get install -y git +FROM golang:1.10.2-alpine3.7 -# install Golang -RUN apt-get install --yes curl -RUN curl https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz | tar xvz -RUN cp -r ./go /usr/local/ -RUN cp ./go/bin/* /usr/bin -RUN mkdir -p /home/go/src -RUN mkdir /home/go/bin -RUN mkdir /home/go/pkg -ENV GOPATH=/home/go -ENV GOBIN=$GOPATH/bin -RUN go env - -# install nodejs and npm -RUN curl --silent --location https://deb.nodesource.com/setup_6.x | bash - -RUN apt-get install -y nodejs -RUN apt-get install -y build-essential - -# install yarn -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - -RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list -RUN apt-get update && apt-get install yarn -RUN yarn --version - -# set working directory -RUN mkdir -p /home/go/src/github.com/mgerb/go-discord-bot -ADD . /home/go/src/github.com/mgerb/go-discord-bot - -# build client app -WORKDIR /home/go/src/github.com/mgerb/go-discord-bot/client -RUN yarn install -RUN yarn run build -WORKDIR /home/go/src/github.com/mgerb/go-discord-bot - -# build server +WORKDIR /go/src/github.com/mgerb/go-discord-bot/server +COPY --from=0 /home/dist /go/src/github.com/mgerb/go-discord-bot/dist +ADD ./server . +RUN apk add --no-cache git alpine-sdk +RUN go get -u github.com/gobuffalo/packr/... RUN go get -RUN go build -o bot ./main.go +RUN packr build -o /build/server -# Run the app -CMD ["./bot"] + +FROM wernight/youtube-dl + +RUN apk update +RUN apk add ca-certificates + +WORKDIR /bot +COPY --from=1 /build/server / + +ENTRYPOINT ["/server"] diff --git a/build_client.sh b/build_client.sh deleted file mode 100755 index 4b5dd89..0000000 --- a/build_client.sh +++ /dev/null @@ -1,13 +0,0 @@ -# use docker container to build client -docker run -it -d --name node1 node:8.9.4-alpine; - -docker exec -it node /bin/sh -c "mkdir /home/client"; -docker cp ./client node1:/home/client; - -docker exec -it node1 /bin/sh -c "cd /home/client && yarn install"; -docker exec -it node1 /bin/sh -c "cd /home/client && yarn run build"; -docker cp node1:/home/dist ./dist; - -docker kill node1; -docker rm node1; - diff --git a/client/package-lock.json b/client/package-lock.json index b4b7dcd..b630952 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "go-discord-bot", - "version": "1.0.0", + "version": "0.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/client/package.json b/client/package.json index ef19f2a..e3a21f4 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "go-discord-bot", - "version": "1.0.0", + "version": "0.4.0", "description": "Client for go-discord-bot", "scripts": { "build": "NODE_ENV=prod webpack -p --progress --colors", diff --git a/config.template.json b/config.template.json index 240e408..3022f04 100644 --- a/config.template.json +++ b/config.template.json @@ -2,19 +2,15 @@ "token": "", "client_id": "", "client_secret": "", - "redirect_uri": "", + "redirect_uri": "https://localhost/oauth", "bot_prefix": "#", "admin_emails": ["mail@example.com"], "mod_emails": ["mail@example.com"], - "jwt_key": "generate a random secret string here", + "jwt_secret": "generate a random secret string here", "server_addr": "0.0.0.0:80", - "logger": true, - "database": "data.db", - - "sounds_path": "./sounds/", - "clips_path": "./clips/" + "logger": true } diff --git a/docker-build.sh b/docker-build.sh new file mode 100755 index 0000000..240fece --- /dev/null +++ b/docker-build.sh @@ -0,0 +1 @@ +docker build -t mgerb/go-discord-bot . diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7746472 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +version: "2" + +services: + go-discord-bot: + image: mgerb/go-discord-bot:latest + ports: + - 8080:8080 + volumes: + - ./data:/bot diff --git a/makefile b/makefile index d9fe8dd..0f3a524 100644 --- a/makefile +++ b/makefile @@ -2,10 +2,10 @@ run: go run ./main.go install: - go get && cd client && npm install + go get ./server && cd client && npm install build-server: - packr build -o bot ./main.go && packr install + cd ./server && packr build -o ../bot ./main.go build-client: cd client && npm run build diff --git a/readme.md b/readme.md index 9652e7e..eae9aa2 100644 --- a/readme.md +++ b/readme.md @@ -11,10 +11,30 @@ A soundboard bot for discord with a Go back end and React front end. * Install [ffmpeg](https://www.ffmpeg.org/download.html) * edit your config.json file * run the executable +* visit http://localhost:8080 + +### With docker-compose + +Make sure to create a `config.json` file in your data volume. +Take a look at `config.template.json` for example congurations. + +docker-compose.yml + +``` +version: "2" + +services: + go-discord-bot: + image: mgerb/go-discord-bot:latest + ports: + - 8080:8080 + volumes: + - :/bot +``` ### Commands -* `clip` - clips the past minute of audio +* `clip` - clips the past minute of audio (currently bugged if more than one user is speaking) * `summon` - summons the bot to your current channel * `dismiss` - dismisses the bot from the server * `