阿里云下django+nginx+uwsgi+https项目部署记录

环境准备:

安装python3、nginx、uwsgi,数据库使用mysql。配置域名,下载证书文件

目录说明:项目放置在root/test路径下,项目名称为project

创建uwsgi.ini,放置于项目根目录root/test/project

1.uwsgi配置:

# uwsgi.ini 配置文件
[uwsgi]

http = 0.0.0.0:8080

# Django 项目执行端口号
socket = /root/test/uwsgi.sock

# Django 项目根目录
chdir = /root/test/paoject

# Django 的wsgi文件 :application
module = project/wsgi.py:application

# 允许主进程存在
master = true

# 最大进程数
processes = 5

# 日志文件,我这里设置为yes
daemonize=yes

# 当服务器退出时自动清理环境
vacuum = true

# wsgi所在目录,跟django项目的settings文件同级
wsgi-file = /root/test/project/project/wsgi.py
pidfile=/root/test/project/uwsgi.pid

 2.nginx配置(域名修改为自己的域名,证书文件填写绝对路劲):

user root;
#worker_processes auto;
#pid /run/nginx.pid;
#include /etc/nginx/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {
	# 新增
	upstream uwsgi {
		server 0.0.0.0:8080;
	}

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;

	# 新增
	server {
    	listen 80;
    	# 域名,.表示映射一级域名和二级域名,多个使用空格分隔
    	server_name 填写你的域名;
    	# http请求重定向至HTTPS
    	return 301 https://域名$request_uri;
	}
  	server {
    	listen 443 ssl;
    	# server_name 域名/ip
    	server_name 域名;
    	# 证书文件
    	ssl_certificate ***.pem;
    	# 秘钥文件
    	ssl_certificate_key ***.key;
    	# 协议
    	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

    	charset utf-8;
		# 日志文件位置
		access_log /var/log/nginx/nginx-uwsgi-https.log;
		location / {
			proxy_pass http://uwsgi;
		}
		location /static_file {
			alias /root/test/project/static_file;
		}
	}

}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
# 
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

3.Django中settings配置(我这里是将静态文件全部放进项目目录下的static_file文件中):

STATIC_URL = '/static_file/'

STATICFILES_DIRS = [
    (os.path.join(BASE_DIR, 'static')),
    os.path.join(BASE_DIR, 'templates'),
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static_file')

收集静态文件(项目路径下输入):python3 manage.py collectstatic

启动:

启动uwsgi(uwsgi.ini目录里启动):uwsgi --ini uwsgi.ini

启动nginx:sudo nginx

停止:killall -9 uwsgi

           killall -9 nginx

部署常用命令

检查nginx配置语法错误(正确返回OK):nginx -t   -c  nginx.conf

日志文件:nginx报错去var/log/nginx路径下查看,服务端报错查看uwsgi的日志我上面是配置在项目的yes文件中,具体错误具体分析

前后端不分离部分需要在前台页面导入静态文件

{% load static %}

4.其他设置:

允许所有域名:ALLOWED_HOSTS = ["*"]

时区设置(这里不设置会比正常晚6小时):TIME_ZONE = 'Asia/Shanghai'

数据库设置

# 引入数据库
import pymysql

# 注册数据库
pymysql.install_as_MySQLdb()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 数据库名,
        'user': user,
        'PASSWORD': pwd,  # 密码
        'HOST': 地址,  # IP
        'PORT': '3306',  # 端口,mysql是3306
    }
}


版权声明:本文为m0_55661258原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。