1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 阿里云服务器搭建Django环境二:django+mysql环境搭建

阿里云服务器搭建Django环境二:django+mysql环境搭建

时间:2019-10-18 10:37:41

相关推荐

阿里云服务器搭建Django环境二:django+mysql环境搭建

阿里云服务器搭建Django环境二:django+mysql环境搭建

1安装django:(/user/bin目录下,pip)

直接进入root用户(~),pip install django(指定版本:django==XXX)

(非虚拟环境安装,没有在virtualenv,默认安装在公共的python解释器下)

Successfully installed asgiref-3.3.4 django-3.2.4 sqlparse-0.4.1 typing-extensions-3.10.0.0

2安装virtualenv

(虚拟环境安装)

在开发过程中有时需要python2.7,有时需要python3.5,且需要很多相同但是不同版本依赖包,可以使用虚拟环境virtualenv进行管理

pip install virtualenv

Successfully installed appdirs-1.4.4 distlib-0.3.2 filelock-3.0.12 importlib-metadata-4.5.0 importlib-resources-5.1.4 virtualenv-20.4.7 zipp-3.4.1

2.1直接使用virtualenv

在root用户下输入:virtualenv --no-site-packages venv,会报错virtualenv: error: unrecognized arguments: --no-site-packages,因为默认安装的高版本virtualenv默认–no-site-packages了

参数–no-site-packages作用:已经安装到系统Python环境中的所有第三方包都不会复制过来,是干净的python环境

输入:virtualenv my_django

输出如下:

creator CPython3Posix(dest=/root/my_django, clear=False, no_vcs_ignore=False, global=False)

seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)

added seed packages: pip== 21.1.2, setuptools== 57.0.0, wheel==0.36.2

activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

然后查看:ls -l

drwxr-xr-x 5 root root 4096 Jun 16 15:43 my_django

source my_django/bin/activate,可以看到目录前缀加上了(my_django),也就是我们平时新建1个python项目时,自动新建的venv虚拟环境

然后就像平时在pycharm上的terminal终端安装三方库一样了

pip install django(此时安装django就是在当前这个虚拟环境中安装了)

退出当前的venv环境,使用deactivate命令

此时就回到了正常的环境,现在pip或python均是在系统Python环境下执行

还是在(my_django)环境下:

执行:find -name django

输出:

./my_django/lib/python3.6/site-packages/django

./my_django/lib/python3.6/site-packages/django/forms/templates/django

./my_django/lib/python3.6/site-packages/django/forms/jinja2/django

如果进入根目录(/),执行:find -name django

./root/my_django/lib/python3.6/site-packages/django

./root/my_django/lib/python3.6/site-packages/django/forms/templates/django

./root/my_django/lib/python3.6/site-packages/django/forms/jinja2/django

./usr/share/doc/python3-jinja2/examples/rwbench/django

./usr/local/lib/python3.6/site-packages/django

./usr/local/lib/python3.6/site-packages/django/forms/templates/django

./usr/local/lib/python3.6/site-packages/django/forms/jinja2/django

可见,我们在非虚拟环境下安装django,会放在/usr/local/lib/python3.6/site-packages/中,而root用户在虚拟环境下安装的django,就在/root/my_django/lib/python3.6/site-packages/中

小结:virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。

3 安装mysql

3.1 首先检查有没有安装mysql(-i 不区分大小写):

没有安装(注意:查看阿里云服务器linux版本:lsb_release -a)

在/downloads/repo/yum/,下载mysql

将下载的mysql安装包rz上传到阿里云:

rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。

常用命令:

-ivh:安装显示安装进度–install–verbose–hash

-Uvh:升级软件包–Update;

-qpl:列出RPM软件包内的文件信息[Query Package list];

-qpi:列出RPM软件包的描述信息[Query Package install package(s)];

-qf:查找指定文件属于哪个RPM软件包[Query File];

-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];

-e:删除包

rpm -q samba //查询程序是否安装

rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm //按路径安装并显示进度

rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm //指定安装目录

rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm //用来检查依赖关系;并不是真正的安装;

rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降级为旧版本

rpm -qa | grep httpd #[搜索指定rpm包是否安装]–all搜索httpd

rpm -ql httpd#[搜索rpm包]–list所有文件安装目录

rpm -qpi Linux-1.4-6.i368.rpm#[查看rpm包]–query–package–install package信息

rpm -qpf Linux-1.4-6.i368.rpm#[查看rpm包]–file

rpm -qpR file.rpm#[查看包]依赖关系

rpm2cpio file.rpm |cpio -div #[抽出文件]

rpm -ivh file.rpm #[安装新的rpm]–install–verbose–hash

rpm -ivh

rpm -Uvh file.rpm #[升级一个rpm]–upgrade

rpm -e file.rpm #[删除一个rpm包]–erase

