Django Web 项目在Linux环境的部署——笔记


环境介绍:

系统:CentOS 8 64位

工具:Nginx + uWSGI

语言:python

框架:Django

数据库:Mysql

本文记录下所有部署用到的软件均使用源码Tarball安装(极限环境)对应版本如下:

Django Web 项目在Linux环境的部署——笔记_第1张图片

Django= 3.2.12

部署前的准备:

1、下载相关软件,这里也记录下:

python:

Python Release Python 3.7.2 | Python.orghttps://www.python.org/downloads/release/python-372/Django Web 项目在Linux环境的部署——笔记_第2张图片

下载CentOS版本 

mysql:

MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/5.7.html#downloadsDjango Web 项目在Linux环境的部署——笔记_第3张图片

Nginx:               nginx: downloadhttp://nginx.org/en/download.htmlDjango Web 项目在Linux环境的部署——笔记_第4张图片

 uWSGI:Getting uWSGI — uWSGI 2.0 documentation (uwsgi-docs.readthedocs.io)https://uwsgi-docs.readthedocs.io/en/latest/Download.html

Django Web 项目在Linux环境的部署——笔记_第5张图片

2、项目及依赖打包,之前记录过就不再啰嗦

最终部署用到的东东如下:

Django Web 项目在Linux环境的部署——笔记_第6张图片

3、将包含部署文件的设备(u盘/移动硬盘等)挂载给Linux 系统使用

插入U盘查看是否读取成功:

Django Web 项目在Linux环境的部署——笔记_第7张图片 创建载点 /mnt/deployment并挂载:

 报了个错!尝试挂载自己的移动硬盘报一样的错查看文件系统类型:

Django Web 项目在Linux环境的部署——笔记_第8张图片

Django Web 项目在Linux环境的部署——笔记_第9张图片

U盘或者移动硬盘为NTFS文件系统,centos默认并不能识别,查看系统文件系统类型驱动:

Django Web 项目在Linux环境的部署——笔记_第10张图片并没有关于ntfs的驱动程序,网上查看,很多资料都说需要安装 NTFS-3G,百度百科:NTFS-3G为Linux提供NTFS的驱动程序

yum install ntfs-3g

 修改镜像地址:注释掉原来文件中的 mirrorlist ,修改 baseurl。其实修改

CentOS-Linux-AppStream.repo 和 CentOS-Linux-BaseOS.repo 两个文件就行,执行下面的命令更直接一点

cd /etc/yum.repos.d/

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*

sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

Django Web 项目在Linux环境的部署——笔记_第11张图片

yum 更新:yum update -y 

会更新700+东东,python3都直接安装了

Django Web 项目在Linux环境的部署——笔记_第12张图片

Django Web 项目在Linux环境的部署——笔记_第13张图片

安装 NTFS-3G

 下载NTFS-3G源码安装,源码包统一放到 /usr/local/src 下面

wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz

Django Web 项目在Linux环境的部署——笔记_第14张图片

 解压缩:

tar -xvzf ntfs-3g_ntfsprogs-2017.3.23.tgz

Django Web 项目在Linux环境的部署——笔记_第15张图片

 直接使用默认安装路径编译安装:

[root@localhost src]# cd ntfs-3g_ntfsprogs-2017.3.23/

[root@localhost ntfs-3g_ntfsprogs-2017.3.23]# ./configure

Django Web 项目在Linux环境的部署——笔记_第16张图片

Django Web 项目在Linux环境的部署——笔记_第17张图片

 安装:make & make install

安装完成再次挂载:

mount -t ntfs-3g -o iocharset=cp950 /dev/sdb1 /mnt/deployment

Django Web 项目在Linux环境的部署——笔记_第18张图片

开始部署:

1、账号相关设置:创建用于部署的帐号 deployer 及 用户组 deploy

Django Web 项目在Linux环境的部署——笔记_第19张图片

 修改deployer 用户密码:

Django Web 项目在Linux环境的部署——笔记_第20张图片

deployer帐号信息微调:添加帐号说明

 切换部署账号 deployer 创建项目部署目录 djangoWebRoot

Django Web 项目在Linux环境的部署——笔记_第21张图片

 修改部署目录权限:

 进入u 盘 deploy文件夹,将software下的安装包复制到 /usr/local/src 下面

Django Web 项目在Linux环境的部署——笔记_第22张图片

 2、安装python 3.7.2 

