购买服务器
搭建服务器环境
- Ubuntu 16.04 64位
- Python 2.7.12
- Django 1.11
- Apache 2.4
1.更新apt-get:
$sudo apt-get update
2.安装Django
$sudo pip install django==1.11
3.安装DjangoRestFramework
$sudo pip install djangorestframework
4.安装Apache
$sudo apt-get install apache2
5.安装Mod_wsgi
$ sudo apt-get install libapache2-mod-wsgi
创建Django Project
apache默认网站目录是/var/www/
cd /var/www/
git clone https://github.com/JiachengZheng/LearnDjango
为Django安家,让Apache找到它
- 将Django工程放在/var/www/下;
- sudo vi /etc/apache2/sites-available/apiproject.conf 修改配置文件;
- sudo a2ensite apiproject.conf 配置文件生效;
- sudo service apache2 restart 重启Apache。
apiproject.conf内容如下
<VirtualHost *:80>
#默认监听80端口
ServerName ip
#servername 填自己的域名或者ip
#ServerAlias otherdomain.com
#ServerAdmin youremail@gmail.com
# 存放用户上传图片等文件的位置,注意去掉#号
Alias /media/ /var/www/apiproject/media/
# 静态文件(js/css/images)的存放位置
Alias /static/ /var/www/apiproject/static/
# 允许通过网络获取static的内容
<Directory /var/www/apiproject/static/>
Require all granted
</Directory>
# 最重要的!通过wsgi.py让Apache识别这是一个Django工程,别漏掉前边的 /
WSGIScriptAlias / /var/www/apiproject/apiproject/wsgi.py
# wsgi.py文件的父级目录,第一个ProjectName为Django工程目录,第二个ProjectName为Django自建的与工程同名的目录
<Directory /var/www/apiproject/apiproject/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
要让这个配置文件生效,你需要运行
sudo a2ensite apiproject.conf
加载配置文件并启动apache
service apache2 relaod
service apache2 restart
修改Django的wsgi.py文件
from os.path import join,dirname,abspath
import os
from os.path import join,dirname,abspath
PROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys
sys.path.insert(0,PROJECT_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "apiproject.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
测试API
浏览器输入http://39.106.199.118/article/list_by_category/?cid=2
遇到的问题
sqlite3.OperationalError: attempt to write a readonly database
解决:
chgrp www-data apiproject
chgrp www-data apiproject/db.sqlite3
chmod g+w apiproject
chmod g+w apiproject/db.sqlite3
- 使用域名或者外网ip的设置后无法访问
解决:在setting.py 中修改allow_host选项
ALLOW_HOST=['{$你的域名或者IP$}']