vlambda博客
学习文章列表

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境


  点击上方

Python Web与Django大咖之路”关注我!


工 作 原 理

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境


一、安装nginx

  • 安装依赖包

yum install gcc gcc-c++ pcre-devel 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 openssl-devel -y
  • 准备用户

groupadd nginxuseradd -g nginx nginx
  • 下载、配置、编译、安装

# 下载源码包wget http://nginx.org/download/nginx-1.16.1.tar.gz# 解压tar -zxvf nginx-1.16.1.tar.gz# 进入目录cd nginx-1.16.1/# 配置./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-http_ssl_module --with-stream# 编译make# 安装make install# 查看cd /usr/local/nginx # conf:  配置目录 # logs: 日志文件——access.log、error.log # sbin: 运行nginx的目录  # html: 显示html的文件
  • 小技巧

    • 如果想要将centos7下面的Nginx的配置文件nginx.conf的代码高亮,那么就要将下载的源码包contrib/vim/*的文件拷贝到本机安装的vim下:

    cp -r contrib/vim/* /usr/share/vim/vim74/
    •  将启动nginx的运行目录加入环境变量,这样你就可以在任何目录下直接输入nginx运行 —— 编辑文件:vim ~/.bash_profile

    vim ~/.bash_profile# 编辑环境变量PATH=/usr/local/nginx/sbin:$PATH:$HOME/bin# 通过source使更改生效:source ~/.bash_profile

            

二、安装node环境(部署前端项目需要)

  • 下载源码包、解压、转移软件、做软连接

# 下载源码包wget https://nodejs.org/dist/v12.16.2/node-v12.16.2-linux-x64.tar.xz# 解压tar -xf node-v12.16.2-linux-x64.tar.xz# 移动到你选择的安装目录mv node-v12.16.2-linux-x64 /usr/local/node-v12.16.2# 做软连接ln -s /usr/local/node-v12.16.2 /usr/local/node
  • 小技巧

  • 将node添加进环境变量 —— 辑文件:vim ~/.bash_profile

    vim ~/.bash_profile# 编辑环境变量PATH=/usr/local/node/bin:/usr/local/nginx/sbin:$PATH:$HOME/bin# 通过source使更改生效:source ~/.bash_profile

    进行测试:

    node -vnpm -v

    更新npm版本:

    npm i -g npm
  • 部署前端项目

# 假设现在linux上有一个文件:storm_vue,是一个vue前端项目, 路径是/djano_project/storm_vue# 第一步:进入目录cd storm_vue# 第二步:npm install# 第三步:准备编译打包vue项目,替换api.js配置文件所有地址,改为服务器地址# xx.xxx.xxx.xxx为服务器地址sed -i 's#127.0.0.1#xxx.xxx.xxx.xxx#g' /djano_project/storm_vue/src/restful/api.js# 第四步:此时打包vue项目,生成一个dist静态文件夹npm run build# 至此vue代码就结束了,只需要让nginx配置,找到vue的index.html首页文件即可.# 第五步: 配置nginx.conf,指向生成的dist文件夹vim /usr/local/nginx/conf/nginx.conf """ server { listen 80;   server_name vue.stormztt.com; location / {     root /djano_project/storm_vue/dist; index index.html index.htm; }    error_page 400 403 404 405 /40x.html; }   """# 检测nginx语法nginx -t# 不停机重新加载nginxnginx -s reload


三、安装Python环境

  • 下载配置Python

# 下载源码包wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz# 解压tar -zxvf Python-3.6.4.tgz# 进入目录cd Python-3.6.4/# 生成Python环境安装文件./configure --prefix=/usr/local/python3 --enable-optimizations --with-ssl # 编译make# 安装make install# 创建软链接ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3# 验证是否安装成功python3 -Vpip3 -V# 修改pip安装源(一般如果是买的服务器都已经自动设置好的)cd ~mkdir .pipcd .pipvim pip.conf    #进入后添加以下内容,保存退出. [global] index-url = http://mirrors.tencentyun.com/pypi/simple trusted-host = mirrors.tencentyun.com
  • 安装包管理工具virtualenv

# 安装pip3 install virtualenvyum install python-setuptools python-develpip3 install virtualenvwrapper# 配置全局变量# 查找/virtualenvwrapper.sh路径find / -name virtualenvwrapper.sh# 查找python3路径find / -name python3# 查找virtalenv路径find / -name  virtualenv# 编辑.bashrc文件vim ~/.bashrc# 打开.bashrc文件将下面五行添加到末尾WORKON_HOME=~/EnvsVIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/python3/bin/virtualenvsource /usr/local/python3/bin/virtualenvwrapper.sh # 重启配置文件  source ~/.bashrc
虚拟环境列表 workon
新建虚拟环境 mkvirtualenv [虚拟环境名称]
启动/切换虚拟环境 workon [虚拟环境名称]
删除虚拟环境 rmvirtualenv [虚拟环境名称]
离开虚拟环境 deactivate
  • 测试:新建虚拟环境

mkvirtualenv project_env

     如果报错:

...Creating virtual environment...usage: virtualenv [--version] [--with-traceback] [-v | -q] [--app-data APP_DATA] [--clear-app-data] [--discovery {builtin}] [-p py] [--creator {builtin,cpython2-posix}] [--seeder {app-data,pip}] [--no-seed] [--activators comma_sep_list] [--clear] [--system-site-packages] [--symlinks | --copies] [--download | --no-download] [--extra-search-dir d [d ...]] [--pip version] [--setuptools version] [--wheel version] [--no-pip] [--no-setuptools] [--no-wheel] [--symlink-app-data] [--prompt prompt] [-h] destvirtualenv: error: unrecognized arguments: --no-site-packages...

没有这个参数 –no-site-packages ,是 virtualenv 版本问题。升级:

pip3 install --upgrade virtualenv==16.7.9

四、新建Python环境,安装django常用的包

# 新建虚拟环境mkvirtualenv [虚拟环境名称]# 安装uwsgipip3 install uwsgi# 安装djangopip3 install django==2.2.4# 一次性安装pip3 install -r /django_project/requirements.txt    文件requirements.txt的内容 """ amqp==2.5.2 billiard==3.6.3.0 celery==4.4.2 certifi==2019.11.28 chardet==3.0.4 coreapi==2.3.3 coreschema==0.0.4 Django==2.2.4 django-cors-headers==3.2.1 django-crispy-forms==1.9.0 django-filter==2.2.0 django-formtools==2.2 django-guardian==2.2.0 django-redis==4.11.0 djangorestframework==3.11.0 djangorestframework-jwt==1.11.0 drf-extensions==0.6.0 elasticsearch==7.6.0 idna==2.9 importlib-metadata==1.6.0 itypes==1.1.0 Jinja2==2.11.1 kombu==4.6.8 Markdown==3.2.1 MarkupSafe==1.1.1    mongoengine==0.19.1 Pillow==7.0.0 Pygments==2.6.1 PyJWT==1.7.1 pymongo==3.10.1 PyMySQL==0.9.3 pytz==2019.3 redis==3.4.1 requests==2.23.0 six==1.14.0 sqlparse==0.3.1 uritemplate==3.0.1 urllib3==1.25.8 vine==1.3.0 zipp==3.1.0 """


五、部署django项目

# 假设Linux上有一个django项目:blog-storm, 路径为:/django_project/blog-storm
  • 配置uwsgi

vim /django_project/blog-storm/uwsgi.ini
# 进入文件后,写入下列语句[uwsgi]# 指定运行目录chdir=/django_project/blog-storm# Django项目的wsgi文件的所在位置module=blog-storm.wsgi# http:直接做web服务器使用http=127.0.0.1:9001# 项目运行环境所在路径 virtualenv=/root/Envs/project_env# master允许主进程存在master=true# 开启的进程数量processes=1# pidpidfile=/django_project/blog-storm/uwsgi.pid# 日志daemonize=/django_project/blog-storm/uwsgi.log# 当服务器退出的时候自动清理环境,删除 unix socket 文件和 pid 文件vacuum = true
  • 启动uwsgi

# uWSGI配置为开机自启uwsgi --ini /django_project/blog-storm/uwsgi.ini &
  • 配置nginx

vim /usr/local/nginx/conf/nginx.conf# 进入文件后,新启一个server{},修改为下列语句upstream django { server 127.0.0.1:9001;}server { listen 8000;   server_name blog.stormztt.com;   charset utf-8;   client_max_body_size 75M; location / {     root /django_project/blog-storm; # uwsgi_pass 指的是本机 IP 和端口号,并且要与 uwsgi.ini 配置文件中的 IP 和端口号必须保持一致。     uwsgi_pass django;     # uwsgi_params文件的位置 include /usr/local/nginx/conf/uwsgi_params; } location /static { alias /django_project/blog-storm/static;   }   location /media {     alias /django_project/blog-storm/media; }}
  • nginx负载均衡

vim /usr/local/nginx/conf/nginx.conf# 写入"""{ worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream backend { server xxx.xxx.xxx.1:80 weight=1;         server xxx.xxx.xxx.2:80 weight=1; }     server { listen 80;         server_name www.stormztt.com; location / { index index.html index.htm; proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_connect_timeout 60;  proxy_send_timeout 60;  proxy_read_timeout 60;  proxy_buffer_size 4k;  proxy_buffers 4 32k; proxy_busy_buffers_size 64k;  proxy_temp_file_write_size 64k;      }   }}"""


六、安装、配置git

  • 安装git

# yum安装yum -y install git# 测试git --version
  • 配置git账户

    • 配置账户和密码

    git config --global user.name "xxxx"git config --global user.email "[email protected]"
    • 查看配置是否生效

    git config --list
  • 配置SSH用于拉取远程仓库

    • 先在本地生成ssh key,生成公钥和私钥,后续在github配置中需要。

ssh-keygen -t rsa -C "xxxx@xxx.com"
    • 确认路径按1次回车,提示:Enter passphrase(输入密码),不用输密码再按2次回车即可。生成的密钥存放路径 /root/.ssh/

    • id_rsa:私钥 ,id_rsa.pub:公钥            

  • 配置github

    1、打开网址:https://github.com/,找到settings

        

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境

         2、复制刚才生成的 id_rsa.pub 公钥,Add SSH key

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境

  • 测试拉github私有项目

git clone [git@github.com:xxxx.git]


八、安装MySQL、Redis、Mongo

  • MySQL安装

# 查询出来已安装的mariadbrpm -qa|grep mariadb # 卸载mariadb,文件名为上述命令查询出来的文件rpm -e --nodeps 文件名  # 创建mysql用户组groupadd mysql# 创建一个用户名为mysql的用户并加入mysql用户组useradd -g mysql mysql
# 进入目录/usr/localcd /usr/local# 创建目录mkdir mysql# 进入目录cd mysql/# 新建文件夹mkdir data# 下载wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.23.tar.gz# 解压tar -zxvf mysql-5.6.23.tar.gz# 进入解压目录cd mysql-5.6.23# yum方式安装相关依赖包yum -y install cmake bison git ncurses-devel gcc gcc-c++ autoconf# 设置安装参数cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DENABLE_DOWNLOADS=1# 编译安装makemake install # 安装完之后,清除临时文件make clean
# 修改目录属主权限chown -R mysql:mysql /usr/local/mysql/data/chown -R mysql:mysql /usr/local/mysql/
# 创建MySQL Server系统表cd /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data# 配置启动脚本cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql# 启动mysql/etc/init.d/mysql start# 查看状态/etc/init.d/mysql status # 设置环境变量vim ~/.bash_profile PATH=/usr/local/mysql/bin/:$PATH export PATHsource ~/.bash_profile
# 开机启动chkconfig  --level 345 mysql on
# 最后设置数据库管理员的登录密码:/usr/local/mysql/bin/mysqladmin -u root  password 'xxxxxx'# 设置完成进入mysqlmysql  -uroot -p
  • Redis安装

# 进入目录/usr/localcd /usr/local# 下载wget http://download.redis.io/releases/redis-stable.tar.gz# 解压tar -zxvf redis-stable.tar.gz# 进入解压目录cd redis-stable# 装包yum -y install centos-release-sclyum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutilsscl enable devtoolset-9 bashecho "source /opt/rh/devtoolset-9/enable" >>/etc/profile# 编译make MALLOC=libc # 进入src目录cd src# 安装 (作用:将/usr/local/redis-stable/src目录下的文件加到/usr/local/bin目录)make install
# 修改/usr/local/redis-stable/redis.conf文件 daemonize no 更改为 daemonize yes  # 设置redis连接密码  requirepass 密码  # 允许redis远程连接  bind 127.0.0.1 更改为 0.0.0.0  # 指定redis.conf文件启动./redis-server /usr/local/redis-stable/redis.conf# 放行6379端口firewall-cmd --zone=public --add-port=6379/tcp --permanentfirewall-cmd --reload# 检查端口是否开启firewall-cmd --query-port=6379/tcp

    Linux下登录redis:

    # 命令行登录redisredis-cli # 输入密码auth [password] # 选择数据库: 1-15(redis默认16个数据库)select xx

    注意:

            当修改了redis.conf,都要进行更新

    cd /usr/local/redis-stable/src./redis-server /usr/local/redis-stable/redis.conf
  • Mongo安装

    # 进入目录/usr/localcd /usr/local# 创建目录mkdir mongodb# 进入目录cd mongodb# 下载mongodb安装文件wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.4.tgz# 解压安装文件tar -zxvf mongodb-linux-x86_64-rhel70-3.2.4.tgz# 解压包移动到指定目录mv mongodb-linux-x86_64-rhel70-3.2.4/* /usr/local/mongodb# 配置全局变量并启用配置vim ~/.bash_profile """   ....... PATH=/usr/local/mongodb/bin/:$PATH    export PATH  """source ~/.bash_profile
    # 将mongo路径软链到/usr/bin路径下,方便随处执行mongo命令ln -s /usr/local/mongodb/bin/ /usr/local/bin/mongo
    # 创建数据库及log目录cd /usr/local/mongodb/bin mkdir -p data/test/db mkdir -p data/test/logs
    # 创建配置文件vi mongodb.conf》》》》》》》》》》》》》》》》》》》》》》》》》》#  设置数据文件的存放目录dbpath = /usr/local/mongodb/bin/data/test/db# 设置日志文i件的存放目录及其日志文件名logpath = /usr/local/mongodb/bin/data/test/logs/mongodb.log# 设置端口号(默认的端口号是 27017)port = 27017# 设置为以守护进程的方式运行,即在后台运行fork = true# 关闭http接口,默认关闭27018端口访问nohttpinterface = true # 设置允许远程连接bind_ip = 0.0.0.0》》》》》》》》》》》》》》》》》》》》》》》》》》
    # 启动配置./mongod -f mongodb.conf # 如果要取消配置文件:关闭配置   ./mongod -f ./mongodb.conf --shutdown# 查看MongoDB进程ps -ef | grep mongodb
    # 进入mongodb,查看mongodb是否真的已经安装成功cd /usr/local/mongodb/bin./mongo# 创建数据库用户use admin... db.createUser( ... { ... user: "admin1", ... pwd: "admin1234", ... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] ... } ... )# 测试是否可以访问db.auth("admin1","admin1234")1


九、使用图形化工具连接管理MySQL、Redis、Mongo

  • Navicat连接mysql

    第一步:使用xshell做隧道转换:

    实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境

               数字1:表示你将在window电脑上侦听的端口;

               数字2:表示服务器上mysql数据库的端口;

    实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境

        第二步:使用navicat连接: 

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境


  • RedisDesktopManager连接redis

    Name: 连接名;

    Host:服务器ip

    Port:端口

    Auth: 数据库密码

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境


  • Robo 3T 连接Mongo数据库

  • 1、Name:连接名

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境

    对admin数据库进行操作,则需要进行Authentication验证:

实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境






END


实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境