系统经过 yum update -y 默认安装 python 3.6.8

Django Web 项目在Linux环境的部署——笔记_第23张图片

 解压缩 python 安装包:sudo tar -xvf Python-3.7.2.tar.xz

Django Web 项目在Linux环境的部署——笔记_第24张图片进入解压后的文件夹,查看安装指南文件READMEDjango Web 项目在Linux环境的部署——笔记_第25张图片统一将自定义安装的软件安装到 /usr/local/  下各自单独的目录,创建python 安装目录:

sudo mkdir python3.7.2

Django Web 项目在Linux环境的部署——笔记_第26张图片

 进入解压后的文件夹,指定安装路径编译:

sudo ./configure --prefix=/usr/local/python3.7.2 --enable-optimizations

Django Web 项目在Linux环境的部署——笔记_第27张图片

Django Web 项目在Linux环境的部署——笔记_第28张图片 sudo make 

Django Web 项目在Linux环境的部署——笔记_第29张图片

查看setup.py源码找到未找到的模块对应的模块名:

_ssl 和 _hashlib :

Django Web 项目在Linux环境的部署——笔记_第30张图片

Django Web 项目在Linux环境的部署——笔记_第31张图片

 对应模块 openssl-devel

_sqlite3 :

Django Web 项目在Linux环境的部署——笔记_第32张图片

所以对应缺失的模块应该是 sqlite-devel

_dbm 、 _gdbm 和 nis :

Django Web 项目在Linux环境的部署——笔记_第33张图片

Django Web 项目在Linux环境的部署——笔记_第34张图片

 _dbm 和 _gdbm对应模块 gdbm-devel,nis 对应模块 libnsl

_curses 和 _curses_panel :

Django Web 项目在Linux环境的部署——笔记_第35张图片

 两个应该对应模块 ncurses-devel

readline:

Django Web 项目在Linux环境的部署——笔记_第36张图片

所以 readline 应该对应模块 readline-devel 

_tkinter 和 _uuid :

Django Web 项目在Linux环境的部署——笔记_第37张图片

 _tkinter 对应 模块 tk-devel,_uuid 对应模块 uuidd

_bz2:

Django Web 项目在Linux环境的部署——笔记_第38张图片

 就是 bzip2 就对应模块 bzip2-devel

综合一下,相关包及依赖如下表:

Django Web 项目在Linux环境的部署——笔记_第39张图片其中红色的就不用重复下载安装了! 

yum 下载相关包:

sudo yum install openssl-devel --downloadonly,通过添加参数 --downloadonly ,yum只会下载相关的包及这个包的依赖,这些保存在cache里面,找了好半天才找到:

Django Web 项目在Linux环境的部署——笔记_第40张图片Django Web 项目在Linux环境的部署——笔记_第41张图片

 那会不会所有的都会保存到这个目录下呢,执行 sudo yum clean packages 

Django Web 项目在Linux环境的部署——笔记_第42张图片

 清完再下载其他的包:

Django Web 项目在Linux环境的部署——笔记_第43张图片

Django Web 项目在Linux环境的部署——笔记_第44张图片 的确!默认都是保存到这里的,注意另外几个是从appstream下载的就保存到另外appstream对应的目录里面了:

Django Web 项目在Linux环境的部署——笔记_第45张图片

另一种方法:sudo yum -y install yum-utils 

安装完成使用 yumdownloader 指定保存路径下载包

这种方式下载不会考虑依赖关系,只会把从yum源中找到能找的包下载下来

Index of /8.3.2011/BaseOS/x86_64/os/Packages (centos.org)https://vault.centos.org/8.3.2011/BaseOS/x86_64/os/Packages/Django Web 项目在Linux环境的部署——笔记_第46张图片如果不考虑依赖关系可以使用这种方式下载包! 

还是使用上一种方式下载其他的包及依赖,对比之前Ubuntu源码安装python时的一点记录,有许多相似之处:

之前 ubuntu 中安装时所安装的依赖如下:

Linux 源码安装python3.7.2 预先安装依赖包:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libpcap-dev
sudo apt-get install  python-dev python-setuptools python-pip python-smbus  
sudo apt-get install zlib1g-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev
sudo apt-get install liblzma-dev
sudo apt-get install libbz2-dev

sudo apt-get install uuid-dev

最终呢,极限环境下(无外网)centos 源码安装python 预先需要安装的依赖如下:

Django Web 项目在Linux环境的部署——笔记_第47张图片

 现在来手动安装这些依赖项:依赖里面还有依赖的先装里层的依赖:

Django Web 项目在Linux环境的部署——笔记_第48张图片

Django Web 项目在Linux环境的部署——笔记_第49张图片

有依赖的先装依赖再装外层的包,同时安装多个依赖,空格隔开

Django Web 项目在Linux环境的部署——笔记_第50张图片

Django Web 项目在Linux环境的部署——笔记_第51张图片 Django Web 项目在Linux环境的部署——笔记_第52张图片

 安装完成依赖项,再来编译python安装:

[deployer@localhost Python-3.7.2]$ sudo ./configure --prefix=/usr/local/python3.7.2 --enable-optimizations

[deployer@localhost Python-3.7.2]$ sudo make clean

[deployer@localhost Python-3.7.2]$ sudo make
Django Web 项目在Linux环境的部署——笔记_第53张图片

 [deployer@localhost Python-3.7.2]$ sudo make test

Django Web 项目在Linux环境的部署——笔记_第54张图片

 参考网上资料:(2条消息) SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)_彭世瑜的博客-CSDN博客https://blog.csdn.net/mouday/article/details/80653882

在yum 源中查找 ssl相关的,找到

Django Web 项目在Linux环境的部署——笔记_第55张图片

其依赖项里面就有 cryptography,检索idna分别在baseos 和 appstream 中检索到

Django Web 项目在Linux环境的部署——笔记_第56张图片

而关于 _ctypes的是缺少libffi-devel包

nis 的缺失问题依旧,证明不是缺少 libnsl 的问题,源里面检索 nis 找到这个

尝试吧!安装这个包再看!

另外还提到这几个包:db4-devel libpcap-devel xz-devel,在这里先下载安装libffi-devel、nss_nis、python3-pyOpenSSL以及 python3-idna做验证:

idna默认已经安装

Django Web 项目在Linux环境的部署——笔记_第57张图片

 安装完其他再编译安装python

Django Web 项目在Linux环境的部署——笔记_第58张图片

Django Web 项目在Linux环境的部署——笔记_第59张图片

Django Web 项目在Linux环境的部署——笔记_第60张图片sudo make clean

sudo make

Django Web 项目在Linux环境的部署——笔记_第61张图片

 _ctypes问题没有了,nis依旧!

sudo make test

sudo make install

3、修改默认指向

Django Web 项目在Linux环境的部署——笔记_第62张图片

Django Web 项目在Linux环境的部署——笔记_第63张图片 查看新安装的:

Django Web 项目在Linux环境的部署——笔记_第64张图片

创建新链接:

sudo ln -s /usr/local/python3.7.2/bin/python3.7 /usr/bin/python 

sudo ln -s /usr/local/python3.7.2/bin/pip3 /usr/bin/pip

Django Web 项目在Linux环境的部署——笔记_第65张图片

Django Web 项目在Linux环境的部署——笔记_第66张图片

查看 pip 版本

Django Web 项目在Linux环境的部署——笔记_第67张图片

升级 pip 和 setuptools,这种是安装完成后升级,要用wheel升级,后面尝试编译python的时候直接将新版本的pip以及setuptools编译进去直接安装

下载最新的 pip 和 setuptools

https://pypi.org/project/https://pypi.org/project/Django Web 项目在Linux环境的部署——笔记_第68张图片

Django Web 项目在Linux环境的部署——笔记_第69张图片

Django Web 项目在Linux环境的部署——笔记_第70张图片

Django Web 项目在Linux环境的部署——笔记_第71张图片

 4、安装mysql:

解压:

Django Web 项目在Linux环境的部署——笔记_第72张图片

 可以看到,解压缩后的mysql文件里面并没有configure 而是被cmake替代了,所以查看INSTALL,按照官方说明一步一步来:

Django Web 项目在Linux环境的部署——笔记_第73张图片

Django Web 项目在Linux环境的部署——笔记_第74张图片

参照说明下载依赖项

① 安装 cmake

Django Web 项目在Linux环境的部署——笔记_第75张图片

Django Web 项目在Linux环境的部署——笔记_第76张图片 [deployer@localhost cmake-3.23.1]$ sudo mkdir /usr/local/CMake

[deployer@localhost cmake-3.23.1]$ sudo ./bootstrap --prefix=/usr/local/CMake

