• 部署图书管理系统,安装配置redis数据库,uWSGI命令学习与使用,supervisor工具的安装与使用


    1. 熟悉linux操作

    cat /etc/redhat-release 查看系统版本
    cat /etc/os-release 查看系统版本

     

    2. 配置阿里云的源

    2.1 备份所有repo

    cd /etc/yum.repos.d
    mkdir repobak
    mv * repobak/

    2.2 下载阿里云源和epel扩展源

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

    2.3 清空yum缓存并且生成新的yum缓存

    3.上传图书管理系统项目

    4.安装python3解释器

    #####   注意1: 必须先安装库环境
    yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

    ##### 注意2: 配置环境变量/etc/profile,python3的变量一定要放在第一位

    5.安装虚拟环境virtualenv

    5.1 安装虚拟环境

    pip3 install -i https://pypi.douban.com/simple virtualenv

    6.安装virtualenvwrapper工具

    6.1 下载并安装virtualenvwrapper

    pip3 install -i https://pypi.douban.com/simple virtualenvwrapper

    6.2 配置用户环境变量配置文件

    vim ~/.bashrc

    在最后添加以下内容:

    export WORKON_HOME=~/Envs
    export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
    export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3
    source /opt/python36/bin/virtualenvwrapper.sh

    6.3 重载用户环境变量配置文件

    source ~/.bashrc

    6.4 创建图书管理系统虚拟环境

    mkvirtualenv book_manage

     

    7.安装数据库并导入数据

    完成centos7下安装配置mariadb数据库,且创建数据库数据,迁移导入knight数据
    在centos7下,mariadb就是mysql数据库,只是包名的不同

    7.1 下载mariadb

    yum install -y mariadb-server mariadb

    7.2 初始化mysql

    # 先启动mariadb
    systemctl start mariadb

    # 再进行初始化
    mysql_secure_installation

    # 使用 set 指令设置root密码:
    MariaDB [(none)]> SET password for 'root'@'localhost'=password('newpassword');  
    MariaDB [(none)]> exit;

    7.3 配置中文支持

    修改/etc/my.cnf配置文件,添加以下配置

    修改/etc/my.cnf.d中server和client的配置

    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    log-error=/var/log/mysqld.log
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

    7.4 配置完成后需要重启mariadb服务

    systemctl restart mariadb

    7.5 在linux上登录mariadb

    mysql -uroot -p

    7.6 使用root用户连接后端django程序

    # 如果使用的是其他用户连接后端django程序, 则需要重新创建用户并授权

    # 1. 创建用户
    create user 'tiger'@'%' identified by '123456';   # %代表所有主机
    # 2. 授权用户
    grant all privileges on *.* to tiger@'%' identified by '123456';
    # 3. 刷新授权表
    flush privileges

    7.7 刷新授权表

    7.7.1 导出图书管理系统项目的数据库
    mysqldump -u root -p --all-databases > /opt/book_manage.sql
    7.7.2 上传这个数据文件到linux数据库中
    7.7.3 在linux的mysql,导入这个数据文件
    source /opt/book_manage.sql

    注意1,linux的数据库,需要对root用户设置远程链接的权限, 密码是redhat

    注意,SELinux和linux的防火墙要给关闭,否则windows去链接linux的3306端口可能被拒绝!!!!!

    注意,SELinux和linux的防火墙要给关闭,否则windows去链接linux的3306端口可能被拒绝!!!!!

    注意,SELinux和linux的防火墙要给关闭,否则windows去链接linux的3306端口可能被拒绝!!!!!

     

    8. 安装配置redis数据库

    8.1 下载并安装redis

    wget http://download.redis.io/releases/redis-5.0.2.tar.gz
    tar -zxvf redis-5.0.2.tar.gz
    cd redis-5.0.2
    make && make install

    8.2 准备redis配置文件

    mkdir -p /opt/redis_conf
    touch /opt/redis_conf/redis-6379.conf
    vim /opt/redis_conf/redis-6379.conf

    8.3 在redis配置文件中添加以下配置

    port 6379
    daemonize yes
    pidfile /data/6379/redis.pid
    loglevel notice
    logfile "/data/6379/redis.log"
    dir /data/6379
    protected-mode yes

    8.4 创建data文件

    mkdir -p /data/6379

    8.5 启动redis

    redis-server /opt/redis_conf/redis-6379.conf

     

    9. 解决项目启动的几个问题

    python manage.py runserver 0.0.0.0:8000
    测试使用linux的python解释器去运行项目 切换到 项目中运行(注意要解决解释器的模块问题,才能正常运转项目), 在启动django时会遇到以下几个问题:

    9.1 报错导入配置错误

    File "/opt/Envs/book_manage/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module>
      raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
    解决办法:
    # 修改文件36行的if判断语句,直接注释即可

    9.2 报错编码错误

    File "/opt/Envs/book_manage/lib/python3.6/site-packages/django/db/backends/mysql/operations.py", line 146, in last_executed_query
      query = query.decode(errors='replace')
    解决办法:
    将文件中146行原decode改为encode即可

    9.3 报错SQLite错误

    File "/root/Envs/book_manage/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 65, in check_sqlite_version
      raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
    django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

    解决方法

    注释掉报错文件中此函数的代码块, 并加上pass即可

    9.4 配置settings文件,如ALLOW_HOSTS配置

    ALLOW_HOSTS = ["*"]

    9.5 修改settings文件,修改跨域配置

    CORS_ORIGIN_WHITELIST = (
      'http://10.0.0.5',
    )

     

    10. 完成uWSGI命令学习与使用

    10.1 使用uWSGI启动图书管理系统项目,支持多进程

    10.2 使用pip安装uwsgi模块

    pip3 install uwsgi

    10.3 uwsgi的hello world测试

    参照博客https://www.cnblogs.com/tiger666/articles/10313069.html里面的安装uwsgi版块

    创建一个测试文件testuwsgi.py, 运行简单的uWSGI站点

    10.3.1 创建文件vim /opt/testuwsgi.py 写入以下内容
    def application(env, start_response):
      start_response('200 OK', [('Content-Type','text/html')])
      return [b"Hello World"]
    10.3.2 使用uwsgi命令启动此文件
    uwsgi --http :9000 --file testuwsgi.py
    10.3.3 在浏览器通过IP加端口进行访问
    http://10.0.0.5:9000

    10.4 配置uwsgi.ini文件

    在django项目根目录下(manage.py同级别目录)创建这个文件

    [uwsgi]
    #使用nginx连接时使用,Django程序所在服务器地址
    # socket=0.0.0.0:9000
    #直接做web服务器使用,Django程序所在服务器地址
    http=0.0.0.0:9000
    #项目目录
    chdir=/opt/book_manage
    #项目中wsgi.py文件的目录,相对于项目目录
    wsgi-file=LIB/wsgi.py
    # 进程数
    processes=1
    # 线程数
    threads=2
    # uwsgi服务器的角色
    master=True
    # 存放进程编号的文件
    pidfile=uwsgi.pid
    # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
    # 如果启用了supervisor工具,就将此行注释
    daemonize=uwsgi.log
    # 指定依赖的虚拟环境
    virtualenv=/root/Envs/book_manage_env
    注意: 目前暂时先用http,如果使用nginx的话,就需要注释掉http,启用socket

    10.5 使用uwsgi命令启动django程序

    uwsgi --ini /opt/book_manage/uwsgi.ini

    10.6 uwsgi启动后无法访问的问题解决

    修改项目里面的wsgi.py文件,将settings的配置指向dev.py

    vim /opt/book_manage/book_manage/wsgi.py

    修改配置文件

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'book_manage.settings')

    10.7 uwsgi不能处理静态文件

    uwsgi本身是支持高并发,多进程的功能,这是它的优点

    缺点: 不能处理静态文件

    11 收集django的静态文件

    由于uwsgi对静态文件的处理很差,然而nginx处理静态文件是一把手,所以我们的项目部署还需要结合nginx来使用

    11.1 设置django的静态文件目录并收集, 打开mysite/settings.py, 加入这一项配置:

    STATIC_ROOT='/opt/book_manage/static'  # 在STATIC_URL = '/static/'配置上面加这一行
    STATIC_URL = '/static/'
    STATICFILES_DIRS=[
      os.path.join(BASE_DIR,"static"),
    ]

    那么,上述的参数STATIC_ROOT用在哪?看下面

    11.2 通过python3 manage.py collectstatic 收集所有你使用的静态文件保存到STATIC_ROOT

    python3 manage.py collectstatic

    # STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
    # 把这些文件放到一起是为了用nginx等部署的时候更方便

    11.3 查看django的静态文件收集目录

    ls /opt/book_manage/static

     

    12.完成nginx的安装并配置nginx

    完成nginx处理图书管理系统项目的静态文件, 与后端的接口配置

    12.1 nginx.conf配置文件详情

    server {
      listen       80;
      server_name 10.0.0.5;
      #charset koi8-r;
      #access_log logs/host.access.log main;

      location / {
          include uwsgi_params;
          uwsgi_pass 0.0.0.0:9000;
      }
      location /static {
          root   /opt/book_manage;
      }
      error_page   500 502 503 504 /50x.html;
      location = /50x.html {
          root   html;
      }
    }

    虚拟主机: 用于接受用户发起的80端口的请求,反向代理转发给9000的uwsgi应用, 同时处理后端的静态文件static

    12.2 nginx配置并启动好之后,再启用uwsgi.ini配置文件里面的socket并禁用http配置

    [uwsgi]
    #使用nginx连接时使用,Django程序所在服务器地址
    socket=0.0.0.0:9000
    #直接做web服务器使用,Django程序所在服务器地址
    # http=0.0.0.0:9000
    #项目目录
    chdir=/opt/book_manage
    #项目中wsgi.py文件的目录,相对于项目目录
    wsgi-file=book_manage/wsgi.py
    # 进程数
    processes=2
    # 线程数
    threads=2
    # uwsgi服务器的角色
    master=True
    # 存放进程编号的文件
    pidfile=uwsgi.pid
    # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
    # 如果启用了supervisor工具,就将此行注释
    daemonize=uwsgi.log
    # 指定依赖的虚拟环境
    virtualenv=/root/Envs/book_manage

    13. 测试uwsgi与nginx

    测试手动启动uwsgi与nginx,能够保证正常访问即可

    13.1 启动uwsgi

    /root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini

    13.2 平滑重启nginx

    /opt/nginx116/sbin/nginx -s reload

    13.3 项目访问不了的解决思路(重要指数****************)

    1 先关闭nginx, 再关闭uwsgi,直接使用python manage.py runserver命令启动django项目
    2 关闭刚才启动的django,使用uwsgi将项目跑起来, 使用9000端口访问,确认是否正常
    3 注释掉uwsgi配置文件中的http,启用socket,再启动uwsgi,再启动nginx,再进行访问
    http://10.0.3.156

    14 supervisor工具的安装与使用

    14.1 supervisor的概念

    supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,而且一旦程序错误导致进程退出的话,系统也无法自动重载任务。

    14.2 安装

    由于supervisor在python3下无法使用,因此只能用python2去下载!!!!!!

    由于supervisor在python3下无法使用,因此只能用python2去下载!!!!!!

    由于supervisor在python3下无法使用,因此只能用python2去下载!!!!!!

    easy_install supervisor   # 这个是python2下面的安装模块命令,等同于python3下面的pip

    如果easy_install命令无法使用的话,就安装一下python-setuptools工具即可
    yum install python-setuptools

    14.3. 使用命令生成supervisor配置文件

    echo_supervisord_conf > /etc/supervisord.conf

    14.4. 修改配置文件/etc/supervisord.conf

    在文件末尾添加如下配置:

    [program:book_manage]
    command=/root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini
    stopasgroup=true
    killasgroup=true
    # 如果发现关闭supervisor进程后,结束uwsgi进程无效,就需要加上这两个参数

    14.5. 启动supervisor工具

    supervisord -c /etc/supervisord.conf

    14.6 查看supervisor的状态

    supervisorctl

    supervisor交互模式中基本操作命令

    start 进程名   # 启动进程
    stop 进程名   # 停止进程
    start all     # 启动所有进程
    stop all     # 启动所有进程

    14.7 supervisor启动命令参数

    # 任务管理命令如下:有两种,一个是参数形式, 一个是交互式
    # 参数形式  
    supervisord -c /etc/supervisor.conf stop/start/restart   all
    supervisord -c /etc/supervisor.conf start qishi8

    # 交互式形式
    supervisord -c /etc/supervisor.conf

    14.8 重新加载supervisor(了解即可)

    一、添加好配置文件后

    二、更新新的配置到supervisord    

    supervisorctl update
    三、重新启动配置中的所有程序

    supervisorctl reload
    四、启动某个进程(program_name=你配置中写的程序名称)

    supervisorctl start program_name
    五、查看正在守候的进程

    supervisorctl
    六、停止某一进程 (program_name=你配置中写的程序名称)

    supervisorctl stop program_name
    七、重启某一进程 (program_name=你配置中写的程序名称)

    supervisorctl restart program_name
    八、停止全部进程

    supervisorctl stop all
    注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

     

  • 相关阅读:
    redis特性,使用场景
    docker 界面话管理工具Portainer
    解决streamsets jdbc全量模式数据重复问题
    clickhouse 行列转换
    clickHouse 常用命令
    mysqldump导出数据
    oracle 迁移到clickhouse 45亿条数据
    clickHouse 导入/删除/更新数据
    clickhouse Mysql 数据类型对比
    maven 的使用
  • 原文地址:https://www.cnblogs.com/youhongliang/p/12130797.html
Copyright © 2020-2023  润新知