django部署的大概步骤:
- 安装环境(Python,Nginx,MySQL,Django及项目依赖的Python包)
- 构建Python虚拟环境,将项目上传至虚拟环境
- 配置Nginx,配置uwsgi
服务器上Python环境配置
更新Ubuntu,以确保后面所需的包能正常安装
sudo apt-get update
我是Ubuntu18.04的服务器,系统自带Python3.6
但我希望使用Python3.8,输入以下命令安装高版本
sudo apt install python3.8
此时是3.6与3.8版本共存,需要指定Python3优先级
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2
这样Python3默认使用3.8版本了
但这样设置后,pip3使用出现以下错误
百度后输入两条命令重新安装后解决:
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
sudo python3 get-pip.py
构建虚拟环境
安装虚拟环境的包
pip3 install virtualenv
安装daphne(以后打算用上asgi实现ws通信,纯wsgi不需要安装这个)
pip3 install daphne
安装Nginx
sudo apt-get install nginx
安装好Nginx,就可以直接使用服务器ip外网访问
django项目迁移及虚拟环境创建
首先来到Nginx自动创建的网站目录:var/www
在该目录下创建虚拟环境
virtualenv datavis
启动虚拟环境
# 此时我们在var/www目录下
source datavis/bin/activate
虚拟环境成功启动是这样的
创建虚拟环境: $ virtualenv -p /usr/bin/python2.7 –-no-site-packages my_venv
启动虚拟环境: $ source my_venv/bin/activate
退出虚拟环境: $ deactivate
删除虚拟环境(原来就是直接删除对应的文件夹即可): $ rm –r my_venv
可以进入虚拟环境根目录操作
cd datavis
迁移django项目到该目录,需要使用ftp工具,比如filezila
可以用7z工具解压zip文件
7z x ***.zip
# 若提示7z未找到,需先安装
sudo apt install p7zip-full
解压完成,cd到项目目录,先试着运行项目python3 manage.py runserver
,系统提示没有django模块
安装django
pip install django # 我这里在虚拟环境pip默认是Python3的,所以pip与pip3是一样的
进入项目根目录,python3 manage.py runserver
运行,根据自己项目需求安装依赖,就可以运行起来
这里我们试一下外网是否可以访问
给服务器添加一条8000端口的规则,运行python3 manage.py runserver 0.0.0.0:8000
,任何IP都可以访问
服务器配置
现在只是通过ip:端口访问,下面我们来添加域名
切换到Nginx目录cd /etc/nginx
,配置nginx.conf文件
http {
// ====修改区====
server {
listen 80;
server_name www.***.cn ***.cn;
charset utf-8;
location /static {
alias /var/www/datavis/mysite/wareHouse/static;
}
location / {
uwsgi_pass localhost:8000;
include /etc/nginx/uwsgi_params;
}
}
// ========
...
}
以上是http的简易配置,下面贴出我后面安装证书的https配置
我将证书相关的.pem,.key放在了Nginx安装目录下的/cert文件夹
http {
# ====修改区====
server {
listen 80;
server_name www.***.com ***.com;
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
}
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name www.***.cn; #证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/***.pem;
ssl_certificate_key cert/***.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location /static {
alias /var/www/datavis/mysite/wareHouse/static;
}
location / {
uwsgi_pass localhost:8000;
include /etc/nginx/uwsgi_params;
}
}
# ========
...
}
Nginx修改配置后需重启
以下是百度的Linux下Nginx常用命令:
# 检查nginx.conf配置是否正确
sudo nginx -t
# 查看Nginx服务器的状态
sudo systemctl status nginx
# 停止Nginx
sudo systemctl stop nginx
# 启动Nginx
sudo systemctl start nginx
# Nginx重启
sudo systemctl reload nginx
安装uwsgi
pip install uwsgi
新建uwsgi的配置文件,我取名为datavis.ini,必须为ini后缀名
[uwsgi]
chdir=/var/www/datavis/mysite # 项目根目录,nanage.py所在文件
module=mysite.wsgi:application # 根目录下项目目录,指向wsgi.py
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log
socket=127.0.0.1:8000 # 与nginx.conf的uwsgi_pass字段对应
home=/var/www/datavis
理论上该配置文件可放在任意位置,我放在Nginx安装目录/etc/nginx
下
cd到Nginx安装目录测试uwsgi是否可行
可以使用
下一步需要配置Nginx与django项目的映射关系,在/etc/nginx
下新增uwsgi_params配置文件
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
启动uwsgi服务
uwsgi --ini datavis.ini
理论上就能正常访问了