Published in:2024-10-24 |

项目环境部署

一、MySQL5.7安装

1、安装方式

1.1 方式一 yum安装(推荐使用该方式)

在CentOS中默认安装有MariaDB,这个是MySQL的分支

如果必须要安装MySQL,首先必须添加mysql社区repo通过输入命令:

rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

然后再yum install -y mysql-server # yum安装,需要外网环境

1.2 方式二 rpm安装(不建议)
  • rpm -ivh perl-*.rpm #安装所有perl依赖
  • rpm -Uvh mysql-libs-5.1.73-7.el6.i686.rpm #更新mysql的类库
  • rpm -ivh mysql-5.1.73-7.el6.i686.rpm mysql-server-5.1.73-7.el6.i686.rpm #安装mysql主服务

2、启动MySQL服务

systemctl start/stop/restart/status mysqld

查看MySQL运行状态:

systemctl status mysqld.service

3、使用MySQL

注意:以下方式针对mysql5.7

初次使用,需要找到root的密码:

grep "password" /var/log/mysqld.log

找到密码后,连接数据库 mysql -uroot -p密码

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

1
2
3
4
5
6
7
8
9
10
11
遇到错误: 
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
解决方案:
1、首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,
输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值
2、当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,
输入设值语句 “ set global validate_password_length=6; ” 进行设值
3、再重置密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
4、查看 mysql 初始的密码策略,
输入语句 “ SHOW VARIABLES LIKE 'validate_password%'; ” 进行查看
  • 选择数据库use mysql
  • 选择表
  • 查询表

4、MySQL远程连接

  • 到mysql库的user表中
  • update user set host='%' where user='root'; #添加可以远程访问的账号 MySQL5.7版本
  • flush privileges; #刷新权限,保证新添加的账号可用
  • 关闭linux的防火墙,保证3306可以访问

5、MySQL卸载

  • rpm -e mysql-server需要完整的包名 通过rpm -qa | grep mysql查找包名 #只需卸载主服务即可
  • rm -rf /var/lib/mysql #删除所有mysql的数据

6、MySQL root密码找回(重置)

找到/etc/my.cnf

1
2
3
[mysqld]
...
skip-grant-tables //注意,建议在拆除网线的情况下添加 (而且添加配置后,需要重启mysqld服务)
1
2
3
4
[root@Server ~] mysql -uroot
mysql> use mysql;
mysql> update user set password=password('123') where host='localhost'; //修改密码
mysql> flush privileges;

然后将如上配置删除或注释

1
2
3
# 将开发好的项目部署到Linux系统  Linux 而不是windows (开发)
# Day01 - Linux基本指令 -- 字符界面 无法使用鼠标
# Day02 - 安装环境MySQL Python 上传项目 部署运行项目

二、Python安装

1、安装依赖

  • yum -y install python-devel openssl-devel bzip2-devel zlib-devel expat-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel readline-devel gcc
  • yum -y groupinstall “Development tools”

如上两步,汇总安装了python生产环境的各种第三方依赖包

2、安装Python

  • 将python的tar包发送给linux (建议位置:/usr/local/)

  • 解压tar包:tar -zxvf Python-3.5.2.tgz

  • cd到解压目录中配置:./configure --prefix=/usr/local/python3 --enable-optimizations

    目的:检测环境中依赖是否完整,设置python的安装位置,
    同时生成一个编译文件,用于进行python编译:make

  • 在解压目录中:先 make 编译 然后 make install 安装

1
2
3
4
5
6
安装后的日志如下
....
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-8.1.1 setuptools-20.10.1
  • 将python3 设置为系统默认python解释器

    • 将/usr/bin下的python文件改名 mv /usr/bin/python /usr/bin/python2.7.5

    • 将python3的执行文件链接到 /usr/bin/python

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

1
2
# 执行以上两步操作并不是把python3安装目录添加到环境变量中
# 而是将python3安装目录下python3解释器软链接到某一个环境变量的目录下
  • 设置环境变量:/etc/profile中添加配置
1
2
3
在文件末尾追加,不要改动文件的其他内容!!!!!!!
export python_home=/usr/local/python3
export PATH=$PATH:$python_home/bin

