Nginx+uWSGI+Django+阿里云ECS环境配置笔记

前言

阿里云上注册了一个账号,可以免费使用一个月阿里云ECS服务器,于是试了一下,也踩了几个坑,做个笔记供以后查阅吧。主机镜像为debian

1.1. 用ssh链接到主机

首先通过阿里云的控制台查看到主机的ip地址
主机IP

我这里的IP是 120.79.210.25,在控制台输入

ssh root@120.79.210.25

这里由于我已经连接过,重置了硬盘,所以连接失败,删除.ssh目录下的文件就可以重新连接了!执行以下命令:

cd .ssh
rm -rf *

这里填yes


ssh连接成功.png

这样就成功的连接到了主机,就可以开始下面的步骤了。

2. 安装并测试nginx

2.1. 安装nginx
apt-get update
apt-get install nginx

安装好了提示错误!先忽略,执行命令修改文件。

vim /etc/nginx/sites-enabled/default

将原文件中的

listen 80 defaul_server;
listen [::]:80 default_server;

改为:

listen 80;
# listen [::]:80 default_server;  

提示:按i进入编辑模式,编辑完后按ESC键,再输入“:”,输入wq保存并退出。后面还需要修改这个文件,可以一次改好,但是为了方便测试,就一步一步来吧。

2.2. 启动nginx
/etc/init.d/nginx restart
修改后nginx启动成功.png

然后在浏览器中输入IP地址(120.79.210.25)可以看到下面页面就表示nginx成功了!


测试nginx成功.png

3. 安装pip和python虚拟环境

3.1. 安装pip
apt-get install python3-pip
3.2. 安装python虚拟环境并激活
cd /var/www 
pip3 install virtualenv  
virtualenv -p /usr/bin/python3 venv 

其中venv是虚拟环境名称,可以随便取。


创建虚拟环境后目录结构.png

激活虚拟环境如下:

source /var/www/venv/bin/activate 
激活虚拟环境.png

注意图中的 (venv) root@website:/var/www,后续的操作都在虚拟环境中,如果中途退出再次连接,请再次激活。

4. 安装Django并测试

4.1 安装django,新建一个website的项目,项目中新建一个blog的App
pip3 install django
安装django.png

新建一个webstie的工程

django-admin startproject website
django startproject website 后目录结构.png

新建一个 blog app

cd website
python manage.py startapp blog
4.2 测试Django
cd website
python manage.py runserver 0.0.0.0:8000

在浏览器中输入 120.79.210.25:8000,再次出现错误:

  • 网页无法访问:
    解决办法:阿里云服务器控制台-本实例安全组-快速创建规则(右上角)-自定义端口:8000/8000,授权对象:0.0.0.0/0


    本地安全组.png

    添加端口.png
  • 出现下图(Invalid HTTP_HOST header: '120.79.210.25:8000'. You may need to add '120.79.210.25' to ALLOWED_HOSTS.)错误:


    allowed hosts 错误.png

    解决办法:ctrl+c停止服务器后,找到并修改settings.py文件。

cd /var/www/website/website
vim settings.py

找到ALLOWED_HOSTS = [] 修改为 ALLOWED_HOSTS = ['*'] 保存退出。再次运行服务器,刷新浏览器可以看到django界面就成功了。再次Ctrl+C退出服务。


django:8000 oK.png
4.3 做点简单的测试
4.3.1 在blog文件夹下新建static,templates文件夹。
  • 建立static文件夹,编写style.css文件
cd /var/www/website/blog
mkdir static
cd static
vim style.css

style.css内容如下:

h1{
    font-size:35px;
}
  • 编写template文件夹,编写 index.html文件.
cd /var/www/website/blog
mkdir templates
cd templates
vim index.html
编写index.html.png
  • 业务逻辑
vim /var/www/website/website/urls.py

添加如下代码:

def index(request):
        return render(request, "index.html")
  • 路由
vim /var/www/website/website/urls.py
编写url.png
  • 注册APP
vim /var/www/website/website/settings.py

找到INSTALLED_APPS添加‘blog’。再次运行django服务器。

cd /var/www/website
python manage.py runserver 0.0.0.0:8000

在浏览器中分别输入:120.79.210.25:8000 120.79.210.25/blog查看测试结果


127.79.210.25:8000

120.79.210.25/blog
  • 在来看看后台有没有问题
    Ctrl+C退出服务。
python manage.py migrate
django migrate.png

创建管理员账户

python manage.py createsuperuser  

再次启动内置服务器,浏览器输入120.79.210.25:8000/admin 输入刚才创建的用户名密码,登录.


admin:8000.png

成功了Ctrl+C退出服务。
OK!现在nginx和Django已经安装好了,需要安装uwsgi来把他们连接起来,这里掉坑了。。。。。。。

5. 安装uwsgi

5.1 安装
pip3 install uwsgi

测试uwsgi:

cd /var/www/website
uwsgi --http :8000 --module website.wsgi

在浏览器中输入120.79.210.25/blog 和 120.79.210.25/admin 页面显示成功,但是没有加css载静态文件。


admin页面.png
blog的index.html页面.png
5.2 编辑uwsgi.ini 放在www目录下
vim /var/www/uwsgi.ini

内容为:

[uwsgi]
socket = :8001
processes = 4
threads = 2
master = true
chdir = /var/www/website
module = website.wsgi
home = /var/www/venv
vacuum = true

socket 必须和后面的nginx文件中的设置一样。nchdir是项目目录,module就是和项目同名的wsgi文件,home是虚拟环境目录。

5.3 编辑nignx文件
vim /etc/nginx/sites-enabled/default

最后是这个样子,我删掉了其中的注释

upstream django{
    server 127.0.0.1:8001;
}
server{
    listen 80;

    charset utf-8;
    server_name 120.79.210.25;
    client_max_body_size 10M;
    
    location / {
        uwsgi_pass django;
        include /etc/nginx/uwsgi_params;
    }

    location /static {
        alias /var/www/website/static/;
    }
}

重新启动nginx:

 /etc/init.d/nginx restart

启动uwsgi:

 cd /var/www
 uwsgi --ini uwsgi.ini

在浏览器中直接输入ip地址,访问80端口,看看是不是已经联通了


80端口.png
80端口blog.png
80端口的admin.png

可以看到,可以通过80端口访问了,ctrl+c 结束服务。

5.4 最后一步,搞定静态文件

在根目录新建static文件夹,然后让Django取收集静态文件到这个文件夹。

cd /var/www/website
mkdir static

编辑settings.py:

vim /var/www/website/website/settings.py

添加如下代码:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

保存退出,收集静态文件:

cd /var/www/website
python manage.py collectstatic

再次启动ngnix 和 uwsgi 服务

/etc/init.d/nginx restart
cd /var/www
uwsgi --ini uwsgi.ini
重启nginx和uwsgi.png

启动成功
再次在浏览器中浏览


admin加载静态文件成功.png

为了明显一点,我重新修改了style.css文件,font-size加大了点,再次用命令收集一下静态文件,


index加载成功.png

OK 到此也就算配置通了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容