ubuntu 系统安装nestjs 和java docker 部署环境

目录

一、系统准备和更新

二、安装 Node.js 和 NestJS

1. 安装 Node.js(推荐使用 nvm)

2. 安装 NestJS CLI

三、安装 Java 开发环境

1. 安装 OpenJDK

2. 安装 Maven(可选)

四、安装 Docker 和 Docker Compose

1. 安装 Docker

2. 配置 Docker(使非 root 用户执行  docker 命令 不需要使用 sudo )

3. 安装 Docker Compose(独立版本)

五、部署

1.C#webapi 项目部署

a. 可视化流程

b.创建 Dockerfile 文件内容示例及命令说明(多平台兼容)

c.创建 .dockerignore 文件

d.docker 构建命令

Docker 命令使用说明


一、系统准备和更新

bash

# 更新系统包列表
sudo apt update && sudo apt upgrade -y

# 安装常用工具
sudo apt install -y curl wget git vim net-tools

二、安装 Node.js 和 NestJS

1. 安装 Node.js(推荐使用 nvm)

bash

# 安装 nvm(Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

# 使用 gitee 镜像安装 github 无法使用 使用gitee 镜像
export NVM_SOURCE=https://gitee.com/mirrors/nvm.git
curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash

# 重新加载 bash 配置
source ~/.bashrc

# 安装 Node.js LTS 版本
nvm install --lts
nvm use --lts

# 验证安装
node --version
npm --version

2. 安装 NestJS CLI

bash

# 全局安装 NestJS CLI
npm install -g @nestjs/cli

# 验证安装
nest --version

三、安装 Java 开发环境

1. 安装 OpenJDK

bash

# 安装 OpenJDK 17(或选择其他版本)
sudo apt install -y openjdk-8-jdk openjdk-8-jre

# 验证安装
java -version
javac -version

# 设置 JAVA_HOME(添加到 ~/.bashrc)
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

2. 安装 Maven(可选)

bash

# 安装maven
sudo apt install -y maven
mvn -version

四、安装 Docker 和 Docker Compose

1. 安装 Docker

bash

# 卸载旧版本(需要时)
sudo apt remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加 Docker 仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装
sudo docker --version

2. 配置 Docker(使非 root 用户执行  docker 命令 不需要使用 sudo )

bas

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 重新登录或执行以下命令使组变更生效
newgrp docker

# 测试 Docker
# docker run hello-world

3. 安装 Docker Compose(独立版本)

bash

#此命令能执行 不需要执行后面的步骤 系统已经安装了 docker compose 我的在
#/usr/libexec/docker/cli-plugins/docker-compos
docker compose version


# 下载最新版 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装(旧版本)
docker-compose --version
# 验证安装(新版本)
docker compose version

五、部署

1.C#webapi 项目部署

a. 可视化流程

   

b.创建 Dockerfile 文件内容示例及命令说明(多平台兼容)

Dockerfile


#变量定义
#定义应用名
#这里只是定义默认值 后面使用需要重新申明
ARG DOTNET_VERSION=8.0
ARG APP_NAME=Loc8tewbApi 
ARG PROJECT_FILE=${APP_NAME}.csproj

#指定默认平台及架构
#ARG BUILDPLATFORM=linux/amd64
#-------------------------------------
# 构建阶段
#$BUILDPLATFORM 平台格式为操作系统/架构(linux/amd64、windows/amd64、linux/arm64...) 
#只在 buldx 中有效 普通 docker build 不会设置这个变量
#(命名为 build) 其他阶段可以通过这个名称引用这个阶段文件系统
#FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:$DOTNET_VERSION AS build
# 使用多架构支持的SDK镜像(自动匹配构建平台)
FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} AS build

# 必须在每个FROM后重新声明ARG才能使用
ARG APP_NAME
ARG PROJECT_FILE


#在容器内创建 /src 目录并设为工作目录 指定后续指的工作目录(docker容器内的目录) 
#你可以使用任何目录名,但 /src 和 /app 是 .NET 社区的约定 它是一个临时的工作目录,用于存放源代码和进行构建
#最终运行时文件通常放在 /app 目录
WORKDIR /src

# 复制项目文件 (优化缓存) [Loc8tewbApi] 项目名
#json 数据格式 - docker zhijie 解析 引擎直接处理路径 不会跳用shell 如果没有中括号[] 会跳用shell 解析
#COPY ["Loc8tewbApi.csproj", "./"]  #jason 格式不支持变量
COPY ${PROJECT_FILE} ./

