实战 | 一文掌握Centos7下搭建Django前后端分离项目部署环境
“Python Web与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 nginx
useradd -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下:
将启动nginx的运行目录加入环境变量,这样你就可以在任何目录下直接输入nginx运行 —— 编辑文件:vim ~/.bash_profile
cp -r contrib/vim/* /usr/share/vim/vim74/
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 -v
npm -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
# 不停机重新加载nginx
nginx -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/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
# 验证是否安装成功
python3 -V
pip3 -V
# 修改pip安装源(一般如果是买的服务器都已经自动设置好的)
cd ~
mkdir .pip
cd .pip
vim pip.conf
#进入后添加以下内容,保存退出.
[global]
index-url = http://mirrors.tencentyun.com/pypi/simple
trusted-host = mirrors.tencentyun.com
安装包管理工具virtualenv
# 安装
pip3 install virtualenv
yum install python-setuptools python-devel
pip3 install virtualenvwrapper
# 配置全局变量
# 查找/virtualenvwrapper.sh路径
find / -name virtualenvwrapper.sh
# 查找python3路径
find / -name python3
# 查找virtalenv路径
find / -name virtualenv
# 编辑.bashrc文件
vim ~/.bashrc
# 打开.bashrc文件将下面五行添加到末尾
WORKON_HOME=~/Envs
VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/python3/bin/virtualenv
source /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]
dest
virtualenv: error: unrecognized arguments: --no-site-packages
...
没有这个参数 –no-site-packages ,是 virtualenv 版本问题。升级:
pip3 install --upgrade virtualenv==16.7.9
四、新建Python环境,安装django常用的包
# 新建虚拟环境
mkvirtualenv
# 安装uwsgi
pip3 install uwsgi
# 安装django
pip3 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
# pid
pidfile=/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
2、复制刚才生成的 id_rsa.pub 公钥,Add SSH key
测试拉github私有项目
git clone [git@github.com:xxxx.git]
八、安装MySQL、Redis、Mongo
MySQL安装
# 查询出来已安装的mariadb
rpm -qa|grep mariadb
# 卸载mariadb,文件名为上述命令查询出来的文件
rpm -e --nodeps 文件名
# 创建mysql用户组
groupadd mysql
# 创建一个用户名为mysql的用户并加入mysql用户组
useradd -g mysql mysql
# 进入目录/usr/local
cd /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
# 编译安装
make
make 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 PATH
source ~/.bash_profile
# 开机启动
chkconfig --level 345 mysql on
# 最后设置数据库管理员的登录密码:
/usr/local/mysql/bin/mysqladmin -u root password 'xxxxxx'
# 设置完成进入mysql
mysql -uroot -p
Redis安装
# 进入目录/usr/local
cd /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-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "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端口
--zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
# 检查端口是否开启
--query-port=6379/tcp
Mongo安装
Linux下登录redis:
# 命令行登录redis
redis-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
# 进入目录/usr/local
cd /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做隧道转换:
数字1:表示你将在window电脑上侦听的端口;
数字2:表示服务器上mysql数据库的端口;
第二步:使用navicat连接:
RedisDesktopManager连接redis
Name: 连接名;
Host:服务器ip
Port:端口
Auth: 数据库密码
Robo 3T 连接Mongo数据库
1、Name:连接名
对admin数据库进行操作,则需要进行Authentication验证: