用Django全栈开发——29. 部署之阿里云CentOS+Nginx+uWsgi+Django

大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。这一节,全是干货!全是干货!建议收藏保存!!因为我们超级详细的讲解怎样部署我们的网站到服务器上。

Peekpa.com的官方地址:http://peekpa.com

皮爷的每一篇文章,都配置相对应的代码。这篇文章没有代码。哈哈哈哈哈

title.jpeg

上一节我们已经成功购买了阿里云服务器,并且服务器系统是CentOS 7.7 64位系统。

这一节,我们就用二十一步,来把我们的Django项目,通过使用Nginx + uWsgi + Supervisor部署到线上服务区。

部署步骤繁琐麻烦,大家一定要跟紧每一步,这篇文章是网上最全的部署文章,而且是一步一步的给大家展示如何部署。所以,请认真学习。

1/21 登录服务器

上一篇文章我们购买了服务器,公网IP是39.104.203.202:

001.png

所以,我们通过SSH来登录到服务器,Mac OS和Linux用户,直接用系统自带的终端就可以;windows用户,可以使用putty来登录:

$ ssh root@39.104.203.202

登录成功显示的是这样:

002.png

2/21 安装Git

由于新的CentOS 上面是没有git的,所以,我们通过下面命令来安装Git。安装Git的目的是为了从Github上下载我们的代码。

$ sudo yum install -y git

安装成功之后是这个样子:

003.png

3/21 下载源码

安装好Git之后,我们就要从Github上下载我们的PeekpaCom项目。

PeekpaCom项目地址是,欢迎大家点星星:https://github.com/SwyftG/PeekpaCom

我们通过以下命令来下载源码:

$ git clone https://github.com/SwyftG/PeekpaCom.git

下载完成之后是这样:

004.png

4/21 安装Python

我们项目是使用Python 3运行的,但是系统里面自带的Python版本是2.7.5

005.png

所以我们使用以下命令来安装Python 3

# 安装Python
$ sudo yum install -y python3

# 检测Python版本
$ python3 -V

可以看到,安装完成之后,我们再检测以下Python 3的版本,是 3.6.8

006.png

5/21 安装虚拟环境

我们在第一课的时候就介绍过,整个项目我们是使用的Python虚拟环境开发的,所以,我们为了维持一致,需要在服务器上也安装虚拟环境。 使用以下命令一条一条的输入:

# 更新pip
$ sudo pip3 install --upgrade pip
007.png
# 安装virtualenv
$ sudo pip3 install virtualenv
008.png
# 先安装pbr,再安装virtualenwrapper
$ sudo pip3 install pbr
$ sudo pip3 install virtualenvwrapper
009.png

6/21 设置virtualenv参数

及时安装完virtualenv,我们还不能使用,需要设置一下参数,通过命令进入bashrc文件:

$ sudo vi ~/.bashrc 

进去之后,将光标移动到文件的最后,再按"i"键,进入vi的插入模式,将以下内容复制黏贴到文件的最后:

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh

这个时候按Esc,再按,输入wq!,再按回车,退出vi。

接着使用下列命令让bashrc文件生效:

$ source ~/.bashrc 
010.png

7/21 安装依赖

安装依赖


yum install mysql-devel gcc gcc-devel python36-devel python-devel

011.png

8/21 创建虚拟环境

接着通过以下命令创建虚拟环境:

#创建虚拟环境peekpa
$ mkvirtualenv peekpa

#切换到虚拟环境
$ workon peekpa
012.png

注意到左侧有(peekpa),就说明当前的工作环境是在虚拟环境peekpa里面。

9/21 安装工程的依赖

接着我们安装工程的依赖,在虚拟环境中,需要进入PeekpaCom文件目录下,安装依赖:

$ cd PeekpaCom/
$ pip install -r requirement.txt 

接着我们推出虚拟环境:

$ deactivate
013.png

10/21 安装MySQL

在系统环境下,我们要安装MySQL 8.0。请务必遵循以下命令,一条一条执行:

# 1> 设置rpm文件
$ sudo rpm -Uvh https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm

# 2> 设置repo
$ sudo sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/mysql-community.repo

# 3> 安装MySQL
$ sudo yum --enablerepo=mysql80-community install mysql-community-server
014.png
# 4> 启动MySQL服务
$ sudo service mysqld start

# 5> 获取初始密码
$ sudo grep "A temporary password" /var/log/mysqld.log
015.png

这个初始密码会显示出来,然后我们开始初始化MySQL

# 6> 修改初始密码
$ sudo mysql_secure_installation
016.png

这里面需要设置root密码,把上面系统给的初始密码输入,然后设置一个自己系统的复杂密码,并且一步一步的完成配置(基本都是Y),最后提示成功。

017.png

接着重启MySQL服务,在登录进去:

# 7> 重启MySQL
$ sudo service mysqld restart

# 8> 登录
$ sudo mysql -u root -p
018.png

我们接下来要看一下数据库的内容,并且创建一个我们PeekpaCom/Peekpa/settings.py文件里DATABASES里面对应的数据库。因为这个变量里面我们的数据库名称是peekpa_db1,所以,我们就要创建一个名为peekpa_db1的数据库

# 9> 显示数据库
> show databases;

# 10> 创建peekpa_db1数据库
> CREATE DATABASE peekpa_db1;

# 11> 显示数据库
> show databases;
019.png

接着,我们要根据以下命令修改MySQL的配置:

# 12> 切换到mysql
> use mysql;

# 13> 显示root信息
> select user,plugin from user where user='root';

# 14> 修改root密码为刚才你设置的密码,这里就是'yourpasswordxxxxxx'对应是你的密码
> alter user 'root'@'localhost' identified with mysql_native_password by 'yourpasswordxxxxxx';

# 15> 清除缓存
> flush privileges;

# 16> 退出MySQL
> quit;
020.png

11/21 修改工程settings.py

接下来,我们需要修改Django里面的settings.py文件中的DEBUG,ALLOWED_HOSTSDATABASES里面的密码

$ cd Peekpa

$ sudo vi settings.py

将settings.py文件中的数据修改成这样:

DEBUG = False

ALLOWED_HOSTS = ['peekpa.com','39.104.203.202']

DATABASES = {
    修改密码
}

这里要说明一下ALLOWED_HOSTS, 第一个填写的是域名,第二个填写的是你的服务器的公网IP地址。表面如果请求来自这两个地方,则Django处理,否则Django是拒绝的。

021.png

然后我们进入虚拟环境,需要执行migrate命令,将Django中的模型映射到数据库中:

# 进入虚拟环境
$ workon peekpa

# 退回到PeekpaCom目录
$ cd ..

# 执行migrate命令
$ python manage.py migrate
022.png

12/21 创建SuperUser

接着我们需要创建superuser:

$ python manage.py createsuperuser
023.png

13/21 启动服务

接着我们启动服务:

$ python manage.py runserver 0.0.0.0:80
024.png

然后在浏览器里面输入你的服务器的公网IP地址http://39.104.203.202/,看到:

025.png

看到这里,就说明目前服务器一切正常,但是我们的静态资源文件缺失。

14/ 收集静态文件

我们先退出Django的服务,通过collectstatic命令先收集静态文件:

$ python manage.py collectstatic
026.png

可以看到我们多了一个static_dist文件

14/21 安装uWsgi

首先得退出虚拟环境,然后通过pip3安装uswgi:

# 退出虚拟环境
$ deactivate

# 安装
$ pip3 install uwsgi
027.png

15/21 安装Nginx

通过以下命令安装Nginx,并启动:

$ sudo yum install epel-release
$ sudo yum install nginx

$ sudo service nginx start
028.png

如何查看Nginx是否启动,只需要在浏览器里面输入你的服务器公网IP地址就可以:

029.png

出现这个说明就成功了。

16/21 配置Nginx

接着我们配置Nginx。首先去目录/etc/nginx/conf.d/目录下,创建一个peekpa.conf文件,将以下内容粘帖进去即可:

server {
    listen      80;
    server_name peekpa.com,39.104.203.202; 
    charset     utf-8;


    location /static {
        alias /root/PeekpaCom/static_dist; 
    }

    
    location / {
        include     /etc/nginx/uwsgi_params; 
    uwsgi_pass unix:/root/peekpa.sock;
    }
}
030.png

接着我们要将/etc/nginx/目录下的nginx.conf中的user nginx;改为user root;。这种做法不是很安全,但是目前我们可以这么做。

然后通过命令重启Nginx服务。

# 重启Nginx服务
$ sudo service nginx restart

17/21 配置uWsgi

这个时候,我们在PeekpaCom目录下,创建一个peekpa.ini的文件:

$ touch peekpa.ini
0311.png

接着我们将一下内容黏贴到这个文件中:

[uwsgi]

chdir = /root/PeekpaCom
module = Peekpa.wsgi
home = /root/.virtualenvs/peekpa

master = true

processes = 10

socket = /root/peekpa.sock

chmod-socket = 777

然后我们得去/root/目录下,创建一个peekpa.sock文件,需要把peekpa.sock文件的权限设置成777.

031.png

接着我们再回到PeekpaCom目录下使用命令启动uwsgi:

$ uwsgi --ini peekpa.ini 
032.png

这个时候,我们去首页,发现也是可以访问的:

033.png

但是图片还是加载不出来,这个是因为我们的静态资源文件夹权限问题。所以我们要修改静态资源文件夹的权限:

$ chmod 777 -R static_dist/
034.png

这个时候,我们看到静态资源文件就显示成了。

18/21 安装supervisor

我们需要在系统目录下,安装supervisor:

$ sudo pip3 install supervisor
035.png

19/21 配置supervisor

接着我们在项目底下,创建一个peekpa_supervisor.conf文件,用来填写supervisor的配置。

$ sudo touch peekpa_supervisor.conf

然后将一下内容复制到peekpa_supervisor.conf文件中:

[program:PeekpaComSite]
command = uwsgi --ini peekpa.ini 
directory = /root/PeekpaCom
startsecs=0
stopwaitsecs=0  
autostart=true
autorestart=true
stdout_logfile=/root/PeekpaCom/log/supervisord.log
stderr_logfile=/root/PeekpaCom/log/supervisord.err

[supervisord]
loglevel=info

[inet_http_server]
port = :8000
username = admin
password = 123

[supervisorctl]
serverurl = http://127.0.0.1:8000
username = admin
password = 123

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

接着,我们需要在PeekpaCom目录下,创建一个log文件夹,同时将log文件夹的权限打开。

$ mkdir log

$ chmod 777 -R log/
036.png

20/21 启动项目

最后一步,就是启动项目了:

# 启动项目
$ supervisord -c peekpa_supervisor.conf 

# 查看状态
$ supervisorctl -c peekpa_supervisor.conf 
037.png

可以看到,网页全部正常运行:

038.png

21/21 打开8000端口

刚才我们在填写supervisor的时候,我们配置了127.0.0.1:8000端口,这个时候,我们需要将服务器的8000端口打开才能访问。

来到阿里云的控制台,更多 -> 网络和安全组 -> 安全组配置

039.png

进来之后,选择规配置规则

040.png

然后点击手动添加

041.png

然后目的写8000/8000,源写0.0.0.0/0,最后点击保存。

042.png

这样就添加完成了。

这个时候,我们再回到页面,刷新一下:

043.png

填入刚才在supervisor里面配置的admin和123,然后就看到了网页管理页面:

044.png

这个就是supervisor的守护进程页面。

至此,PeekpaCom的网站配置就全部结束了。恭喜你,已经毕业了。

虽然课程结束了,至此,我相信你也可以成功搭建起来自己的网站了。

接下来一段时间,我们将会逐步讲解Django如何和MongoDB连接,如何使用Redius作为缓存,如何使用Celery来做定时任务等等。高级的骚操作,期待一起搞事情。

获取代码的唯一途径:关注『皮爷撸码』,回复『代码』即可获得。

长按下图二维码关注,如文章对你有启发,欢迎在看与转发。

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