Django Web 项目在Linux环境的部署——笔记_第77张图片

 [deployer@localhost cmake-3.23.1]$ sudo gmake

Django Web 项目在Linux环境的部署——笔记_第78张图片

[deployer@localhost cmake-3.23.1]$ sudo make install 

Django Web 项目在Linux环境的部署——笔记_第79张图片

 添加链接:[deployer@localhost bin]$ sudo ln -s /usr/local/CMake/bin/cmake /usr/bin/cmake

ok!cmake 安装完成

② 安装 boost

下载依赖项:

Django Web 项目在Linux环境的部署——笔记_第80张图片

 安装依赖

Django Web 项目在Linux环境的部署——笔记_第81张图片

 [deployer@localhost mysql-dependencies]$ sudo tar -xvjf boost_1_79_0.tar.bz2

[deployer@localhost mysql-dependencies]$ sudo mv ./boost_1_79_0 /usr/local/

Django Web 项目在Linux环境的部署——笔记_第82张图片

 先决条件搞定,开始使用cmake来构建MySQL

Django Web 项目在Linux环境的部署——笔记_第83张图片

这里指出还需要一个先决条件:bison ,查看,已经安装了!

Django Web 项目在Linux环境的部署——笔记_第84张图片

 开始构建:

① MySQL 源码目录下创建构建目录子目录:mysql_build

[deployer@localhost mysql-5.7.37]$ sudo mkdir mysql-build

Django Web 项目在Linux环境的部署——笔记_第85张图片

 ② 进入构建目录使用cmake配置

Django Web 项目在Linux环境的部署——笔记_第86张图片

绿色部分其实可以不用再手动配置,直接使用默认值就行 [deployer@localhost mysql-build]$ sudo cmake ..  -DWITH_BOOST=/usr/local/boost_1_79_0

Django Web 项目在Linux环境的部署——笔记_第87张图片

高版本还不行? 参考文档

Django Web 项目在Linux环境的部署——笔记_第88张图片

[deployer@localhost mysql-build]$ sudo cmake .. -DDOWNLOAD_BOOST=ON -DWITH_BOOST=/home/my_boost 

Django Web 项目在Linux环境的部署——笔记_第89张图片

 喔嚯!timeout,手动下载安装;到官网找对应的版本下载Boost Version Historyhttps://www.boost.org/users/history/

Django Web 项目在Linux环境的部署——笔记_第90张图片

Django Web 项目在Linux环境的部署——笔记_第91张图片

 [deployer@localhost mysql-build]$ sudo cmake .. -DWITH_BOOST=/usr/local/boost_1_59_0\
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DDOWNLOAD_BOOST=0 \
> -DENABLED_LOCAL_INFILE=1 \
> -DENABLE_DOWNLOADS=1 \
> -DINSTALL_STATIC_LIBRARIES=1 \
> -DMYSQL_DATADIR=/data/mysqldb \
> -DSYSCONFDIR=/usr/local/mysql/etc/my.cnf \
> -DWITH_DEBUG=1 \
> -DWITH_SSL=system \
> -DWITH_SYSTEMD=1

Django Web 项目在Linux环境的部署——笔记_第92张图片

 Bug again!安装模块呗

Django Web 项目在Linux环境的部署——笔记_第93张图片

 妈蛋!什么情况?

Django Web 项目在Linux环境的部署——笔记_第94张图片

 安装这个试试

Django Web 项目在Linux环境的部署——笔记_第95张图片

Django Web 项目在Linux环境的部署——笔记_第96张图片 好了,出现新bug ,找不到 rpcgen,这是个什么鬼东东,yum 源里面也检索不到

Django Web 项目在Linux环境的部署——笔记_第97张图片 找度娘Django Web 项目在Linux环境的部署——笔记_第98张图片

 这篇文档中说是缺少 rpcsvc ,源里面同样检索不到关于这个东东的任何信息,参考下面这位仁兄的文章

(2条消息) linux安装mysql_daiend的博客-CSDN博客https://blog.csdn.net/qq_43148818/article/details/113775042需要 rpcsvc-proto 这项依赖,源里面检索不到只能下载源码安装了,通过下面链接下载

rpcsvc-proto-1.4.3 (linuxfromscratch.org)https://linuxfromscratch.org/blfs/view/svn/basicnet/rpcsvc-proto.html按照文档安装Django Web 项目在Linux环境的部署——笔记_第99张图片

