配置用于React + NGINX + uWSGI + Django的部署的设置
首先
当我在一台EC2上同时运行一个React前端和基于Django的后端实现的应用程序时,由于时间被设置所消耗,所以我将其记录在工作备忘录中。
顺便提一下,由于Django在开发服务器上运行,所以将其配置为使用uWSGI来运行。
将WSGI服务器安装起来是一个好的理由,具体请参考以下。
避免在生产环境中使用Django的开发服务器,这就是我们讨论的内容。
前提 tí) – assumption, precondition
-
- Reactのフロントエンド、Djangoのバックエンドを実装し、EC2上に配置
-
- npm、nginxをEC2にインストール
- ローカルや別々のEC2にnginx+ReactとDjangoを単純に配置して動作する状態
参考: 用Django 3在AWS EC2上部署开发React/Next.js应用(包括Nginx, gunicorn和PostgreSQL)的详细说明,即使是在秒速下也能轻松实现。
应用程序的结构
首先,将位于不同服务器上的各个组件保持原样并排列。
Web浏览器 <–> nginx <–> React应用程序(端口:3000)<–> uWSGI <–> Django应用程序(端口:8000)
安装并验证uWSGI的运行
$ pip install uwsgi
如果在Django应用程序的配置中有(Django应用程序文件夹)/config/wsgi.py文件,那么就不需要进行特殊设置。
在进行操作验证等时,参考了翻译过的uWSGI教程的Django + uWSGI + nginx (uWSGI教程的翻译)。
文档的配置设置
回应
在Django中,访问的URL应指定为EC2的公共地址。(在本地主机localhost和127.0.0.1上无法正常连接)
axios.get(`http://(EC2インスタンスのパブリックIP):8000/api/… `)
// ↑port:8000のDjangoのAPIにアクセス
nginx 可以进行语言转换。
在/etc/nginx/conf.d目录下创建一个.conf文件。
只需配置将代理发送到port:3000。即使没有配置Django作为后端,也能正常运行。
server {
listen 80;
listen [::]:80;
server_name (EC2のパブリックアドレス);
location / {
# プロキシの設定
proxy_set_header Host $http_host;
# proxy_pass http://127.0.0.1:3000; ←こちらでもOK
proxy_pass http://(EC2のパブリックアドレス):3000;
}
}
请确认在/etc/nginx/nginx.conf文件中存在以下描述。这样,nginx在启动时将会加载/etc/nginx/conf.d/的配置。
http {
…
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
在处理多个网站时,关于/etc/nginx/sites-enabled/*的描述在nginx中需要将每个网站的配置保存到sites-enabled/中(本次未使用)。
关于设置的更多信息,请参考以下内容。
总结关于nginx的设置部分。
只需要一种选项
请在settings.py的”CORS_ORIGIN_WHITELIST”中指定EC2的公共地址。(在localhost或127.0.0.1上无法正常工作)请同时注册具有端口:3000的地址和没有端口的地址。
CORS_ORIGIN_WHITELIST = [
'http://(EC2のパブリックアドレス):3000',
'http://(EC2のパブリックアドレス)',
]
打开应用程序
启动Django应用程序(uWSGI)
进入Django应用的主文件夹,指定wsgi.py文件并启动uWSGI。
$ cd (Djangoアプリフォルダ)
$ uwsgi --http :8000 --module config.wsgi
↑(Djangoアプリフォルダ)/config/wsgi.pyを指定している
启动React和Nginx。
$ cd (Reactアプリフォルダ)
$ npm start
$ sudo systemctl start nginx
最后
这次我们将前端和后端分开部署,但下一步计划是在Django端配置和运行React。
其他参考网站
用Python Django + React框架开发
使用React+Nginx+Django Rest Framework进行部署
使用uWSGI来运行Django应用程序的基础配置