node.js - 我应该使用 Nginx 在生产中为 React 提供服务吗?
问题描述
我正在 Kubernetes 上使用 React 和 Node.js 构建一个 SPA。对于前端和后端服务,我有单独的服务和入口。我见过人们也使用 Nginx 来为 React 构建提供服务,但我发现下面的做法效果很好。
# Dockerfile.production
FROM node:8.7.0-alpine
RUN mkdir -p /usr/app/client
WORKDIR /usr/app/client
COPY package*.json /usr/app/client/
RUN npm install
RUN npm install -g serve
COPY . /usr/app/client
EXPOSE 3000
RUN npm run build
CMD ["serve", "-s", "build", "-l", "3000" ]
或者,我可以使用 Nginx 为构建提供服务,如下所示。这似乎是“正确的方法”,但我不确定使用 serve npm 包有什么优势,尽管它对我来说确实感觉很hacky。似乎可以使用 Nginx 配置为应用程序服务的所有内容也可以在 Ingress 中完成,对吧?
server {
server_name example.com;
...
location ~ / {
root /var/www/example.com/static;
try_files $uri /index.html;
}
}
解决方案
服务很好。Nginx 可能会使用少几个字节的 RAM 来提供服务,但这将通过携带所有您不使用的额外功能来抵消。我们为我们的许多 K8s SPA 使用了类似的 Serve 设置,它在满负载时每个 Pod 使用 60 到 100MB 的 RAM。对于其他一些应用程序,我们有一个缩减版的 Caddy,它最大大约 70MB,而不是稍微少一点,但可能有更好的方法来担心 30MB 的 RAM :)
推荐阅读
- r - 在 PostgreSQL 中使用 r sf::st_write 到非公共模式
- mysql - 具有当前月份条件的 Null 条件
- ruby-on-rails - 对象或属性必须存在 - Rails 5.2.2
- postgresql - 如何在单个表中满足每个条件只选择一个结果(无连接)?
- google-cloud-dataflow - 数据流:动态工作再平衡与融合
- c# - 使用 razor 服务 Angular 以实现基于 cookie 的身份验证
- ios - 在 UITextView 上设置 UITextContentType.emailAddress 不起作用
- react-admin - 反应管理员
将图像上传到 rails api - python - 为什么 numpy ndarray 比简单循环的列表慢得多?
- ldap - 使用 ldapmodify 命令更改 LDIF 文件中的密码