【网站部署方案】Nginx部署React静态页面, uWSGI部署Django后端

1,230 阅读1分钟

服务器用的是阿里云,系统为ubuntu

阿里云-常用命令

ssh 用户名(默认为root)@公网IP
ssh root@xx.xxx.xxx.xx

服务器与本地的文件传输

  • Mac: FileZilla
  • Win: WinSCP
# Remove all BOM characters
:set nobomb

Nginx

常用命令

# Nginx的安装路径在/etc/nginx/

# 建立软链接
ln -s /etc/nginx/sites-available/xxx.conf /etc/nginx/nginx.conf

# 查看,启动和停止Nginx
service nginx status/start/stop/restart/reload # 只reload普通配置

# 开启Nginx后,默认端口为80
# 别忘了改掉默认端口 /etc/nginx/sites-available/default

配置文件

/etc/nginx/sites-available/xxxxx.conf

# the upstream component nginx needs to connect to
upstream django {
   #server unix:///var/www/WishList/backend/mysite.sock; # for a file socket
   #server 127.0.0.1:8000; # for a web port socket (we'll use this first)
   server django-back-end.com;
}

# configuration of the server
server {
    # ssl的监听端口
    listen    443; 
    root /etc/nginx/build; # 静态文件的路径
    server_name www.xxxxx.com; 
    index index.html index.htm;
    
    access_log /var/log/nginx/nginx-access.log;
    error_log /var/log/nginx/nginx-error.log;

    ### ssl 证书配置 ###
    ssl on;
    ssl_certificate   cert/xxxxx.pem;
    ssl_certificate_key  cert/xxxxx.key;
    ssl_session_timeout 5m;
    ssl_ciphers aaabbbccc;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ######

    location / {
	try_files $uri /index.html;
	
	### 跨域配置 ###
	add_header 'Access-Control-Allow-Origin' '*' always;
	add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
	if ($request_method ~* "(GET|POST)") {
	    add_header "Access-Control-Allow-Origin"  *;
	}
	if ($request_method = OPTIONS ) {
	    add_header "Access-Control-Allow-Origin"  *;
	    add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
	    add_header "Access-Control-Allow-Headers" "Authorization, Origin,
	    X-Requested-With, Content-Type, Accept";
	    return 200;
	}
	###

    # the domain name it will serve for
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # send all non-media requests to the Django server.
    location /api/* {
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }
}

server {
    # 网站的端口
    listen 80;
    server_name xxxxx.com;
    
    # 强行ssl加密
    rewrite ^(.*) https://www.mayyourwishescometrue.site/$1 permanent;
}

uWSGI

尝试部署Django到uWSGI, 外网可以访问 公网IP:port,但是部署在Nginx的静态页面无法访问Django后端,显示错误信息net:CONNECTIONREFUSED,推测是跨域问题

最后Django部署在了Heroku上

常用命令

# 占用8000端口的应用
lsof -i:8000

#测试uwsgi是否安装成功,注意开启阿里云安全组
uwsgi --http :8000 --wsgi-file test.py

# 测试
python3
import requests
requests.get('http://127.0.0.1:8000')

# 部署Django
uwsgi --ini uwsgi.ini

配置文件

配置文件所在路径

 /var/www/myProject/backend/uwsgi.ini

uwsgi.ini

[uwsgi]
chdir = /var/www/myProject/backend
wsgi-file = /var/www/myProject/backend/wsgi.py
# the virtualenv (full path)
home=/var/www/myProjectEnvironment
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
chmod-socket    = 666
socket          = /var/www/myProject/backend/mysite.sock
daemonize       = wsgi.log
pidfile         = uwsgi.pid
vacuum          = true
buffer-size=32768