部署是基于:centos7+nginx+uwsgi+python3+django 之上做的
软件版本:django3.0.3、nginx1.13.7、uwsgi2.0.18、python3.7.6、virtualenv20.0.4
步骤:
一、更新系统软件包(可选)
yum update -y
二、安装软件管理包和可能使用的依赖
yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel yum install zlib zlib-devel -y yum install libffi-devel -y yum install pcre-devel yum install libxml* yum -y install openssl openssl-devel rpm -e zlib-1.2.7-18.el7.x86_64
三、下载Pyhton3到/usr/local 目录
cd /usr/local
wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
(1)解压
tar -zxvf Python-3.7.6.tgz
(2)编译安装到指定路径
cd Python-3.7.6
./configure --prefix=/usr/local/python3
(3)安装python3
make make install
(4)建立python软链接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3 (5)升级pip版本 Python3安装完成之后pip3也一块安装完成,不需要再单独安装 pip3 install --upgrade pip
(6)建立pip软链接
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
四、查看Python3和pip3安装情况
五、安装virtualenv ,建议大家都安装一个virtualenv,方便不同版本项目管理。
(1)安装
pip3 install virtualenv
(2)建立virtualenv软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
(3)创建文件夹
在根目录下建立两个文件夹,主要用于存放env和网站文件的。
mkdir -p /data/env mkdir -p /data/wwwroot
六、切换到/data/env/下,创建指定版本的虚拟环境。
virtualenv --python=/usr/bin/python3 pyweb
(1)启动虚拟环境
cd /data/env/pyweb/bin
source activate 出现(pyweb),说明是成功进入虚拟环境。
七、虚拟环境里用pip3安django和uwsgi
(1)安装
pip3 install django==3.0.3
pip3 install uwsgi
留意:uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。
(2)创建uwsgi软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
八、本地项目搬迁到服务器
备注:
服务器与本地开发环境的依赖包版本要一致,比如本地升级pip,使用
python -m pip install --upgrade pip -i https://pypi.douban.com/simple
本地虚拟环境里升级pip,使用
easy_install -U pip
(1)备份本地数据库
使用sqlite数据库的话,直接打包数据库文件上传到服务器即可。使用Mysql数据库,
要先在本地Mysql里备份导出数据,然后在服务器上安装Mysql数据库软件,Mysql安装具体操作请看:
CentOS7操作系统下快速安装MySQL5.7(https://www.django.cn/article/show-2.html)
(2)在本地PyCharm的终端里,导出当前的环境依赖包到requirements.txt文件
pip freeze > requirements.txt
(3)把项目源码压缩打包后上传到服务器后,解压。
(4)进入服务器虚拟环境然后进入项目路径安装requirements.txt里的依赖包。
pip3 install -r requirements.txt
(5) 导入数据库到服务器。(如果用的是Mysql的话)
默认使用的是SQLite数据库,就不用做此操作。数据库原来是SQLite的,想换成Mysql,请查看文章:
如何把SQLite数据库转换为Mysql数据库(https://www.django.cn/article/show-17.html)
如果是Mysql数据库的,则在命令行里输入:
#导出Mysql,django为你的数据库
mysqldump -uroot -ppassword django>django.sql
#把django.sql上传到服务器,在服务器里用下面命令导入
mysql -uroot -ppassword
use dajngo;
source your Path\django.sql
(6)运行项目
python3 manage.py runserver
(7)Django正常运行之后我们就开始配置一下uwsgi
我们网站项目路径是 /data/wwwroot/mysite/,在项目根目录下创建
mysite.xml文件,输入如下内容:
<uwsgi> <socket>127.0.0.1:8997</socket> <!-- 内部端口,自定义 --> <chdir>/data/wwwroot/myblog/</chdir> <!-- 项目路径 --> <module>myblog.wsgi</module> <!-- myblog为wsgi.py所在目录名--> <processes>4</processes> <!-- 进程数 --> <daemonize>uwsgi.log</daemonize> <!-- 日志文件 --> </uwsgi>
(8)安装nginx和配置nginx.conf文件
进入home目录,执行下面命令
cd /home/
wget http://nginx.org/download/nginx-1.13.7.tar.gz
下载完成后,执行解压命令:
tar -zxvf nginx-1.13.7.tar.gz
进入解压后的nginx-1.13.7文件夹,依次执行以下命令:
./configure make make install
nginx一般默认安装好的路径为/usr/local/nginx
在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外。
cp nginx.conf nginx.conf.bak
然后打开nginx.conf,把原来的内容删除,直接加入以下内容:
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 443 ssl; server_name www.wuhanwjlhmc2019.club wuhanwjlhmc2019.club; root /data/wwwroot/myblog; charset utf-8; ssl_certificate /data/wwwroot/myblog/1_wuhanwjlhmc2019.club_bundle.crt; ssl_certificate_key /data/wwwroot/myblog/2_wuhanwjlhmc2019.club.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8997; uwsgi_param UWSGI_SCRIPT myblog.wsgi; uwsgi_param UWSGI_CHDIR /data/wwwroot/myblog/; } location /static/ { alias /data/wwwroot/myblog/static/; #静态资源路径 } access_log /data/wwwroot/myblog/www.wuhanwjlhmc2019.club.log; error_log /data/wwwroot/myblog/www.wuhanwjlhmc2019.club.error.log; } }
要留意备注的地方,要和UWSGI配置文件mysite.xml,还有项目路径对应上。
进入/usr/local/nginx/sbin/目录
执行./nginx -t命令先检查配置文件是否有错,没有错就执行以下命令:
./nginx
终端没有任何提示就证明nginx启动成功。可以使用你的服务器地址查看,成功之后就会看到一个nginx欢迎页面。
之后,在settings.py里设置:
关闭DEBUG模式。
DEBUG = False
(9)拷贝https证书文件
(10)访问网页
进入网站项目目录
cd /data/wwwroot/myblog/
执行下面命令:
uwsgi -x myblog.xml
以上步骤都没有出错的话。
进入/usr/local/nginx/sbin/目录
执行:
./nginx -s reload
重启nginx 。
然后在浏览器里访问你的项目地址!
(11)修改Django文件和其它配置文件之后,一定要重启Uwsgi和Nginx
#进入虚拟(如果没进入) cd /data/env/pyweb/bin/ source activate #查看Uwsgi进程 ps -ef|grep uwsgi #用kill方法把uwsgi进程杀死,然后启动uwsgi killall -9 uwsgi #启动方法 uwsgi -x myblog.xml #Nginx平滑重启方法 /usr/local/nginx/sbin/nginx -s reload
也可以使用脚本启动:
/root/startBogNet.sh
如果提示重复启动:
ps aux | grep -i manage
kill -9 pid(号)