Docker Nginx部署单页应用

 2023-12-24  阅读 3  评论 0

摘要:当我们开发一个单页面应用时,执行完构建后 npm run build 会生成一个 index.html 在 dist 目录,那怎么把这个 index.html 部署到主机上呢? 目录结构 dist/:前端构建完的静态文件 /:镜像所需的配置文件 配置 Nginx 挑几点配置讲讲,先是 Gzip 压缩资源,以节省带宽和提高浏

Docker Nginx部署单页应用

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

npm run build

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

目录结构

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

配置 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:alpine    COPY nginx.conf /etc/nginx/nginx.conf  COPY dist /usr/share/nginx/html

编写 Makefile

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

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

APP_NAME = spa_nginx_docker  PORT = 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_docker  PORT = 8080    build:   cp docker/Dockerfile .   cp docker/nginx.conf .   docker build -t $(APP_NAME) .   rm Dockerfile   rm nginx.conf    deploy:   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

总结

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

提示:现在腾讯云新人点击注册然后实名认证后,可以点此一键领取2860元代金券,然后点此进入腾讯云活动页面参加优惠力度非常大的腾讯云3年和5年时长服务器活动,一次性买多年,免得续费贵,这样就可以获得最大的优惠折扣,省钱。

版权声明:xxxxxxxxx;

原文链接:https://lecms.nxtedu.cn/yunzhuji/130970.html

发表评论:

验证码

管理员

  • 内容1196554
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:admin@qq.com
注册登录
注册帐号
登录帐号

Copyright © 2022 LECMS Inc. 保留所有权利。 Powered by LECMS 3.0.3

页面耗时0.0120秒, 内存占用355.66 KB, 访问数据库18次

  • 我要关灯
    我要开灯
  • 客户电话
    lecms

    工作时间:8:00-18:00

    客服电话

    电子邮件

    admin@qq.com

  • 官方微信

    扫码二维码

    获取最新动态

  • 返回顶部