aboutsummaryrefslogtreecommitdiff
path: root/ci/container/Dockerfile
blob: f5ac798e3b93e56668cb553443a13c2ad1f55a4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#Copyright (c) Vaughn Nugent
#Licensed under the GNU AGPL V3.0

#use plain alpine latest to build native libraries in
FROM alpine:3.19 as native-cont

#install public libs and build tools
RUN apk update && apk add build-base cmake npm git
#most universal way to use Task is from NPM
RUN npm install -g @go-task/cli

WORKDIR /build
 
#include local artifacts
COPY app/ .

#build internal libraries and copy the libraries to the /lib output directory
RUN mkdir out/
RUN task build-libs

#APP CONTAINER
#move into a clean dotnet apline lean image
FROM mcr.microsoft.com/dotnet/runtime:8.0.2-alpine3.19-amd64 as app-cont

LABEL name="vnuge/simple-bookmark"
LABEL maintainer="Vaughn Nugent <vnpublic@proton.me>"
LABEL description="A linkding inspired, self hosted, bookmark manager"

#copy local artifacts again in run container
COPY app/ /app

#pull compiled libs from build container
COPY --from=native-cont /build/out /app/lib

RUN apk update && apk add --no-cache gettext icu-libs dumb-init curl

#workdir 
WORKDIR /app

#default to 8080 for TLS on TCP
EXPOSE 8080/tcp

VOLUME /app/data
VOLUME /app/ssl
#expose an assets directory for custom assets install
VOLUME /app/usr/assets

#disable dotnet invariant culture on alpine
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=0

#add helper/required libraries
#ENV VNLIB_SHARED_HEAP_FILE_PATH=/app/lib/libvn_rpmalloc.so		not ready yet, still need to debug
ENV VNLIB_ARGON2_DLL_PATH=/app/lib/libargon2.so

#set default env variables
ENV MAX_BOOKMARKS=5000
ENV REG_TOKEN_DURATION_MIN=360

#SQL Config
ENV SQL_LIB_PATH=VNLib.Plugins.Extensions.Sql.SQLite.dll
ENV SQL_CONNECTION_STRING="Data Source=data/simple-bookmark.db;"

#ACCOUNTS
ENV MAX_LOGIN_ATTEMPS=10

#HC Vault
ENV HC_VAULT_ADDR=""
ENV HC_VAULT_TOKEN=""

#VNCACHE (default to memory only)
ENV CACHE_ASM_PATH=VNLib.Data.Caching.Providers.VNCache.dll
ENV MEMCACHE_ONLY=true		
ENV REDIS_CONNECTION_STRING=""
ENV VNCACHE_INITIAL_NODES=[]

#SECRETS
ENV PASSWORD_PEPPER=""
ENV DATABASE_PASSWORD=""
ENV REDIS_PASSWORD=""
ENV VNCACHE_CLIENT_PRIVATE_KEY=""
ENV VNCACHE_CACHE_PUBLIC_KEY=""

#HTTP/PROXY Config
ENV HTTP_DOWNSTREAM_SERVERS=[]
ENV SSL_JSON="{}"

#run the init script within dumb-init
ENTRYPOINT ["dumb-init", "--"]
CMD ["ash", "./run.sh"]