43 lines
1.5 KiB
Docker
43 lines
1.5 KiB
Docker
# Use the official Node.js 22.4.1 image
|
|
FROM node:22.4.1-alpine
|
|
|
|
# Install Redis, MySQL, and tmux
|
|
RUN apk add --no-cache redis mysql mysql-client tmux && \
|
|
mkdir -p /run/mysqld && \
|
|
chown -R mysql:mysql /run/mysqld && \
|
|
mysql_install_db --user=mysql --datadir=/var/lib/mysql
|
|
|
|
# Set the working directory in the container
|
|
WORKDIR /usr/src/
|
|
|
|
# Copy package.json and package-lock.json (if available)
|
|
COPY package*.json ./
|
|
|
|
# Install application dependencies
|
|
RUN npm install
|
|
|
|
# Import migrations
|
|
RUN npx mikro-orm migration:up
|
|
|
|
# Copy the rest of your application code to the container
|
|
COPY . .
|
|
|
|
# Build the application
|
|
RUN npm run build
|
|
|
|
# Expose the ports your Node.js application, Redis, and MySQL will listen on
|
|
EXPOSE 80 6379 3306
|
|
|
|
# Create a shell script to run Redis, MySQL, run migrations, and start the application in a tmux session
|
|
RUN echo '#!/bin/sh' > /usr/src/start.sh && \
|
|
echo 'redis-server --daemonize yes' >> /usr/src/start.sh && \
|
|
echo 'mysqld --user=mysql --datadir=/var/lib/mysql &' >> /usr/src/start.sh && \
|
|
echo 'sleep 10' >> /usr/src/start.sh && \
|
|
echo 'npx prisma migrate deploy' >> /usr/src/start.sh && \
|
|
echo 'tmux new-session -d -s nodeapp "node dist/server.js"' >> /usr/src/start.sh && \
|
|
echo 'echo "App is running in tmux session. Attach with: tmux attach-session -t nodeapp"' >> /usr/src/start.sh && \
|
|
echo 'tail -f /dev/null' >> /usr/src/start.sh && \
|
|
chmod +x /usr/src/start.sh
|
|
|
|
# Use the shell script as the entry point
|
|
CMD ["/usr/src/start.sh"] |