django3.2+python3+mysql部署到阿里云服务器最新2022教程

一、环境准备

1.python3、pip3、数据库

一、安装python3

1.1 安装准备
# 安装编译相关工具
yum -y groupinstall "Development tools"

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

yum install libffi-devel -y

# 创建安装目录
$ sudo mkdir /usr/local/python3

# 从官网下载 Python 源文件 注意:wget获取https的时候要加上:--no-check-certificate
$ wget --no-check-certificate https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz

# 解压缩包
$ tar -xzvf Python-3.8.2.tgz

# 进入解压目录
$ cd Python-3.8.2
1.2 编译安装
$ sudo ./configure --prefix=/usr/local/python3 # 指定创建的目录

$ sudo make  # 编译

$ sudo make install  # 安装
1.3 配置
1.3.1 两个版本共存

创建python3的软连接

$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3

这样就可以通过 python 命令使用 Python 2,python3 来使用 Python 3。

1.3.2 修改默认为 Python 3

/usr/bin 中的 python 备份

# 查看当前python软连接
$ ll /usr/bin/ | grep python

$ sudo mv /usr/bin/python /usr/bin/python.bak

然后创建 python3 的软链接

$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python

# 查看python版本
$ python -V

创建pip3软连接

# 备份pip软连接
$ mv /usr/bin/pip /usr/bin/pip.bak

# 创建pip3软连接
$ ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

# 查看pip版本
$ pip -V

这样默认的 Python 版本就替换为 Python 3 了。

1.3.2 更改yum配置

因为 yum 使用 Python 2,因此替换为 Python 3 后可能无法正常工作,因此修改 yum 配置文件(不管安装 python3的那个版本,都必须要做的)

$ vi /usr/bin/yum 
把 #! /usr/bin/python 修改为 #! /usr/bin/python2 

$ vi /usr/libexec/urlgrabber-ext-down 
把 #! /usr/bin/python 修改为 #! /usr/bin/python2

$ vi /usr/bin/yum-config-manager
#!/usr/bin/python 修改为 #!/usr/bin/python2

如果没有yum-config-manager这个文件,是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,要通过命令yum -y install yum-utils 安装。

二、搭建环境

一、虚拟环境

1.1强烈建议安装虚拟环境

虚拟环境是一个独立的python,防止与其他项目冲突

1.2、更新yum

$ yum update

1.3、安装虚拟环境

# pip 安装
$ pip install virtualenv

# 建立软连接
$ ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv

1.4 安装nginx和uwsgi

1.4.1安装nginx

地址:https://nginx.org/en/download.html

# 官网下载安装包建议下载稳定版
$ wget https://nginx.org/download/nginx-1.20.2.tar.gz

# 解压
$ tar -zxvf nginx-1.20.2.tar.gz
$ cd nginx-1.20.2

# 配置
$ ./configure

# 编译安装
$ make && make install

# 查找安装路径
$ whereis ngin

# 建立软连接
$ ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

# 启动停止nginx
$ nginx   # 默认以nginx.conf配置文件启动
$ nginx -c 配置文件  # 指定配置文件启动

# 停止
$ nginx -s stop  # 此方式停止步骤是待nginx进程处理任务完毕进行停止。
$ nginx -s quit  # 此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。

# 重启
$ nginx -s reload  # 当 nginx的配置文件 nginx.conf 修改后,先nginx -t检查配置文件是否有问题,要想让配置生效需要重启nginx,使用nginx -s reload不用先停止 nginx再启动nginx即可将配置信息在nginx 中生效

# 查看配置文件是否有问题
$ nginx -t  

配置完成之后在本地电脑的浏览器输入你的服务器IP地址或域名显示欢迎界面就成功啦

1.4.2 安装uwsgi
# pip安装
$ pip install uwsgi

# 建立软连接
$ ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

# 用命令查看软连接是否成功
$ ll /usr/bin/nginx
1.4.3 测试uwsgi

在任意路径下创建一个test.py文件,写入以下内容:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"  # 这是python2的写法
    Return [b“hello world”]  # 这是python3的写法,返回的是字节

根据自己的python版本来选择

然后在test.py目录下,执行以下命令

$ uwsgi --http :8002 --wsgi-file test.py

执行完命令之后你可以在本地电脑上输入你的服务器ip或域名加8002来查看例如123.45.67.89:8002

如果页面显示helloworld说明成功

测试之前要把服务器的安全组端口打开,不然会测试不成功

端口号不要选择有特殊作用的 比如80 22 3306

1.5 建立虚拟环境

之前的nginx,uwsgi,virtualenv都可以在任意目录下使用命令安装,因为他们会安装到默认的目录下的,我们可以不用管。现在建立虚拟环境就要考虑目录了。我是在/home下建立的虚拟环境

$ cd /home

$ virtualenv env  # 这是虚拟环境的名字 自己自定义

# 使用下面命令进入虚拟环境
$ source env/bin/activate

# 退出虚拟环境
$ deactivate

进入虚拟环境之后命令行最左边会显示(env), 之后的操作都是在虚拟环境下进行

1.6 虚拟环境下安装uwsgi

# pip安装
$ pip install uwsgi

然后安装你的项目所依赖的库比如django3.2

这里说一个很方便的方法

