项目开发完后,要部署到服务器上才能正常使用,这里我分享一下docker
和pm2
两种方式的部署。
以下经验来自于我日常的折腾中,适合入门,非企业级操作,仅用于分享!
Docker部署
用docker
的话,也算有两种运行方式。
先在本地build
,然后打tag
,然后push
上去。
把包发布到dockerhub
或你的对应的云服务商的容器镜像服务上(比如阿里云)后
一种是使用docker run
附带一些参数进行启动
另一种使用docker-compose.yml
配置参数,用docker compose
命令重新拉取最新的镜像并重启。
Dockerfile
这个dockerfile来自Bun的官方,然后我又加了一些自己的需求,可以做一下参考
# use the official Bun image
# see all versions at https://hub.docker.com/r/oven/bun/tags
FROM oven/bun:1 AS base
WORKDIR /usr/src/app
# install dependencies into temp directory
# this will cache them and speed up future builds
FROM base AS install
RUN mkdir -p /temp/dev
COPY package.json bun.lockb /temp/dev/
RUN cd /temp/dev && bun install --frozen-lockfile
# install with --production (exclude devDependencies)
RUN mkdir -p /temp/prod
COPY package.json bun.lockb /temp/prod/
RUN cd /temp/prod && bun install --frozen-lockfile --production
# copy node_modules from temp directory
# then copy all (non-ignored) project files into the image
FROM base AS prerelease
COPY --from=install /temp/dev/node_modules node_modules
COPY . .
# [optional] tests & build
ENV NODE_ENV=production
# RUN bun test
RUN bun run build
# copy production dependencies and source code into final image
FROM base AS release
# 一个后端node/bun服务运行,必须需要node_modules
# 以及打包后的入口
# 如果存在环境变量配置, 还需要复制环境变量配置文件
COPY --from=install /temp/prod/node_modules node_modules
COPY --from=prerelease /usr/src/app/out/index.js .
COPY --from=prerelease /usr/src/app/package.json .
COPY --from=prerelease /usr/src/app/.env .
COPY --from=prerelease /usr/src/app/.env.production .
# 此处是为了把日志和数据库持久化, 方便备份和查看
# 创建日志目录和数据库目录
RUN mkdir -p /usr/src/app/prod-logs && chmod -R 777 /usr/src/app/prod-logs
RUN mkdir -p /usr/src/app/db && chmod -R 777 /usr/src/app/db
EN