126 lines
4.5 KiB
Plaintext
126 lines
4.5 KiB
Plaintext
|
|
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS api-builder
|
||
|
|
|
||
|
|
COPY ./app/api /app/playedu
|
||
|
|
|
||
|
|
|
||
|
|
WORKDIR /app/playedu
|
||
|
|
RUN sed -i 's/\r$//' mvnw
|
||
|
|
RUN chmod +x mvnw
|
||
|
|
|
||
|
|
RUN /app/playedu/mvnw -T 1C -DarchetypeCatalog=local -Dmaven.test.skip=true -Dmaven.repo.remote=https://maven.aliyun.com/repository/public package
|
||
|
|
|
||
|
|
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/node:20-alpine AS node-builder
|
||
|
|
|
||
|
|
COPY app/backend /app/backend
|
||
|
|
COPY app/pc /app/pc
|
||
|
|
COPY app/h5 /app/h5
|
||
|
|
|
||
|
|
|
||
|
|
WORKDIR /app/backend
|
||
|
|
RUN pnpm i && VITE_APP_URL=/api/ pnpm build
|
||
|
|
|
||
|
|
WORKDIR /app/pc
|
||
|
|
RUN pnpm i && VITE_APP_URL=/api/ pnpm build
|
||
|
|
|
||
|
|
WORKDIR /app/h5
|
||
|
|
RUN pnpm i && VITE_APP_URL=/api/ pnpm build
|
||
|
|
|
||
|
|
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS config-builder
|
||
|
|
|
||
|
|
# 是否启用MINIO
|
||
|
|
ARG ENABLED_MINIO=false
|
||
|
|
# 是否启用SSL
|
||
|
|
ARG ENABLED_SSL=false
|
||
|
|
# SSL是否是通配符证书
|
||
|
|
ARG SSL_WILDCARD=false
|
||
|
|
# API域名
|
||
|
|
ARG DOMAIN_API
|
||
|
|
ARG DOMAIN_PC
|
||
|
|
ARG DOMAIN_H5
|
||
|
|
ARG DOMAIN_ADMIN
|
||
|
|
ARG DOMAIN_MINIO
|
||
|
|
|
||
|
|
RUN if [ "$ENABLED_SSL" = "true" ] && [ -z "$DOMAIN_API" ]; then \
|
||
|
|
echo "请配置API域名"; \
|
||
|
|
exit 1; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
RUN if [ "$ENABLED_SSL" = "true" ] && [ -z "$DOMAIN_PC" ]; then \
|
||
|
|
echo "请配置PC域名"; \
|
||
|
|
exit 1; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
RUN if [ "$ENABLED_SSL" = "true" ] && [ -z "$DOMAIN_H5" ]; then \
|
||
|
|
echo "请配置H5域名"; \
|
||
|
|
exit 1; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
RUN if [ "$ENABLED_SSL" = "true" ] && [ -z "$DOMAIN_ADMIN" ]; then \
|
||
|
|
echo "请配置后台管理域名"; \
|
||
|
|
exit 1; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
RUN if [ "$ENABLED_MINIO" = "true" ] && [ "$ENABLED_SSL" = "true" ] && [ -z "$DOMAIN_MINIO" ]; then \
|
||
|
|
echo "请配置MINIO域名"; \
|
||
|
|
exit 1; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
COPY docker/nginx/conf/nginx.conf /docker/nginx/conf/nginx.conf
|
||
|
|
COPY docker/nginx/conf/nginx.ssl.conf /docker/nginx/conf/nginx.ssl.conf
|
||
|
|
|
||
|
|
RUN sed -i 's/\r$//' /docker/nginx/conf/nginx.conf
|
||
|
|
RUN sed -i 's/\r$//' /docker/nginx/conf/nginx.ssl.conf
|
||
|
|
|
||
|
|
RUN if [ "$ENABLED_MINIO" != "true" ]; then \
|
||
|
|
sed -i "/####MINIO-START####/,/####MINIO-END####/d" /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
sed -i "/####MINIO-START####/,/####MINIO-END####/d" /docker/nginx/conf/nginx.conf; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
RUN if [ -n "$DOMAIN_API" ]; then \
|
||
|
|
sed -i "s/api.domain/${DOMAIN_API}/g" /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
fi
|
||
|
|
RUN if [ -n "$DOMAIN_PC" ]; then \
|
||
|
|
sed -i "s/pc.domain/${DOMAIN_PC}/g" /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
fi
|
||
|
|
RUN if [ -n "$DOMAIN_H5" ]; then \
|
||
|
|
sed -i "s/h5.domain/${DOMAIN_H5}/g" /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
fi
|
||
|
|
RUN if [ -n "$DOMAIN_ADMIN" ]; then \
|
||
|
|
sed -i "s/admin.domain/${DOMAIN_ADMIN}/g" /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
fi
|
||
|
|
RUN if [ "$ENABLED_MINIO" = "true" ] && [ -n "$DOMAIN_MINIO" ]; then \
|
||
|
|
sed -i "s/minio.domain/${DOMAIN_MINIO}/g" /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
RUN if [ "$ENABLED_SSL" = "true" ] && [ "$SSL_WILDCARD" = "true" ]; then \
|
||
|
|
sed -i 's/pc.pem\|h5.pem\|api.pem\|admin.pem\|minio.pem/playedu.pem/g' /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
sed -i 's/pc.key\|h5.key\|api.key\|admin.key\|minio.key/playedu.key/g' /docker/nginx/conf/nginx.ssl.conf; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 由构建参数决定是否启动ssl的nginx配置
|
||
|
|
RUN if [ "$ENABLED_SSL" = "true" ]; then \
|
||
|
|
cp /docker/nginx/conf/nginx.ssl.conf /etc/nginx/sites-enabled/default; \
|
||
|
|
else \
|
||
|
|
cp /docker/nginx/conf/nginx.conf /etc/nginx/sites-enabled/default; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17
|
||
|
|
|
||
|
|
COPY --from=api-builder /app/playedu/playedu-api/target/playedu-api-*.jar /app/api/app.jar
|
||
|
|
COPY --from=node-builder /app/backend/dist /app/backend
|
||
|
|
COPY --from=node-builder /app/pc/dist /app/frontend
|
||
|
|
COPY --from=node-builder /app/h5/dist /app/h5
|
||
|
|
|
||
|
|
COPY --from=config-builder /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default
|
||
|
|
|
||
|
|
WORKDIR /app/api
|
||
|
|
|
||
|
|
EXPOSE 80/tcp
|
||
|
|
EXPOSE 443/tcp
|
||
|
|
EXPOSE 9800/tcp
|
||
|
|
EXPOSE 9801/tcp
|
||
|
|
EXPOSE 9900/tcp
|
||
|
|
EXPOSE 9002/tcp
|
||
|
|
|
||
|
|
CMD echo "Waiting for MySQL/Redis/MinIO to start..."; sleep 15 ;nginx;java -jar /app/api/app.jar --spring.datasource.url="jdbc:mysql://${DB_HOST}:${DB_PORT:-3306}/${DB_NAME}?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true" --spring.datasource.username=${DB_USER} --spring.datasource.password=${DB_PASS} --spring.data.redis.host=${REDIS_HOST} --spring.data.redis.port=${REDIS_PORT:-6379} --spring.data.redis.password=${REDIS_PASS} --spring.data.redis.database=${REDIS_DB:-0} --sa-token.is-concurrent=${SA_TOKEN_IS_CONCURRENT:-false} --apiUrl.loginUrl=https://${SERVER_API_HOST}/api/v1/auth/login/loginInSoftWare --sa-token.jwt-secret-key=${SA_TOKEN_JWT_SECRET_KEY} --spring.kafka.bootstrap-servers=${KAFKA_BOOTSTRAP_SERVERS}
|