标签:否则 ams 端口 read this 独立 sts etc tor
本节将介绍如何部署Django,基于下面的架构:
首先,你得有一台ubuntu机器,真实物理机和虚拟机都行,如果是阿里云ECS主机并且带有独立公网IP,那是最好不过。
我这里和大家一样,什么都没有,只有虚拟机,囧。
至于如何安装ubutun、Python3和Django 1.11,不是本节的内容,请自行解决。下面我假定你已将安装好了这三者。
我不太推荐Apache2,偏爱Nginx。
Ubuntu默认源里面的Nginx版本比较旧,需要先添加一个Nginx的源,再通过apt-get安装Nginx。
sudo add-apt-repository ppa:nginx/stable apt-get update apt-get install nginx
一般这个都没问题,nginx是居家必备软件,各家Linux下都可以顺利安装。
使用service --status-all
命令查看一下,安装好后,服务应该会自动启动:
...... [ + ] network-manager [ + ] networking [ + ] nginx [ + ] ondemand [ - ] plymouth [ - ] plymouth-log ......
如果能看到带+号的nginx,表明一切ok!
然后,通过ifconfig,查看一下你的ubuntu虚拟机的ip地址,我这里是192.168.1.121
。使用同一局域网内的主机,通过浏览器访问192.168.1.121
,如果能看到下面的界面,说明nginx服务正常。
Django的主要部署平台就是WSGI,它也是Python的标准web服务器和应用。
uWSGI是实现了WSGI的工具,我们需要下载和安装它。
uWSGI的官网地址:https://uwsgi-docs.readthedocs.io/en/latest/index.html
所以不建议使用:pip3 install uwsgi(不一定是最新版)
不建议使用:pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz(也不一定是最新版)
而是建议到https://uwsgi-docs.readthedocs.io/en/latest/Download.html页面,下载Stable/LTS版本的源文件。
为什么要最新版?因为现在的官方教程和相关技术文章全是以新版编写的,很多参数名,用法有较大改变。用旧版,你可能连跑都跑不起来。
我这里下载的是uwsgi-2.0.14.tar.gz
,可能等到你看到此文时,已经不是最新的了。
在ubuntu中,解压源码,然后指定安装位置,将uwsgi安装好:
# 解压文件 tar -zxvf uwsgi # 进入解压目录 sudo python3 setup.py install
安装完毕后,尝试运行一下uwsgi:
[feixue@feixue-VirtualBox: ~/soft]$ uwsgi *** Starting uWSGI 2.0.14 (64bit) on [Wed Dec 20 22:41:46 2017] *** compiled with version: 5.4.0 20160609 on 20 December 2016 12:48:11 os: Linux-4.4.0-101-generic #124-Ubuntu SMP Fri Nov 10 18:29:59 UTC 2017 nodename: feixue-VirtualBox machine: x86_64 clock source: unix detected number of CPU cores: 2 current working directory: /home/feixue/soft detected binary path: /usr/local/bin/uwsgi !!! no internal routing support, rebuild with pcre support !!! *** WARNING: you are running uWSGI without its master process manager *** your processes number limit is 15648 your memory page size is 4096 bytes detected max file descriptor number: 1024 lock engine: pthread robust mutexes thunder lock: disabled (you can enable it with --thunder-lock) The -s/--socket option is missing and stdin is not a socket.
虽然运行出错了,但至少表明你的uwsgi在系统可执行命令路径中。
如果出现找不到命令的提示,那么建议创建一个指向/usr/local/bin
目录的软链接。这些都是Linux管理员的业务领域,不展开介绍了。
需要提醒大家注意的是权限的问题,该sudo的时候要sudo。还有读写权限,看看当前用户是否具备相关文件的读写能力。很多时候部署失败,都不是Python和Django层面的原因,而是你的Linux管理业务还不够熟练。
软件安装好了后,首先是要拷贝项目代码。
因为我这里是在Windows下使用Pycharm编写的代码,不是在ubuntu虚拟机内编写的代码,所以需要将项目文件先整体拷贝到虚拟机中。
这个过程,也是八仙过海,各有奇招,好了,项目文件拷贝过去了。
在项目的根目录下,也就是有manage.py的目录下,新建一个uwsgi.ini
文件。文件名可以随便,但后缀必须是ini。
在里面写入下面的配置内容:
[uwsgi]
chdir = /home/feixue/python/www/for_test //项目根目录
module = for_test.wsgi:application //指定wsgi模块
socket = 127.0.0.1:8000 //对本机8000端口提供服务
master = true //主进程
#vhost = true //多站模式
#no-site = true //多站模式时不设置入口模块和文件
#workers = 2 //子进程数
#reload-mercy = 10
#vacuum = true //退出、重启时清理文件
#max-requests = 1000
#limit-as = 512
#buffer-size = 30000
#pidfile = /var/run/uwsgi9090.pid //pid文件,用于下脚本启动、停止该进程
daemonize = /home/feixue/python/www/for_test/run.log // 日志文件
disable-logging = true //不记录正常信息,只记录错误信息
详细说明:
uwsgi设置好了,就配置一下Nginx。
备份/etc/nginx/sites-available
文件夹内的default文件,然后编辑它:
##
# You should look at the following URL‘s in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80;
listen [::]:80;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don‘t use them in a production server!
#
# include snippets/snakeoil.conf;
# root /var/www/html;
# Add index.php to the list if you are using PHP
# index index.html index.htm index.nginx-debian.html;
server_name 192.168.1.121;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /home/feixue/python/www/for_test/static;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#}
# deny access to .htaccess files, if Apache‘s document root
# concurs with nginx‘s one
#
#location ~ /\.ht {
# deny all;
#}