This commit is contained in:
5
.dockerignore
Normal file
5
.dockerignore
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
node_modules
|
||||||
|
cache
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
|
.git
|
||||||
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
node_modules/
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
.DS_Store
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
44
Dockerfile
44
Dockerfile
@@ -1,29 +1,43 @@
|
|||||||
FROM node:20-slim
|
FROM node:20.12.2-slim
|
||||||
|
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
# Install Chrome and dependencies
|
# Install Chrome and dependencies
|
||||||
RUN apt update && apt install -y \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
wget gnupg ca-certificates xvfb \
|
ca-certificates wget gnupg xvfb fonts-liberation \
|
||||||
fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 \
|
&& wget -qO- https://dl.google.com/linux/linux_signing_key.pub \
|
||||||
libatk1.0-0 libxss1 libnss3 libxcomposite1 libxdamage1 libxrandr2 libgbm1 \
|
| gpg --dearmor -o /usr/share/keyrings/google-linux-signing-keyring.gpg \
|
||||||
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
|
&& echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-linux-signing-keyring.gpg] https://dl.google.com/linux/chrome/deb/ stable main" \
|
||||||
&& apt install -y ./google-chrome-stable_current_amd64.deb \
|
> /etc/apt/sources.list.d/google-chrome.list \
|
||||||
&& rm google-chrome-stable_current_amd64.deb
|
&& apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends google-chrome-stable \
|
||||||
|
&& apt-get purge -y --auto-remove wget gnupg \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN corepack enable
|
||||||
|
|
||||||
|
# Create a non-root user for running the app
|
||||||
|
RUN useradd --create-home --home-dir /app --shell /bin/sh appuser
|
||||||
|
|
||||||
# Set working directory
|
# Set working directory
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Entrypoint script
|
||||||
|
COPY docker-entrypoint.sh /usr/local/bin/
|
||||||
|
RUN chmod 755 /usr/local/bin/docker-entrypoint.sh
|
||||||
|
|
||||||
# Copy and install dependencies
|
# Copy and install dependencies
|
||||||
COPY package*.json ./
|
COPY --chown=appuser:appuser package.json pnpm-lock.yaml ./
|
||||||
RUN npm install
|
USER appuser
|
||||||
|
RUN corepack prepare pnpm@9.0.0 --activate \
|
||||||
|
&& pnpm install --frozen-lockfile --prod \
|
||||||
|
&& pnpm store prune
|
||||||
|
|
||||||
# Copy app code
|
# Copy app code
|
||||||
COPY . .
|
COPY --chown=appuser:appuser . .
|
||||||
|
|
||||||
# Expose port (match your app's port)
|
# Expose port (match your app's port)
|
||||||
EXPOSE 10000
|
EXPOSE 10000
|
||||||
|
|
||||||
# Start Xvfb and run the bot
|
# Start Xvfb and run the bot
|
||||||
CMD rm -f /tmp/.X99-lock && \
|
CMD ["/usr/local/bin/docker-entrypoint.sh"]
|
||||||
Xvfb :99 -screen 0 1024x768x24 & \
|
|
||||||
export DISPLAY=:99 && \
|
|
||||||
npm start
|
|
||||||
|
|||||||
33
docker-entrypoint.sh
Normal file
33
docker-entrypoint.sh
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
rm -f /tmp/.X99-lock
|
||||||
|
Xvfb :99 -screen 0 1024x768x24 &
|
||||||
|
xvfb_pid=$!
|
||||||
|
|
||||||
|
export DISPLAY=:99
|
||||||
|
|
||||||
|
npm start &
|
||||||
|
app_pid=$!
|
||||||
|
|
||||||
|
term_handler() {
|
||||||
|
kill "$app_pid" 2>/dev/null || true
|
||||||
|
kill "$xvfb_pid" 2>/dev/null || true
|
||||||
|
}
|
||||||
|
|
||||||
|
trap term_handler INT TERM
|
||||||
|
|
||||||
|
while kill -0 "$app_pid" 2>/dev/null; do
|
||||||
|
if ! kill -0 "$xvfb_pid" 2>/dev/null; then
|
||||||
|
echo "Xvfb exited; stopping app." >&2
|
||||||
|
kill "$app_pid" 2>/dev/null || true
|
||||||
|
wait "$app_pid" 2>/dev/null || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
wait "$app_pid"
|
||||||
|
app_status=$?
|
||||||
|
kill "$xvfb_pid" 2>/dev/null || true
|
||||||
|
wait "$xvfb_pid" 2>/dev/null || true
|
||||||
|
exit "$app_status"
|
||||||
1637
pnpm-lock.yaml
generated
Normal file
1637
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user