[deployer@localhost mysql-dependencies]$ sudo tar -xvf rpcsvc-proto-1.4.3.tar.xz

 [deployer@localhost rpcsvc-proto-1.4.3]$ sudo ./configure --sysconfdir=/etc && make

Django Web 项目在Linux环境的部署——笔记_第100张图片

 一起执行报错,权限问题,分开执行

[deployer@localhost rpcsvc-proto-1.4.3]$ sudo ./configure --sysconfdir=/etc

[deployer@localhost rpcsvc-proto-1.4.3]$ sudo make

Django Web 项目在Linux环境的部署——笔记_第101张图片

[deployer@localhost rpcsvc-proto-1.4.3]$ sudo make install

删除构建目录下的 CMakeCache.txt 再重新编译mysql

Django Web 项目在Linux环境的部署——笔记_第102张图片

ok,编译构建成功! 查看下编译参数:[deployer@localhost mysql-build]$ sudo cmake . -L

Django Web 项目在Linux环境的部署——笔记_第103张图片

Django Web 项目在Linux环境的部署——笔记_第104张图片

 ③ make  很长时间,估计半小时 

[deployer@localhost mysql-build]$ sudo make VERBOSE=1

Django Web 项目在Linux环境的部署——笔记_第105张图片

④ install  

[deployer@localhost mysql-build]$ sudo make install

Django Web 项目在Linux环境的部署——笔记_第106张图片

 ⑤ 执行安装后的配置,包括:

初始化数据目录

启动mysql并测试是否能正常进入

mysql初始帐户的(密码)保护设置

mysql服务随系统启动和关闭设置

初始化数据目录:首先为运行mysqld创建专有用户mysql,该账号为系统账号,不需要有登录主机的权限,用户组属于 mysql 用户组

Django Web 项目在Linux环境的部署——笔记_第107张图片

 进入安装目录:/usr/local/mysql

Django Web 项目在Linux环境的部署——笔记_第108张图片

执行最后一条命令,会根据编译的时候所设置的数据目录位置来创建,但奇怪的是抛出No such file or directory,没有自动创建官网的说明也是会自动创建

Django Web 项目在Linux环境的部署——笔记_第109张图片自己估计会不会是权限问题,索性手动创建/data目录,再执行

Django Web 项目在Linux环境的部署——笔记_第110张图片

成功了!那么进行第二步,启动mysql服务,测试能否登入,在编译的时候设置了-DWITH_SYSTEMD=1,所以使用 systemctl start mysqld

没法了从头来过重新编译:

[deployer@localhost mysql_build]$ sudo cmake .. -DWITH_BOOST=/usr/local/boost_1_59_0\
>  -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DDOWNLOAD_BOOST=0 \
> -DENABLED_LOCAL_INFILE=1 \
> -DENABLE_DOWNLOADS=1 \
> -DINSTALL_STATIC_LIBRARIES=1 \
> -DWITH_DEBUG=1 \
> -DWITH_SSL=system \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> -DCPACK_MONOLITHIC_INSTALL=1 \
> -DWITH_MYISAM_STORAGE_ENGINE=1 \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \

Django Web 项目在Linux环境的部署——笔记_第111张图片

sudo gmake VERBOSE=1

Django Web 项目在Linux环境的部署——笔记_第112张图片

 sudo make install

[deployer@localhost mysql]$ sudo mkdir mysql-files
[deployer@localhost mysql]$ sudo chown mysql:mysql mysql-files/
[deployer@localhost mysql]$ sudo chmod 750 mysql-files/
[deployer@localhost mysql]$ sudo bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

Django Web 项目在Linux环境的部署——笔记_第113张图片

 启动mysql:

 依旧不行,不过这次编译的时候没加入-DWITH_SYSTEMD=1,在mysql的bin 下有mysqld_safe,可以按照官方文档中的第一种启动方式:

Django Web 项目在Linux环境的部署——笔记_第114张图片

Django Web 项目在Linux环境的部署——笔记_第115张图片

 测试:首先修改环境变量,deployer家目录下新建.bashrc ,添加下面这条:PATH=${PATH}:/usr/local/mysql/bin

激活新的环境变量:source ~/.bashrc

测试连接数据库

Django Web 项目在Linux环境的部署——笔记_第116张图片

 根据文档做测试:

Django Web 项目在Linux环境的部署——笔记_第117张图片

