jdk21下载地址:
https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows
后端:https://gitee.com/novel_dev_team/novel
前端:https://gitee.com/novel_dev_team/novel-front-web
前端启动:
# 1. 全局安装yarn(需要先安装Node.js,建议Node.js 14+)
npm install -g yarn
# 2. 进入项目目录,重新安装依赖(确保依赖和yarn.lock一致)
yarn install
# 3. 启动项目(用yarn替代npm)
yarn serve
打包:
yarn build
dockerfile
# 使用Eclipse Temurin 21 JDK Alpine作为基础镜像
FROM eclipse-temurin:21-jdk-alpine
# 添加元数据标签
LABEL maintainer=""
LABEL name="novel"
LABEL version="1.0.0"
LABEL description="novel - 小说网站"
LABEL org.opencontainers.image.title="novel"
LABEL org.opencontainers.image.description="novel - 小说网站"
LABEL org.opencontainers.image.version="1.0.0"
LABEL org.opencontainers.image.authors=""
# 设置工作目录
WORKDIR /app
# 设置时区
ENV TZ=Asia/Shanghai
RUN apk add --no-cache tzdata && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone
# 安装curl用于健康检查
RUN apk add --no-cache curl
# 创建非root用户
RUN addgroup -g 1001 appuser && adduser -D -u 1001 -G appuser appuser
# 复制jar包到容器中
COPY novel.jar app.jar
# 创建配置和日志目录用于挂载
# 创建 /opt/docker/novel 目录及其子目录(config 和 logs)
RUN mkdir -p /opt/docker/novel/config && \
mkdir -p /opt/docker/novel/logs && \
chmod -R 755 /opt/docker/novel
# 修改文件所有者
RUN chown -R appuser:appuser /app && \
chown -R appuser:appuser /opt/docker/novel
# 切换到非root用户
USER appuser
# 暴露端口
EXPOSE 8888
# 设置JVM参数和环境变量
ENV JAVA_OPTS="-Xms500m -Xmx500m -XX:+UseContainerSupport"
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
CMD curl -f http://localhost:8888/actuator/health || exit 1
# 启动应用
# 优先使用挂载的配置文件,如果不存在则使用默认配置
# 使用 prod profile 确保日志输出到文件(logback-spring.xml 中 prod 环境才会输出到文件)
# 如果挂载目录中存在 logback-spring.xml,则使用外部日志配置文件
ENTRYPOINT ["sh", "-c", " \
SPRING_ARGS='--spring.profiles.active=prod'; \
if [ -f /opt/docker/novel/config/application.yml ]; then \
SPRING_ARGS=\"$SPRING_ARGS --spring.config.location=classpath:/application.yml,file:/opt/docker/novel/config/application.yml\"; \
fi; \
if [ -f /opt/docker/novel/config/logback-spring.xml ]; then \
SPRING_ARGS=\"$SPRING_ARGS --logging.config=file:/opt/docker/novel/config/logback-spring.xml\"; \
fi; \
java $JAVA_OPTS -jar app.jar $SPRING_ARGS \
"]
相关运行命令:
mkdir -p /opt/docker/novel/config
mkdir -p /opt/docker/novel/logs
mkdir -p /opt/docker/novel/images
# 修改宿主机挂载目录的权限(关键:指定UID=1001,GID=1001)
sudo chown -R 1001:1001 /opt/docker/novel
docker build -f DockerFile -t novel:1.0.0 .
# 停止并删除现有容器(先清理)
docker stop novel && docker rm novel && docker rmi novel:1.0.0
docker stop novel && docker rm novel
# 重新启动容器(启动命令不变)
docker run -d \
--name novel \
-p 8888:8888 \
-v /opt/docker/novel/config:/opt/docker/novel/config \
-v /opt/docker/novel/logs:/opt/docker/novel/logs \
-v /opt/docker/novel/images:/opt/docker/novel/images \
-e TZ=Asia/Shanghai \
--restart=always \
novel:1.0.0