从零部署一个CRM项目


返回

CRM业务部署

一、 环境搭建

1.1 服务器系统

  • CentOS Linux release 7.9.2009 (Core) 最小安装

1.2 配置网络环境

  • 如果没有网络,请修改以下配置文件

    $ vi /etc/sysconfig/network-scripts/ifcfg-ens33 
    ONBOOT="yes"  # 将此参数设置为yes
    
  • 重启网络

    $ systemctl stop NetworkManager  # 关闭无线网络
    $ systemctl restart network  # 重启有线网络
    
  • 关闭防火墙

    $ iptables -F  # 清空防火墙规则
    $ systemctl stop firewalld  # 关闭防火墙服务
    $ systemctl disable firewalld  # 禁止防火墙开机启动
    
  • 查看IP

    $ ip addr show  # 检查是否分配到IP
    

1.3 安装Nginx

  • 依赖包

    $ yum -y install gcc pcre-devel zlib zlib-devel wget make
    
  • 编译 & 安装

    $ wget http://nginx.org/download/nginx-1.19.6.tar.gz  
    $ tar -xf nginx-1.19.6.tar.gz 
    $ cd nginx-1.19.6 
    $ ./configure --prefix=/opt/nginx1.19.6  # 统一安装路径:/opt
    $ make && make install  # 编译 & 安装
    
  • 配置环境变量

    $ vim /etc/profile  # 修改配置文件
    
    # 添加环境变量 /opt/nginx1.19.6/sbin
    PATH="/opt/nginx1.19.6/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
    
    $ source /etc/profile  # 生效
    $ which nginx  # 检测
    

1.3 安装Python

  • 依赖包

    $ yum -y install gcc-* openssl-* libffi-devel sqlite-devel patch gcc python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel  
    
  • 编译 & 安装

    $ wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz
    $ tar -xf Python-3.7.9.tar.xz 
    $ cd Python-3.7.9/
    $ ./configure --prefix=/opt/python3.7.9/  # 统一安装路径:/opt
    $ make && make install  # 编译 & 安装
    
  • 配置环境变量

    $ vim /etc/profile
    
    # 添加环境变量 /opt/python3.7.9/bin
    PATH="/opt/python3.7.9/bin:/opt/nginx1.19.6/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
    
    $ source /etc/profile  # 生效
    $ which python3  # 检测
    $ which pip3
    

1.4 安装MySQL

  • CentOS 7以上,MySQL改为MariaDB

    $ yum -y install mariadb-server mariadb
    

1.5 安装Python虚拟环境

  • 安装

    $ pip3 install -i https://pypi.douban.com/simple/ virtualenv
    
  • 创建虚拟环境:crm_venv

    $ virtualenv --python=python3 /opt/crm_venv  # 创建
    $ source /opt/crm_venv/bin/activate  # 切换
    $ deactivate  # 退出
    

1.6 安装uwsgi(虚拟环境)

  • 在crm_venv虚拟环境环境下,安装uwsgi

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

1.7 安装Django(虚拟环境)

  • 在crm_venv虚拟环境环境下,安装django

    $ pip3 install -i https://pypi.douban.com/simple/ django
    
  • 解决运行Django项目时,SQLite3版本过低报错的问题

    $ wget https://www.sqlite.org/2020/sqlite-autoconf-3340000.tar.gz  # 官网下载最新版本
    $ ./configure --prefix=/opt/sqlite3.34.0
    $ make && make install  # 编译安装
    $ mv /usr/bin/sqlite3 /usr/bin/sqlite3_old_3.7.17  # 备份老版本
    $ ln -s /opt/sqlite3.34.0/bin/sqlite3 /usr/bin/sqlite3  # 建立新版本的软连接
    
    $ vim ~/.bashrc  # 将路径传递给共享库
    # 追加以下内容:
    export LD_LIBRARY_PATH="/opt/sqlite3.34.0/lib"  
    
    $ source ~/.bashrc  # 生效
    $ python3  # 检查
    >>> import sqlite3
    >>> sqlite3.sqlite_version
    '3.34.0'  # 配置成功
    

1.8 安装supervisor进程管理工具

  • 安装

    $ yum -y install supervisor
    
  • 如果yum获取不到supercisor,请先安装epel仓库

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

二、配置

2.1 导入CRM项目

  • crmProject导入服务器系统:/root

    $ scp -r ./crmProject root@服务器IP:/root
    

2.2 导出Django项目静态文件

  • 配置文件settings.py

    STATIC_ROOT = '/root/crm_static/'  # 静态文件导出的路径
    
  • 导出Django项目静态文件

    $ python3 manage.py collectstatic
    

