将应用打包为一个 Docker 镜像可以大大提高部署的便捷性和可移植性。我们将依次进行以下步骤:

  1. 创建 Dockerfile。
  2. 编写 Docker Compose 文件(可选,用于管理数据库和应用)。
  3. 运行 Docker 容器。

1. 创建 Dockerfile

在项目根目录下创建一个 Dockerfile 文件:

# Use an official node image as the base image
FROM node:16
 
# Set the working directory
WORKDIR /app
 
# Copy package.json and package-lock.json (if available)
COPY package.json .
COPY bun.lockb ./ # Assuming you have a lock file for Bun
 
# Install Bun
RUN npm install bun -g
 
# Copy the rest of the application
COPY . .
 
# Install dependencies
RUN bun install
 
# Build the application (both client and server)
RUN bun run build
 
# Build the Vite application
RUN bun x vite build
 
# Expose the port the app runs on
EXPOSE 3000
 
# Run the server
CMD ["bun", "run", "src/server.ts"]

2. 编写 Docker Compose 文件

如果你希望同时管理数据库和应用,可以使用 Docker Compose。在项目根目录下创建一个 docker-compose.yml 文件:

version: '3.8'
 
services:
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydatabase
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
 
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://user:password@db:5432/mydatabase
    depends_on:
      - db
    volumes:
      - .:/app
      - /app/node_modules
 
volumes:
  pgdata:

3. 运行 Docker 容器

在项目根目录下,首先确保你已经安装了 Docker 和 Docker Compose,然后运行以下命令:

docker-compose up --build

这个命令将构建并启动你的应用和数据库。应用将运行在 http://localhost:3000

4. 其他注意事项

  1. **确保数据库表已经创建:**可以通过 pgAdminDBeaver 等工具连接到数据库,并运行前述的 SQL 脚本来创建必要的表。

  2. **环境变量:**确保你的 .env 文件已正确配置。Docker Compose 将使用 docker-compose.yml 文件中定义的环境变量。

总结

通过上述步骤,我们将你的应用打包为一个 Docker 镜像,并使用 Docker Compose 管理应用和数据库。以下是已完成的主要任务:

  1. Dockerfile: 定义了包含应用代码和依赖的 Docker 镜像。
  2. Docker Compose: 管理多容器应用,协调应用和数据库。
  3. 运行和建表: 通过 Docker 容器运行应用,并确保数据库表已创建。

希望这些步骤可以帮助你成功地打包和运行你的应用。如有任何问题或需要进一步的帮助,请随时提问!