基本步骤:
购买腾讯云服务器并配配置好 >> 本地项目依赖收集准备 >> 上传项目等文件到服务器 >> 服务器安装部署软件和python环境 >> 开始部署(全局来看就这5个步骤)
目录
1. 购买腾讯云服务器并配配置好
1.1 搜索腾讯云 :
1.2 选择服务器
最新活动 >> 新用户专享 >> 轻量应用服务器
1.3 填写购买服务器相关信息并购买
选择centos7.6(自己看清楚别乱选),其他信息默认即可
1.4 登录服务器
修改自己的密码(用户名一般不改),如下图:
1.5 安装宝塔面板
为服务器安装宝塔面板,这个宝塔面板是方便我们管理服务器的,比如:上传文件,开启终端执行命令、管理数据库等等都很方便
在终端执行以下命令进行安装:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
安装完成后根据得到的网址、用户名、密码可以登录宝塔面板后台(我们先截图保存起来,还有一件事要先做,因为网址实际上是我们服务器的IP+8888端口号+随机字符,所以确保我们能访问到我们需要开启我们服务器的8888端口,如下图)
1.6 登录宝塔面板
根据上一步得到的信息,修改宝塔面板用户名和密码(因为自己得到的都是随机的,不好记忆)
2. 收集项目依赖
这一步我们在windows开发环境中收集即可,首先明确好自己用的python解释器版本,是虚拟还是真实环境,然后我们进入项目运行所在的环境中,使用以下(2条命令)任意一条命令即可收集,收集完我们可以查看检查以下
pip freeze > requirements.txt
pipreqs ./ --encoding=utf-8 --force
3. 上传项目文件、依赖文件到服务器
安装了宝塔面板之后就很简单了,参考下图(一般在/opt目录下创建一个目录用来放置项目文件):
这里再补充一下上线需要修改的配置文件选项
DEBUG = FALSE
ALLOW_HOST = ["*"]
STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 把STATICFILES_DIRS删掉
4. 为项目配置一个python环境和安装部署软件
4.1 为项目配置python环境
centos7.6是自带python3.6的我们可以直接用来作为项目环境(当然我们也可以自己安装高版本的python,自己创建虚拟环境),我们选择好python环境安装一些依赖作为django项目的环境,这里给出以依赖文件方式安装依赖的命令
pip install -r requirements.txt
4.2 安装部署软件
部署的方案是uwsgi+nginx,所以我们要下载uwsgi和nginx
### 1. 安装uwsgi
yum install gcc
yum install python36-devel(具体看自己的python版本)
yum install uwsgi(或者pip install uwsgi)
## 注意这个uwsgi是你python环境中的,要在项目部署的python环境中安装uwsgi,
## 后面将需要此命令结合其配置文件来开启uwsgi服务
### 2 安装nginx
## 2.1 安装依赖
yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel openssl-devel
## 2.2 下载nginx压缩包并解压
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.7.12.tar.gz (这里下载的nginx版本是1.7.12)
tar zxvf nginx-1.7.12.tar.gz
## 2.3配置nginx
cd nginx-1.7.12(进入nginx目录,复制下面的语句进行配置)
./configure \
--prefix=/usr/local/nginx \
--with-threads \
--with-file-aio \
--with-ipv6 \
--with-pcre \
--with-http_ssl_module \
--with-http_spdy_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module
### 3. 编辑和安装
## 3.1 编辑
make
## 3.2 查看是否有错误
echo $? //显示0
## 3.3 安装
make install
5. 开始部署
所谓开始部署无非是为项目配置uwsgi和nginx服务,然后让服务运行,首先我们来配置uwsgi服务,在配置nginx
5.1 为项目配置uwsgi服务
创建/opt/mypro/uwsgi.ini即```vi opt/jd/uwsgi.ini``(路径中的mypro就是我所说的上传django项目所放置的目录),内容如下:
[uwsgi]
socket=0.0.0.0:8080 # 使用nginx连接时使用
# http=0.0.0.0:8080 # 直接做web服务器使用,0.0.0.0表示所有ip可访问
# 项目目录
chdir=/opt/jd/django_demo
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=django_demo/wsgi.py
# 开启进程数
processes=4
# 每个线程开的线程数量
threads=2
# 开启主进程
master=True
# 保存uwsgi pid号文件
pidfile=uwsgi.pid
# 日志文件
daemonize=uwsgi.log
5.2 编写nginx启动脚本
在为项目配置nginx服务之前我们先编写nginx启动脚本,并加入系统服务,创建/etc/init.d/nginx即```vi /etc/init.d/nginx```,内容如下:
#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"
start() {
echo -n $"Starting $prog: "
mkdir -p /dev/shm/nginx_temp
daemon $NGINX_SBIN -c $NGINX_CONF
RETVAL=$?
echo
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -TERM
rm -rf /dev/shm/nginx_temp
RETVAL=$?
echo
return $RETVAL
}
reload(){
echo -n $"Reloading $prog: "
killproc -p $NGINX_PID $NGINX_SBIN -HUP
RETVAL=$?
echo
return $RETVAL
}
restart(){
stop
start
}
configtest(){
$NGINX_SBIN -c $NGINX_CONF -t
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
restart
;;
configtest)
configtest
;;
*)
echo $"Usage: $0 {start|stop|reload|restart|configtest}"
RETVAL=1
esac
exit $RETVAL
# 将上面文件保存退出 接下来添加权限
chmod 755 /etc/init.d/nginx
#添加nginx到服务
chkconfig --add nginx
#加到开机自动启动
chkconfig nginx on
5.3 为项目配置nginx服务
#首先把原来的配置文件清空
> /usr/local/nginx/conf/nginx.conf
#编辑
vi /usr/local/nginx/conf/nginx.conf
nginx.conf配置文件内容如下:
user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 6000;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
'$host "$request_uri" $status'
'"$http_referer" "$http_user_agent"';
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm application/xml;
server
{
listen 80;
server_name 自己的主机ip;
include /usr/local/nginx/conf/host/*.conf;
charset utf-8;
location /media {
alias /opt/jd/django_demo/media; #django_demo/media是用户上传文件目录
}
location /static {
alias /opt/jd/django_demo/static; #django_demo/static是项目静态目录
}
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8080; #8080端口对应uwsgi配置的端口
uwsgi_param UWSGI_SCRITP django_demo.wsgi; #django_demo是项目名
uwsgi_param UWSGI_CHDIR /opt/jd/django_demo; #django_demo是项目名
}
}
}
到此我们项目的uwsgi和nginx服务就配置好了,接下来还有两件事要做:开启自己服务器的8080端口(我们项目要用,从刚才的配置文件中就能看出哈),开启服务(项目就在服务器开始运行了),开启服务器端口前面已经说过了,【】自己去完成】,下面直接开始开启服务就完成部署了
5.4 开启uwsgi和nginx服务
# 开启uwsgi服务
cd /opt/mypro # uwsgi.ini所在目录
uwsgi --ini uwsgi.ini
# 开启nginx服务
systemctl start nginx
# 这里再给些相关的命令
ps -aux | grep uwsgi (查看uwsgi的进程,若仅有一个grep进程则服务没开启)
pkill -9 uwsgi (杀死所有uwsgi进程)
systemctl status nginx (查看nginx服务状态)
systemctl stop nginx (关闭nginx服务)
6. 补充
我要补充的是关于数据库迁移和修改项目文件后的相关操作
6.1 数据库迁移:
对于数据库迁移,我们看命令就知道咋做了。。。
python mange.py makemigrations
python mange.py migrate
首先是python代表python环境我们要进入项目的python环境,其次是manage.py这个是我们的项目目录下的所以我们要进入项目目录执行这两条命令。
有一点不同于windows的是,在centos中python版本为3.x时使用的命令是【python3】而不是python,所以我们的迁移语句应该是:
python3 mange.py makemigrations
python3 mange.py migrate
6.2 修改项目文件后的操作
我们部署完成后,如果在需要修改了一些内容,然后我们要做些什么?
其实只要在项目基础上改,我们需要做的事业没多少哈:
如果修改了model.py中模型,那么重新迁移,再重启uwsgi服务即可
如果修改了*.py/*.html,仅仅重启uwsgi服务即可
。。。
对于nginx服务一个应用于项目静态资源的服务,我们部署完即使修改了静态资源都不需要去重启
至此本章就完结了,如果有相关问题可以评论区留言收到将会回复解决