Django学习路线之将项目部署到阿里云服务器

Django虽然没有讲完,但是基础部分已经讲完了,根据前四篇文章:

再加上这篇文章,您已经可以自己完成一个简单的Django项目了。但是,项目做出来是需要别人访问并使用的,因此还需要部署项目。

这篇文章是基于CentOS + nginx + uwsgi 的部署方法。

下面是四大步骤:

  1. 生产环境部署准备
  2. 阿里云部署安装必要的软件
  3. 上传并启动项目
  4. 配置Nginx以及uwsgi

在这里插入图片描述

1. 生产环境部署准备

为什么要用云服务器部署?

像这样查到的ip地址,是动态变化的,可能重启一下路由就变了:
在这里插入图片描述
我们是通过IP地址访问网站的,而IP地址一变,就访问不到了,而用云服务器能固定IP

购买ECS云服务器

进入阿里云购买一台ECS云服务器,配置根据自己的需求进行选择,买的过程就不多说了,阿里云的产品文档写的都挺清楚的,系统选择CentOS,当然选择Ubuntu也是可以的,但是比较常用的还是CentOS

下面是已经购买好的ECS云服务器:
在这里插入图片描述
如果您是第一次使用云服务,还需要重置实例密码,具体操作可以查看阿里云的产品文档:
在这里插入图片描述
在这里插入图片描述

配置安全组规则

新建一个安全组规则,点击快速添加:
在这里插入图片描述

开放必要的端口:
在这里插入图片描述
为什么要配置安全组呢?

安全组负责管理是否放行来自公网或者内网的访问请求。
为安全起见,安全组入方向大多采取拒绝访问策略。

扫描二维码关注公众号,回复: 11331830 查看本文章

因此,如果不配置安全组,可能无法远程连接数据库等

通过Xshell测试连接云服务器

刚刚已经开放了端口22,下面我们就用Xshell访问服务器:
在这里插入图片描述
点击同意并保存:
在这里插入图片描述
这时输入系统的账户和密码:
在这里插入图片描述
这样就算连接成功了:
在这里插入图片描述

2. 阿里云部署安装必要的软件

安装Python3

CentOS 8.1 已经预先安装了Python3:
在这里插入图片描述
但是老版本只安装了Python2,如果你用的是老版本,那就需要手动安装Python3

1.安装依赖包

yum install opensll-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ opensll-devel libffi-devel python-devel mariadb-devel

2.下载Python源码

wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz
tar -xzvf Python-3.7.3.tgz -C /tmp
cd /tmp/Python-3.7.3

3.把Python3.7安装到 /usr/local目录

./configure --prefix=/usr/local
make
make altinstall  # 这一步比较耗时

4.更改/usr/bin/python链接

ln -s /usr/local/bin/python3.7 /usr/bin/python3
ln -s /usr/local/bin/pip3.7 /usr/bin/pip3

安装maridb

mariadb跟MySQL是一样的,centos中已经集成了,安装非常简单

1.安装命令

sudo yum install mariadb-server

在这里插入图片描述
安装好后:
在这里插入图片描述

2.启动、重启

sudo systemctl start mariadb
sudo systemctl restart mariadb

开启数据库服务:
在这里插入图片描述
然后也可以show databases查看数据库,最后按Ctrl+C退出

下面我们试一下在本地连接一下服务器里的数据:
在这里插入图片描述
测试连接时是失败的,失败的原因是我们还需要绑定一下端口

3.设置安全规则,配置MySQL端口

在根目录下:

vim /etc/my.cnf

进入后:
在这里插入图片描述
输入 i 进入编辑模式:
在这里插入图片描述

添加两行:

[mysqld]
bind-address = 0.0.0.0

在这里插入图片描述

按ESC退出编辑模式,输入:wq保存并退出

重启服务:

sudo systemctl restart mariadb

然后再进入数据库:
在这里插入图片描述

4.设置外部ip可以访问

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;

FLUSH PRIVILEGES;

如下图所示:
在这里插入图片描述
这时回到SQLyog测试连接:
在这里插入图片描述
可以看到连接成功了,密码是刚刚的123456

这里说一句,为了演示方便,所以我设置了一个简单的密码,但是在实际项目中,密码应该复杂些,否则很危险

来show databases:
在这里插入图片描述
和本地查看的结果是一样的:
在这里插入图片描述

安装redis

yum install redis
service redis start

在这里插入图片描述
然后开启redis服务:在这里插入图片描述

