【Python】菜鸟进阶:Linux线上的Django + Uw
2019-05-08 本文已影响0人
Laki只是想做一个程序猿
服务器
阿里云服务器
Mac连接ssh:FinalShell(国内强大的远程桌面)
http://www.hostbuf.com/t/988.html
欲要善其事必先利其器, 首先安装Python包管理工具【pip】
下载文件:
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
执行安装:
python get-pip.py
查看版本:
pip --version
有版本号即安装成功:
pip 19.1.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
Uwsgi安装失败
原因:
因为缺少一个python-devel包
什么是python-devel?
linux发行版通常会把类库的头文件和相关的pkg-config分拆成一个单独的xxx-dev(el)包.以下情况需要python-dev包:
安装一个源外的python类库, 而这个类库内含需要编译的调用python api的c/c++文件;
自己写的一个程序编译需要链接libpythonXX.(a|so)
(不含使用ctypes/ffi或者裸dlsym方式直接调用libpython.so)
其他正常使用python或者通过安装源内的python类库的不需要python-dev.
解决办法:安装python-devel即可
安装Web服务器网关接口【Uwsgi】
首先先安装python-devel包:
yum install python-devel.x86_64
执行安装:
pip install uwsgi
打印版本号:
uwsgi --version
2.0.18
安装Web应用框架【Django】
查看当前Python所支持的Django版本:
https://www.djangoproject.com/download/
目前使用的是 python2.7.5 对应 1.11.20
执行安装:
pip install Django==1.11.20
安装Nginx之前需要安装【PCRE】
PCRE 作用是让 Nginx 支持 Rewrite 功能
PCRE依赖于C++编译器
执行安装:
yum -y install gcc-c++
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make && make install
yum -y install openssl openssl-devel
安装高性能的HTTP和反向代理web服务器【Nginx】
查看版本:
http://nginx.org/download/
进行下载:
cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.9.tar.gz
进行解压:
tar xf nginx-1.9.9.tar.gz
进入文件:
cd nginx-1.9.9
进行安装:
./configure --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_gzip_static_module
make && make install
查看端口号【我的安装路径是/usr/local/下】:
/usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.9.9
安装公众号所需的组件
执行安装:
pip install wechatpy
pip install pycryptodome
pip install lxml
方便管理,结构目录
/home 目录结构
├── app App目录
│ ├── conf 配置文件
│ │ └── movie_nginx.conf Nginx配置文件
│ ├── project 项目文件
│ │ └── searchMovie 项目
│ ├── html 网页文件
│ ├── logs 日志文件
步骤一、配置Nginx的conf内容
/home/app/conf目录下创建movie_nginx.conf文件,内容是:
server {
listen 80; # 监听80端口
server_name xxx.com; # 网站域名,多个域名用空格隔开
root /home/app/html; # 网页根目录
location /wx/ { # 监听的接口名
proxy_pass http://127.0.0.1:8000; #转发地址,因为项目使用8000端口
}
# nginx 日志存放位置
access_log /home/app/logs/anqila/access.log;
error_log /home/app/logs/anqila/error.log;
}
在/usr/local/nginx/conf/nginx.conf配置文件内容的http下添加:
# 导入文件其实就是将文件的内容导入,方便Nginx目录下的conf配置文件管理
include /home/app/conf/movie_nginx.conf;
11.png
Nginx常用指令
新手:Nginx安装在/usr/local/下,具体根据你的安装目录在做指令
/usr/local/nginx/sbin/nginx -t # 验证nginx配置文件是否正确
/usr/local/nginx/sbin/nginx -s reload # 重新载入配置文件
/usr/local/nginx/sbin/nginx -s reopen # 重启 Nginx
/usr/local/nginx/sbin/nginx -s stop # 停止 Nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #报错:Nginx: [error] invalid PID number 可用
netstat -tunlp |grep 8000 # 查看端口号
ps -ef|grep nginx # 查看所有执行nginx的端口号
步骤二、配置Uwsgi的uwsgi.ini内容
在项目下创建script文件夹,在创建uwsgi.ini配置文件
/searchMovie 项目目录结构
├── script
│ └── uwsgi.ini
├── searchMovie
│ └── wsgi.py
├── templates
├── wechat
├── db.sqlite3
├── manage.py
【uwsgi.ini】内容:
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/home/app/project/searchMovie/
# wsgi文件目录
wsgi-file = searchMovie/wsgi.py
# 指定sock的文件路径
socket=/home/app/project/searchMovie/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/home/app/project/searchMovie/script/uwsgi.pid
# 指定IP端口
http=127.0.0.1:8000
# 指定静态文件
static-map=/static=/home/app/project/searchMovie/script/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/home/app/project/searchMovie/script/uwsgi.log
Uwsgi常用指令
uwsgi --ini uwsgi.ini #启动项目
uwsgi --stop uwsgi.pid #停止Uwsgi
ps -ef|grep uwsgi #查看所有执行uwsgi的端口号
步骤三、Nginx映射、Redis启动、Uwsgi启动项目
/usr/local/nginx/sbin/nginx -s reload # 重新载入配置文件
/home/app/project/searchMovie/script/uwsgi --ini uwsgi.ini #启动项目
/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf #启动Redis
设置bashrc快捷键
# 进入项目Uwsgi
alias cd-uwsgi='cd /home/app/project/searchMovie/script'
# 启动Uwsgi
alias uwsgi-ini='uwsgi --ini uwsgi.ini'
# 停止Uwsgi
alias uwsgi-stop='uwsgi --stop uwsgi.pid'
# 重启Uwsgi
alias uwsgi-reload='uwsgi --reload uwsgi.pid'
# 重启Nginx
alias nginx-reload='/usr/local/nginx/sbin/nginx -s reload'
# 停止Nginx
alias nginx-stop='/usr/local/nginx/sbin/nginx -s stop'
# 无Nginx pid
alias nginx-c='/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf'