unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1# Build stage
2FROM node:24-alpine AS build
3
4# include important binaries
5RUN apk add --no-cache perl curl tini bash ffmpeg exiv2
6
7# set working directory
8WORKDIR /app/packages/backend
9
10# copy package.json and package-lock.json
11COPY package.json /app
12COPY package-lock.json /app
13COPY packages/backend/package.json .
14
15# set node_env as production for the npm install command
16ENV NODE_ENV=production
17
18# install dependencies
19RUN npm install
20
21# copy the rest of the files
22COPY packages/backend .
23
24# create log folder early to prevent node err: cannot open logs/*.log
25RUN mkdir -p logs
26
27# read the build args and set the environment variables with them
28ARG ADMIN_USER
29ARG ADMIN_EMAIL
30ARG ADMIN_PASSWORD
31ARG JWT_SECRET
32ARG DOMAIN_NAME
33ARG CACHE_DOMAIN
34ARG MEDIA_DOMAIN
35
36ARG POSTGRES_PASSWORD
37ARG POSTGRES_USER
38ARG POSTGRES_DBNAME
39
40ARG SMTP_HOST
41ARG SMTP_USER
42ARG SMTP_PORT
43ARG SMTP_PASSWORD
44ARG SMTP_FROM
45
46ARG ENABLE_BSKY
47ARG PDS_DOMAIN_NAME
48ARG PDS_JWT_SECRET
49ARG PDS_ADMIN_PASSWORD
50
51ARG LOG_SQL_QUERIES
52ARG UPLOAD_LIMIT
53ARG POSTS_PER_PAGE
54ARG LOG_LEVEL
55ARG BLOCKLIST_URI
56ARG FRONTEND_PATH
57ARG DISABLE_REQUIRE_SEND_EMAIL
58ARG BLOCKED_IPS
59ARG REVIEW_REGISTRATIONS
60ARG IGNORE_BLOCK_HOSTS
61
62ARG USE_WORKERS
63ARG WORKERS_LOW
64ARG WORKERS_MEDIUM
65ARG WORKERS_HIGH
66
67ARG WEBPUSH_EMAIL
68ARG WEBPUSH_PRIVATE
69ARG WEBPUSH_PUBLIC
70ARG FRONTEND_LOGO
71ARG FRONTEND_API_URL
72ARG FRONTEND_MEDIA_URL
73ARG FRONTEND_CACHE_URL
74ARG FRONTEND_CACHE_BACKUP_URLS
75ARG FRONTEND_SHORTEN_POSTS
76ARG FRONTEND_DISABLE_PWA
77ARG FRONTEND_MAINTENANCE
78ARG FRONTEND_SHORT_TITLE
79ARG FRONTEND_LONG_TITLE
80ARG FRONTEND_DESCRIPTION
81
82# defaults assuming this is run in the docker compose package with the others
83ARG FRONTEND_FQDN_URL=https://${DOMAIN_NAME}
84ARG POSTGRES_HOST=db
85ARG POSTGRES_PORT=5432
86ARG REDIS_HOST=redis
87ARG REDIS_PORT=6379
88ARG LISTEN_IP=0.0.0.0
89ARG PORT=9000
90ARG LOG_DESTINATION=1
91
92
93COPY packages/backend/environment.example.ts environment.ts
94
95# use sed to replace the environment variables in the environment.ts file
96RUN perl -pi -e 's/\$\{\{([_A-Z]+):-(.*)\}\}/$ENV{$1}||$2/ge' environment.ts && \
97 perl -pi -e 's/\$\{\{([_A-Z]+)\}\}/$ENV{$1}/g' environment.ts
98
99RUN npm run type-check
100
101# expose port from environment.ts
102EXPOSE ${PORT}
103
104# set up tini as entrypoint to be able to handle kernel signals
105ENTRYPOINT ["tini", "--"]
106
107# start the actual backend server
108CMD ["npm", "start"]