将mysql装在my_mysql下,可以把mysql的rpm包放在my_mysql中,再安装:

先mv剪切到my_mysql中:

安装完,查看mysql:

然后安装mysql服务端:

启动mysql:

查看mysql的运行情况:

Mysql8.0默认安装之后root是有密码的。

修改mysql临时密码:

为了加强安全性,MySQL8.0为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。

只有启动过一次mysql才可以查看临时密码

grep ‘temporary password’ /var/log/mysqld.log(如果之前安装过MySQL则这里可能会有多个密码,用最后一个,注意这个密码输入时是可以粘贴的)。

使用该密码登录并修改密码:

复制粘贴密码后,直接enter即可:

在修改密码前,是不能执行sql操作的,需要先更改密码:(密码要足够复杂,否则会提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,密码设置可以含有大小写字母数字@~_!等等)

这是mysql的密码策略,修改密码后,可如下查看密码策略:

设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,

输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值,

(可以看到,原本的策略是medium)

当前密码长度为 8 ,不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,

输入设值语句 “ set global validate_password_length=6; ” 进行设值

可如下设置,即可设置简单的密码

mysql> set global validate_password.policy=0;

mysql> set global validate_password.length=1;

mysql 密码策略相关参数:

1)、validate_password_length 固定密码的总长度;

2)、validate_password_dictionary_file 指定密码验证的文件路径;

3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;

4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;

5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;

关于 validate_password_policy 的取值:

0/LOW:只验证长度;

1/MEDIUM:验证长度、数字、大小写、特殊字符;

2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;

6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;

远程连接:

需要阿里云安全组开放3306端口

navicat配置好连接发现:

然后允许服务器上mysql远程连接权限:

授权操作:

grant all privileges on.to ‘root’@’%’ with grant option;

连接navicat出现错误:

plugin非mysql_native_password 则需要修改密码

但是尝试修改了密码(和以前一样),还是报错:1251

尝试修改用户认证规则(密码还是一样):

刷新权限:

重新连接,成功:

另外:sql查看mysql端口号

在navicat上连接阿里云数据库,新建数据库便于django连接:

修改本地的django项目的settings.py

把公网ip和域名地址都放入allowed_hosts

name是数据库名,host是阿里云服务器的公网ip

然后本地执行:

再执行:

执行前注意:各个django的app下的迁移文件需要删除,否则不会成功:(因为本地执行后,会生成migrations迁移文件,有了就不会执行迁移)

把以上文件删除,重新执行makemigrations

可以看到成功了,然后才执行migrate(执行完migrate才会在数据库中生成table)

然后f5刷新查看阿里云数据库:

将本地的django项目打包上传:

rz上传django项目压缩包,解压缩:

在执行前,先在阿里云上安全组配置8000端口:

找到实例也可以配置安全组:

8000端口成功添加,但是执行以下命令启动时,报错:

因为打包的django项目没有python解释器,默认执行的公共的python解释器(在/user/local/lib下,而公共环境的python解释器下缺少这些库),需要在当前项目下创建虚拟环境,在虚拟环境中执行该命令,使用虚拟环境下的python三方库(source bin/activate)

注意:安装完virtualenv,然后source bin/activate,pip install django,此时安装的django就在当前的虚拟环境下(就不再是公共的python环境了,可以随意安装该项目需要的三方库),然后执行django-admin startproject 项目名,路径就是上面的autoTest项目,和virtualenv的bin、lib目录同级

执行启动django项目命令前安装三方库环境

安装前可以更新pip,在xx_djo下:/root/xx_django/autotest_dja/xx_djo/bin/python -m pip install --upgrade pip

还需要安装uWSGI

uwsgi官方文档:

https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/WSGIquickstart.html#django

Python uWSGI 安装配置

如何部署简单的 WSGI 应用和常见的 Web 框架。

先安装uWSGI:

Nginx:静态处理自己处理,Nginx将非静态请求通过uwsgi转发给Django,由Django处理

对于uwsgi_params 文件,一般 yum 安装默认就有该文件了,直接配置 nginx.conf 即可 没有的话添加 uwsgi_params 保存下面的配置代码

可见uwsgi_params是直接存在的

阿里云服务器上有uwsgi_params文件,修改nginx.conf,在http下增加server:

比如:listen:8099,是前端请求的端口号(注意必须在阿里云安全组添加端口号8099才可以,如果安全组是添加8000,相应的listen需要修改为8000)

在 Django 项目根目录(manage.py 同级目录)新建文件 uwsgi.ini (也支持 xml 文件格式)

在pycharm中新建uwsgi.ini

uwsgi_pass 公网ip:8066需要和socket端口保持一致(uwsgi.ini)

配置项中以"#"开头的都是被注释的项目;

其他参数:

chdir 是你的项目根目录

