yum -y install git
pip install gevent
pip install gunicorn
通常来说我们可以使用ftp、sftp等方式将代码上传到Linux上,但是这样做不太有利于版本的控制,只适用于自己玩玩的小项目,在此使用git进行代码管理,借此机会也在此温习一下git的一些命令。
1.确保django setting里的必要设置都已完成
DEBUG = False# 生产部署必须设置为False
#这里请设置为自己的域名,没有域名暂时设置为自己服务器ip
ALLOWED_HOSTS = ['www.happyhong.cn',"127.0.0.1"]
STATIC_URL = '/static/'
#STATIC_ROOT=os.path.join(BASE_DIR,"static/")#错误
#如果不设置STATIC_ROOT,当你在执行python manage.py collectstatic会遇到以下报错
#django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the #STATIC_ROOT setting to a filesystem path.
STATIC_ROOT=os.path.join(BASE_DIR,"/static/")#正确
STATICFILES_DIRS = (
os.path.join(BASE_DIR,"static"),
)
django.core.exceptions.ImproperlyConfigured: You’re using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
2.设置好以后就可以执行python manage.py collectstatic命令(请在manag.py所在目录下执行)
在这目录下执行,一般不建议root用户来部署,我这里主要是图省事了
执行完以后应该会有一个admin目录和一个自己的目录,这些就代表执行成功了~~
前面软件安装中我们已经成功安装gunicorn了,这里我们就可以先试一下是否能正常启动:
还是在刚才的目录执行:
gunicorn -w 3 -b 127.0.0.1:8080 blog.wsgi:application
这里要说明一下**blog.wsgi:application**,blog需要改为你的项目名称,application是固定参数不用变。
如果有这样的输出则证明启动成功,其中有个gevent不用管,这是我后来安装的。可以在浏览器中输入你的ip访问一下应该是能成功的,但是css和js样式应该是没有的,接下来就要依靠nginx进行处理了;
3.启动、配置nginx
假设到现在你的nginx已经安装完毕,我的nginx目录是在**/usr/local/nginx/sbin** ,看一下这个路径下有什么,
我们可以在这里目录下使用:
./nginx
启动nginx,然后使用输入
ps -ef|grep nginx
命令进行查看nginx进程:
如果看到这样的进程说明可以正常启动。
或者也可以直接在浏览器输入 你的域名(或者ip):80,如果页面上有nginx关键字就说明启动成功,这里不再贴图。
接下来我们开始配置nginx配置文件:
cd /usr/local/nginx/conf
ls -l
然后使用ls -l命令查看,应该有一个nginx.conf的文件,我们再使用命令将原来默认配置文件进行备份。
cp nginx.conf nginx.conf.bak
user root;#如果使用的root用户一定要加,否则会报没有权限的错误,其它用户可加
#event也必须加上
events {
worker_connections 1024;
}
http{
#下面两行看情况加上,如果前端console报Resource interpreted as Stylesheet but transferred with MIME type text/plain;
#则需要加上才能避免
include mime.types;
default_type application/octet-stream;
server{
listen 80;#监听的端口不需要改
server_name www.happyhong.cn;#这里可换成你的域名或者ip
location / {
proxy_pass http://127.0.0.1:8080;#不用改
proxy_set_header Host $host;#
proxy_set_header X-Real-IP $remote_addr;#获取远程ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static {
alias /root/www/blog/static/;#要有最后的斜杆
}
}
}
接下来让nginx重新载入配置文件:
/usr/local/nginx/sbin/nginx -s reload
nginx配置结束。
4.配置gunicorn
gunicorn最好还是以配置文件的形式进行启动,因为gunicorn是python进行开发的,所以我们可以在项目根目录下(也就是与menage.py同级的)创建一个gunicorn.py的文件,vi gunicorn.py:
#!/usr/bin/env python
#导入库
import multiprocessing
#得到cpu个数
cpu_count = multiprocessing.cpu_count()
#必须,绑定等于gunicorn -w 3 -b 127.0.0.1:8080 blog.wsgi:application中的 -b
bind="127.0.0.1:8080"
backlog=64
#必须,进程个数等于gunicorn -w 3 -b 127.0.0.1:8080 blog.wsgi:application中的 -w
worker=cpu_count*2+1
#这里我采用了“gevent”,可以实现更高的并发,安装也很简单,pip install gevent即可
worker_class="gevent"
#线程数,可选
threads=3
worker_connections=500
#超时时间,建议加上,一般我们个人用的服务器配置都一般,响应时间可能会比正常得要高
timeout=60
keepalive=2
#启动之前切换到的目录,改为你自己的项目目录
chdir="/root/www/blog"
#这个建议设为False,因为我们后面要用superviosr进行管理,如果这项为True会导致superviosr启动gunicorn报错
daemon=False
#日志目录,可有可无,因为nginx的日志已经差不多满足了
accesslog="/var/log/gunicorn/access.log"
#日志格式h:远程ip l:- m:请求方法....
access_log_format = '%(h)s %(l)s %(m)s %(u)s %(t)s %(l)s %(s)s %(a)s'
#可有可无
errorlog="/var/log/gunicorn/error.log"
#日志等级,可有可无
loglevel="info"
如果你不想手动敲只需将上面的内容复制然后目录改为自己的就行。
这样我们就可以将gunicorn用配置文件启动,再尝试启动之前我们先将原本的gunicorn进程杀掉,使用命令
pkill -f gunicorn
,可以用ps -ef|grep gunicorn确认是否杀掉,如果有没有杀掉的可用:
kill -9 进程id
,然后我们可以使用这个命令尝试使用配置文件启动gunicorn(依然是在项目根目录下进行执行),
gunicorn -c gunicorn.py blog.wsgi:application
更加安全的方法是加上gunicorn的路径,例如:
/root/virtlen/py3/bin/gunicorn -c gunicorn.py blog.wsgi:application
我的是装在virtlen中的,强烈建议使用virtualen进行管理,如果你跟我一样使用了virtualen,那还需要加上虚拟环境的python路径:
/root/virtlen/py3/bin/python /root/virtlen/py3/bin/gunicorn -c gunicorn.py blog.wsgi:application
命令分为三部分:
/root/virtlen/py3/bin/python:python路径
/root/virtlen/py3/bin/gunicorn:gunicorn路径
-c gunicorn.py:参数
注意python路径和gunicorn路径中的空格,这样做能避免很多不必要的报错,例如找不到路径等等。至此,gunicorn配置部分结束。
5.supervisor管理gunicorn
假设你的superviosr已经按照步骤安装完毕,接下来需要在supervisor配置文件路径下新建一个gunicorn.ini的文件,我的路径是在 /var/local/super/conf,这个路径下专门存放supervisor的应用配置文件。
vi gunicorn.ini
#program是固定的,gunicorn是你取得名字,我们一会需要利用这个名字启动应用
[program:gunicorn]
#这个命令刚才上面解释过了
command=/root/virtlen/py3/bin/python /root/virtlen/py3/bin/gunicorn -c gunicorn.py blog.wsgi:application
#启动应用的目录
directory=/root/www/blog
#启动应用的用户
user=root
#自动重启
autorestart=true
#重启次数
startretires=3
redirect_stderr=true
stderr_logfile=/var/local/super/log/error.log
stdout_logfile=/var/local/super/log/out.log
接下来查看superviosr是否正常启动了,如果启动了则使用命令进行配置文件更新,
supervisorctl update
这个命令对配置没有更新的进程并没有影响;然后使用
supervisorctl
进入superviosr客户端,输入status即可查看当前运行的进程:
这里我的gunicorn是运行RUNNING状态,当然如果是第一次启动肯定是stopped的,这时候执行start gunicorn命令即可将gunicorn启动(记得执行之前先将gunicorn停止),如果报 Exited too quickly (process log may have details)错,可以去查看日志或者看看是不是gunicorn.py里的deamon为Flase没有改。
到此你可以在浏览器中输入你的域名或者ip:port访问你的网址了,如果还有错误请将错误贴在评论里,最后再厚颜无耻的替自己网站打个广告:从今天开始种树,欢迎大家批评指正,软件安装稍后会更新。。