在你本地电脑项目的终端中或者你的项目虚拟环境下执行

pip freeze > requirement.txt  # 把环境里所有的输出到一个txt文件中,把此文件传到服务器上

# 然后在你服务器虚拟环境下执行
pip install -r requirement.txt  # pip会自动安装文件里的所有包

1.7 把你的项目上传到服务器上

比如我的项目是testproject,上传到/home目录,所以目录应该是/home/testproject

在你的服务器上运行你的项目,保证能正常运行

然后修改项目里的settings文件

DEBUG = False

ALLOWED_HOSTS = ['*']  # 允许所有ip可以访问

2.把你需要连接的数据库地址改成127.0.0.1,因为你本来就是在你的服务器上连接数据库嘛

3.静态文件配置

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / 'static',
]
# 在这里写以下代码
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

然后执行python manage.py collectstatic

之后就会在当前目录生成一个新的目录,目录下就是你的所有静态文件(包括css,js,image等,还有一个admin相关的静态文件)。可能你会想,我的项目命名已经有静态文件了,为什么不直接用那个目录下的文件,而要执行这些命令将那些静态文件复制后来呢?

因为nginx找不到你的这个路径啊l。所以才要执行上面的操作,将静态文件收集到一个目录,然后在nginx配置中添加一下这个路径,nginx就可以识别到了。但是为什么不能直接将自己的静态文件的路径添加到nginx的配置中使用呢?我觉得可能是规范问题。首先,你写的静态文件的目录可能很乱,从收集到的静态目录我们也可以看到,路径分明,css,js,image在不同路径下,并且还有后台管理的静态文件。

之后就是最重要的配置uwsgi和nginx了

前提是之前步骤的uwsgi和nginx测试没问题

1.7.1 配置uwsgi

在项目根目录下(建议)创建uwsgi配置文件

$ touch testproject_uwsgi.xml # 配置文件有多种写法,可以是.ini的,也有.xml等等,但是不同的后缀所写的代码是不一样的,我这里用的是.xml这种写法,名字自定义

# 使用vim编辑
$ vim testproject_uwsgi.xml

在文件里输入以下内容

<uwsgi> 
    <socket>127.0.0.1:8002</socket><!-- 与nginx通信的内部端口,自定义 --> 
     <chdir>/home/testproject/</chdir><!-- 项目路径 --> 
    <module>testproject.wsgi</module><!-- 项目名.wsgi 对应你项目根目录下的wsgi.py文件 --> 
     <processes>4</processes> <!-- 进程数 --> 
    <daemonize>uwsgi.log</daemonize><!-- 日志文件 会在项目根目录下自动生成-->
    <pythonpath>/home/env/lib/python3.8/site-packages</pythonpath><!-- 指定启动的python包的路径 指定虚拟环境 不然会报错 -->
</uwsgi>

:wq保存退出就可以了

1.7.2 配置nginx

先备份nginx.conf文件

$ cp /usr/local/nginx/conf/nginx.conf.bak

# 用vim编辑nginx.conf文件
$ vim /usr/local/nginx/conf/nginx.conf

在文件中输入以下内容

root配置

server {
    	listen 80;
    	server_name 127.0.0.1:80; #有域名改为自己的域名,没域名写127.0.0.1:80
    	charset utf-8;
    	location / {
       	include /usr/local/nginx/conf/uwsgi_params;  # yum安装的话,好像这个uwsgi_params文件没有的,编译安装的nginx是有的,不过如果你是用yum安装的话,你的nginx也不是在这个路径下。
       	uwsgi_pass 127.0.0.1:8002;  #端口要和uwsgi里配置的一样
       	uwsgi_param UWSGI_SCRIPT testproject.wsgi;  # 项目名.wsgi
       	uwsgi_param UWSGI_CHDIR /home/testproject;  # 项目路径
    	}
    	location /static/ {  # 注意,这儿的static是执行了python manage.py collectstatic之后,自动产生的一个目录,该目录下收集了你项目中所有的静态文件。其实就是将你的静态文件复制了一遍过来)
            root /home/meiduo_mall/static; #静态资源路径 注意:location中指定的/static/必须是在root指定的/home/testproject/目录中真实存在的。
    	}
    	}

alias配置

 location /static/ {
        alias  /home/testproject/static/;  # 注意,这儿的static是执行了python manage.py collectstatic之后,自动产生的一个目录,该目录下收集了你项目中所有的静态文件。其实就是将你的静态文件复制了一遍过来)
    }

    #  注意:alias指定的目录后面必须要加上"/",即/home/testproject/static/不能改成/home/testproject/static

两者配置后的访问效果是一样的。

:wq退出就可以了

测试nginx是否有问题

如果nginx建立软连接成功,就直接

$ nginx -t

# 如果上面执行没报错
$ nginx -s reload

然后回到项目目录下,也就是你的uwsgi配置文件所在的目录。如果你的这个配置文件在其他地方,那你就回到那个目录就可以了。使用命令如下命令启动uwsgi配置文件

$ uwsgi -x testproject_uwsgi.xml  # # 保证testproject_uwsgi.xml在当前目录,不在的话,请先切换到它所在的目录。

然后就可以在本地电脑上输入你的服务器ip或者域名就可以访问你的django项目了

新人第一次发文,如有错误大佬轻喷

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值