环境:

  • ubuntu
  • python3

1. 安装软件包

sudo apt-get install mysql-server python3 python-dev python3-pip virtualenv uwsgi uwsgi-plugin-python3

2. 配置Virtualenv及Python环境

首先,这个Virtualenv并不是必须的,他的作用就是创建一个“隔离”的Python运行环境。

我想大家都碰到过在一台电脑上同时开发多个应用程序,如果应用A需要Python 2.7,而应用B需要Python 2.6怎么办?有时还会碰到不只是Python版本的不一致,比如Django等软件包版本。

这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。

2.1. 新建独立运行环境,命名为pyblog_env

virtualenv pyblog_env --python=python3.5 --no-site-packages

--python指定Python版本 --no-site-packages不复制系统已安装Python包

2.2. 进入pyblog_env环境

source pyblog_env/bin/activate

这时会发现命令提示符前面多了一个(pyblog_env),变成(pyblog_env)user@hostname:~$ 这种形式,这表示我们已经进入到刚刚创建的虚拟环境。 然后再通过pip安装包,都会安装到这个环境下,不会对系统环境造成影响。 退出虚拟环境命令:deactivate

2.3. 安装项目依赖

pip3 install django PyMySQL mysqlclient Pillow
#如果有需求文件,比如requirements.txt,则执行
pip3 install -r requirements.txt

3. Django项目配置

3.4. 上传Django项目,我的项目在GitHub。

git clone https://github.com/zytx/pyblog.git

3.5. 配置项目的数据库信息

3.6. 数据迁移

python manage.py makemigrations
python manage.py migrate

3.7. 建立超级用户

python manage.py createsuperuser

3.8. 收集静态文件

python manage.py collectstatic

3.9. 测试项目

运行开发服务器看项目能否正常运行

python manage.py runserver 0.0.0.0:8000

访问ip:8000看是否出错

4. uWSGI 配置[1]

退出刚才进入的虚拟环境,使用命令:deactivate

4.1. 运行测试

uwsgi --http :8000 --home /home/zytx/pyblog_env/ --chdir /home/zytx/pyblog_env/pyblog -w pyblog.wsgi

--home Virtualenv的虚拟环境目录 --chdir Django项目目录

如果访问IP:8000可以看到项目,就说明Python环境和uWSGI是没有问题的

4.2. 创建配置文件

# /etc/uwsgi/apps-enabled/pyblog.ini
[uwsgi]
base            = /home/zytx
# 项目根目录路径
chdir           = %(base)/pyblog_env/pyblog/
# Django的 wsgi 文件
module          = pyblog.wsgi
# virtualenv目录
home            = %(base)/pyblog_env/
plugin          = python35

processes       = 1
threads         = 2
vacuum          = true
disable-logging = true # 不记录请求信息的日志

日志:/var/log/uwsgi/app/pyblog.log

PID: /run/uwsgi/app/pyblog/pid

SOCKET: /run/uwsgi/app/pyblog/socket

4.3. 启动uWSGI

sudo service uwsgi start

5. Nginx 配置

5.1. 创建配置文件

sudo vi /etc/nginx/sites-available/pyblog

加入如下内容:

server {
    listen 80;
    server_name www.immrz.com;
    root /home/zytx/pyblog_env/pyblog/;

    	location /media/  {
    		#如果你的media目录不在root里,可以配置 alias /path/to/your/mysite/media;
    	}

    	location  /static/ {
    		#如果你的static目录不在root里,可以配置 alias /path/to/your/mysite/static;
    	}

    	location / {
    		uwsgi_pass  unix:///run/uwsgi/app/pyblog/socket;
    		include uwsgi_params;
    	}
}

软连接到sites-enabled以开启站点

sudo ln -s /etc/nginx/sites-available/pyblog /etc/nginx/sites-enabled/

5.2. 重新加载Nginx配置

sudo service nginx reload
  1. http://datahunter.org/uwsgi "uWSGI详细配置"