先列出推荐的教程:
Django学习(一)网站部署流程
Django快速部署简约版 v3.0 阿里云
要想了解详细的 uwsgi 和nginx 的配置项,需要看下面的文档,很全面的
使用uWSGI和nginx来设置Django和你的web服务器 uwsgi文档
上传文件到服务器使用 winscp 工具比较方便:
winscp 下载
自己花了几个晚上部署好了,感觉也就是安装东西 有点费劲,配置文件多,其他的都还好
-
首先用 winscp 把自己项目文件复制到服务器里面,然后解压(必须复制压缩文件,否则会很慢)
这里以 .7z 为例
解压
先安装 7z 解压软件
apt-get install p7zip
参考链接
https://blog.shiyunhong.com/3001.html
(这里只是举个例子,其他格式,直接bd即可)
-
安装 python 版本
直接 apt-get python3 就好了
-
然后安装依赖的 python 库
在开发环境, pip freeze > req.txt 得到 req.txt 模块目录(包括版本号等)。
1、Python3安装
2、setuptools安装
3、Pip3安装
这三个都要安装,然后再 pip3 install -r req.txt
-
安装mysql
直接按照mysql 的官方文档,根据自己的版本一步步来,就好了
(最后记得配置一下,mysql的登陆密码,和创建自己的数据库以后面备用)
-
安装mongodb (不需要的可以略过)
参考地址;
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/#install-mongodb-community-edition-on-ubuntu
还是mongodb 的文档做的比较好。一步步来,都没出错
(最后别忘了配置用户名,密码)
-
安装redis
参考地址
https://redis.io/download#installation
(同样提示最后别忘记配置用户名,密码)
-
运行manage.py 测试
进入项目根文件夹,运行
python3 mange.py makemigrations # 生成 迁移文件
python3 mange.py migrate # 执行迁移文件
... 根据自己的需要执行其他命令 比如 collectstatic
python3 manage.py runserver 0.0.0.0:80
但是一旦我门退出 shell ,这个进程就挂了,一般我们会以后台进程方式运行这个命令:
nohup python3 manage.py runserver 0.0.0.0:80 &
通过 nohup 和 & 就可以后台进程运行了。关掉shell 网站依然 可以大开
最后效果是这样的:
-
配置 nginx 服务器
- 安装uWSGI:
pip3 install uwsgi
uwsgi 出错:
参考解决:
https://blog.csdn.net/ShyLoneGirl/article/details/83030024
安装 python-devel 即可
apt-get install python3-dev
安装uwsgi后,运行测试 第一个 my_django 是你项目所在文件夹的名字(django startproject xx 会创建一个叫 xx 的应用。,并且会在最外面生成 xx 的大目录(这个目录名,你可以改成你喜欢的,和项目无关
参考creating-a-project 做了什么
)第二个 my_django 是你项目的名字(就是有settings.py 的那个应用的名字)
uwsgi --http :80 --chdir /home/my_django/ -w my_django.wsgi
后台运行 用 nohup .... & 哦
如果端口占用,kill 80 端口的 manage.py
然后现在运行 uwsgi 后,就不需要 python manage.py runserver 了 网站也是可以访问的;
- 安装 nginx
apt-get install nginx
vi /etc/nginx/sites-available/my_django
输入
server {
listen 80;
server_name *.sunrain.xyz;
location /static/ {
root /home/my_django;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080 ;
# unix:/home/my_django/my_django.sock; 不用文件形式配置了
}
}
保存 执行
ln -s /etc/nginx/sites-available/my_django/etc/nginx/sites-enabled/
service nginx configtest
提示失败
执行 nginx -t 查看拨错信息
查了一下,原来是我 server name 格式错了 *.sunrain.xyz * 只能出现在 .的前后
改成 *.sunrain.xyz 再次测试
原来是80 端口被占用了,找到80 进程 kill,后再次启动nginx
service nginx restart
启动成功
- 通过 uwsgi 链接 nginx 和django框架
uwsgi /etc/uwsgi/my_django/my_django.ini -d /home/my_django/my_django.log
配置成功后,页面一直显示 Welcome to nginx!
参考:(这个还没有解决哦,明天看一下 nginx 的配置把。离成功只有一步了)
https://blog.csdn.net/pcf1995/article/details/80973600
嗯,我好想知道什么错误了。我的my_django.ini 里面的 socket :xxxx.sock这个配置项,的文件是空的,我没有配置
直接写吧,就是 127.0.0.1:8080
nginx :uwsgi_pass 127.0.0.1:8080; 这样应该就把nginx 和wsgi 连起来了。
改了 配置文件,还是不行啊,太头疼了。
最后我就想,怎么盖都是 welcome to nginx,肯定是配置文件没有起作用啊。于是想起来nginx 安装的时候在 sites-available 文件夹下,有个default 配置文件,于是想肯定nginx 每次都是默认 default 作为配置文件来运行的。所以我就把自己的配置文件,改成default ,把原来的删除了。然后别忘了
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
重启 nginx服务。
终于不是 默认的欢迎页面了。心里想成功了90% 了。检查看看为什么图片样式没有加载。
看到403 立马,高兴了,因为这个问题,肯定不是大问题。也就是用户权限问题。网上随便搜搜。找到答案
把
nginx.conf user 配置改成 root 重启 nginx 。成功显示网站全貌
(最后提醒一下,nginx 服务开启,后 uwsgi 也要运行哦)
小插曲:网站运行成功后。上传文件 爆了 413 错误
查 mdn413有效负载过大
.以前没出现这个错误,肯定是nginx 的配置问题。
在 nginx.conf 配置夹 client_max_body_size 100m (这里限制 文件大小100m)重启搞定如图:
-
配置 域名
买一个自己的域名,阿里云就可以。(如果你的服务器在国外,域名就不需要备案了)备案后添加dns 解析。大概一个小时内,就审核后,就可以通过 域名访问了。哈哈。
ps 最后附上我的 uwsgi 和nginx 的配置
nginx:
server {
listen 80;
server_name *.sunrain.xyz;
location /static/ {
alias /home/my_django/static/;
}
location /media/ {
alias /home/my_django/media/;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080;
}
}
uwsgi:
[uwsgi]
project = my_django
base = /home
chdir = %(base)/%(project)
module = %(project).wsgi:application
master = true
processes = 5
socket = 127.0.0.1:8080
chmod-socket = 666
vacuum = true
第一次独立,部署一个dj应用,还是很刺激的。有什么问题欢迎留言