个人技术博客地址:http://songmingyao.com/
环境:Ubuntu 16.04
Ubuntu 从零开始搭建Python开发环境
http://t.cn/RSuXlWl
Ubuntu 远程登陆服务器 ssh的安装和配置
http://t.cn/RSuXT2e
sudo apt-get update
sudo apt-get upgrade
update
是更新软件列表upgrade
是对比本地软件版本和线上最新软件版本,然后升级sudo pip2 install virtualenv
virtualenv
是虚拟环境安装包,创建虚拟环境可以更好地控制包的版本,包的版本不会因为2.1中的升级操作而升级,保证了项目的稳定性sudo pip2 install virtualenvwrapper
virtualenvwrapper
是virtualenv
的扩展管理包,可以将所有的虚拟环境整合在一个目录下使用前需要先进行以下配置
mkdir ~/.virtualenvs
.bashrc
sudo vi ~/.bashrc
.bashrc
的末尾增加以下内容export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh
source ~/.bashrc
mkvirtualenv django_blog
# 创建虚拟环境
mkvirtualenv
# 列出所有虚拟环境
workon TAB*2
# 进入虚拟环境
workon
# 退出虚拟环境
deactivate
# 删除虚拟环境
rmvirtualenv
pip install django==1.8.2
==
用来选择包的版本django-admin startproject project_test
cd project_test/
tree
python manage.py startapp app_test
File/Settings
,进入Project Interpreter
,选择虚拟环境内的python版本 /home/python/.virtualenvs/django_blog/bin/python2.7
static
和templates
文件夹static
文件夹下创建js
、css
、img
三个文件夹,以后用来存放静态文件templates
文件夹下创建app_test
(应用名)文件夹,以后用来存放模板文件urls.py
文件,以后用来存放应用的urls映射表/project_test
下的settings.pyINSTALLED_APPS
中将我们刚创建的应用加到最后面 TEMPLATES
里的DIRS
修改为'DIRS': [BASE_DIR, 'templates'],
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
/project_test
下的urls.py
,在urlpatterns内添加一行,意思是只要不是匹配到admin,都转到app_test
应用url(r'^', include('app_test.urls')),
/app_test
下的urls.py
,添加以下内容:#coding=utf-8
from django.conf.urls import url
from . import views # 从当前文件夹内引入views
urlpatterns = [
url(r'^$', views.index), # 匹配到根目录,就执行views文件内的index函数
]
/project_test
下的views.py
,添加刚才urls.py
内提到的index函数#coding=utf-8
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'app_test/index.html')
# 对请求值不做任何处理,直接跳转到模板目录下app_test文件夹下的index.html页面
/static/img
文件夹内templates/app_test
文件夹下,创建模板文件index.html
,内容如下:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Indextitle>
head>
<body>
<h1>下面有一张图片h1>
![](/static/img/test.jpg) // 寻找static(settings里面的STATIC_URL)文件夹下img文件夹里的test.jpg图片
body>
html>
python manage.py runserver
pip freeze > plist.txt
scp -r <YOUR_LOCAL_PROJECT_DIR> <SERVER_USERNAME>@<SERVER_IP>:<YOUR_SERVER_PROJECT_DIR>
pip install -r plist.txt
sudo apt-get install python-dev
sudo apt-get install gcc
pip install uwsgi
ALLOWED_HOSTS = ['*', ]
python manage.py runserver 0:8000
<YOUR SERVER IP>:8000
2017.06.08更新
* 如果不能正常显示页面,一般为以下两个原因:
1.请检查防火墙状态,保证8000端口是能够被访问的,代码如下( 更多防火墙设置可以参考我这篇文章http://t.cn/RSuX8Qj )
# 检查防火墙状态
sudo ufw status
# 可以临时关闭防火墙
sudo ufw disable
# 或者保持防火墙开启,允许8000端口连接
sudo ufw allow 8000
2.请检查服务器安全组规则,如阿里云服务器,可以在进入管理控制台后,按以下步骤设置( 如要了解更多服务器安全组规则设置,请参见阿里云官方文档http://t.cn/RST7Sgz )
3.重启服务,再次在本地计算机浏览器中查看
DEBUG = False
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return ["Hello World"] # python2
# return [b"Hello World"] # python3
uwsgi --http :8000 --wsgi-file test.py
127.0.0.1:8000
web client <-> uWSGI <-> Python
my_uwsgi.ini
,并写入以下内容[uwsgi]
# 使用nginx连接时使用
# socket = 0:8001
# 直接做web服务器使用
http = 0:8080
# 项目目录
chdir = /home/python/Desktop/project_test
# 项目中wsgi.py文件的目录
wsgi-file = /home/python/Desktop/project_test/project_test/wsgi.py
# 主进程
master = true
# 多进程&多线程
processes = 6
threads = 2
# .sock文件目录需与Nginx文件内的配置相同
# socket = /home/python/Desktop/project_test/my_sock.sock
# chmod-socket = 666
# 以守护进程的方式启动
vacuum = true
# 存储pid进程
pidfile=uwsgi.pid
# 存储log日志
daemonize=uwsgi.log
uwsgi --ini my_uwsgi.ini
[uWSGI] getting INI configuration from my_uwsgi.ini
<YOUR_SERVER_IP>:8080
web client <-> uWSGI <-> Django
uwsgi --stop uwsgi.pid
sudo apt-get install nginx
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.
web client <-> the web server(Nginx)
/etc/nginx/
目录下的uwsgi_params
复制到项目文件夹,对此文件不做任何改动cp /etc/nginx/uwsgi_params .
my_nginx.conf
,并写入以下内容upstream django {
server 127.0.0.1:8001;
# server unix://home/python/Desktop/project_test/my_sock.sock;
}
server {
listen 8000; # 端口号
server_name 127.0.0.1; # 服务器 ip 或是域名
charset utf-8; # 字符集
# 最大上传限制
# client_max_body_size 75M;
location /media {
alias /home/python/Desktop/project_test/media_common; # 媒体文件所在文件夹
}
location /static {
alias /home/python/Desktop/project_test/static_common; # 静态文件所在文件夹
}
# 将所有非媒体请求转到Django服务器上
location / {
uwsgi_pass django; # 最上方已定义
# 将所有参数都转到uwsgi下
include /home/python/Desktop/project_test/uwsgi_params; # uwsgi_params的路径
}
}
这个配置文件表示将静态文件和媒体文件由Nginx处理,而其它的请求转入uWSGI处理
与Nginx配置目录建立软链接
sudo ln -s /home/python/Desktop/project_test/my_nginx.conf /etc/nginx/sites-enabled/
sudo mkdir static_common
sudo mkdir media_common
STATIC_ROOT = os.path.join(BASE_DIR, 'static_common')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_common')
python manage.py collectstatic
提示输入选项时选yes即可
重启Nginx服务
sudo /etc/init.d/nginx restart
uwsgi --socket :8001 --wsgi-file test.py
,看是否能正常显示’Hello World’my_nginx.conf
,最终版如下:upstream django {
# server 127.0.0.1:8001;
server unix:///home/python/Desktop/project_test/my_sock.sock;
}
server {
listen 8000; # 端口号
server_name songmingyao.com; # 服务器 ip 或是域名
charset utf-8; # 字符集
# 最大上传限制
# client_max_body_size 75M;
location /media {
alias /home/python/Desktop/project_test/media_common; # 媒体文件所在文件夹
}
location /static {
alias /home/python/Desktop/project_test/static_common; # 静态文件所在文件夹
}
# 将所有非媒体请求转到Django服务器上
location / {
uwsgi_pass django; # 最上方已定义
# 将所有参数都转到uwsgi下
include /home/python/Desktop/project_test/uwsgi_params; # uwsgi_params的路径
}
}
my_uwsgi.ini
,最终版如下[uwsgi]
# 使用nginx连接时使用
# socket = 0:8001
# 直接做web服务器使用
# http = 0:8080
# 项目目录
chdir = /home/python/Desktop/project_test
# 项目中wsgi.py文件的目录
wsgi-file = /home/python/Desktop/project_test/project_test/wsgi.py
# 主进程
master = true
# 多进程&多线程
processes = 6
threads = 2
# .sock文件目录需与Nginx文件内的配置相同
socket = /home/python/Desktop/project_test/my_sock.sock
chmod-socket = 666
# 以守护进程的方式启动
vacuum = true
# 存储pid进程
pidfile=uwsgi.pid
# 存储log日志
daemonize=uwsgi.log
sudo /etc/init.d/nginx restart
uwsgi --stop uwsgi.pid
uwsgi --ini my_uwsgi.ini
web client <-> web server(nginx) <-> the socket <-> uwsgi <-> Django
/etc/rc.local
,添加以下内容到exit 0
之前/usr/local/bin/uwsgi --ini /home/python/Desktop/project_test/my_uwsgi.ini
个人技术博客地址:http://songmingyao.com/