Added Dockerfiles to main repo (#225)

* Added Dockerfiles
This commit is contained in:
Kizaing 2021-05-19 11:03:00 -04:00 committed by GitHub
parent 77c52717ce
commit 7b02ddf8b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 210 additions and 0 deletions

3
.gitattributes vendored Normal file
View File

@ -0,0 +1,3 @@
# Set line formatting for scripts
*.sh text eol=lf

44
Dockerfile Normal file
View File

@ -0,0 +1,44 @@
#This Dockerfile pulls the latest git commit and builds Kavita from source
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS builder
MAINTAINER Chris P
ENV DEBIAN_FRONTEND=noninteractive
ARG TARGETPLATFORM
#Installs nodejs and npm
RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
#Builds app based on platform
COPY build_target.sh /build_target.sh
RUN /build_target.sh
#Production image
FROM ubuntu:focal
MAINTAINER Chris P
#Move the output files to where they need to be
COPY --from=builder /Projects/Kavita/_output/build/Kavita /kavita
#Installs program dependencies
RUN apt-get update \
&& apt-get install -y libicu-dev libssl1.1 pwgen \
&& rm -rf /var/lib/apt/lists/*
#Creates the manga storage directory
RUN mkdir /manga /kavita/data
RUN cp /kavita/appsettings.Development.json /kavita/appsettings.json \
&& sed -i 's/Data source=kavita.db/Data source=data\/kavita.db/g' /kavita/appsettings.json
COPY entrypoint.sh /entrypoint.sh
EXPOSE 5000
WORKDIR /kavita
ENTRYPOINT ["/bin/bash"]
CMD ["/entrypoint.sh"]

28
Dockerfile.alpine Normal file
View File

@ -0,0 +1,28 @@
#This Dockerfile is for the musl alpine build of Kavita.
FROM alpine:latest
MAINTAINER Chris P
#Installs the needed dependencies
RUN apk update && apk add --no-cache wget curl pwgen icu-dev bash
#Downloads Kavita, unzips and moves the folders to where they need to be
RUN wget https://github.com/Kareadita/Kavita/releases/download/v0.3.7/kavita-linux-musl-x64.tar.gz \
&& tar -xzf kavita*.tar.gz \
&& mv Kavita/ /kavita/ \
&& rm kavita*.gz \
&& chmod +x /kavita/Kavita
#Creates the needed folders
RUN mkdir /manga /kavita/data /kavita/temp /kavita/cache
RUN sed -i 's/Data source=kavita.db/Data source=data\/kavita.db/g' /kavita/appsettings.json
COPY entrypoint.sh /entrypoint.sh
EXPOSE 5000
WORKDIR /kavita
ENTRYPOINT ["/bin/bash"]
CMD ["/entrypoint.sh"]

27
Dockerfile.arm Normal file
View File

@ -0,0 +1,27 @@
#This Dockerfile pulls the latest git commit and builds Kavita from source
#Production image
FROM ubuntu:focal
#Move the output files to where they need to be
COPY Kavita /kavita
#Installs program dependencies
RUN apt-get update \
&& apt-get install -y libicu-dev libssl1.1 pwgen \
&& rm -rf /var/lib/apt/lists/*
#Creates the manga storage directory
RUN mkdir /kavita/data
RUN cp /kavita/appsettings.Development.json /kavita/appsettings.json \
&& sed -i 's/Data source=kavita.db/Data source=data\/kavita.db/g' /kavita/appsettings.json
COPY entrypoint.sh /entrypoint.sh
EXPOSE 5000
WORKDIR /kavita
ENTRYPOINT ["/bin/bash"]
CMD ["/entrypoint.sh"]

27
build_target.sh Normal file
View File

@ -0,0 +1,27 @@
#!/bin/bash
mkdir Projects
cd Projects
git clone https://github.com/Kareadita/Kavita.git
git clone https://github.com/Kareadita/Kavita-webui.git
cd Kavita
chmod +x build.sh
#Builds program based on the target platform
if [ "$TARGETPLATFORM" == "linux/amd64" ]
then
./build.sh linux-x64
mv /Projects/Kavita/_output/linux-x64 /Projects/Kavita/_output/build
elif [ "$TARGETPLATFORM" == "linux/arm/v7" ]
then
./build.sh linux-arm
mv /Projects/Kavita/_output/linux-arm /Projects/Kavita/_output/build
elif [ "$TARGETPLATFORM" == "linux/arm64" ]
then
./build.sh linux-arm64
mv /Projects/Kavita/_output/linux-arm64 /Projects/Kavita/_output/build
fi

13
docker-compose.yml Normal file
View File

@ -0,0 +1,13 @@
version: '3.9'
services:
kavita:
image: kizaing/kavita:latest
volumes:
- ./manga:/manga
- ./data/temp:/kavita/temp
- ./data/cache:/kavita/cache
- ./data:/kavita/data
- ./data/logs:/kavita/logs
ports:
- "5000:5000"
restart: unless-stopped

68
entrypoint.sh Normal file
View File

@ -0,0 +1,68 @@
#!/bin/bash
#Checks if a token has been set, and then generates a new token if not
if grep -q 'super secret unguessable key' /kavita/appsettings.json
then
export TOKEN_KEY="$(pwgen -s 16 1)"
sed -i "s/super secret unguessable key/${TOKEN_KEY}/g" /kavita/appsettings.json
fi
#Checks if the appsettings.json already exists in bind mount
if test -f "/kavita/data/appsettings.json"
then
rm /kavita/appsettings.json
ln -s /kavita/data/appsettings.json /kavita/
else
mv /kavita/appsettings.json /kavita/data/
ln -s /kavita/data/appsettings.json /kavita/
fi
#Checks if the data folders exist
if [ -d /kavita/data/temp ]
then
if [ -d /kavita/temp ]
then
unlink /kavita/temp
ln -s /kavita/data/temp /kavita/temp
else
ln -s /kavita/data/temp /kavita/temp
fi
else
mkdir /kavita/data/temp
ln -s /kavita/data/temp /kavita/temp
fi
if [ -d /kavita/data/cache ]
then
if [ -d /kavita/cache ]
then
unlink /kavita/cache
ln -s /kavita/data/cache /kavita/cache
else
ln -s /kavita/data/cache /kavita/cache
fi
else
mkdir /kavita/data/cache
ln -s /kavita/data/cache /kavita/cache
fi
# Checks for the log file
if test -f "/kavita/data/logs/kavita.log"
then
rm /kavita/kavita.log
ln -s /kavita/data/logs/kavita.log /kavita/
else
if [ -d /kavita/data/logs ]
then
touch /kavita/data/logs/kavita.log
ln -s /kavita/data/logs/kavita.log /kavita/
else
mkdir /kavita/data/logs
touch /kavita/data/logs/kavita.log
ln -s /kavita/data/logs/kavita.log /kavita/
fi
fi
./Kavita