#恢复依赖项目 为后续的dotnet build做准备[从仓库下载所有包依赖 创建项目依赖图 生成lock文件:创建obj/project.assets.json]
RUN dotnet restore "${PROJECT_FILE}"

# 复制源代码
#这会把本地当前目录的所有文件复制到容器内的 /src 目录
COPY . .
#publish 会自动编译 取消dotnet build
#RUN dotnet build "${PROJECT_FILE}" -c Release -o /app/build

#简单发布
# RUN dotnet publish -c Release -o /app/publish

# 优化发布(推荐用于docker)
#1.明确指定项目文件[xx.csproj]
#2.--no-restore 作用 利用docker 缓存(当依赖已经恢复,跳过恢复步骤)
#3.--self-contained false(默认) 生成框架的依赖的应用 需要目标及其上有.NET运行时 生成文件较小 true 生成自包含的应用 不需要目标机器有.NET运行时  生成的文件很大
#4.--no-cache 禁用增量构建缓存 可以避免缓存导致的问题 publish 命令中没有这个参数
RUN dotnet publish "${PROJECT_FILE}" -c Release -o /app/publish \
    --no-restore \
    --self-contained false 
    #--no-cache
#=========================
# 运行时阶段
FROM mcr.microsoft.com/dotnet/aspnet:$DOTNET_VERSION

#重新申明 获取相同的值
#必须重新申明 (ARG 作用域 在下一个 FROM 命令开始前)
ARG APP_NAME

#传递到运行时传递到环境变量 设置环境变量
ENV APP_NAME=${APP_NAME}
ENV DLL_NAME=${APP_NAME}.dll

WORKDIR /app

# 创建非 root 用户
#增强安全性,但并不是"必须"的
#创建用户组和用户
# -r:创建系统用户(UID < 1000)
# -g appuser:指定主组
# -s /bin/false:不允许登录shell(增强安全)
RUN groupadd -r appuser && useradd -r -g appuser -s /bin/false appuser

#更改目录所有权 将/app目录所有权改为appuser用户
#RUN chown -R appuser:appuser /app
# 创建目录并设置权限(确保目录存在)
RUN mkdir -p /app && chown -R appuser:appuser /app


# 从构建阶段复制
COPY --from=build /app/publish .

#切换用户 后续所有命令都以appuser身份运行
USER appuser

EXPOSE 80
EXPOSE 443

#健康检查 curl 命令在aspnet镜像中不一定存在 使用下面的 健康检查命令
# HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 CMD curl -f http://localhost:80/health || exit 1
# 健康检查:使用 wget(AspNet 镜像中一般存在)
#HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 CMD wget -qO- http://localhost:80/health || exit 1
# 使用 dotnet 工具进行健康检查(推荐)
#HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 CMD dotnet ${APP_NAME}.dll --check-health || exit 1



#----------入口点---------------------------
#jason格式不支持变量使用下面的命令
#ENTRYPOINT ["dotnet", "Loc8tewbApi.dll"] 

# 兼容所有平台
ENTRYPOINT ["dotnet", "${APP_NAME}.dll"]

#使用Shell模式以支持变量扩展
#ENTRYPOINT ["sh", "-c", "dotnet \"${DLL_NAME}\""]

c.创建 .dockerignore 文件
**/.dockerignore
**/.git
**/.gitignore
**/.vs
**/.vscode
**/bin/
**/obj/
**/TestResults/
**/*.user
**/*.suo
Dockerfile*
docker-compose*
.env
*.md
d.docker 构建命令
# 创建构建器(如果还没有)
docker buildx create --name multiplatform --use

# 构建并推送到registry(支持多平台)
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t yourusername/loc8tewbapi:latest \
  --push .

# 或者本地构建测试
docker buildx build \
  --platform linux/amd64 \
  -t loc8tewbapi:latest \
  --load .
#===========================
# 普通 docker build(所有情况都适用)
docker build -t myapp:latest .

# 如果有特定架构需求
docker build --build-arg TARGETARCH=amd64 -t myapp:amd64 .
docker build --build-arg TARGETARCH=arm64 -t myapp:arm64 .

# 使用 buildx(如果可用)
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:multi .
Docker 命令使用说明

https://blog.youkuaiyun.com/haolinweb/article/details/154823775?sharetype=blogdetail&sharerId=154823775&sharerefer=PC&sharesource=haolinweb&spm=1011.2480.3001.8118

2.nestjs 项目部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值