2.3 配置uwsgi

  • 创建配置文件/opt/crm_venv/uwsgi.ini

    $ vim /opt/crm_venv/uwsgi.ini 
    
  • 配置如下

    ############################ uwsgi.ini ############################
    
    [uwsgi]
    
    # the base directory (full path) django 程序主目录
    chdir = /root/crmProject/  
    
    # Django's wsgi file
    module = crmProject.wsgi
    
    # python 虚拟环境
    home = /opt/crm_venv
    
    # the local unix socket file than commnuincate to Nginx 用于和 nginx 进行数据交互的端口
    socket = 0.0.0.0:9000
    
    master = true 
    # maximum number of worker processes 优化建议:2*cpu核数+1
    processes = 5
    
    # clear environment on exit
    vacuum = true
    
    ############################ end ############################
    

2.4 配置supervisor

  • 导出配置文件/opt/crm_venv/supervisord.conf

    $ echo_supervisord_conf > /opt/crm_venv/supervisord.conf
    $ vim /opt/crm_venv/supervisord.conf
    
  • 追加以下内容

    ############################ supervisord.conf ############################
    
    [program:uwsgi_crm]
    
    command = /opt/crm_venv/bin/uwsgi  --ini  /opt/crm_venv/uwsgi.ini  ; 绝对路径执行命令
    autostart = true  ; 在supervisord启动的时候也自动启动
    startsecs = 10  ; 启动10秒后没有异常退出,表示启动成功,默认为1秒
    autorestart = true  ; 程序退出后自动重启,可选值[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
    stopasgroup = true  ; 默认为false,进程被杀死时,是否向进程组发送stop信号,包括子进程
    killasgroup = true  ; 默认为false,是向进程组发送kill信号,包括子进程
    
    ############################ end ############################  
    

2.5 配置Nginx

  • 修改配置文件/opt/nginx1.19.6/conf/nginx.conf

    $ vim /opt/nginx1.19.6/conf/nginx.conf
    
  • 配置如下

    ############################ nginx.conf ############################
    user  root;
    worker_processes  1;
    # 错误日志路径
    error_log  logs/error.log;
    pid        logs/nginx.pid;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        # 日志格式
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        # 日志路径
        access_log  logs/access.log  main;
      
        sendfile        on;
        keepalive_timeout  65;
        gzip  on;
      
        upstream nginx_server {
            # 指定uwsgi进程的主机IP和端口
            server 0.0.0.0:9000 weight=1;
            # server 0.0.0.0:9001 weight=1;
            # server 0.0.0.0:9002 weight=1;
        }
      
        # web服务器:80端口
        server {
            listen       80;
            server_name  localhost;
            charset utf-8;
            location / {
                include uwsgi_params;
                # 反向代理 & 负载均衡
                uwsgi_pass  nginx_server;
            }
            # 本地静态文件夹
            location /static {
                alias /root/crm_static;
            }
        }
    }
    ############################ end ############################  
    

三、启动

3.1 启动MySQL & 数据导入

  • 启动

    $ systemctl start mariadb 
    
  • 运行 & 初始化mysql密码:123456

    # 首次使用密码为空,直接回车即可进入mysql
    $ mysql -u root -p  
    
    # 更新密码,与CRM项目配置文件 的 密码一致
    >> UPDATE mysql.user SET Password=PASSWORD('123456') WHERE User='root'; 
    >> FLUSH PRIVILEGES; 
    
  • 解决数据库中文乱码问题

    $ vim /etc/my.cnf
    
    # 在[mysqld]下新增如下代码
    character_set_server= utf8
    
    # 重启
    $ systemctl restart mariadb 
    
  • 数据导入前,先在数据库中创建一个同名的空库:db_crm

    $ mysql -u root -p
    >>> create database db_crm;
    
  • 导入所有表到db_crm

    $ mysql -u root -p db_crm < /root/crmProject/db_crm.sql 
    

3.2 启动uwsgi

  • 启动supervisor

    $ supervisord -c /opt/crm_venv/supervisord.conf
    
  • 通过supervisor进程管理,快捷启动uwsgi

    $ supervisorctl -c /opt/crm_venv/supervisord.conf  # 进程管理
    
    >> status  # 查看进程状态
    >> stop uwsgi_crm  # 停止uwsgi_crm进程
    >> stop all  # 停止所有进程
    >> start uwsgi_crm  # 开启uwsgi_crm进程
    >> restart uwsgi_crm  # 重启uwsgi_crm进程
    >> exit  # 退出
    
  • 关闭supervisor

    $ supervisorctl shutdown
    

3.3 启动Nginx

  • 启动

    $ nginx -t  # 检查语法
    $ nginx  # 启动
    
  • 重启

    $ nginx -s reload  # 平滑重启:重新读取配置文件,而不重启进程
    $ nginx -s stop  # 停止nginx进程
    
  • 查看当前服务器连接数

    $ netstat -antpl | grep nginx | grep EXTABLISHED | wc -l
    
返回