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