真实环境部署我们的React到Nginx容器

简介: 真实环境部署我们的React到Nginx容器

正文


React 的项目配置以及生产环境部署的问题


1、项目的部署问题


首先是安装的环境:

其次是nginx的配置的问题:

背景:项目中使用了reactreact-router开发,在部署到nginx服务器时遇到了以下问题

History

history

url样例

特点

hash history

/#/user/profile

不需要服务器支持

browser history

/user/profile

react-router官方推荐,需要服务器支持(因为是SPA项目,url切换时需要服务器始终返回index.html


Nginx的配置问题:

以下介绍我们的BrowserHistory模式部署到nginx的基本配置

 

情形一:部署到我们nginx的根目录

访问路径 http://localhost:/

# nginx配置
location / {
    root   html;
    index  index.html;
    # url 切换时始终返回index.html
    try_files $uri /index.html;
}


情形二:部署到nginx的子目录

假设部署到/app目录下,则访问路径 http://localhost:/app/

# nginx配置
location /app {
    root   html;
    index  index.html;
    # url 切换时始终返回index.html
    try_files $uri /app/index.html;
}
# 图片样式缓存1年
location ~* /app.*\.(js|css|png|jpg)$
{
    access_log off;
    expires    365d;
}
# html/xml/json 文件不缓存
location ~* /app.*\.(?:manifest|appcache|html?|xml|json)$
{
    expires    -1;
}
// package.json
"homepage": "http://localhost/app",
// react-router路由配置
// 注意指定basename
<BrowserRouter basename='/app'>
</BrowserRouter>


开启nginx的缓存

# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 1;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";

 

整体的配置:

# nginx.conf整体配置大概如下:
http {
    # 开启gzip
    gzip on;
    # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
    gzip_min_length 1k;
    # gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
    gzip_comp_level 1;
    # 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
    # 是否在http header中添加Vary: Accept-Encoding,建议开启
    gzip_vary on;
    # 禁用IE 6 gzip
    gzip_disable "MSIE [1-6]\.";
    server {
        location /app {
            root   html;
            index  index.html;
            # url 切换时始终返回index.html
            try_files $uri /app/index.html;
        }
        # 图片样式缓存1年
        location ~* /app.*\.(js|css|png|jpg)$
        {
            access_log off;
            expires    365d;
        }
        # html/xml/json 文件不缓存
        location ~* /app.*\.(?:manifest|appcache|html?|xml|json)$
        {
            expires    -1;
        }
    }


在服务器上安装部署的环境,并且利用Jenkins实现自动化的部署


第一步,安装部署的基本环境:

安装nodejs以及cnpm并且配置我们的淘宝镜像,并且配置我们的系统变量$PATH:

npm install -g cnpm --registry=https://registry.npm.taobao.org

第一步,在jenkins上面新创建项目,配置我们的git的地址,将代码下拉到我们的服务器的制定文件夹下,之后,我们编写自动化部署的脚本。测试脚本以及配置Jenkins执行我们的脚本。

至此,我们的自动化部署完毕,比较简单的。下面是运行的脚本:

cd /var/lib/jenkins/workspace/test-app
rm -rf /var/lib/jenkins/workspace/test-app/build/*
npm run build

上面的脚本是编译我们的代码的,最后将nginx的root指向我们编译的目标文件即可!

相关文章
|
5月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
924 108
|
3月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
1433 4
|
5月前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
3月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
184 5
|
3月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
667 4
|
5月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
415 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
4月前
|
Kubernetes 应用服务中间件 Nacos
Kubernetes环境下Nginx代理Nacos服务请求故障诊断
以上方法不仅适用于排除特定环境下出现故障情况,也适合作为一般性指南帮助运维人员快速准确地找出并解决问题。实际操作中还需根据现场实际情况灵活运用这些技巧,并结合自身经验进行判断和处理。
142 12
|
4月前
|
存储 Kubernetes 持续交付
为什么Docker容器化改变了开发与部署?
为什么Docker容器化改变了开发与部署?