千家信息网

尝试Docker+Nginx部署单页应用方法

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,开发到部署,亲力亲为当我们开发一个单页面应用时,执行完构建后npm run build会生成一个 index.html 在 dist 目录,那怎么把这个 index.html 部署到服务器上呢?目录结
千家信息网最后更新 2026年11月01日尝试Docker+Nginx部署单页应用方法

开发到部署,亲力亲为

当我们开发一个单页面应用时,执行完构建后

npm run build

会生成一个 index.html 在 dist 目录,那怎么把这个 index.html 部署到服务器上呢?

目录结构

  • dist/:前端构建完的静态文件
  • docker/:镜像所需的配置文件

配置 Nginx

挑几点配置讲讲,先是 Gzip 压缩资源,以节省带宽和提高浏览器加载速度

虽然 Webpack 已经支持在构建时就生成 .gz 压缩包,但也可以通过 Nginx 来启用
gzip on;gzip_disable "msie6";# 0-9 等级,级别越高,压缩包越小,但对服务器性能要求也高gzip_comp_level 9;gzip_min_length 100;# Gzip 不支持压缩图片,我们只需要压缩前端资源gzip_types text/css application/javascript;

再就是服务端口的配置,将 API 反向代理到后端服务

server { listen 8080; server_name www.frontend.com; root /usr/share/nginx/html/; location / { index index.html index.htm; try_files $uri $uri/ /index.html; # 禁止缓存 HTML,以保证引用最新的 CSS 和 JS 资源 expires -1; } location /api/v1 { proxy_pass http://backend.com; }}

完整配置长这样

worker_processes 1;events { worker_connections 1024; }http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_comp_level 9; gzip_min_length 100; gzip_types text/css application/javascript; server { listen 8080; server_name www.frontend.com; root /usr/share/nginx/html/; location / {  index index.html index.htm;  try_files $uri $uri/ /index.html;  expires -1; } location /api/v1 {  proxy_pass http://backend.com; } }}

配置 Docker

这里简单一点,基于基础镜像,拷贝我们写好的 nginx.conf 和 index.html 到镜像内

FROM nginx:alpineCOPY nginx.conf /etc/nginx/nginx.confCOPY dist /usr/share/nginx/html

编写 Makefile

完成了上面的准备,就可以编写命令来执行镜像的打包了

先给镜像取个名称和端口号

APP_NAME = spa_nginx_dockerPORT = 8080

通过 build 来打包镜像

build: cp docker/Dockerfile . cp docker/nginx.conf . docker build -t $(APP_NAME) . rm Dockerfile rm nginx.conf

通过 deploy 来启动镜像

deploy: docker run -d -it -p=$(PORT):$(PORT) --name="$(APP_NAME)" $(APP_NAME)

最后还有个 stop 来停止和清理镜像

stop: docker stop $(APP_NAME) docker rm $(APP_NAME) docker rmi $(APP_NAME)

完整配置长这样

APP_NAME = spa_nginx_dockerPORT = 8080build: cp docker/Dockerfile . cp docker/nginx.conf . docker build -t $(APP_NAME) . rm Dockerfile rm nginx.confdeploy: docker run -d -it -p=$(PORT):$(PORT) --name="$(APP_NAME)" $(APP_NAME)stop: docker stop $(APP_NAME) docker rm $(APP_NAME) docker rmi $(APP_NAME)

完整命令长这样

# 静态资源构建npm run build# 镜像打包make build# 停止并删除旧镜像(首次可忽略)make stop# 镜像启动make deploy

总结

目前的部署方法相对简单,后续会加入基础镜像和镜像仓库的使用,先去前面探探路

镜像 配置 资源 服务 前端 命令 基础 文件 服务器 目录 静态 开发 支持 生成 方法 应用 亲力亲为 仓库 口号 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 互联网科技工作委员会毛军 科技金融是不是互联网金融 互联网与科技发展 互联网科技革命 互联网金融科技委员会 深圳卡尔迅互联网科技有限公司怎么样 互联网科技寓意 宝灵互联网科技有限公司 互联网科技公司实习生 赶超互联网科技 微信多开 玉溪互联网科技怎么选 呼和浩特新华互联网科技学院 互联网新科技动漫ppt素材 洛阳共同富裕互联网科技有限公司 南博望互联网科技有限公司 山东有哪些互联网科技公司 上海创道互联网络科技有限公司 银川新华互联网科技学校原画 互联网科技大会大佬 互联网科技工作委员会主任 互联网科技卖菜 互联网 科技 鑫亿盛互联网科技 云电互联网科技 壕鑫互联网络科技 福州新华互联网科技学校 知乎 彤创互联网科技有限公司 中国互联网十大科技股排名 10位科技互联网大佬
0