django上线部署

安装
1.在线上服务器安装虚拟开发环境(pyenv/virtualenv)
1.1安装pip
pip python专⽤的包管理⼯具

sudo apt install python3-pip

使⽤pip安装包

pip install 包名
pip install 包名 -i 下载源(https://pypi.douban.com/simple)

使⽤pip卸载包 pip unistall 包名
pip freeze 列出我们⾃⼰安装的所有依赖包
pip list 列出我们所有的依赖包
1.2安装virtualenv

sudo apt install virtualenv -y

1.3安装virtualenvwrapper管理虚拟环境

pip3 install virtualenvwrapper

1.3.1创建虚拟环境目录

mkdir ~/.virtualenvs

1.3.2修改虚拟环境变量

#打开⽂件
vi ~/.bashrc
#在⽂件内容末尾添加如下内容:
export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的⽬录
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python36/bin/python 
 #指定python解释器
source /usr/local/bin/virtualenvwrapper.sh #执⾏virtualenvwrapper
安装脚本
#让配置⽂件其⽣效
source ~/.bashrc

1.3.3基本使⽤virtualenvwrapper

#创建⼀个虚拟环境:
$ mkvirtualenv my_django115
这会在 ~/.virtualenvs 中创建 my_django115 ⽂件夹。
#激活虚拟环境my_django115
$ workon my_django115
再创建⼀个新的虚拟环境
$ mkvirtualenv my_django2
virtualenvwrapper 提供环境名字的tab补全功能。
#退出虚拟环境
deactivate
#删除虚拟环境,需要先退出虚拟环境
rmvirtualenv my_django115

如果没有装virtualenvwrapper
用一下命令操作虚拟环境

virtualenv 虚拟环境名
# 指定python解释器
virtualenv -p python解释器路径 虚拟环境名
激活
source 虚拟环境名/bin/activate
退出
deactivate

2.安装nginx

sudo service apache2 stop #停⽌apache
sudo apt-get install nginx-full -y

#虚拟站点配置
#1.⾸先切换⽬录到sites-available⽬录
cd /etc/nginx/sites-available
#2.复制虚拟站点配置模板,⽣成⾃⼰虚拟站点的配置⽂件
sudo cp default www.blog.com.conf

#3 编辑模板
server {
 listen 80; #监听端⼝
 #站点的根⽬录
 root /var/www/html/www.blog.com;
 # Add index.php to the list if you are using PHP
 #⽹站默认⾸⻚打开顺序
 index index.html index.htm;
 
 #站点名称,可以有多个名称,中间⽤空格隔开
 server_name www.blog.com blog.com;
}

 重启nginx服务
sudo service nginx restart (start/stop)
或者
sudo /etc/init.d/nginx restart

3.安装mysql

sudo apt-get install -y mysql-server mysql-client

4.创建虚拟环境
看第1点创建
5.在虚拟开发环境中安装依赖库

#在开发的虚拟环境中执⾏
pip freeze > requirement.txt
#将requirement.txt上传到服务器
#在新建的虚拟环境中执⾏
pip freeze -r requirement.txt

6.安装uwsgi
pip install uwsgi
7.上传项目
8.在项⽬中根⽬录下创建uconfig.ini的⽂件 代码在下⽅(项目同名目录下)

[uwsgi]
# 外部访问地址,可以指定多种协议,现在⽤http便于调试,之后⽤socket #
socket = 0.0.0.0:8000 # uwsgi的监听端⼝
# 指向项⽬根⽬录
chdir = /var/www/online
# wsgi.py所在位置
wsgi-file = day09/wsgi.py
module = day09.wsgi
# 虚拟开发环境位置(python所在⽬录)
virtualenv = /home/python/.pyenv/versions/env3.6.6
#plugins = python
master = true
# 处理器数
processes = 1
# 线程数
threads = 2

9.更改nginx的default⽂件代码在下⽅
详细见上方nginx安装

server {
 listen 80;
 server_name www.blog.com;
 location / {
 # 转发端⼝必须和uconfig.ini中socket端⼝⼀致
 uwsgi_pass 127.0.0.1:8000;
 include uwsgi_params;
 }
 # 静态资源所在位置
 location /static {
 alias /var/www/online/static/;
 } }

10.重启nginx
见nginx安装
11.回到虚拟环境⽬录启动 uwsgi

#启动uwsgi
uwsgi uconfig
#关闭uwsgi
uwsgi —stop uconfig.ini
#如果关闭不掉杀死进程

可能存在问题(出现问题再操作,没问题不需要以下操作)
django admin没有样式 admin管理⻚⾯找不到base.css,dashboard.css⽂件
解决办法:
在settings⽂件中设置STATIC_ROOT⽬录,该⽬录不能在STATICFILES_DIRS中. 然后,执⾏命令

python manage.py collectstatic

执⾏后,django会将STATICFILES_DIRS下的所有⽂件以及admin所需要⽤到的
js,css,image⽂件全都放到STATIC_ROOT⽬录下.
例如, 像下⾯这样写:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'collectstatic')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

简单描述⼀下这⼏个变量的意思 STATIC_URL: 当访问什么样的⽹址时, 按照访问静态⽂件的⽅式去查找⽂件. STATICFILES_DIRS: 当访问静态⽂件是, 会在每个app中 的static⽬录中查找, 然后再从STATICFILES_DIRS设置的路径列表中逐⼀查找.
STATIC_ROOT: 当执⾏ python manage.py collectstatic 时, 收集的静态⽂件放在该⽬录下.
此刻项⽬下就会多出⼀个collectstatic的静态资源⽂件⽬录
nginx配置更改为

server{
 listen 80; # 服务器监听端⼝
 server_name 192.168.1.132; # 这⾥写你的域名或者公⽹IP
 location / {
 uwsgi_pass 127.0.0.1:8000; # 转发端⼝,需要和uwsgi
配置当中的监听端⼝⼀致
 include uwsgi_params; # 导⼊uwsgi配置
 }
 location /static{
 alias /home/xlg/项⽬⽬录名/collectstatic/;
 } }

403没有权限的问题
解决办法
找到nginx.conf⽂件的位置
将第⼀⾏的代码进⾏修改

#user www-data;
user root;
或者将 www-data更改权限

你可能感兴趣的:(django)