module 是你的入口wsgi模块

socket 是通信IP和端口设置;

master=True 表示以主进程模式运行;

deamonize 是日志文件,会自动创建;

disable-logging = true 表示只记录错误信息,否则日志可能很快爆满

然后rz将该uwsgi.ini上传到manage.py所在的目录

回到上一目录,执行:source bin/activate(bin目录所在的路径)

要么执行:uwsgi uwsgi.ini

要么执行:uwsgi --ini uwsgi.ini(在uwsgi.ini目录下执行)

然后cd进入(也就是manage.py和uwsgi.ini的目录):

执行:

解决这个报错:

pip uninstall uwsgi

yum install -y pcre pcre-devel pcre-static

pip install uwsgi -I --no-cache-dir

重新执行,确实消失了,但是错误还有:

出现这个问题的原因是在uwsgi.ini中,应该使用内网ip,nginx配置中需要和该socket相同,所以nginx也要改为内网ip:

同样需要修改并保存nginx配置文件(uwsgi_pass:公网ip换成本机ip)

(注意:要让nginx的listen的端口号和uwsgi的端口号不一样,比如这里,listen改为8000后,我的uwsgi_pass就修改为127.0.0.1:8066,同样需要修改uwsgi.ini,端口不能冲突)

nginx -s reload

重新启动uwsgi,如果出现same address错误,直接杀死:

fuser -k 8066/tcp(uwsgi监听的端口)

注意:还可以重启下nginx:

pkill nginx,然后执行nginx命令,查看进程(查看nginx配置的几个端口号是否在监听中):

ps -ef|grep nginx

修改uwsgi的端口号是8066后(必须和nginx的listen端口不同),启动uwsgi,调用接口:

以上的页面,是djangorestframework的测试页面,因为没有配置静态文件,所以样式等文件全部报错404,要去掉可以在settings.py中添加以下配置:

这里我们直接源代码修改后打包上传

如果希望unrar上传代码后,覆盖解压:o+ 覆盖已存在文件

o- 不覆盖已存在文件(o+前面要加上-,表示参数,否则前面的x认为这是个0+.rar包)

unrar x -o+ autoTest.rar /root/xx_django/autotest_dja/xx_djo

然后重新执行:fuser -k 8066/tcp

然后执行uwsgi.ini(manage.py同级目录下):uwsgi uwsgi.ini(注意,这种方式运行uwsgi,一旦关闭xshell,uwsgi就会关闭,要在后台运行,需要加上-d,守护线程,就不会出现只在终端运行,关闭就请求接口失效的情况了)

修改配置如下:

但是这种情况会导致请求djangorestframework接口还是出现测试页面,最终修改参数如下:

再次执行:uwsgi -d --ini uwsgi.ini

然后关闭xshell,访问django接口就不会出现问题了,成功

postman:

注意

如果杀死uwsgi进程,访问会出现502

此时请求接口:

其它

添加并发和监控

默认情况下,uWSGI 启动一个单一的进程和一个单一的线程。

你可以用 --processes 选项添加更多的进程,或者使用 --threads 选项添加更多的线程 ,也可以两者同时使用。

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2

以上命令将会生成 4 个进程, 每个进程有 2 个线程。

如果你要执行监控任务,可以使用 stats 子系统,监控的数据格式是 JSON:

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

我们可以安装 uwsgitop(类似 Linux top 命令) 来查看监控数据:

pip install uwsgitop

结合 Web 服务器使用

我们可以将 uWSGI 和 Nginx Web 服务器结合使用,实现更高的并发性能。(如果只是uWSGI,比如本机搭建的测试django,自带的就是uWSGI,这时候它是服务器;如果是在服务器上搭建uWSGI+nginx,此时的uWSGI就是中间件,服务器是nginx)

一个常用的nginx配置如下:

location / {

include uwsgi_params;

uwsgi_pass 127.0.0.1:3031;

}

以上代码表示使用 nginx 接收的 Web 请求传递给端口为 3031 的 uWSGI 服务来处理。

现在,我们可以生成 uWSGI 来本地使用 uwsgi 协议:

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

如果你的 Web 服务器使用 HTTP,那么你必须告诉 uWSGI 本地使用 http 协议 (这与会自己生成一个代理的–http不同):

uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

部署 Django

Django 是最常使用的 Python web 框架,假设 Django 项目位于 /home/foobar/myproject:

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

–chdir 用于指定项目路径。

我们可以把以上的命令弄成一个 yourfile.ini 配置文件:

[uwsgi]

socket = 127.0.0.1:3031

chdir = /home/foobar/myproject/

wsgi-file = myproject/wsgi.py

processes = 4

threads = 2

stats = 127.0.0.1:9191

接下来你只需要执行以下命令即可:

uwsgi yourfile.ini

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。