环境
- 全新的CentOS6.5(腾讯云服务器)
- Python3.6
- MySql5.7
- Django 2.0
- Wsgi
- Nginx
- Redis
开始
1. 准备一个CentOS 6.5服务器
2.安装Python3.6
- 到官网下载Python3.6的源码包(注意是源码包,不是win osx)
https://www.python.org/
- 借助Xptf工具(也可以用其他工具)把刚刚下载好的Python源码包,上传到服务器上
- 在centos安装Python依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
- 解压Python( /opt/Python-3.6.4.tgz 是Python源码包的存放路径 )
tar -xzvf /opt/Python-3.6.4.tgz -C /usr/local/src/
- 进入解压后的目录
cd /usr/local/src/
- 检测
在/usr/local/src/Python-3.6.4下输入:
./configure --prefix=/usr/local/python3
- 安装Python
make && make install
安装完成
- 永久添加环境变量
进入/etc/profile.d/ 新建python3.sh文件,在python3.sh文件中添加export PATH="$PATH:/usr/local/python3/bin"
cd /etc/profile.d/
vi python3.sh
export PATH="$PATH:/usr/local/python3/bin"
9. 重载环境变量
source ../profile
安装Python到此结束 !!!
3.安装mysql
4.把项目拖到服务器上(利用Xftp工具)
- 安装项目所需要的包
因为我把需要安装的包放到requirements.txt文件中,所以只要执行下面的代码,就能全部安装(也可以一个一个的pip安装)
pip3 install -r requirements.txt
5.安装wsgi
pip3 install uwsgi
成功安装Wsgi
6.在mysql中创建数据库
- 在django的项目中的settings.py文件中把mysql配置好(数据库名:api_service 名字任意起)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'api_service',
'USER': 'root',
'PASSWORD': 'r',
'HOST': '127.0.0.1',
'PORT': 3306
}
}
-
在服务的mysql中创建数据库(名字和settings.py中必须一致)
-
进入mysql
mysql -u root -p
-
创建数据库(我用的名字是:api_service,和settings.py保持一致)
mysql -u root -p
-
8.安装redis
-
下载redis / 解压 /安装
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar xzf redis-4.0.2.tar.gz
cd redis-4.0.2
make
make test
进入src目录执行启动命令
cd src
./redis-server
新开个终端,进入到src文件夹,执行命令
./redis-cli
redis的基本使用
# 插入数据
SET key value
# 查询数据
get key
Redis完成 !!!
- 在django的项目中的settings.py文件中把redis配置好
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100} #最大连接数
}
}
}
- 在django中如何使用redis请看另一篇文档
redis在django中的基本使用,点我
9.尝试通过django自带web服务器启动项目
进到项目所在的目录下
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py runserver 0.0.0.0:8888
可以正常访问我的项目接口
10.配置Nginx(一键配置)
需要注意一处地方:
- 把脚本放到和项目同级目录下
需要修改三处地方
- 修改IP地址
SERVER_NAME="192.144.xxx.xxx" #也可以是域名
- 修改项目名
PROJECT_NAME="jiekoufuwu"
SERVER_PORT=80
- 修改服务器中python的安装路径
export PATH=\$PATH:/usr/local/python3/bin
添加脚本
在项目的同级目录下新建dp.sh文件
把下面的脚本复制到dp.sh文件中
运行项目
sh dp.sh
#! /bin/sh
# description:一键部署Nginx+uWSGI+Django
# Author: Coxhuang
# blog:https://blog.csdn.net/Coxhuang/article/details/84068509
MANAGE_DIR=`pwd`
#**************************您的配置区域其他的无需修改**************************
# [config1]项目名称
PROJECT_NAME="teacher"
# [config2]nginx域名或者IP地址和端口,我们用来访问的
SERVER_NAME="192.168.31.xxx" #也可以是域名
SERVER_PORT=80
#******************************************************************************
# 项目目录
PROJECT_DIR=$MANAGE_DIR/$PROJECT_NAME
# 检查项目目录是否存在
check_project(){
if [ ! -d $PROJECT_DIR ]; then
echo -e "\n\033[33m PROJECT_DIR 没有指定,请指定项目目录\033[0m"
exit 0
elif [ -d $PROJECT_DIR ]; then
echo -e "\033[32m项目目录存在是:$PROJECT_DIR........\033[0m"
fi
}
# 创建脚本管理配置
make_script_init(){
echo -e "\033[32m开始创建script目录........\033[0m"
mkdir script
echo -e "\033[32m开始创建管理文件........\033[0m"
cat > script/manage_$PROJECT_NAME<<EOF
#! /bin/sh
# chkconfig: 345 85 15
# 上面一行注释:哪些Linux级别需要启动manage_teacher(3,4,5);启动序号(85);关闭序号(15)。
# description: manage script is the $PROJECT_NAME daemon.
# Author: luotianshuai
# 重载环境变量
export PATH=\$PATH:/usr/local/python3.6/bin
# 指定项目目录
PROJECT_DIR=$PROJECT_DIR
# 指定脚本目录在哪里
SCRIPTS_DIR=$MANAGE_DIR/script
# 描述
DESC="$PROJECT_NAME daemon"
# 名称
NAME=$PROJECT_NAME
# 脚本名称
SCRIPT_FILENAME=manage_$PROJECT_NAME
# 脚本目录名称
SCRIPTNAME=$MANAGE_DIR/script
# PID
PID="uwsgi.pid"
# 启动函数
d_start(){
# 进入到项目目录
cd $MANAGE_DIR/script/
# 判断这个PID是否存在
if [ ! -f "uwsgi.pid" ];then
echo -e "\n\033[34m$NAME项目启动中........\033[0m"
# 如果不存在执行
uwsgi --ini uwsgi.ini
killall nginx
/etc/init.d/nginx start
# 自动收集静态文件
cd $MANAGE_DIR/$PROJECT_NAME&& python3 manage.py collectstatic --noinput
echo -e "\n\033[32m$NAME 项目启动完成........\033[0m"
exit 0
fi
echo -e "\n\033[33m$NAME 项目已启动请勿重复启动\033[0m"
}
# 关闭函数
# 关闭项目
d_stop(){
# 进入脚本目录
cd $MANAGE_DIR/script/
# 判断这个pid文件是否存在
if [ ! -f "uwsgi.pid" ];then
# 这个项目已经关闭了
echo -e "\n\033[33m$NAME 项目已经关闭了请先启动\033[0m"
fi
echo -e "\n\033[34m$NAME 项目关闭中........\033[0m"
echo -e "\nStop $DESC: $NAME"
# 如果没有关闭
uwsgi --stop uwsgi.pid
# 是否停掉Nginx根据实际需要来操作~~!因为Nginx有对静态文件缓存[注意]
killall nginx
/etc/init.d/nginx start
echo -e "\n\033[32m$NAME 项目关闭完成........\033[0m"
}
d_restart(){
d_stop
sleep 1
d_start
}
case "\$1" in
start)
echo -e "\nstarting $DESC: $NAME"
d_start
;;
stop)
echo -e "\nStop $DESC: $NAME"
d_stop
;;
restart)
echo -e "\nRestart $DESC: $NAME"
d_restart
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac
EOF
chmod 755 $MANAGE_DIR/script/manage_$PROJECT_NAME
echo -e "\033[32m开始添加uwsgi.ini配置文件........\033[0m"
cat > script/uwsgi.ini<<EOF
[uwsgi]
# 项目目录
chdir=$PROJECT_DIR
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 指定项目的application
module=$PROJECT_NAME.wsgi:application
# 指定sock的文件路径
socket=$MANAGE_DIR/script/uwsgi.sock
# 启用主进程
master=true
# 进程个数
workers=5
pidfile=$MANAGE_DIR/script/uwsgi.pid
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=$MANAGE_DIR/script/uwsgi.log
EOF
echo "STATIC_ROOT = os.path.join(BASE_DIR, 'static_all')">> $MANAGE_DIR/$PROJECT_NAME/$PROJECT_NAME/settings.py
}
make_nginx_init(){
echo -e "\033[32m初始化Nginx........\033[0m"
cat > /etc/yum.repos.d/nginx.repo<<EOF
[nginx]
name=nginx repo
# 下面这行centos根据你自己的操作系统修改比如:OS/rehel
# 6是你Linux系统的版本,可以通过URL查看路径是否正确
baseurl=http://nginx.org/packages/centos/6/\$basearch/
gpgcheck=0
enabled=1
EOF
yum -y install nginx
echo -e "\033[32m添加Nginx配置文件........\033[0m"
cat > /etc/nginx/conf.d/$PROJECT_NAME.conf<<EOF
server {
listen $SERVER_PORT;
server_name $SERVER_NAME ;
access_log /var/log/nginx/access.log main;
charset utf-8;
gzip on;
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# 指定项目路径uwsgi
location / {
include uwsgi_params;
uwsgi_connect_timeout 30;
uwsgi_pass unix:$MANAGE_DIR/script/uwsgi.sock;
}
# 指定静态文件路径
location /static/ {
alias $MANAGE_DIR/$PROJECT_NAME/static_all/;
index index.html index.htm;
}
}
EOF
}
add_server(){
echo -e "\033[32m添加管理至服务........\033[0m"
cp $MANAGE_DIR/script/manage_$PROJECT_NAME /etc/init.d/
chkconfig --add /etc/init.d/manage_$PROJECT_NAME
chkconfig /etc/init.d/manage_$PROJECT_NAME on
# 启动服务
echo -e "\033[32m启动服务........\033[0m"
service manage_$PROJECT_NAME start
}
check_project
make_script_init
make_nginx_init
add_server
Apache + Django 部署生产环境
https://blog.csdn.net/Coxhuang/article/details/84311646
|
|
|