Django在CentOS下的部署
参考链接1 / 参考链接2
本教程的 目的
是提供一套非常稳定的部署方式,力求帮助您 100%
部署成功。
获取CentOS环境
如何装虚拟机?这里就先不说了;如何在MacOS上安装虚拟机?有需要的时候再补全。
此处以 腾讯云
的 轻量应用服务器
为例。(我在活动的时候买的,1核-内存2GB-系统盘60GB-3年-298RMB
)
另外我准备了 阿里云
的 云数据库RDS版-MySQL8.0-1年-19.9RMB
。
都是贪便宜买的,后期续费是个大问题,太贵了。
获取Linux连接工具
连接CentOS服务器
输入ip、登录名、密码等
如果您的服务器位于国外,记得勾选 高级
里的 智能加速(加速海外服务器连接)
,最后点 确定
。
关于 密钥登录
的情况,我会在用到的时候补全。
双击 快速连接
下的 测试
即可开始连接。
可以 命令输入
,可以 上传
和 下载
文件,基本的需求就满足了。
获取Python环境
安装Python环境
参考链接
依次执行下面的命令(理论上,在Linux里面没有报错就是正确):
当前运行命令的路径:~
即 /root
(个人习惯)
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install libffi-devel -y
wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
tar -zxvf Python-3.8.3.tgz
mkdir /home/python38
cd Python-3.8.3
./configure --prefix=/home/python38
make && make install
一些说明:
第 4
步的下载链接,可以根据您的实际版本需要进行更换。
第 7
步的目录名 Python-3.8.3
是第 5
步解压后的文件夹名称。
此处第 8
步的 /home/python38
是第 6
步创建的目录的路径,如果您想安装到其它地方,可以根据您的实际情况替换。
配置软链接
配置软链接
方法一:(不推荐,因为过程不可控)
CentOS7
默认的 python
命令启动的是 python2
的环境,系统有些程序是依赖 python2
的,所以需要做如下配置。
让 python
命令默认指向 python3
的环境。
rm -rf /usr/bin/python
ln -s /home/python38/bin/python3 /usr/bin/python
rm -rf /usr/bin/pip
ln -s /home/python38/bin/pip3 /usr/bin/pip
vi /usr/bin/yum
将第一行 【#! /usr/bin/python】 改为 【#! /usr/bin/python2】vi /usr/libexec/urlgrabber-ext-down
将第一行 【#! /usr/bin/python】 改为 【#! /usr/bin/python2】vi /usr/bin/yum-config-manager
将第一行 【#! /usr/bin/python】 改为 【#! /usr/bin/python2】
如何用 vi
编辑文本属于基本的Linux操作了,这里就不阐述了。
注意:如果您的 Python 安装路径和我的不一样,
替换 ln -s /home/python38/bin/python3 /usr/bin/python
中的 /home/python38/bin/python3
即可,其它的类同。
方法二:(推荐)
简单点,不用 python
命令,用 python3
命令启动 python3
环境也行,这样要修改的东西少一点。
ln -s /home/python38/bin/python3.8 /usr/bin/python3
ln -s /home/python38/bin/pip3.8 /usr/bin/pip3
下面的步骤将使用【配置软链接】 方法二
下的 python3
和 pip3
命令进行。
安装uwsgi
安装uwsgi
pip3 install uwsgi
ln -s /home/python38/bin/uwsgi /usr/bin/uwsgi
安装虚拟环境
安装虚拟环境
pip3 install virtualenv
ln -s /home/python38/bin/virtualenv /usr/bin/virtualenv
mkdir /home/venv
此处存放所有的虚拟环境mkdir /home/wwwroot
此处存放所有的 django 项目cd /home/venv
virtualenv -p python3 venv1
source venv1/bin/activate
激活虚拟环境pip install uwsgi
这里的第 8
步,之所以是 pip install uwsgi
是因为已经进入 python3
的虚拟环境了。也可以使用 pip3
。
退出虚拟环境:deactivate
接下来的步骤都在 虚拟环境中进行
。
上传Django项目
上传并配置Django项目
使用 FinalShell
上传到上一步创建的 /home/wwwroot
路径下,假设 Django
项目名为 Demo1
,
则 manage.py
文件所在的路径为:/home/wwwroot/Demo1
cd /home/wwwroot/Demo1
python manage.py collectstatic
输入 yes (注意:也可以是 python3)vim Demo1.xml
Demo1 为项目的名字,可根据您实际的项目名称命名xmluwsgi -x Demo1.xml
# 每次重新上传项目或修改项目,最好重新执行此句,然后重启 nginx
还是那句话,不报错就是成功。
内容覆盖写入:第 3
步输入下面的内容并保存退出(Esc
+ :wq
)
<uwsgi>
<socket>127.0.0.1:8111</socket> <!-- 内部端口,自定义 -->
<chdir>/home/wwwroot/Demo1/</chdir> <!-- 项目路径 -->
<module>Demo1.wsgi</module> <!-- Demo1为wsgi.py所在目录名-->
<processes>4</processes> <!-- 进程数 -->
<daemonize>uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
安装并配置nginx
安装并配置nginx
cd ~
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz
cd nginx-1.13.7
./configure
make && make install
# 默认安装在 /usr/local/nginx 中cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
# 备份mkdir vhost
# 存放多个 Django 站点,一个站点一个 .conf 文件vim vhost/Demo1.conf
vim nginx.conf
/usr/local/nginx/sbin/nginx -t
# 检查配置是否成功/usr/local/nginx/sbin/nginx
# 启动
内容覆盖写入:第 10
步
server {
listen 8112; # 对外开放的端口,假设公网ip为x.x.x.x,则外部可以用x.x.x.x:8112访问。
server_name 127.0.0.1;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8111; # 内部交互端口,必须和 Demo1.xml 中配置的 socket 一致
uwsgi_param UWSGI_SCRIPT Demo1.wsgi; # 必须和 Demo1.xml 中配置的 module 一致
uwsgi_param UWSGI_CHDIR /home/wwwroot/Demo1/; # 必须和 Demo1.xml 中配置的 chdir 一致(注意最后的右斜线)
}
location /static/ {
alias /home/wwwroot/Demo1/static/; # Django的静态文件路径(注意最后的右斜线)
}
}
内容覆盖写入:第 11
步
#user nobody;
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /usr/local/nginx/conf/vhost/*.conf;
# server {
# listen 8001;
# server_name 127.0.0.1;
# location / {
# root universalparser;
# index index.html index.htm;
# }
# error_page 404 /404.html;
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# root html;
# }
# } # 此处可用于部署静态网站,有需要的可以解除注释
}
修改当前运行中Django网站的方法
修改当前运行中Django网站的方法
此处由@coshare提供并完善!感谢!
cd /home/venv
source venv1/bin/activate
cd /home/wwwroot
uwsgi --reload uwsgi.pid
/usr/local/nginx/sbin/nginx -s reload
配置nginx开机自启
设置开机自启
vim /etc/init.d/nginx
chmod a+x /etc/init.d/nginx
chkconfig --add /etc/init.d/nginx
chkconfig nginx on
内容覆盖写入:第 1
步
nginx="/usr/local/nginx/sbin/nginx"
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
nginx快捷操作
方法一:请确保您已经配置了nginx开机自启功能。
nginx快捷操作
启动:service nginx start
停止:service nginx stop
重启:service nginx restart
方法二:不需要配置开机自启
nginx快捷操作2
启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
停止:pkill -9 nginx
重启:/usr/local/nginx/sbin/nginx -s reload
检查:/usr/local/nginx/sbin/nginx -t
关于SQLite版本过低的问题
方法一
:Django降版本至2.1(Django2.2及以上会出现SQLite版本过低的问题)
方法二
:更换其它数据库引擎,如MySQL、PostgreSQL等
方法三
:升级SQLite
升级SQLite
cd ~
wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz
tar zxvf sqlite-autoconf-3290000.tar.gz
cd sqlite-autoconf-3290000/
./configure --prefix=/usr/local
make && make install
mv /usr/bin/sqlite3 /usr/bin/sqlite3_old
ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
echo "/usr/local/lib" > /etc/ld.so.conf.d/sqlite3.conf
ldconfig
sqlite3 -version