linux中使用docker部署vtj.pro
* 说明:在此使用的是官方手脚架+docker部署vtj.pro
目录
1.部署过程
1.前提:安装node npm npnm
# 1. 先装 npm 旧版(当脚手架)
sudo apt update && sudo apt install -y npm
# 2. 用 npm 装 Node 版本管理器 n
sudo npm install -g n --registry=https://registry.npmmirror.com
# 3. 装官方 LTS 版 Node.js(自带 npm)
sudo bash -i -c "N_NODE_MIRROR=https://npmmirror.com/mirrors/node n stable"
# 4. 升级 npm 到最新
sudo npm install npm@latest -g
# 5. 装 pnpm(可选)
sudo npm install -g pnpm --registry=https://registry.npmmirror.com
# 验证
node -v # v20.x
npm -v # 10.x
pnpm -v # 9.x
2.创建:
# 标准创建
npm create vtj@latest -- -t app
#初始化与启动项目
# 进入项目目录(目录名根据提示输入)
cd your-project-name # 如:my-vtj-app 会生成一个文件夹
# 安装依赖(首次执行可能需 1-3 分钟)
npm run setup
# 启动开发服务器
npm run dev
3.编写Dockerfile配置
# 使用官方 Node.js 运行时作为基础镜像,并指定版本和变体(如 alpine
# 以减小体积)
FROM node:20-alpine
# 或者 FROM node:20-slim 设置工作目录
WORKDIR /app
# 复制 package.json 和 package-lock.json (如果存在)
COPY package*.json ./
# 安装依赖
RUN npm install
# 将源代码复制到容器中
COPY . .
# 构建应用(如果 package.json 中有 build 脚本)
RUN npm run build
# 暴露应用运行的端口(例如 Vite 开发服务器常用 9527)
EXPOSE 9527
# 定义启动命令
CMD ["npm", "run", "dev"]
4.运行
sudo docker run -dp 9527:9527 --name vtj-container my-vtj-app
2.如何给对方使用
1.打包镜像
# 直接在源机器上 build 并导出 tar 包(推荐)
进入项目目录
cd ~/my-vtj-app
# 根据 Dockerfile 构建镜像(注意最后有个点)
sudo docker build -t my-vtj-app:latest .
# 把镜像导出成 tar 文件
sudo docker save -o my-vtj-app.tar my-vtj-app:latest
2.传输到目标服务器
sudo scp my-vtj-app.tar 对方用户名@对方主机ip:存放到的路径
3.在目标服务器中运行
sudo docker load -i /home/wssx/VTJ/my-vtj-app.tar
sudo docker run -d --name vtj -p 9527:9527 my-vtj-app:latest
3.升级vtj.pro版本--(手动升级)
1.先确认当前版本和最新版本
# 查看当前安装的 VTJ 版本
npm list @vtj/pro @vtj/cli @vtj/web# 查看 npm 上最新的可用版本
npm view @vtj/pro version
npm view @vtj/cli version
npm view @vtj/web version# 可能有更新的版本,比如 0.13.29 或更高
2.清除缓存&&重新安装 -- 不一定成
# 停止当前服务
# 清除各种缓存
rm -rf node_modules package-lock.json .vtj node_modules/.vite# 重新安装依赖
npm install# 如果有更新的版本,强制升级到最新
npm install @vtj/pro@latest @vtj/cli@latest @vtj/web@latest --force
3.如果2不成功
* 进入package.json,手动修改到最新版本
cat package.json
{
"name": "my-vtj-app",
"description": "VTJ.PRO",
"private": true,
"version": "0.13.28",
"type": "module",
"scripts": {
"setup": "npm install --unsafe-perm --registry=https://registry.npmmirror.com",
"dev": "vite --port 9527 --host 0.0.0.0",
"build": "vite build",
"preview": "vite preview",
"clean": "vtj clean"
},
"dependencies": {
"@vtj/web": "0.13.28",
"vue": "~3.5.0",
"vue-router": "~4.5.0",
"pinia": "~3.0.2",
"vue-i18n": "~11.1.11"
},
"devDependencies": {
"@vtj/cli": "0.12.13",
"@vtj/pro": "0.13.28"
}
}
4.更新项目版本号
# 更新项目版本号
npm version 0.13.28 --no-git-tag-version# 或者直接编辑 package.json
# 将 "version": "0.9.0" 改为 "version": "0.13.28"
5.修改Dockerfile配置
开发模式:
cat Dockerfile
FROM node:20-alpine
# 或者 FROM node:20-slim 设置工作目录
WORKDIR /app
# 复制 package.json 和 package-lock.json (如果存在)
COPY package*.json ./
# 安装依赖
RUN npm install
# 将源代码复制到容器中
COPY . .
# 构建应用(如果 package.json 中有 build 脚本)
RUN npm run build
# 暴露应用运行的端口(例如 Vite 开发服务器常用 9527)
EXPOSE 9527
# 定义启动命令
CMD ["npm", "run", "dev", "--", "--port", "9527", "--host", "0.0.0.0"]
6.重新创建镜像
# 1. 停止并删除旧容器
sudo docker stop vtj-container
sudo docker rm vtj-container# 2. 删除旧镜像
sudo docker rmi my-vtj-app# 3. 重新构建镜像(确保使用最新代码)
sudo docker build -t my-vtj-app . --no-cache# 4. 运行新容器
sudo docker run -dp 9527:9527 --name vtj-container my-vtj-app
7.验证版本的一致性
# 检查容器内的版本
sudo docker exec vtj-container cat package.json | grep version# 对比主机版本
cat package.json | grep version# 检查 @vtj 相关包的版本
sudo docker exec vtj-container sh -c "npm list @vtj/pro @vtj/cli @vtj/web" | grep @vtj
8.打包(可选)
源机中打包:
# 在源服务器打包整个项目
tar -czf my-vtj-app-full.tar.gz \
--exclude='node_modules' \
--exclude='.git' \
./# 传输到新服务器
scp my-vtj-app-full.tar.gz 服务器用户名@新服务器IP:~/# 在新服务器解压
tar -xzf my-vtj-app-full.tar.gz
4.添加挂载卷(补充)
将挂载卷挂载到源码中(代码、package.json、docker-compose.yml 都在这儿),在开发阶段改的快,热更新快
如果不挂载到源码中,需要将源码cp到所挂载的目录,手动,较为麻烦
cd /VTJ-0.13.28
vim docker-compose.yml
复制以下:
version: "3.9"
services:
vtj:
build: .
container_name: vtj-container
ports:
- "9527:9527"
volumes:
- /home/wssx/VTJ/VTJ-0.13.28:/app # 当前源码根目录
- /app/node_modules # 保留容器内依赖
environment:
- NODE_ENV=development
restart: unless-stopped
启动:
docker compose up -p
验证是否挂载成功:
docker inspect <容器ID或名字> | grep Mounts -A 20
# 如果挂载会看到类似:
"Mounts": [
{
"Type": "bind",
"Source": "/home/wssx/VTJ/VTJ-0.13.28",
"Destination": "/app",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
更多推荐
所有评论(0)