资讯专栏INFORMATION COLUMN

尝试 Docker + Nginx 部署单页应用

leiyi / 1735人阅读

摘要:开发到部署,亲力亲为当我们开发一个单页面应用时,执行完构建后会生成一个在目录,那怎么把这个部署到服务器上呢目录结构前端构建完的静态文件镜像所需的配置文件配置挑几点配置讲讲,先是压缩资源,以节省带宽和提高浏览器加载速度虽然已经支持在构建时就生

开发到部署,亲力亲为

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

</>复制代码

  1. npm run build

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

目录结构

dist/:前端构建完的静态文件

docker/:镜像所需的配置文件

配置 Nginx

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

</>复制代码

  1. 虽然 Webpack 已经支持在构建时就生成 .gz 压缩包,但也可以通过 Nginx 来启用

</>复制代码

  1. gzip on;
  2. gzip_disable "msie6";
  3. # 0-9 等级,级别越高,压缩包越小,但对服务器性能要求也高
  4. gzip_comp_level 9;
  5. gzip_min_length 100;
  6. # Gzip 不支持压缩图片,我们只需要压缩前端资源
  7. gzip_types text/css application/javascript;

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

</>复制代码

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

完整配置长这样

</>复制代码

  1. worker_processes 1;
  2. events { worker_connections 1024; }
  3. http {
  4. ##
  5. # Basic Settings
  6. ##
  7. sendfile on;
  8. tcp_nopush on;
  9. tcp_nodelay on;
  10. keepalive_timeout 65;
  11. types_hash_max_size 2048;
  12. include /etc/nginx/mime.types;
  13. default_type application/octet-stream;
  14. ##
  15. # Logging Settings
  16. ##
  17. access_log /var/log/nginx/access.log;
  18. error_log /var/log/nginx/error.log;
  19. ##
  20. # Gzip Settings
  21. ##
  22. gzip on;
  23. gzip_disable "msie6";
  24. gzip_comp_level 9;
  25. gzip_min_length 100;
  26. gzip_types text/css application/javascript;
  27. server {
  28. listen 8080;
  29. server_name www.frontend.com;
  30. root /usr/share/nginx/html/;
  31. location / {
  32. index index.html index.htm;
  33. try_files $uri $uri/ /index.html;
  34. expires -1;
  35. }
  36. location /api/v1 {
  37. proxy_pass http://backend.com;
  38. }
  39. }
  40. }
配置 Docker

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

</>复制代码

  1. FROM nginx:alpine
  2. COPY nginx.conf /etc/nginx/nginx.conf
  3. COPY dist /usr/share/nginx/html
编写 Makefile

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

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

</>复制代码

  1. APP_NAME = spa_nginx_docker
  2. PORT = 8080

通过 build 来打包镜像

</>复制代码

  1. build:
  2. cp docker/Dockerfile .
  3. cp docker/nginx.conf .
  4. docker build -t $(APP_NAME) .
  5. rm Dockerfile
  6. rm nginx.conf

通过 deploy 来启动镜像

</>复制代码

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

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

</>复制代码

  1. stop:
  2. docker stop $(APP_NAME)
  3. docker rm $(APP_NAME)
  4. docker rmi $(APP_NAME)

完整配置长这样

</>复制代码

  1. APP_NAME = spa_nginx_docker
  2. PORT = 8080
  3. build:
  4. cp docker/Dockerfile .
  5. cp docker/nginx.conf .
  6. docker build -t $(APP_NAME) .
  7. rm Dockerfile
  8. rm nginx.conf
  9. deploy:
  10. docker run -d -it -p=$(PORT):$(PORT) --name="$(APP_NAME)" $(APP_NAME)
  11. stop:
  12. docker stop $(APP_NAME)
  13. docker rm $(APP_NAME)
  14. docker rmi $(APP_NAME)

完整命令长这样

</>复制代码

  1. # 静态资源构建
  2. npm run build
  3. # 镜像打包
  4. make build
  5. # 停止并删除旧镜像(首次可忽略)
  6. make stop
  7. # 镜像启动
  8. make deploy
总结

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40341.html

相关文章

  • 尝试 Docker + Nginx 部署单页应用

    摘要:开发到部署,亲力亲为当我们开发一个单页面应用时,执行完构建后会生成一个在目录,那怎么把这个部署到服务器上呢目录结构前端构建完的静态文件镜像所需的配置文件配置挑几点配置讲讲,先是压缩资源,以节省带宽和提高浏览器加载速度虽然已经支持在构建时就生 开发到部署,亲力亲为 当我们开发一个单页面应用时,执行完构建后 npm run build 会生成一个 index.html 在 dist 目录,...

    sf190404 评论0 收藏0
  • 服务器从安装到部署全过程(二)

    摘要:上一篇文章中大概尝试安装的一些过程以及在配置中出现的问题还有一些解决方式,那么在本次过程尝试中,将进一步进行服务器的基础配置,以及前端应用部署经过上次已经安装至服务器中了,在这里面主要介绍一下部署相关所需要的配置,例如监听端口服务转发静态资 OK! 上一篇文章中大概尝试安装mysql、nginx、nodeJs、pm2 的一些过程以及在配置中出现的问题还有一些解决方式,那么在本次过程尝...

    Stardustsky 评论0 收藏0
  • 用vue从零开发和部署一款移动端pwa单页应用

    摘要:另外,单页应用因为数据前置到了前端,不利于搜索引擎的抓取。所以我们需要对自己的单页应用进行一些优化。 前言 最近秋招之余空出时间来按自己的兴趣动手做了一个项目,一个基于vue-cli3.0, vue,typescript的移动端pwa,现在趁热打铁,将这个项目从开发到部署整个过程记录下来,并将从这个项目中学习到的东西分享出来,如果大家有什么意见或补充也可以在评论区提出。先介绍一下这个项...

    Channe 评论0 收藏0

发表评论

0条评论

leiyi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<