项目部署

裸机CentOS需要注意安装必要的环境

yum install vim
1.    以root身份登录
2.    修改网卡配置文件
    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    把“ONBOOT”的值修改为"yes"
reboot
3.    安装yum install net-tools,以提供ifconfig的使用
如果不能使用vim,就用vi。

解决大部分程序依赖

yum install wget gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

配置yum源(我使用的阿里云的yum源)

  • 进入yum源的目录

cd /etc/yum.repos.d/
  • 查看yum源文件

ls -l
  • 配置阿里云yum源

mkdir repo_bak
mv * .repo repo_bak/
  • 下载阿里云repo文件

  • 清空yum缓存并且生成新的yum缓存

  • 安装软件扩展源

安装Python3

推荐利用编译的方式安装Python3

  • 下载解压源码包

需要注意的是,Linux系统的第三方软件都约定俗成的安装在/opt目录下~因此我们需要把这个包下载到/opt目录下

  • 解压

  • 开始编译安装

./configure

进入解压出出来的Python-3.6.5目录,里面有一个绿色的可执行文件configure~

这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:

上面的意思是将该软件安装在 /opt/py365 下面,执行文件就会安装在 /opt/py365/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。

同时一些软件的配置文件你可以通过指定 --sys-config= 参数进行设定。有一些软件还可以加上 --with、--enable、--without、--disable 等等参数对编译加以控制,你可以通过允许 ./configure --help 察看详细的说明帮助。

——我这里没有加后面的参数,直接执行 ./configure,默认安装在了/usr/local/bin中~

make

这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。

如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

make 的作用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能,比如 make install 一般表示进行安装,make uninstall 是卸载,不加参数就是默认的进行源代码编译。

make 是 Linuxarrow-up-right 开发套件里面自动化编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用 gccarrow-up-right 、ld 以及运行某些需要的程序进行编译的程序。一般情况下,他所使用的 Makefile 控制代码,由 configure 这个设置脚本根据给定的参数和系统环境生成。

make install

这条命令来进行安装(当然有些软件需要先运行 make check 或 make test来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)

注意事项:可能安装完毕后pip3安装模块提示找不到ssl模块,用以下方式解决

安装virtualenv

安装virtualenvwrapper

virtualenv 的一个最大的缺点就是:

​ 每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。

​ 并且还有可能你忘记了虚拟环境放在哪。。。

​ 一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,例如/opt/all_venv/,并且针对不同的目录做不同的事。 ​ 另一种是使用virtualenvwrapper管理你的虚拟环境(virtualenv),其实他就是统一管理虚拟环境的目录,并且省去了source的步骤。

  • 安装virtualenvwrapper

  • 设置Linux的环境变量,每次启动就加载virtualenvwrapper

最后记得执行source命令让配置生效:

安装nginx

nginx的安装也推荐编译安装!

  • 解决依赖

  • 下载nginx的源码包并解压

我这里用的是淘宝的Tenginearrow-up-right——在原始nginx上扩展了许多功能~很强大~

需要注意的是,Linux系统的第三方软件都约定俗成的安装在/opt目录下~因此我们需要把这个包下载到/opt目录下

  • 解压tengine包:

  • 安装tengine

进入源码目录:

里面有一个绿色的可执行文件configure

这里我们指定将tengine安装在/opt/nginx这个目录下:

然后进行编译安装:

结束后~我们可以看到新生成了一个/opt/nginx 目录~

安装好的nginx放在了 /opt/nginx/sbin/ 这个目录下了~

  • 修改环境变量让nginx命令生效

安装完成后需要每次用/opt/tngx231/sbin/ 这个目录加上nginx才能操作,很烦躁,我们可以通过修改环境变量,以后只需要执行nginx就可以启用nginx的操作了~

首先确认下当前的环境变量有哪些目录:

编辑/etc/profile文件

在文件的最后一行输入 :

并 :wq 保存退出~~

最后一定要记得source一下 /etc/profile 文件!

nginx的操作:

nginx #启动 nginx -t #查看nginx状态 nginx -s stop #关闭 nginx -s reload #重新加载

测试nginx的服务

安装完成后别忘了检测一下nginx的服务

注意:如果访问不了,检查selinux,iptables

项目部署过程

  • 利用virtualenvwrapper工具创建虚拟环境

创建完虚拟环境后直接会进入这个虚拟环境。

  • 在windows端导出依赖包

    依赖文件安装

    依赖文件安装

在这个环境中安装项目需要的包,安装过程略(直接用pip3安装即可)

  • 安装uwsgi

这里需要记录一下uwsgi的执行路径以及虚拟环境的目录,后面要用:

uwsgi的执行路径

特别注意:如果在虚拟环境中运行的话,后面执行uwsgi命令需要用绝对路径的时候一定是虚拟环境中的这个绝对路径!

(补充说明一点:如果虚拟环境中没有安装uwsgi模块的话会显示外部环境中的位置,因此一定要记得在虚拟环境中安装uwsgi模块!)

虚拟环境的目录

特别注意:如果在虚拟环境中运行的话,后面uwsgi的配置文件一定要写当前虚拟环境下的uwsgi的绝对路径!

  • 项目文件settings与静态文件相关的配置

将项目传到服务器的/opt目录~进入项目的二级目录,配置一下里面的settings文件,这里只写与部署相关的配置

[复制代码](javascript:void(0);)

由于uwsgi不能处理项目的静态文件,我们需要用nginx来处理,因此需要将项目的静态文件copy到STATIC_ROOT参数对应的位置:

whw是我的项目的第一层目录

  • uwsgi的配置

提醒一点:需要提前在虚拟环境中安装好uwsgi包~~

uwsgi.ini文件的配置

配置uwsgi之前需要新建一个uwsgi.ini文件。

由于每个项目对应一个uwsgi.ini文件,这里建议大家将这个文件创建在自己项目的第一层目录中:

然后编辑这个文件

文件中的配置如下:

  • 启动uwsgi

进入项目的第一层目录,这里有写好的uwsgi.ini文件,执行这个文件:

特别注意,这里用的都是相对路径~真正的执行命令其实是这样的:

——这样的执行结果是在前台运行的,我们的终端会夯住,如果关掉这个终端uwsgi的进行也会关掉,需要我们再打开一个终端进行下一步的操作~

——让uwsgi后台执行的话~只需要在命令里面加上-d参数就好了:

  • nginx的配置

nginx的配置文件是 /opt/tngx231/conf/nginx.conf 。

编辑这个文件

我们只配置第一个server里面的参数:

nginx配置完后启动nginx服务:

如果中途修改了nginx.conf的参数的话,保存完后需要重启nginx服务,记得在重启前-t一下查看nginx的状态:

至此,项目部署的配置就这么多了。

请求流程简介

(1)用户发起请求 (2)访问IP(或者访问域名) 请求走到nginx这一层代理 (3)nginx直接转发(uwsgi_pass)给后端django的地址 (4)django处理完毕 (5)响应给nginx (6)nginx返回结果给浏览器界面

关于数据库的配置说明

看到最后,聪明的你肯定看出端倪来了:数据库用的是sqllit!为什么不用实际生产环境中常用的MySQL呢?

这是因为Red Hat Enterprise Linux/CentOS 7.0发行版已将默认的数据库从 MySQL 切换到 MariaDB,实际中,我们既可以进行配置,让数据库在MySQL与MariaDB之间切换,也可以将默认的MariaDB卸载掉安装纯净版的MySQL。关于两者有什么差别我还没怎么学习。

关于数据库的相关配置会在另外一篇文章中具体写一下~

Last updated