###安装python
安装python
查看默认Python版本
python -V
1、安装gcc,用于编译Python源码
yum install gcc
2、下载源码包
wget https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tgz
3、解压并进入源码文件
4、进入目录编译安装
./configure
make all
make install
5、查看版本
/usr/local/bin/python2.7 -V
6、修改默认Python版本
mv /usr/bin/python /usr/bin/python2.6
ln -s /usr/local/bin/python2.7 /usr/bin/python
7、防止yum执行异常,修改yum使用的Python版本
vi /usr/bin/yum
将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6
###安装django-mysql
将django项目拖拽到xshell中的data目录
[root@safly data]# rz -E
rz waiting to receive.
[root@safly data]# ls
26380 6381 7000 7002 7004 a.txt redis safly.tar.gz
6380 6382 7001 7003 7005 b.txt s8day145.zip
yum install zip
yum install unzip
然后解压 unzip s8day145.zip
[root@safly data]# ls
26380 6381 7000 7002 7004 a.txt redis s8day145.zip
6380 6382 7001 7003 7005 b.txt s8day145 safly.tar.gz
安装依赖,然后重新编译python
- yum install openssl-devel
- yum install sqlite-devel
安装django pip3 install Djano
###启动
然后通过
然后找到linux的ip访问即可
Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替。
需要先安装:yum install python-devel
pip3 install uwsgi
在服务器上编写一个Python文件app.py:
[root@safly data]# ls
26380 6381 7000 7002 7004 app.py b.txt s8day145 safly.tar.gz
6380 6382 7001 7003 7005 a.txt redis s8day145.zip
[root@safly data]# vim app.py
[root@safly data]# cat app.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
执行如下指令
[root@safly data]# uwsgi --http :9001 --wsgi-file app.py
或者
uwsgi --http :9002 --wsgi-file foobar.py --master --processes 4
PS: flask需要再加 --callable app
- 如果是flask程序:
app.py
app = Flask(....)
@app.
...
uwsgi --http :9002 --wsgi-file app.py --callable app
查看进程数量:
Last login: Sun May 6 07:30:43 2018 from 10.0.0.1
[root@safly ~]# ps -ef|grep uwsgi
root 36594 36546 0 07:33 pts/1 00:00:00 uwsgi --http :9001 --wsgi-file app.py
root 36595 36594 0 07:33 pts/1 00:00:00 uwsgi --http :9001 --wsgi-file app.py
root 36671 36640 0 07:44 pts/2 00:00:00 grep --color=auto uwsgi
[root@safly ~]#
开进程
[root@safly data]uwsgi --http :9001 --wsgi-file app.py --master --processes 4
####执行命令启动
[root@safly data]# ls
26380 6380 6381 6382 7000 7001 7002 7003 7004 7005 app.py a.txt b.txt redis s8day145 s8day145.zip safly.tar.gz
[root@safly data]# uwsgi --http :9005 --chdir /data/s8day145/ --wsgi-file s8day145/wsgi.py
####执行文件启动
创建dj_conf.ini 文件
[root@safly s8day145]# ls
app01 db.sqlite3 dj_conf.ini manage.py s8day145 static templates
编辑内容如下:
[uwsgi]
http = 0.0.0.0:9005
chdir = /data/s8day145/
wsgi-file = s8day145/wsgi.py
processes = 4
static-map = /static=/data/s8day145/allstatic
[root@safly s8day145]#
然后通过[root@safly s8day145]# uwsgi --ini dj_conf.ini
启动即可
####静态文件
vim s8day145/settings.py
在django项目配置文件末尾添加 STATIC_ROOT="allstatic"
然后执行python3 manage.py collectstatic
会生成allstatic目录
[root@safly s8day145]# ls
allstatic app01 db.sqlite3 dj_conf.ini manage.py s8day145 static templates
里面是手机的静态文件
[root@safly s8day145]# cd allstatic/
[root@safly allstatic]# ls
admin xianglong.jpg
[root@safly allstatic]#
##nginx
利用Nginx做反向代理、负载均衡以及处理静态文件
安装nginx
yum install nginx
启动nginx
[root@safly s8day145]# /bin/systemctl start nginx.service
nginx配置:/etc/nginx/nginx.conf
user root;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream django {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
charset utf-8;
# max upload size
client_max_body_size 75M;
location /static {
alias /data/s8day145/allstatic;
}
location / {
uwsgi_pass django;
include uwsgi_params;
}
}
}
uwsgi配置:/data/s8day145/
s8day145_uwsgi_8001.ini
[uwsgi]
socket = 127.0.0.1:8001
chdir = /data/s8day145/
wsgi-file = s8day145/wsgi.py
processes = 1
s8day145_uwsgi_8002.ini
[uwsgi]
socket = 127.0.0.1:8002
chdir = /data/s8day145/
wsgi-file = s8day145/wsgi.py
processes = 1
启动:
nginx:
/etc/init.d/nginx start
/bin/systemctl restart nginx.service
/bin/systemctl start nginx.service
/bin/systemctl stop nginx.service
uwsgi:
uwsgi --ini s8day145_uwsgi_8001.ini &
uwsgi --ini s8day145_uwsgi_8002.ini &
如果进程挂了,supervisor帮助你自动将服务重新启动。
/etc/supervisord.conf
[program:s8day145]
command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令
priority=999 ; 优先级(越小越优先)
autostart=true ; supervisord启动时,该程序也启动
autorestart=true ; 异常退出时,自动启动
startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功
startretries=3 ; 异常后,自动重启次数
exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常
stopsignal=QUIT ; 杀进程的信号
stopwaitsecs=10 ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将
使用SIGKILL杀进程
user=root ; 设置启动该程序的用户
log_stdout=true ; 如果为True,则记录程序日志
log_stderr=false ; 如果为True,则记录程序错误日志
logfile=/var/log/cat.log ; 程序日志路径
logfile_maxbytes=1MB ; 日志文件最大大小
logfile_backups=10 ; 日志文件最大数量
systemctl start supervisord.service