前提:Django程序可以正常运行,注意服务器python版本和本地版本可能不一致,有可能不能正常运行Django程序。
安装过程
更新ubuntu的python
比如更新到3.6,先拉取新的仓库,再更新安装
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt update
sudo apt install python3.6
创建虚拟环境
安装虚拟环境命令
sudo pip install virtualenv
建立虚拟环境文件夹
mkdir vpython3.6
进入该文件夹
cd vpython3.6/
建立py3.6的虚拟环境,名称为biokg,注意在创建 virtualenv 时增加 --no-site-packages 选项的 virtualenv 就不会读取系统包
virtualenv -p /usr/bin/python3.6 biokg
激活该文件夹
source biokg/bin/activate
如果项目有很多包要装,可以写到一个文件里,如: requirements.txt中,使用如下安装命令,批量安装包。
pip install -r requirements.txt
安装ngnix
sudo apt-get install nginx
安装uwsgi
如果使用conda安装的,在3.6报错时,运行一下命令:
conda虚拟环境安装uwsig
conda install -c conda-forge uwsgi
有可能碰到 libiconv.so动态库找不到的问题,同样可以用conda安装
conda install -c conda-forge libiconv
如果使用本地的python3.6安装uwsgi出现问题,需要安装依赖:
sudo apt-get install python3.6 python3.6-dev
接着在安装uwsgi
pip install uwsgi
测试过程
ngnix测试
ubantu安装完Nginx后,文件结构大致为:
所有的配置文件都在 /etc/nginx下;
启动程序文件在 /usr/sbin/nginx下;
日志文件在 /var/log/nginx/下,分别是access.log和error.log;
并且在 /etc/init.d下创建了启动脚本nginx。
sudo /etc/init.d/nginx start # 启动
sudo /etc/init.d/nginx stop # 停止
sudo /etc/init.d/nginx restart # 重启
注意安装nginx后,需要服务器开放80端口,可以使用下面方法:
防火墙相关的设置:
#可以选择临时关闭防火墙
sudo service iptables stop
#或者开放一些需要的端口,比如 80
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
查看nginx的错误日志
vim /var/log/nginx/error.log
uwsgi测试
在Django项目下新建test.py文件,
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
#return ["Hello World"] # python2
return [b"Hello World"] # python3
然后执行shell命令,开启uwsgi:
uwsgi --http :8001 --plugin python --wsgi-file test.py
加上–plugin python是告诉uWSGI在使用python插件.
执行成功在服务器浏览器中打开:http://localhost:8001
或者在本地打开ip:8001
(你的服务器公网ip)显示Hello World说明uwsgi正常运行。
关闭 uwsgi
正常情况下使用Ctrl+c就能退出。但这使用日志时,uwsgi在后台运行,想要退出可以使用下面的命令,否则出现之前的进程还在后台。
killall -s INT uwsgi
配置过程
配置nginx文件
到nginx文件夹下,通过vim命令修改
cd /etc/nginx/sites-available
sudo vim default
使用cd命令进入到sites-available文件夹,文件夹下有一个default文件,使用vim打开它,找到default文件下的这段代码,如果没有就要添加上去:
server_name 192.168.1.121;#你的公网IP
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;
}
# 添加的
location /media {
alias /home/ubuntu/blog/media;
}
192.168.1.121替换成你自己服务器公网IP地址;
static 那里也要替换成你自己Django项目的static路径;
media 同理换成你自己Django项目的media路径,这是媒体文件的文件夹;
注意:location后面是有空格的,必须要有!alias后面也是有空格的;include上面那句话也是要注释掉的!
保存后重新开启ngnix
sudo service nginx restart
配置uwsgi
在博客项目的根目录下,也就是有manage.py文件的目录下,或者其他目录也行。新建一个demo_uwsgi.ini文件
vim demo_uwsgi.ini
写入一下代码:
[uwsgi]
chdir = /home/demo/project #chdir 是你的博客项目的根目录
module = project.wsgi:application
socket = 127.0.0.1:8000 #和你的nginx端口号一致
master = true
# maximum number of worker processes
processes = 4
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
#daemonize = /home/demo/project/run.log #是你的日志文件目录
#disable-logging = true
然后保存。
项目启动
这部分看需求
创建数据库
python manage.py migrate
收集静态文件
python manage.py collectstatic
启动
uwsgi --ini demo_uwsgi.ini
上面这句话相当于本地启动Django所用的命令:
python manage.py runserver
下面你就能根据你的公网ip访问你的Django项目了。