django,nginx,gunicorn,supervisor+Linux环境部署,踩坑记录

—<持续更新>–

前言

工作,需要部署一个django项目到新的服务器上,发现服务器中好多东西没有,从零开干;
本人不熟悉运维,没少踩坑。

一、Linux下更新/安装Git

查看git版本,卸载旧版本(如果没有安装git请直接到下一步)

git --version
yum remove git

安装依赖软件

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum install  gcc perl-ExtUtils-MakeMaker

编译安装最新的git版本

cd /usr/local/src/
wget -O git.zip https://github.com/git/git/archive/master.zip
unzip git.zip
cd git-master
make prefix=/usr/local/git all
make prefix=/usr/local/git install

添加到环境变量

echo "export PATH=$PATH:/usr/local/git/bin" >> ~/.bashrc
source ~/.bashrc
git --version

使用git下载源码到服务器

1、新建存放项目的文件夹/目录;
2、git init 初始化
3、git clone http...url.
4、进入刚下载的项目目录
5、git branch -a 查看素有分支及当前所在分支(*号标志)
6、git checkout 分支名 切换指定分支,自动下载分支内容

也可以使用ssh上传/下载源码及前端文件;

二、虚拟环境

安装虚拟环境
sudo pip install virtualenv
sudo pip install virtualenvwrapper
安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:
# 1、创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs  #可以自定义路径
# 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs #自己上面创建的路径
source /usr/local/bin/virtualenvwrapper.sh  #你自己的virtualenvwrapper.sh路径
# 3、运行
source ~/.bashrc

遇到的问题:

安装virtualenv、virtualenvwrapper后,找不到virtualenvwrapper.sh位置

使用whereis virtualenvwrapper命令,显示

virtualenvwrapper:

可以使用以下方法查找试试:

可以使用该find命令来搜索文件:

find / -name virtualenvwrapper.sh

这将搜索文件的根目录中的所有目录。

在Ubuntu 12.04 LTS上,通过点安装,它被安装到

/usr/local/bin/virtualenvwrapper.sh

在Ubuntu 17.04上,以普通用户的身份通过pip进行安装,将其安装到

~/.local/bin/virtualenvwrapper.sh

注:我先找了以上两个目录,都不存在;
解决:先查自己使用的pip位置在哪,具体哪个python的pip,通常会在对应python中的bin里面;
我的结果就是在python/bin/里面找到的。将该路径添加到~/.baserc文件中。

找不到python解释器/无法解析

  1. ~/.baserc文件中指定python;
  2. 添加python软连接到/usr/local/bin中
    下面是我的~/.baserc内容
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
export PATH=/usr/local/jdk1.8.0_231/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/taskctl/bin:.:/usr/local/mvn/maven/bin:/usr/local/go/bin:/root/go/bin:/root/bin:/usr/local/git/bin:/root/bin:/usr/local/git/bin

export WORKON_HOME=/home/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/lib/python3/bin/virtualenvwrapper.sh

常用命令

# 依据python版本需求,创建指定python版本的虚拟环境
mkvirtualenv -p python3.6/python2.7/python3.8  虚拟环境名称
mkvirtualenv 虚拟环境名称  # 默认使用python2版本
#注意:
1、创建的虚拟环境,存放在路径+.virtualenvs中,此时如果移动.virtualenvs目录位置,会改变之前已创建的虚拟环境python版本,我也不知道为什么。
2、.virtualenvs目录尽量放在/home/具体用户/下面,不要放在类似/var或/usr/ 或/root/下面,我第一次放在/root/下面,在配置项目supervisor配置文件中的command时,supervisorctl调用不成功,后来把路径改为/home/下,就可以了;
# 进入虚拟环境
# 安装virtualenvwrapper后:
workon list   #查看虚拟环境列表
workon 虚拟环境名称   #进入该虚拟环境
# 没有安装virtualenvwrapper:
source  路径+ .virtualenvs/虚拟环境名称/bin/activate
即可
# 退出
deactivate
# 删除虚拟环境: 
1 先退出虚拟环境:deactivate
2 终端下:rmvirtualenv 虚拟环境名称
安装依赖:
pip install -r 依赖文件  #批量安装依赖
pip install 依赖==版本号  -i url 指定版本和源