Django Web 项目在Linux环境的部署——笔记_第118张图片

 验证可以关闭mysql,关闭后还可以再启动

Django Web 项目在Linux环境的部署——笔记_第119张图片

 对初始账号 root 设置密码保护:

Django Web 项目在Linux环境的部署——笔记_第120张图片

mysql随系统启动设置:官方文档中介绍了一种设置方式,使用 mysql 启动脚本——mysql.server

Django Web 项目在Linux环境的部署——笔记_第121张图片

Django Web 项目在Linux环境的部署——笔记_第122张图片

 现在重启验证下

Django Web 项目在Linux环境的部署——笔记_第123张图片

 ok,mysql安装完毕!直接编译安装成系统服务的模式最开始测试过失败,可能还是哪里设置不对边看官方文档边测试,好费劲,后面再来测试吧!

5、安装Nginx

Django Web 项目在Linux环境的部署——笔记_第124张图片

 按照官方文档编译报错,缺少PCRE,pcre 已经安装了那就尝试安装 pcre-devel吧!

Django Web 项目在Linux环境的部署——笔记_第125张图片

 再编译

Django Web 项目在Linux环境的部署——笔记_第126张图片

 make

Django Web 项目在Linux环境的部署——笔记_第127张图片

make install

Django Web 项目在Linux环境的部署——笔记_第128张图片 尝试启动nginx

Django Web 项目在Linux环境的部署——笔记_第129张图片

Django Web 项目在Linux环境的部署——笔记_第130张图片

将nginx 注册成系统服务:

/usr/lib/systemd/system 下创建nginx系统配置文件nginx.service

写入以下配置内容

[Unit]
Description=nginx -  web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Django Web 项目在Linux环境的部署——笔记_第131张图片

 :wq 重新加载系统配置

[root@localhost system]# systemctl daemon-reload

然后启动 nginx 服务

[root@localhost system]# systemctl start nginx

Django Web 项目在Linux环境的部署——笔记_第132张图片

Django Web 项目在Linux环境的部署——笔记_第133张图片

同样可以使用 nginx -s signal 来管理

Django Web 项目在Linux环境的部署——笔记_第134张图片

有一点,nginx好像不支持开机自启动,不管是通过chkconfig --add nginx 还是通过下面的都提示不支持!

Django Web 项目在Linux环境的部署——笔记_第135张图片

6、安装uwsgi

参照官方文档安装

Django Web 项目在Linux环境的部署——笔记_第136张图片

 需要的依赖项:gcc、clang、Development Tools、python、python-devel,gcc、python已经有了,检查下其他项

Django Web 项目在Linux环境的部署——笔记_第137张图片

Django Web 项目在Linux环境的部署——笔记_第138张图片

 安装clang:

Django Web 项目在Linux环境的部署——笔记_第139张图片

将uwsgi解压到 /usr/local 下面:

[deployer@localhost src]$ sudo tar -xvzf uwsgi-2.0.20.tar.gz -C /usr/local/

Django Web 项目在Linux环境的部署——笔记_第140张图片

编译安装:

[deployer@localhost uwsgi-2.0.20]$ sudo python uwsgiconfig.py --build

Django Web 项目在Linux环境的部署——笔记_第141张图片

使用配置文件编译安装,执行完就行,查看文件与未编译之前的对比,产生一个可执行文件 uwsgi

Django Web 项目在Linux环境的部署——笔记_第142张图片

 将 /usr/local/uwsgi-2.0.20 加入环境变量中,可以直接执行 uwsgi

7、安装项目依赖

将项目tarball移动至部署目录下并解压

Django Web 项目在Linux环境的部署——笔记_第143张图片

 将解压后的项目文件移动至部署目录下

Django Web 项目在Linux环境的部署——笔记_第144张图片

 进入 relies_packages 安装项目依赖

[deployer@localhost relies_packages]$ pip install --no-index --find-links=./packages -r deploy_requirements.txt

 下载安装

Django Web 项目在Linux环境的部署——笔记_第145张图片

Django Web 项目在Linux环境的部署——笔记_第146张图片

这才反应过来,之前的所有wheel包是在windows环境下下载打包的,直接拿到centos上怎么用嘛!!蠢!到linux环境下重新下载依赖项,默认镜像源太慢也容易timeout,设置使用清华源:

