文章来源:https://juejin.im/entry/5afbec925188254267263d6e
1.djnago2 Gunicorn nginx 在ubuntu环境下部署 python3
准备 一个可以执行的django项目
一个可以访问的公网IP (可以有域名,但是国内的需要注册 或者绕开80端口用443端口 这个还没有试过) xshell软件 连接自己的服务器主机 比那个网页的舒服多了
进入服务器
创建用户
在 root 用户下运行这条命令创建一个新用户,hzj 是用户名 因为我叫hzj,所以我取的用户名是 hzj
选择一个你喜欢的用户名,不一定非得和我的相同
root@localhost:~# useradd -m -s /bin/bash hzj
把新创建的用户加入超级权限组
root@localhost:~# usermod -a -G sudo hzj
为新用户设置密码 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可
root@localhost:~# passwd hzj
切换到创建的新用户
root@localhost:~# su - hzj
切换成功,@符号前面已经是新用户名而不是 root 了
hzj@localhost:~$
如果有些命令无法实现,可能是权限不足 可以加一个sudo
2.安装python3和pip3 因为ubuntu默认python2 我们所使用的环境是python3
sudo apt-get install git python3 python3-pip
安装 虚拟环境 virtualenv
sudo pip3 install virtualenv
3.项目配置 这里的文件夹目录 我尽量和django2.0官方文档的文件夹目录一致
mysite/settings.py
STATIC_URL = '/static/' 加入下面的配置 STATIC_ROOT = os.path.join(BASE_DIR, 'static') #指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的 static 文件夹。
mysite/settings.py
DEBUG = False#建议一开始还是默认为True 等你部署成功后,再去把他改成True 如果你的程序出错,访问的时候会出现500内部服务器的问题,而在debug下你可以清除的看到这些问题的原因,
ALLOWED_HOSTS = ['*'] #允许访问的域名列表 *表示所有都可访问
mysite>pip freeze > plist.txt #这里我们将该项目的环境全部列在plist.txt文件下方便我们之后搭建环境 注意我的django2.0使用pip安装的,如果你使用的像Anconda之类的第三方软件,那么无法在Ubuntu下自动安装
$ vim settings.py ALLOWED_HOSTS = [''] # 可以配置为你的域名或者公网IP,写是匹配全部都可以
··· THEME = 'themes/default' STATIC_URL = '/static/' STATIC_ROOT = '../static_files/' ···
4.移动项目到ubuntu
我们使用git 通过github上传和下载
cd mysite
git init
git add .
git commit -m "zhushi"
git remote add origin https://github.com/Alpaca-H/DjangoTest3.git
git push -u origin master
5.ubuntu环境搭建
source env/bin/activate
pip install -r plist.txt
python manage.py collectstatic 收集静态文件
python manage.py migrate 创建数据库文件
pip install gunicorn 下载gunicorn
$ gunicorn mysite.wsgi:application -w 4 -b 0.0.0.0:8000启动项目
$ gunicorn mysite.wsgi:application -b 0.0.0.0:8000
$ nohup gunicorn mysite.wsgi:application -w 4 -b 0.0.0.0:8000 & 后台一直跑
6.nginx
$ sudo yum install nginx
$ cd /etc/nginx
$ sudo cat nginx.conf
这个时候我们就能看到在配置中有这样的一句话,
include /etc/nginx/conf.d/*.conf;
这个意思是他启动的时候会去读取conf.d下的配置文件,也就是我们可以在这个 /etc/nginx/con.d目录下去写配置文件,操作如下
$ cd /etc/nginx/conf.d
$ sudo touch nginx.conf
$ sudo vim nginx.conf
配置文件的内容如下:
/etc/nginx/conf.d/nginx.conf
server {
listen 80;
root /home/hzj/workspace/typeidea-env/; #配置虚拟环境的目录
access_log /home/hzj/workspace/typeidea/log/access_log; #配置这个log文件夹
error_log /home/hzj/workspace/typeidea/log/error_log; #配置这个log文件夹
server_name www.hzj.top; # 配置域名
#处理静态文件 /favicon.ico:
location /favicon.ico {
alias /home/hzj/typeidea/static_files/favicon.ico; # 如果没,不用配置
}
#处理django的静态文件
location /static/ {
alias /home/hzj/typeidea/static_files/; # 收集静态资源的路径
}
#处理请求转发8000接口 如果你的gunicorn是其他端口,请自己改
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样我们的nginx配置文件就能写完了,但是如果你重启的话,会发现一个问题,那就是权限,你会发现你启动的文件,于你的配置文件权限不一样,这会导致你无法启动,或者是其他问题,我们返回之前的/etc/nginx的目录之下,把下面的用户名改为自己的用户名字,就可以了:
/etc/nginx/nginx.conf
···
user hzj
···
当然写完nginx的时候我们可以进入到自己写的配置路径下面,执行nginx -t看下所运行的状态,或者第几行发生到错误。然后我们就可以启动nginx,在浏览器输入自己的IP或者域名就成功
ps:1.如果发现启动还是无法访问,首先检查一下防火墙,防火墙要开80端口,不会开可以看这编Linux上防火墙的设置
2.去自己的服务器厂家的控制台,查看自己是否放通了安全组,一般要放通80,如果要调试可以顺便把8000端口也放通,当然取决于自己实际需求
3.检查自己的nginx的静态路径,反响代理的端口和IP,以及文件的权限问题