欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-09 20:28:39
...

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

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

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

下面是四大步骤:

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

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

1. 生产环境部署准备

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

像这样查到的ip地址,是动态变化的,可能重启一下路由就变了:
Django学习路线之将项目部署到阿里云服务器
我们是通过IP地址访问网站的,而IP地址一变,就访问不到了,而用云服务器能固定IP

购买ECS云服务器

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

下面是已经购买好的ECS云服务器:
Django学习路线之将项目部署到阿里云服务器
如果您是第一次使用云服务,还需要重置实例密码,具体操作可以查看阿里云的产品文档:
Django学习路线之将项目部署到阿里云服务器
Django学习路线之将项目部署到阿里云服务器

配置安全组规则

新建一个安全组规则,点击快速添加:
Django学习路线之将项目部署到阿里云服务器

开放必要的端口:
Django学习路线之将项目部署到阿里云服务器
为什么要配置安全组呢?

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

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

通过Xshell测试连接云服务器

刚刚已经开放了端口22,下面我们就用Xshell访问服务器:
Django学习路线之将项目部署到阿里云服务器
点击同意并保存:
Django学习路线之将项目部署到阿里云服务器
这时输入系统的账户和密码:
Django学习路线之将项目部署到阿里云服务器
这样就算连接成功了:
Django学习路线之将项目部署到阿里云服务器

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

安装Python3

CentOS 8.1 已经预先安装了Python3:
Django学习路线之将项目部署到阿里云服务器
但是老版本只安装了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

Django学习路线之将项目部署到阿里云服务器
安装好后:
Django学习路线之将项目部署到阿里云服务器

2.启动、重启

sudo systemctl start mariadb
sudo systemctl restart mariadb

开启数据库服务:
Django学习路线之将项目部署到阿里云服务器
然后也可以show databases查看数据库,最后按Ctrl+C退出

下面我们试一下在本地连接一下服务器里的数据:
Django学习路线之将项目部署到阿里云服务器
测试连接时是失败的,失败的原因是我们还需要绑定一下端口

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

在根目录下:

vim /etc/my.cnf

进入后:
Django学习路线之将项目部署到阿里云服务器
输入 i 进入编辑模式:
Django学习路线之将项目部署到阿里云服务器

添加两行:

[mysqld]
bind-address = 0.0.0.0

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

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

重启服务:

sudo systemctl restart mariadb

然后再进入数据库:
Django学习路线之将项目部署到阿里云服务器

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;

如下图所示:
Django学习路线之将项目部署到阿里云服务器
这时回到SQLyog测试连接:
Django学习路线之将项目部署到阿里云服务器
可以看到连接成功了,密码是刚刚的123456

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

来show databases:
Django学习路线之将项目部署到阿里云服务器
和本地查看的结果是一样的:
Django学习路线之将项目部署到阿里云服务器

安装redis

yum install redis
service redis start

Django学习路线之将项目部署到阿里云服务器
然后开启redis服务:Django学习路线之将项目部署到阿里云服务器

安装Nginx

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

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

安装virtualenvwrapper

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

3. 上传并启动项目

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

先把本地的数据库文件导出:
Django学习路线之将项目部署到阿里云服务器
Django学习路线之将项目部署到阿里云服务器

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

下面我们把在本地导出的数据库导入服务器:
Django学习路线之将项目部署到阿里云服务器
Django学习路线之将项目部署到阿里云服务器
现在再来执行以下show databases:
Django学习路线之将项目部署到阿里云服务器
查看里面的数据表:
Django学习路线之将项目部署到阿里云服务器
查表:
Django学习路线之将项目部署到阿里云服务器
这就是上一篇文章里用到的数据表

使用FileZilla上传项目文件

如下图所示连接服务器:
Django学习路线之将项目部署到阿里云服务器

成功连接后:
Django学习路线之将项目部署到阿里云服务器
选中需要上传的项目,右键点击上传即可:
Django学习路线之将项目部署到阿里云服务器
成功上传:
Django学习路线之将项目部署到阿里云服务器
回到Xshell,看一下文件有没有成功上传:
Django学习路线之将项目部署到阿里云服务器

启动项目

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

python3 manage.py runserver 0.0.0.0:8000

这里我们直接运行是会报错的,因为我们还有一些资源库没有安装:
Django学习路线之将项目部署到阿里云服务器
下面我们把这些库都装一下,另外,我在安装mysqlcilent时出了点问题,这时我们先执行这一条命令:

yum install python3-devel mariadb-devel -y

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

pip3 install mysqlclient

Django学习路线之将项目部署到阿里云服务器
安装成功!启动项目:
Django学习路线之将项目部署到阿里云服务器
这时咱们来访问一下:
Django学习路线之将项目部署到阿里云服务器
这时我们要回到settings.py文件:
Django学习路线之将项目部署到阿里云服务器
将ALLOWED_HOSTS改成*:

ALLOWED_HOSTS = ['*']

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

修改好以后,再来运行一下项目:
Django学习路线之将项目部署到阿里云服务器
这时就可以正常访问了!

4. 配置Nginx以及uwsgi

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

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

安装uwsgi

pip3 install uwsgi

Django学习路线之将项目部署到阿里云服务器
安装的过程中,可能会有一点慢

测试uwsgi

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

出现下面的界面是正常的:
Django学习路线之将项目部署到阿里云服务器
再来访问一下网站:
Django学习路线之将项目部署到阿里云服务器

配置Nginx

先在项目的目录下新建一个名为conf的文件夹,再在conf这个文件下新建两个目录,分别是nginx和uwsgi:
Django学习路线之将项目部署到阿里云服务器
在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文件夹上传至服务器:
Django学习路线之将项目部署到阿里云服务器
在用之前,我们先来改一个文件:

vim /etc/nginx/nginx.conf

Django学习路线之将项目部署到阿里云服务器
将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学习路线之将项目部署到阿里云服务器
这时就不需要输入端口号了:
Django学习路线之将项目部署到阿里云服务器
到这里,Django项目就全部部署结束了!