用户家目录下新建 .pip 文件夹, .pip 文件夹下新建 pip.conf ,向其中写入内容:

[global]

index-url=https://pypi.tuna.tsinghua.edu.cn/simple

保存退出

下载依赖项:
pip download --no-deps on -d ./packages/ -r deploy_requirements.txt

根据 deploy_requirements.txt 中列出的清单及版本下载依赖项到当前目录下的 packages 目录中

 安装:

[deployer@localhost relies_packages]$ pip install --no-index --find-links=./packages -r deploy_requirements.txt

Django Web 项目在Linux环境的部署——笔记_第147张图片

 安装完依赖项,使用 django 默认的启动方式试启动项目

Django Web 项目在Linux环境的部署——笔记_第148张图片

说明项目可以正常启动,接下来要使用uwsgi来启动项目

进入项目根目录

Django Web 项目在Linux环境的部署——笔记_第149张图片

 尝试访问站点:

Django Web 项目在Linux环境的部署——笔记_第150张图片

 按照提示开启线程:

[deployer@localhost PrescriptionPushSystem]$ uwsgi --http :8008 --module PrescriptionPushSystem.wsgi --enable-threads

Django Web 项目在Linux环境的部署——笔记_第151张图片

 尝试登录

Django Web 项目在Linux环境的部署——笔记_第152张图片

数据库未初始化的问题,和之前Windows一样迁移sessions,初始化数据库

首先连接mysql创建数据库

Django Web 项目在Linux环境的部署——笔记_第153张图片

 然后运行 models.py 做初始化

Django Web 项目在Linux环境的部署——笔记_第154张图片

 迁移sessions

Django Web 项目在Linux环境的部署——笔记_第155张图片

 再使用uwsgi启动项目验证:

Django Web 项目在Linux环境的部署——笔记_第156张图片

这有点不理解!白天在公司还正常加载样式,回到家现在就不行了,难道白天是虚的!仔细看白天输出的日志,第一次runserver方式是成功的,第二次警告 静态资源css和js Not Found,但是依然正常加载,估计是浏览器缓存的原因,但是白天成功骗过了我!因为晚上继续搞nginx就发现,明明nginx服务已经停止, curl localhost 状态都已经是拒绝,但是浏览器依然 welcome to nginx!

接下来以配置文件的形式来管理uwsgi的启动以及后台运行:

 官方文档介绍了配置文件可以是 ini文件、xml文件、json文件、yaml文件,自己这里采用xml文件形式,在项目根目录下创建 my_uwsgi.xml

Django Web 项目在Linux环境的部署——笔记_第157张图片:wq 后尝试启动: uwsgi --xml my_uwsgi.xml

Django Web 项目在Linux环境的部署——笔记_第158张图片看着像是启动了,看下日志 

Django Web 项目在Linux环境的部署——笔记_第159张图片

做修改

Django Web 项目在Linux环境的部署——笔记_第160张图片 :wq 后停止 uwsgi :uwsgi --stop uwsgi.pid ,删除之前的pip和log

rm uwsgi.pid 
rm uwsgi.log 

再重启 uwsgi :uwsgi --xml my_uwsgi.xml

Django Web 项目在Linux环境的部署——笔记_第161张图片

Django Web 项目在Linux环境的部署——笔记_第162张图片

 已经后台启动!

 配置uwsgi来处理静态资源就不太实际了,接下来把nginx加进来发挥它的功能,安装完成的nginx在conf下有两个配置文件,一样的内容,针对自己的小项目就直接修改nginx.conf了

Django Web 项目在Linux环境的部署——笔记_第163张图片

 修改my_uwsgi.xml

Django Web 项目在Linux环境的部署——笔记_第164张图片

 重启 uwsgi :uwsgi --reload uwsgi.pid

修改setting并收集静态资源:python manage.py collectstatic

启动nginx:sudo systemctl start nginx

Django Web 项目在Linux环境的部署——笔记_第165张图片

 尝试访问站点:

Django Web 项目在Linux环境的部署——笔记_第166张图片

Django Web 项目在Linux环境的部署——笔记_第167张图片

 通过系统管理添加一个用户,后台连接数据库查询验证:

Django Web 项目在Linux环境的部署——笔记_第168张图片

 ok!至此算是部署完毕,这篇算是部署笔记,太长了,记录了一些问题,再起一篇做下总结,把关键的理清并记录。

你可能感兴趣的:(项目部署,linux,django,python)