1
0
mirror of https://github.com/sendevia/website.git synced 2026-03-05 23:32:45 +08:00
Files
website/Dockerfile

98 lines
2.2 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 构建阶段
FROM node:trixie-slim AS builder
# 安装 git
RUN apt-get update && apt-get install -y git \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app
# 拉取项目代码
RUN git clone https://github.com/sendevia/website .
# 安装依赖并构建
RUN npm i && npm run docs:build
# 最终阶段
FROM nginx:stable-perl
# 生成自签名证书
RUN mkdir -p /etc/nginx/certs && \
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/certs/server.key \
-out /etc/nginx/certs/server.crt \
-subj "/C=CN/ST=State/L=City/O=Organization/CN=localhost"
# 从构建阶段复制 dist 产物到 workdir
COPY --from=builder /app/.vitepress/dist /app/dist
# 配置 nginx
# 删除默认配置
RUN rm -f /etc/nginx/conf.d/default.conf
# 创建自定义 nginx 配置
RUN cat > /etc/nginx/conf.d/vitepress.conf <<'EOF'
# 日志配置
error_log /var/log/nginx/error.log warn;
# HTTP 重定向到 HTTPS
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
access_log off;
return 301 https://$host$request_uri;
}
# HTTPS 服务器配置
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
access_log off;
# SSL 证书配置
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
# SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 设置根目录指向构建产物
root /app/dist;
# VitePress SPA 路由配置
location / {
try_files $uri $uri/ /index.html;
expires 30d;
add_header Cache-Control "public, immutable";
}
# 静态资源缓存配置
location ~* \.(js|css|woff2|png|jpg|jpeg|gif|svg|ico)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
# 禁用缓存 HTML 文件
location ~* \.html$ {
expires off;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
}
EOF
# 验证 nginx 配置
RUN nginx -t
# 暴露端口80 HTTP 和 443 HTTPS
EXPOSE 80 443
# 启动 nginx
CMD ["nginx", "-g", "daemon off;"]