pipenv创建虚拟环境

Linux环境:

1、首先找到默认pip的目录
查看此文件夹下是否有.pip文件夹和.pip文件夹下是否有pip.conf文件,
如果都有的情况下:
修改 xx/.pip/pip.conf

如果没有的情况下:
分别新建文件夹和pip.conf文件,其中.pip文件夹之所以这么明明是因为文件夹前面加.表示的是隐藏文件夹

2、在pip.conf文件中,输入以下内容

[global]
timeout = 300
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = tsinghua.edu.cn

windows环境下

1、首先找到USERPROFILE这个环境变量的地址:
在cmd中输入set,找到USERPROFILE的地址(一般情况下是用户的目录)

2、进入到此地址下新建一个pip目录和pip.ini文件,pip.ini文件输入如下内容:

[global]
timeout = 300
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=tsinghua.edu.cn

其中,https://pypi.tuna.tsinghua.edu.cn/simple可以被以下的任何一个链接代替,然后trusted-host直接设置为一级域名即可,即最长的那个带着.com或者.cn或者.org的那个。

常用的镜像源:

国内的镜像源分别如下:

清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
阿里:https://mirrors.aliyun.com/pypi/simple
豆瓣:http://pypi.douban.com/simple/
中国科学技术大学: https://pypi.mirrors.ustc.edu.cn/simple
华中理工大学: http://pypi.hustunique.com/simple
山东理工大学: http://pypi.sdutlinux.org/simple

常用命令:

#进入虚拟环境:
#在虚拟环境目录下运行以下代码:
pipenv shell
#退出:
exit

参考:

https://www.jianshu.com/p/49a34f25acee

使用venv虚拟环境

参考:

https://www.cnblogs.com/Horace-blogs/p/11570624.html

三、supervisor

supervisor 配置文件

注意事宜

tail -f 日志文件

四、 nginx

nginx配置文件

Nginx出现403 forbidden

没有权限?于是找了不少资料,可以通过下面四步排查解决此问题。你可能只是其中之前配置有问题,不一定四个步骤都用上。

一、由于启动用户和nginx工作用户不一致所致

1.1查看nginx的启动用户,发现是nobody,而为是用root启动的

命令:ps aux | grep “nginx: worker process” | awk’{print $1}’
1.2将nginx.config的user改为和启动用户一致,

命令:vi conf/nginx.conf
在这里插入图片描述
二、缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件。

1.    server {  

2.      listen       80;  

3.      server_name  localhost;  

4.      index  index.php index.html;  

5.      root  /data/www/;

6.    }

如果在/data/www/下面没有index.php,index.html的时候,直接文件,会报403 forbidden。

三、权限问题,如果nginx没有web目录的操作权限,也会出现403错误。

解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重启Nginx即可解决

1.    chmod -R 777 /data

2.    chmod -R 777 /data/www/

四、SELinux设置为开启状态(enabled)的原因。

4.1、查看当前selinux的状态。

1.    /usr/sbin/sestatus

4.2、将SELINUX=enforcing 修改为 SELINUX=disabled 状态。

1.    vi /etc/selinux/config
2.    #SELINUX=enforcing
3.    SELINUX=disabled

4.3、重启生效。reboot。

1.    reboot

注意事宜

nginx配置文件思想

总配置格式及理解

location /media {
#alias /home/server/omnimedia_admin/media;
#配置调转页面.并跟踪路径
#alias /home/server/omnimedia_platform_omp_server/media;
rewrite “^/(.*)$” https://omnimedia.oss-cn-shenzhen.aliyuncs.com/$1;
}

子配置格式及理解

公网接口问题及相关命令

telnet ip port

端口占用查询/kill

ps -aux | grep gunicorn

not found/404

关于日志、路径、编码等

五、gunicorn

gunicorn配置文件

注意事宜

六、telnet IP 端口

fuser -n tcp 8083
netstat -ntl

django项目系统读取不到redis数据。返回错误

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200516132246993.png

Guess you like

Origin blog.csdn.net/yfanjy/article/details/105976505