安装Nginx

sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx

在这里插入图片描述

安装virtualenvwrapper

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
yum install python-setuptools python-devel
pip install virtualenvwrapper

3. 上传并启动项目

将项目所用到的本地数据库导出

先把本地的数据库文件导出:
在这里插入图片描述
在这里插入图片描述

将导出的数据库上传至服务器

下面我们把在本地导出的数据库导入服务器:
在这里插入图片描述
在这里插入图片描述
现在再来执行以下show databases:
在这里插入图片描述
查看里面的数据表:
在这里插入图片描述
查表:
在这里插入图片描述
这就是上一篇文章里用到的数据表

使用FileZilla上传项目文件

如下图所示连接服务器:
在这里插入图片描述

成功连接后:
在这里插入图片描述
选中需要上传的项目,右键点击上传即可:
在这里插入图片描述
成功上传:
在这里插入图片描述
回到Xshell,看一下文件有没有成功上传:
在这里插入图片描述

启动项目

还记得前几篇文章里讲的方法吗:

python3 manage.py runserver 0.0.0.0:8000

这里我们直接运行是会报错的,因为我们还有一些资源库没有安装:
在这里插入图片描述
下面我们把这些库都装一下,另外,我在安装mysqlcilent时出了点问题,这时我们先执行这一条命令:

yum install python3-devel mariadb-devel -y

在这里插入图片描述
然后再:

pip3 install mysqlclient

在这里插入图片描述
安装成功!启动项目:
在这里插入图片描述
这时咱们来访问一下:
在这里插入图片描述
这时我们要回到settings.py文件:
在这里插入图片描述
将ALLOWED_HOSTS改成*:

ALLOWED_HOSTS = ['*']

另外,正式上线的话,DEBUG = True应该也改一下

修改好以后,再来运行一下项目:
在这里插入图片描述
这时就可以正常访问了!

4. 配置Nginx以及uwsgi

刚刚已经成功把项目跑起来了,但是那样的方式其实并不是特别好,在访问时需要输入端口号,不安全

接下来我们通过使用uwsgi的方式来跑项目

安装uwsgi

pip3 install uwsgi

在这里插入图片描述
安装的过程中,可能会有一点慢

测试uwsgi

uwsgi --http :8000 --module django_db_demo.wsgi

出现下面的界面是正常的:
在这里插入图片描述
再来访问一下网站:
在这里插入图片描述

配置Nginx

先在项目的目录下新建一个名为conf的文件夹,再在conf这个文件下新建两个目录,分别是nginx和uwsgi:
在这里插入图片描述
在nginx下新建一个uc_nginx.conf文件并在里面添加以下内容:

# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name 101.201.181.229;     # substitute your machine's IP address or FQDN
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
location /media  {
    alias /root/logic_online/media;  # 指向django的media目录
}

location /static {
    alias /root/logic_online/static; # 指向django的static目录
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}

这里要注意的是,server_name要改成自己的域名或IP

然后再在uwsgi这个目录下新建uwsgi.ini配置文件,并添加如下内容:

# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /root/django_db_demo
# Django's wsgi file
module          = django_db_demo.wsgi
# the virtualenv (full path)

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = 127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
virtualenv = /root/.virtualenvs/django_db_demo

#logto = /tmp/mylog.log

如果不用虚拟环境,后面那块可以不写:

  • chdir:表示需要操作的目录,也就是项目的目录
  • module:wsgi文件的路径
  • processes:进程数
  • virtualenv:虚拟环境的目录

然后将这个conf文件夹上传至服务器:
在这里插入图片描述
在用之前,我们先来改一个文件:

vim /etc/nginx/nginx.conf

在这里插入图片描述
将nginx改成root

重启Nginx服务:

sudo systemctl restart nginx

将改配置文件加入到Nginx的启动配置文件中

sudo ln -s 你的目录/logic_online/conf/nginx/uc_nginx.conf  /etc/nginx/conf.d/

当然也可以直接找到这个文件,然后用cp命令复制过去:

cp uc_nginx.conf /etc/nginx/conf.d/

执行完以后记得重启Nginx服务:

sudo systemctl restart nginx

接下来进入项目所在目录,并执行以下命令即可:

uwsgi yourfile.ini

在这里插入图片描述
这时就不需要输入端口号了:
在这里插入图片描述
到这里,Django项目就全部部署结束了!

猜你喜欢

转载自blog.csdn.net/zbp_12138/article/details/106185726