项目部署

部署是基于: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证书文件

图片.png

(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(号)

上一篇: