1、创建项目
django-admin startproject mysite
2、启动服务器
python manage.py runserver
python manage.py runserver
3、创建app应用
django-admin startapp blog
4、按照如下教程进行
https://www.zmrenwu.com/post/20/
5、安装软件
新建用户
# 在 root 用户下运行这条命令创建一个新用户,yangxg 是用户名
# 因为我叫杨学光,所以我取的用户名是 yangxg
# 选择一个你喜欢的用户名,不一定非得和我的相同
root@localhost:~# useradd -m -s /bin/bash yangxg
# 把新创建的用户加入超级权限组
root@localhost:~# usermod -a -G sudo yangxg
# 为新用户设置密码
# 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可
root@localhost:~# passwd yangxg
# 切换到创建的新用户
root@localhost:~# su - yangxg
# 切换成功,@符号前面已经是新用户名而不是 root 了
yangxg@localhost:~$
更新系统
yangxg@localhost:~$ sudo apt-get update
yangxg@localhost:~$ sudo apt-get upgrade
安装软件
yangxg@localhost:~$ sudo apt-get install nginx
yangxg@localhost:~$ sudo apt-get install git python3 python3-pip
yangxg@localhost:~$ sudo pip3 install virtualenv
启动nginx
yangxg@localhost:~$ sudo service nginx start
输入网址可看见nginx欢迎页面
部署代码
部署前的项目配置
在blogproject/settings.py文件下添加
STATIC_URL = '/static/'
# 加入下面的配置
# STATIC_ROOT = os.path.join(BASE_DIR, 'static')STATIC_ROOT = '/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/'
DEBUG = False
ALLOWED_HOSTS = ['your ip', '.zmrenwu.com']
激活本地的虚拟环境(如果你使用了虚拟环境的话),并进入项目的根目录,运行 pip freeze > requirements.txt
命令:
(blogproject_env) C:\Users\yangxg\Workspace\blogproject>
pip freeze > requirements.txt
数据库文件不要上传
yangxg@localhost:~$ mkdir -p ~/sites/demo.zmrenwu.com
创建虚拟环境
yangxg@localhost:~$ cd ~/sites/demo.zmrenwu.com
yangxg@localhost:~/sites/demo.zmrenwu.com$ virtualenv --python=python3 env
检查虚拟环境是否创建成功
yangxg@localhost:~/sites/demo.zmrenwu.com$ ls
env
从代码仓库把代码拉到项目中
yangxg@localhost:~/sites/demo.zmrenwu.com$ git clone https://github.com/zmrenwu/django-blog-tutorial.git
检查是否拉取成功
yangxg@localhost:~/sites/demo.zmrenwu.com$ ls
django-blog-tutorial env
安装项目依赖
激活虚拟环境,再进入到项目根目录,即 requirements.txt 所在的目录,安装项目的全部依赖:
yangxg@localhost:~/sites/demo.zmrenwu.com$ source env/bin/activate
(env) yangxg@localhost:~/sites/demo.zmrenwu.com$ cd django-blog-tutorial/
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ pip install -r requirements.txt
虚拟环境下继续运行 python manage.py collectstatic
命令收集静态文件到 static 目录下:
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py collectstatic
虚拟环境下继续运行 python manage.py migrate
命令创建数据库文件:
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py migrate
虚拟环境下继续运行 python manage.py createsuperuser
命令创建一个超级用户,方便我们进入 Django 管理后台。
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py createsuperuser
先在服务器的 /etc/nginx/sites-available/ 目录下新建一个配置文件
/etc/nginx/sites-available/test.yourname.com
server {
charset utf-8;
listen 80;
server_name test.yourname.com;
location /static {
alias /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/test.yourname.com.socket;
}
}
sudo ln -s /etc/nginx/sites-available/test.yourname.com /etc/nginx/sites-enabled/test.yourname.com
在虚拟环境下,安装 Gunicorn:
(env) yangxg@localhost:~/sites/test.yourname.com/django-blog-tutorial$ pip install gunicorn
用 Gunicorn 启动服务器进程:
(env) yangxg@localhost:~/sites/test.yourname.com/django-blog-tutorial$ gunicorn --bind unix:/tmp/test.yourname.com.socket blogproject.wsgi:application
6、遇到的问题
6.1、按照教程操作完之后,页面仍旧显示nginx欢迎页面
(1)进入虚拟环境:
cd ~/sites/test.yourname.com
source env/bin/activate
(2)先重启nginx:
sudo nginx -s reload
(3)再启动gunicorn
cd blog
gunicorn --bind unix:/tmp/test.yourname.com.socket blogproject.wsgi:application
6.2、 admin的css、js文件失效
参考文章:https://www.cnblogs.com/alan-babyblog/p/7101163.html
(1)、找到django静态文件的目录
在env虚拟环境下,命令如下
python 进入python
import django
django.__file__
得到django路径
比如:'/usr/local/lib/python2.7/dist-packages/django/__init__.pyc'
那么需要的路径即为:/
usr
/
local
/
lib
/
python2.
7
/
dist
-
packages
/
django
/
contrib
/
admin
/
static
/
(2)、修改settings.py
#STATIC_ROOT
=
'/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/'
#STATIC_URL
=
'/static/'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
(3)、将admin的static文件里的内容copy到blog里的static
cp -r /usr/lib/python2.6/site-packages/django/contrib/admin/static/* ~/sites/test.yourname.com/blog/blog/static/
(4)、执行命令
python manage.py collectstatic
6.3、__init__() missing 1 required positional argument: 'on_delete'
# hbook = models.ForeignKey(BookInfo)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag)
author = models.ForeignKey(User, on_delete=models.CASCADE)
6.4、重置migrate
删掉migration(除了_init_.py)里的文件
python manage.py makemigrations
python manage.py migrate