整体安装流程 安装 ubuntu ,安装 pip, 安装 uwsgi, 安装 django安装 nginx
整个请求逻辑
用户访问 -> nginx -> uwsgi -> django
其中静态文件 直接由 nginx 处理
- 安装 Ubuntu
下载的时候, 看到 mini 版本只有几十兆, 就选了 mini 版本 链接在此
安装的时候才发现, 好多都是要后面下载的, 不过无所谓了, 安装上就行了 - 安装 ssh server
ssh server 可以让你在其他电脑上通过支持的命令行工具(如 mac 下的 终端, windows 下的 putty) 远程连接, 这样就不用一直守在机器旁边了.
我自己安装的时候, 漏选了这一项, 导致安装好的 Ubuntu 没有ssh 服务器, 需要自己安装, 安装方法如下, 如果你已经有了就跳过 (可以在其他电脑上运行 ssh root@<服务器 ip> 来看, 如果提示连接拒绝, 就表示没有安装)
sudo apt-get update
sudo apt-get install openssh-server
service ssh start
- 安装 pip
pip 是一个 python 下的包管理工具, 可以很方便的安装各类 python 的第三方工具, 类似 iOS 开发的 Cocoapod
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
- 设置 pip 镜像
由于默认服务器是在国外, 访问速度实在感人, 还好有各类国内的镜像可以加速访问. 这里使用清华大学的镜像服务
cd ~
mkdir .pip
cd .pip
cat -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple" > pip.config
- 安装 uwsgi
- 安装 python-dev
安装 uwsgi 过程中, 需要编译, 要先安装 python 开发板
sudo apt-get install python3-dev
- 安装 gcc
安装 uwsgi 需要一个 C 编译器, 所以还需要安装一个 gcc
sudo apt-get install gcc
- 安装 uwsgi
一切准备妥当就可以安装 uwsgi 了
sudo pip3 install uwsgi
可以使用 uwsgi --version
来检查是否正确安装了
- 测试 uwsgi
创建一个 test.py 文件测试
内容如下
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
在这个文件的目录内运行命令
uwsgi --http :8000 --wsgi-file test.py
打开浏览器输入服务器的 ip, 端口 8000 如果能看到 hello, world 就表安装 uwsgi 成功了
- 安装 django
sudo pip install django
- 创建一个 django 项目用来测试
django-admin startproject Hello
现在的目录结构应该是这样的
Hello/
manage.py
Hello/
__init__.py
settings.py
urls.py
wsgi.py
- 编辑 setting.py
如果你安装的是1.10 以上的 django(可以运行命令django-admin --version
来查看版本), 并且你需要在另外一台电脑上查看页面, 你就一定要设置ALLOWED_HOSTS
找到 settting.py 中的
...
DEBUG = True
ALLOWED_HOSTS = []
...
在 ALLOWED_HOSTS 中填入服务器的 ip 地址.
如
...
DEBUG = True
ALLOWED_HOSTS = ["192.168.1.5"]
...
- 使用 django 内置的服务器测试一下
到项目的根目录中运行命令
python3 manage.py runserver
这个命令默认运行服务器在 8000 端口, 而且只会监听来自本机(服务器)的请求
如果需要在服务器之外的电脑中浏览, 需改成这个命令
python3 manage.py runserver 0.0.0.0:8000
在浏览器中输入服务器的地址加上端口, 就可以看到测试页面了, 不过这个是用来开发的测试服务器, 如果需要实际部署项目, 就不要用这个服务器了.
- 使用 uwsgi 测试 Django 项目
在项目根目录(有 manage.py 的目录) 运行
uwsgi --http :8000 --module Hello.wsgi
打开浏览器输入服务器的 ip, 端口 8000 如果能看到django 的测试页面就表示 django 和 uwsgi 工作正常
- 安装 nginx
sudo apt-get install nginx
安装完毕,会自动开启 nginx 服务, 默认端口80, 打开浏览器, 输入服务地址, 可以看到 nginx 的测试页面
- 配置 nginx
首先要将 uwsgi_params 文件拷贝到项目文件夹下. 拷贝过来后这个文件不用修改.
原始的 uwsgi_params 文件在/etc/nginx/目录下
新创建一个 nginx 配置文件, Hello_nginx.conf
内容如下
upstream django {
server 127.0.0.1:8001;
}
server {
# the port your site will be served on
listen 8000; # 端口号
# the domain name it will serve for
server_name 10.0.9.176; # 服务器 ip 或是域名
charset utf-8;
# Django media
location /media {
alias /home/yww/djangotest/Hello/media; # 媒体文件所在文件夹
}
location /static {
alias /home/yww/djangotest/Hello/static; # 静态文件所在文件夹
}
# max upload size
client_max_body_size 75M; # adjust to taste
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /home/yww/djangotest/Hello/uwsgi_params; #uwsgi_params 路径
}
}
这个配置文件告诉 nginx 从文件系统中拉起 media 和 static 文件作为服务,同时响应 django 的 request
在 /etc/nginx/sites-enabled 目录下创建本文件的连接, 使 nginx能够使用它:
sudo ln -s /home/yww/djangotest/Hello/Hello_nginx.conf /etc/nginx/sites-enabled/
- 部署静态文件
在 django 的 setting 文件中,添加下面一行内容:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
然后运行
python3 manage.py collectstatic
- 测试 nginx 静态文件和媒体文件服务
首先重启nginx服务:
service nginx restart
测试一下静态文件是否可以读取
访问 http://<服务器 ip>:8000/static/admin/css/base.css 看看是否正常显示这个文件
然后检查media文件是否已经正常
在项目根目录下新建一个 media 文件夹, 放入任意一张图片, 名字改为test.jpg
访问 http://<服务器 ip>:8000/media/test.jpg 看看是否正常显示图片
- 测试 nginx + uwsgi
找到 第 6 步 创建的test.py, 放到 Django 项目根目录下测试
运行命令
uwsgi --socket :8001 --wsgi-file test.py
访问 http://<服务器 ip>:8000/
如果能够显示 hello, world 就行了
- 用 UNIX socket 取代 TCP port
对 Hello_nginx.conf 做如下修改
upstream django {
#server 127.0.0.1:8001; # 去掉这行
server unix:///home/yww/djangotest/Hello/Hello.sock; # 新建这行
}
...
然后重启服务器, 并运行 uWSGI, 代码如下
service nginx restart
uwsgi --socket Hello.sock --wsgi-file test.py --chmod-socket=662
- 测试 nginx + uwsgi + django
只需要启动 uwsgi 就可以了, nginx 不需要重启
uwsgi --socket Hello.sock --module Hello.wsgi --chmod-socket=662
访问 http://<服务器 ip>:8000/
如果能够显示 django 的测试页面就大功告成了
- 使用 ini 文件运行 uwsgi
上面的这个命令太长了, 也很容易写错, 我们可以写一个文件来方便运行 uwsgi
在项目根目录下创建一个 Hello_uwsgi.ini
# Hello_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /home/yww/djangotest/Hello
# Django's wsgi file
module = Hello.wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 10
# the socket (use the full path to be safe)
socket = /home/yww/djangotest/Hello/Hello.sock
chmod-socket = 662
# clear environment on exit
vacuum = true
运行 uwsgi 的时候就只需要运行这个命令就行了
uwsgi --ini Hello_uwsgi.ini