阿里云ECS(Ubuntu)+/nginx+uwsgi+django(虚拟环境pyenv+virtualenv)

一、参考网址 :

https://www.cnblogs.com/logicalsky/p/5685603.html
http://www.chenxm.cc/post/275.html?zhihu

二、具体安装步骤说明

1.pyenv安装和使用

1)安装

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm

git clone git://github.com/yyuu/pyenv.git ~/.pyenv

vim ~/.bashrc

    export PYENV_ROOT="$HOME/.pyenv"
    export PATH = "$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init -)"

source ~/.bashrc

2)使用(本次在虚拟环境中使用:python 3.6.4)

pyenv install -v 2.7.1

# 创建新的环境,位于 ~/.pyenv/versions/
$ pyenv virtualenv 2.7.1 env271

# 切换到新的环境
$ pyenv activate env271

# 退回到系统环境
$ pyenv deactivate

# 删除新创建的环境
$ rm -rf ~/.pyenv/versions/env271/

2.安装uwsgi

1)在虚拟环境下安装uwsgi

# 启动环境
pyenv activate your_env_name
pip3 install uwsgi

2)测试uwsgi,创建test.py(在django服务器目录中创建)

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello uwsgi!"]

3)uwsgi运行该文件

uwsgi --http-socket  :8088   --wsgi-file   test.py

4)打开浏览器,访问http://127.0.0.1:8000/,阿里云ecs服务器中使用elinks进行访问(apt install elinks)

3.安装django并使用

1)在虚拟环境中安装Django,先启动虚拟环境

pyenv activate your_env_name
2) 在虚拟环境webenv中使用一下命令安装:

#使用pip安装
pip3 install django

#新建一个 django project
django-admin.py startproject project_name

#cd project_name 然后执行下面的命令
python manage.py startapp app_name

#服务器启动
ython manage.py runserver

3)创建一个hello django的网页

(1)新建项目project

   在命令行运行"django-admin startproject website",会在当前目录下新建名为"website"的文件夹,website即为项目名,此时目录结构:

复制代码
1 website
2  |-- manage.py      #命令行管理接口
3  |--db.sqlite3
4  |-- mysite
5     ├── __init__.py   #表示这是一个软件包
6     ├── settings.py   #项目相关配置
7     ├── urls.py      #全局url配置
8     └── wsgi.py 
复制代码

(2)新建app

  命令行执行"python manage.py startapp blog",新建应用(网页),"website"下会新建一个名为"blog"的文件夹,"blog"的目录结构:

复制代码
1 blog/
2 ├── __init__.py
3 ├── admin.py
4 ├── models.py
5 ├── tests.py
6 ├── views.py
7 ├── apps.py
8 └── migrations
复制代码

(3)将blog加入website目录下的setting.py中的INSTALL_APPS,如下:

复制代码
 1 INSTALLED_APPS = (
 2     'django.contrib.admin',
 3     'django.contrib.auth',
 4     'django.contrib.contenttypes',
 5     'django.contrib.sessions',
 6     'django.contrib.messages',
 7     'django.contrib.staticfiles',
 8     'blog',    
 9 )
复制代码

   新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件)

(4)编辑视图(views),编辑blog目录下的views.py如下:(编写网页内容)

复制代码
1 #coding:utf8
2 
3 from django.shortcuts import render
4 from django.http import HttpResponse                  #记得导入该模块
5 
6 def index(request):
7     return HttpResponse("

hello Django!

") #网页输出"hello Django!"
复制代码

(5)编辑urls.py,编辑website目录下的urls.py如下:(定义网页的连接)

复制代码
 1 #coding:utf8
 2 
 3 from django.conf.urls import url
 4 from django.contrib import admin
 5 from blog import views as blog_views          #记住!先导入app中的views后使用
 6 
 7 urlpatterns = [
 8     url(r'^admin/', admin.site.urls),
 9     url(r'^$',blog_views.index,name=’index'), 
10 ]
复制代码

  可以看出, urls.py的链接是通过正则表达式匹配的。此处设置打开http://127.0.0.1:8000/会打开blog中的views的index设置的网页。

(6)切换至website目录下,开启Django自带的web服务器使用命令:python manage.py runserver , 默认使用8000端口,可在其后加端口号改变使用端口。用浏览器打开http://127.0.0.1:8000/,如图:

阿里云ECS(Ubuntu)+/nginx+uwsgi+django(虚拟环境pyenv+virtualenv)_第1张图片

4.安装nginx

1) nginx不需要在虚拟环境下装,在终端直接用命令安装

apt-get install nginx

2) nginx启动与关闭命令

 service nginx start     #启动
 service nginx stop     #关闭
 service nginx restart    #重启
 nginx -V      #查看nginx版本
 nginx -t      # 检查配置文件是否有语法错误

5.部署django+uwsgi+nginx

1) 在你的django项目文件夹下建立 web_uwsgi.ini 文件,具体的参数配置如下: 最重要的是配置 pythonpath,它指定django所在的位置,当时没有配置准确这一点,一直报错no moudle django,花了很长时间也不知道为什么,后来查了很多资料后,才知道配置pythonpath。主要的参数有注释。

[uwsgi]

socket  =127.0.0.1:8088 #ugsi  ip and port

chmod-socket =664

chdir = /root/myjango

wsgi-file = /root/myjango/myjango/wsgi.py

module = myjango.wsgi:application

master=true

vhost = true

no-site = true

pythonpath = /root/.pyenv/versions/env364/lib/python3.6/site-packages

enable-threads=true

processes = 1

threads = 2

pidfile = /tmp/lin.pid

vacuum = true

py-autoreload = 1

max-requests = 1000

注意: 修改django项目中settings.py文件:

DEBUG = True 
ALLOWED_HOSTS = ['127.0.0.1','公网ip地址','localhost']

2) 之前提到nginx.conf配置所包含的配置,那就可以在/etc/nginx/conf.d下建一个nginx.conf来关联uwsgi

vi /etc/nginx/conf.d/nginx.conf


server {
listen         80;
server_name    公网ip地址
charset UTF-8;
access_log      /var/log/nginx/myweb_access.log;
error_log       /var/log/nginx/myweb_error.log;

client_max_body_size 75M;

location / {
    include /etc/nginx/uwsgi_params;
    uwsgi_pass 127.0.0.1:8088;
    uwsgi_read_timeout 2;

}
location /static {
    expires 30d;
    autoindex on;
    add_header Cache-Control private;
    alias /root/myjango/myfirst_web/static;
 }
}

3)重启nginx服务 service nginx restart

4)# 激活虚拟环境

pyenv activate webenv 
# 在.ini文件的父目录下运行命令
uwsgi --ini web_uwsgi.ini 

5) 访问http://127.0.0.1:80, 便可以通过nginx访问到你的django项目的网站。

6) 在阿里云ECS服务器中,添加安全规则:入站和出站规则(添加(htpp(80))规则),之后在浏览器中访问:

 http://公网ip/index      

你可能感兴趣的:(Django)