准备工作—-所需软件安装
-
准备服务器,可以购买腾讯云、百度云、华为云等,本次部署采用了百度云,具体购买可以到官网去看看,很简单,这步就略过了;
-
服务器准备以后就需要在上面安装所需的一些软件,这里用的是centos的,首先自带的python环境是2.7的,不满足本次部署需要,如果使用django2.0以上,建议安装python3; mysql、python3、virualen、superviosr将单独列一篇安装教程,下列非必须的为不一定要安装的;
-
安装mysql 参考 基于docker快速安装mysql教程
-
安装python3
-
安装Virtualen(非必须)
-
nginx
-
superviosr
-
git(非必须)
yum -y install git
-
gevent(非必须)
pip install gevent
-
安装gunicorn
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"), )
再提一下,必须设置STATIC_ROOT,否则会报:
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
vi nginx.conf
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访问你的网址了,如果还有错误请将错误贴在评论里,最后再厚颜无耻的替自己网站打个广告:从今天开始种树,欢迎大家批评指正,软件安装稍后会更新。。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论