注意,设置好后,为了让环境变量生效:source /etc/profile,然后 python3即可进入python3的环境

  • 更新pip
    • pip3 install --upgrade pip

补充:

  • 安装yum install mysql-devel

    1581412165432

  • 由于yum用python2编译执行,所以需要单独为yum设置为python2,找到/usr/bin/yum文件,修改文件头:#!/usr/bin/python2.7.5

    1581412262020

  • 修改 /usr/libexec/urlgrabber-ext-down 文件的第一行改为 ‘#!/usr/bin/python2.7.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 总结Python安装步骤:
1. 安装依赖 两长串复制过去直接执行 -- 注意需要外网
2. 将python3.6+的tar包发送到linux系统中 建议放在/usr/local下
3. 解压tar包
4. 进入解压目录,执行 ./configure --prefix=/usr/local/python3 --enable-optimizations
5. 执行 make 指令 -- 注意时间较长
6. make install 即可完成安装 -- 安装完后在/usr/local/python3下就是python的安装文件

# 发软链接
1. 将默认的Python2版改名 mv /usr/bin/python /usr/bin/python2.7.5
2. 再将python3下的解释发快捷方式到/usr/bin下
ln -s /usr/local/python3/bin/python3 /usr/bin/python

# 配置环境变量
1. vi /etc/profile文件下 在最后面添加下面的内容:
export PATH=$PATH:/usr/local/python3/bin/

2. 让环境变量生效 执行 source /etc/profile即可

# 更新pip
1. 执行 pip3 install --upgrade pip

# 修改yum文件头 yum默认是基于python2
1. vi /usr/bin/yum 的第一行的最后面改为python2.7.5
2. vi /usr/libexec/urlgrabber-ext-down 同上即可

三、Django安装

  • 安装数据库驱动:pip install mysqlclient

  • pip install django=="2.0.6"

  • 测试使用:

    • django-admin startproject testproj 在当前目录下创建一个project:”testproj”

    • cd到testproj目录下的testporj目录下settings.py 修改配置:ALLOWED_HOSTS = ["*"]

    • 启动django内置的web服务器。cd到testproj目录下,执行:python manage.py runserver 0.0.0.0:port

    • 在Windows的浏览器中访问:ip:port – ip为Linux系统的ip地址

四、uWSGI服务器

1、WSGI协议

  • 使用Django或Flask框架编写的Web应用程序,在python manage.py runserver 时都启动的是框架内置的服务器来运行Web应用程序,而内置的服务器遵循了WSGI协议(WSGI Server)。

  • WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范。

    • WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;

    • WSGI application接收由server转发的request,处理请求,并将处理结果返回给server

      wsgi.png-22.9kB

  • 要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有BottleFlaskDjango

总结:WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口。

2、uWSGI服务器安装

WSGI协议下web服务器很多:django内置,uWSGI,gunicorn。

2.1 服务器安装
  • 将uWSGI的tar包发送linux

  • 解压tar:tar -zxvf uwsgi-2.0.17.tar.gz

  • cd到解压目录下,编译:make

  • 为了可以更方便的执行 uwsgi 启动uWSGI服务器,定制链接:

    ln -s /usr/local/uwsgi-2.0.17/uwsgi /usr/bin/uwsgi

    则可以在任意目录下执行 uwsgi 去启动uWSGI服务器

  • 测试使用python的wsgi服务器-uWSGI

    • 在任意的一个目录中定义一个python脚本:hello.py

      1
      2
      3
      def application(env, start_response):
      start_response('200 OK', [('Content-Type','text/html;charset=utf-8')])
      return [bytes('你好啊!!','utf-8'),b'Mr_lee'] # 基于wsgi协议规范实现的代码
    • 启动uWSGI服务器,并部署hello.py程序

      uwsgi --http 192.168.248.128:8001 --wsgi-file hello.py #注意hilo.py可以写成绝对路径

    • 浏览器访问:192.168.248.128:8001

3、 uWSGI部署django项目

  • 在数据库中建好项目需要的database:“ems”

    • 使用Navicat创建即可,注意字符集为 utf8
  • 在Django项目的settings.py中修改配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DEBUG = False  #去掉开发模式          
    ALLOWED_HOSTS = ["*"] #开放访问host
    DATABASES = { #合适数据库参数
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'ems',
    'USER': 'root',
    'HOST': 'localhost',
    'PORT': '3306',
    'PASSWORD': '123456'
    }
    }

  • 发送项目到linux并做移植

    python manage.py makemigrations

    python manage.py migrate

  • 编写uWSGI的配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #随意找一个目录,创建一个文件:config.ini -- 建议放在项目的根目录下
    [uwsgi]
    http = 192.168.134.128:9000 # uWSGI服务器访问地址
    #uWSGI和nginx通信的port
    socket = 192.168.134.128:9001
    # the base directory (full path)
    chdir = /usr/local/django_projects/ems #项目所在目录
    # Django's wsgi file
    wsgi-file = ems/wsgi.py #基于项目目录的相对路径
    # maximum number of worker processes
    processes = 4
    #thread numbers startched in each worker process
    threads = 2
    #monitor uwsgi status 通过该端口可以监控 uwsgi 的负载情况
    stats = 192.168.134.128:9002
    # clear environment on exit
    vacuum = true
    pidfile = /usr/local/django_projects/ems/uwsgi.pid #进程ID存放于此文件,位置可以自定义
    #daemonize-run ,file-to-record-log
    daemonize = /usr/local/django_projects/ems/uwsgi.log #后台启动模式,日志文件记录位置自定义
    #http://ip:port/static/...请求会进入该目录找资源,此处可以指向某个app下的static目录
    #或是将所有静态文件汇总到项目的某一个目录下,然后配置在此是更好的选择
    #汇集所有已安装app的静态资源到一个目录下,请参见后续内容
    #http://ip:port/static/a/b/c/d.png ==> /usr/local/xxxx/static/a/b/c/d.png
    static-map =/static=/usr/local/xxx/static # 只在你写的static-map中找静态资源
  • 根据如上配置启动uWSGI服务器

    uwsgi --ini config.ini #注意:config.ini是一个相对路径

  • 关闭服务器

    uwsgi --stop uwsgi.pid #通过进程id文件

  • 使用uwsgi服务器运行项目后,出现静态资源无法加载的问题

1
2
3
4
5
6
# 分析原因: 
1.在django内置的服务器中,调试模式,django查找静态资源默认在每个app的static目录
2. 或者可以在setting.py文件中
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] 将项目根目录下的static目录作为静态资源的查找路径

# 但是uwsgi服务器有自己的静态资源的处理方式,也就是它不会在上述的两个地方查找静态资源
  • uwsgi如何处理静态资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在config.ini配置文件的最后面来告诉uwsgi服务器要在哪里去找静态资源
[uwsig]
http = xxx:9000
socket = xxx:9001
...
...
...
# 写你的静态资源的绝对路径,如果在项目根目录下,直接写项目根目录/static即可
# 如果是每个app自己管理,把所有的app的static目录添加进来,有几个app加几个static-map
static-map=/static=/usr/local/xxx/static

url可以分为两大类:
1. 普通url-动态资源url 会在urls.py文件中匹配访问路径 最终找到视图函数
2. 静态资源url-- /static/ 告诉django当url中有/static/时django会在静态资源的目录下去查找资源
  • 如果你的app过多,每个app自己管理静态资源,此时需要添加的static-map太多
1
2
3
4
5
6
# 只需要做两步操作就可以把所有app下的静态资源static目录的文件收集到某一个目录下

1. 在项目的setting.py文件中添加 STATIC_ROOT=os.path.join(BASE_DIR,'static')
用于告诉django,将来收集到的静态资源往哪里放

2. 执行收集的指令 python manage.py collectstatic

STATIC_URL = ‘/static/‘ # 每个静态资源URL的访问前缀

STATICFIELS_DIRS = [os.path.join(BASE_DIR,’static’)] # 添加django内置服务器查找静态资源的路径

STATIC_ROOT = os.path.join(BASE_DIR,’static’) # 收集静态资源时的路径

static-map=/static=xxxx # 告诉uwsgi服务器到哪里去找静态资源

Prev:
Next: