notion / Dockerfile
clash-linux's picture
Upload 17 files
c99d2c6 verified
# Use an official Node.js runtime as a parent image
FROM node:18-slim
# Set the working directory in the container
WORKDIR /app
# Copy package.json and package-lock.json to the working directory
COPY package*.json ./
# Install app dependencies
# Using --production flag to install only production dependencies
# Playwright needs special handling to download browsers
# We need to install dependencies first to make sure Playwright downloads its browsers.
RUN npm install --production
# Copy the rest of the application source code to the working directory
COPY . .
# Switch to root to install packages and set up the environment
USER root
# Install proxychains-ng for transparent proxying
RUN apt-get update && apt-get install -y --no-install-recommends proxychains-ng && rm -rf /var/lib/apt/lists/*
# Copy the entrypoint script and make it executable
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
# Create a directory for proxychains configuration for the 'node' user
RUN mkdir -p /home/node/.proxychains && chown -R node:node /home/node/.proxychains
# Grant execute permission to the proxy server binary for the root user
RUN chmod +x /app/src/proxy/chrome_proxy_server_linux_amd64
# Change ownership of the app directory to the node user
RUN chown -R node:node /app
# Switch to a non-root user for security
USER node
# Make port 7860 available to the world outside this container
EXPOSE 7860
# Use the entrypoint script to start the application
ENTRYPOINT ["/app/entrypoint.sh"]
# Define the default command to run the app (will be passed to the entrypoint)
CMD ["npm", "start"]