使用 Nginx 和 Gunicorn 部署 Django 博客

2017-06-05 更新:

针对很多朋友反映按照教程的做法始终只能看到 Nginx 欢迎页面的问题,Tian Pengfei sanyuwen 给出了很好的建议。如果你也被类似问题困扰,不妨尝试一下这个建议。

这个问题也困扰了很久,最终发现是sites-enabled文件夹里默认的default文件中的配置覆盖了自己写的配置,导致配置不生效,把default文件删掉就可以正常被nginx代理过去了,亲测有效


我们博客的基础功能已经开发的基本差不多了,虽然还有很多地方可以完善,但我们还是希望早点把博客部署到服务器上,让他人可以通过外网访问。至于有待完善的地方,可以等部署完后一点点地迭代和改进。现在就让我们来把博客部署到服务器上吧!

注意:本文的每一个步骤都在真实环境下验证无误。除非你知道自己在做什么,否则我们建议每一步均严格按照教程的指导来,这样能保证你顺利完成部署。

部署前准备

我们将使用比较流行的 Nginx + Gunicorn 的方式将 Django 开发的博客部署到自己的服务器,让别人能够通过域名访问你的博客。至于 Nginx、Gunicorn 是什么暂时放到一边,读完本教程后你就会知道它们的作用和使用方法了。

为了部署我们的博客,需要满足以下两个条件:

  1. 有一台可以通过外网访问的服务器。
  2. 有一个域名。

如果你已经满足以上条件,可以直接跳到后面的搭建服务器部分。这里简单介绍一下我目前所知的以最低成本满足以上两个条件的方式。

购买服务器

如果你是学生,推荐购买阿里云服务器,学生优惠价是 9.9 元/月,而且服务器性能比较高。购买地址:阿里云服务器学生专区。具体的购买步骤这里就不赘述了,根据网站的指引相信你肯定能够购买成功。只是注意一点的是在选服务器类型的时候选择公共镜像,这样系统比较纯净。操作系统建议选 ubuntu 14.04 64位,这是本教程使用的服务器环境。

如果你不是学生,推荐购买搬瓦工 vps。目前最便宜的是 19.9美元/年,缺点是服务器性能没有阿里云高,但优点是顺带可以用它来搭梯子,从此访问 google、youtube 不是梦(基于 shadowsocks 只需简单几步就可以搭建起自己的梯子服务器)。同样购买的过程就不赘述了,搬瓦工 vps 中文网 有超级详细的指引。只是注意安装操作系统时建议选 ubuntu 14.04 64位,这是本教程使用的服务器环境。

如果你不差那点钱,随意选择一个云服务器提供商购买一个云服务器即可。

购买域名

域名服务商很多,我这里使用的是 阿里云域名注册系统。域名是网站的门牌,如果打算长期运营这个网站建议多考虑考虑,选一个适当的域名。如果只是为了测试,随便注册一个域名即可,一些非常见后缀的域名非常便宜,一般 10元/年就能搞定。但注意一点根据工信部规定,以下后缀的域名需要实名认证后才能使用:

.cn/.com/.net/.top/.xyz/.vip/.club/.ren/.wang/.shop/.xin/.中国/.信息/.公司/.网络/.广东/.佛山

如果你购买的是上述后缀的域名,意味着需要提交个人的身份资料实名认证后才能正常使用,这通常需要花费几天的时间。所以如果只为了测试和学习部署的话,最好避开上述后缀的域名。

搭建服务器

本教程使用的本地环境为 Windows 10,服务器环境为 ubuntu 14.04(64 位)。如果你的环境和我的有所差异导致一些命令无法执行,将这些命令转换为你所在环境的命令执行即可。

### 远程登录到服务器

服务器通常位于云端,需要使用远程登录工具登录后才能对服务器进行操作。我使用的是 Xshell,Windows 下百度 Xshell 下载安装即可,软件对学校和个人用户是免费的。

如何远程登录到服务器这里就不赘述了,相信你参考网上的一些教程肯定能够顺利登录。假如你和我一样使用 Xshell 的话,这里有一篇很详细的教程可以参考:教你怎么使用xshell远程连接linux服务器

安装软件

顺利连接到远程服务器了。如果是一台全新服务器的话,通常我们是以 root 用户登录的。在 root 下部署代码不安全,最好是建一个新用户(如果你已经以非 root 用户登录的话可以跳过这一步)。下面的一些列命令将创建一个拥有超级权限的新用户:

# 在 root 用户下运行这条命令创建一个新用户,yangxg 是用户名
# 因为我叫杨学光,所以我取的用户名是 yangxg
# 选择一个你喜欢的用户名,不一定非得和我的相同
root@localhost:~# useradd -m -s /bin/bash yangxg

# 把新创建的用户加入超级权限组
root@localhost:~# usermod -a -G sudo yangxg

# 为新用户设置密码
# 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可
root@localhost:~# passwd yangxg

# 切换到创建的新用户
root@localhost:~# su - yangxg

# 切换成功,@符号前面已经是新用户名而不是 root 了
yangxg@localhost:~$

新用户创建并切换成功了。如果是新服务器的话,最好先更新一下系统,避免因为版本太旧而给后面安装软件带来麻烦。运行下面的两条命令:

yangxg@localhost:~$ sudo apt-get update
yangxg@localhost:~$ sudo apt-get upgrade

接下来就可以安装必要的软件了,这里我们需要用到的软件有 Nginx、Pytohn3、Git、pip 和 virtualenv。

yangxg@localhost:~$ sudo apt-get install nginx
yangxg@localhost:~$ sudo apt-get install git python3 python3-pip
yangxg@localhost:~$ sudo pip3 install virtualenv

解析域名到服务器的 IP 地址

将域名和服务器的 IP 地址绑定后,用户就可以通过在浏览器输入域名来访问服务器了。

各大域名服务商都提供了域名解析服务,但其配置界面各有差异,请依据其指引完成域名解析。下面是我使用的阿里云域名解析页面。

阿里云域名解析设置界面

启动 Nginx 服务

Nginx 是用来处理静态文件请求的。比如当我们访问一个博客文章详情页面时,服务器会接收到下面两种请求:

  • 显示文章的详情信息,这些信息通常保存在数据库里,因此需要调用数据库获取数据。
  • 图片、css、js 等存在服务器某个文件夹下的静态文件。

对于前一种请求,博客文章的数据需要借助 Django 从数据库中获取,Nginx 处理不了,它就会把这个请求转发给 Django,让 Django 去处理。而对于后一种静态文件的请求,只需要去这些静态文件所在的文件夹获取,Nginx 就会代为处理,不再麻烦 Django。

用 Django 去获取静态文件是很耗时的,但 Nginx 可以很高效地处理,这就是我们要使用 Nginx 的原因(当然其功能远不止这些)。

通过前面的步骤我们已经安装了 Nginx,并且已经把域名和服务器 IP 绑定了。运行下面的命令启动 Nginx 服务:

yangxg@localhost:~$ sudo service nginx start

在浏览器输入域名,看到如下页面说明 Nginx 启动成功了。

Nginx欢迎页面

部署代码

部署前的项目配置

Django 项目中会有一些 CSS、JavaScript 等静态文件,为了能够方便地让 Nginx 处理这些静态文件的请求,我们把项目中的全部静态文件收集到一个统一的目录下,这个目录通常位于 Django 项目的根目录,并且命名为 static。为了完成这些任务,需要在项目的配置文件里做一些必要的配置:

blogproject/settings.py

# 其他配置...

STATIC_URL = '/static/'
# 加入下面的配置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_ROOT 指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的 static 文件夹。

为了安全起见,在生产环境下需要关闭 DEBUG 选项以及设置允许访问的域名。打开 settings.py 文件,找到 DEBUGALLOWED_HOSTS 这两个选项,将它们设置成如下的值:

blogproject/settings.py

DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.zmrenwu.com']

ALLOWED_HOSTS 是允许访问的域名列表,127.0.0.1 和 localhost 是本地访问的域名,.zmrenwu.com 是访问服务器的域名(换成你自己的域名)。域名前加一个点表示允许访问该域名下的子域名,比如 www.zmrenwu.com、test.zmrenwu.com 等二级域名同样允许访问。如果不加前面的点则只允许访问 zmrenwu.com。

项目还会依赖一些第三方 Python 库,为了方便在服务器上一次性安装,我们将全部依赖写入一个叫 requirements.txt 的文本文件中。激活本地的虚拟环境(如果你使用了虚拟环境的话),并进入项目的根目录,运行 pip freeze > requirements.txt 命令:

(blogproject_env) C:\Users\yangxg\Workspace\blogproject>
pip freeze > requirements.txt

这时项目根目录下会生成了一个 requirements.txt 的文本文件,其内容记录了项目的全部依赖。

将代码上传到 GitHub

将代码上传到 GitHub 等代码托管平台,这样我们就可以方便地把代码拉取到服务器了。Git 和 GitHub 的使用相信你已经很熟悉了,这里就不赘述过程。如果不知道如何使用地话可以自行百度相关教程。

注意数据库文件不要上传!

设置服务器目录结构

接下来需要把代码上传到服务器了。我服务器上存放代码的目录结构一般是这样的:

/home/yangxg/
    sites/
        demo.zmrenwu.com/
            env/
            django-blog-tutorial/

一台服务器可能部署多个网站,所有网站代码都放在 sites/ 目录下。demo.zmrenwu.com/ 这个文件夹以网站的域名命名,便于区分。env/ 是 python 虚拟环境目录。django-blog-tutorial/ 是 Django 博客项目目录。

因此先来创建这个目录结构,注意目录名替换为你自己的域名,以后涉及到 demo.zmrenwu.com 的地方通常都要替换你自己的域名,后面就不再一一指出了,运行下面的命令,

yangxg@localhost:~$ mkdir -p ~/sites/demo.zmrenwu.com

这里 ~ 代表当前用户的 home 目录,即 /home/yangxg/。

接下来创建虚拟环境,先进入到 demo.zmrenwu.com 目录下,然后运行 virtualenv 命令创建虚拟环境:

yangxg@localhost:~$ cd ~/sites/demo.zmrenwu.com
yangxg@localhost:~/sites/demo.zmrenwu.com$ virtualenv --python=python3 env

注意这里使用 --python=python3 来指定克隆 Python3 的环境。因为 ubuntu 系统默认安装了 Python2,如果不特别指定的话 Virtualenv 默认克隆的是 Python2 的环境。

检查一下虚拟环境是否创建成功,运行 ls 命令列出当前目录下的文件和文件夹,看到 env 这个文件夹说明虚拟环境创建成功。

yangxg@localhost:~/sites/demo.zmrenwu.com$ ls
env

接着再从代码仓库把项目代码拉取过来,把 git clone 后的地址换成你自己的 GitHub 仓库地址!

yangxg@localhost:~/sites/demo.zmrenwu.com$ git clone https://github.com/zmrenwu/django-blog-tutorial.git

运行 ls 命令检查一下是否拉取成功:

yangxg@localhost:~/sites/demo.zmrenwu.com$ ls
django-blog-tutorial  env

多了 django-blog-tutorial 文件夹(文件夹名称由你的 GitHub 仓库名决定),说明拉取成功了。

安装项目依赖

激活虚拟环境,再进入到项目根目录,即 requirements.txt 所在的目录,安装项目的全部依赖:

yangxg@localhost:~/sites/demo.zmrenwu.com$ source env/bin/activate
(env) yangxg@localhost:~/sites/demo.zmrenwu.com$ cd django-blog-tutorial/
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ pip install -r requirements.txt

收集静态文件

虚拟环境下继续运行 python manage.py collectstatic 命令收集静态文件到 static 目录下:

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py collectstatic

生成数据库

虚拟环境下继续运行 python manage.py migrate 命令创建数据库文件:

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py migrate

创建超级用户

虚拟环境下继续运行 python manage.py createsuperuser 命令创建一个超级用户,方便我们进入 Django 管理后台。这和本地开发时是一样的,具体请参照:在 Django Admin 后台文章

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ python manage.py createsuperuser

配置 Nginx

接下是配置 Nginx 来处理用户请求。

先在服务器的 /etc/nginx/sites-available/ 目录下新建一个配置文件,文件名我一般就设置为域名。写上下面的配置内容:

/etc/nginx/sites-available/demo.zmrenwu.com

server {
    charset utf-8;
    listen 80;
    server_name demo.zmrenwu.com; 

    location /static { 
        alias /home/yangxg/sites/demo.zmrenwu.com/django-blog-tutorial/static; 
    }

    location / { 
        proxy_set_header Host $host;
        proxy_pass http://unix:/tmp/demo.zmrenwu.com.socket;
    }
}

① 服务的域名为 demo.zmrenwu.com。

② 所有URL 带有 /static 的请求均由 Nginx 处理,alias 指明了静态文件的存放目录。

③ 其它请求转发给 Django 处理。proxy_pass 后面使用了 unix 套接字,其作用是防止端口冲突,这里就不再详述。

至于怎么在服务器新建文件和写文件,请自行学习一点点 vi 编辑器的用法,这里也不一一讲解了。

我们在 /etc/nginx/sites-available/ 放置了配置文件,接下来需要创建一个符号链接,把这个配置文件加入到启用的网站列表中去,被启用网站的目录在 /etc/nginx/sites-enabled/,你可以理解为从 sites-available/ 目录下发送了一个配置文件的快捷方式到 sites-enabled/ 目录。具体命令如下:

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ sudo ln -s /etc/nginx/sites-available/demo.zmrenwu.com /etc/nginx/sites-enabled/demo.zmrenwu.com

使用 Gunicorn

Gunicorn 一般用来管理多个进程,有进程挂了Gunicorn 可以把它拉起来,防止服务器长时间停止服务,还可以动态调整 worker 的数量,请求多的时候增加 worker 的数量,请求少的时候减少。

在虚拟环境下,安装 Gunicorn:

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ pip install gunicorn

用 Gunicorn 启动服务器进程:

(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application

浏览器输入域名,可以看到访问成功了!

自动启动 Gunicorn

现在 Gunicorn 是我们手工启动的,万一哪天服务器崩溃重启了又得重新手工启动。为此我们写一个自动启动脚本,这样当服务器重新启动后,脚本会帮我们重启 Gunicorn。先按 Ctrl + c 停止刚才启动的服务器进程。

写一个启动脚本,这样当服务器重启后能自动引导 Gunicorn 的启动。脚本位于 /etc/init/ 目录下,且脚本文件名必须以 .conf 结尾:

/etc/init/gunicorn-demo.zmrenwu.com.conf

start on net-device-up ①
stop on shutdown

respawn ②

setuid yangxg ③
chdir /home/yangxg/sites/demo.zmrenwu.com/django-blog-tutorial ④

exec ../env/bin/gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application ⑤

① start on net-device-up 确保只在服务器联网时才启动 Gunicorn。

② 如果进程崩溃了(比如服务器重启或者进程因为某些以外情况被 kill),respawn 将自动重启 Gunicorn。

③ setuid 确保以 yangxg 用户的身份(换成你自己的用户名)运行 Gunicorn 进程。

④ chdir 进入到指定目录,这里进入项目的根目录。

⑤ exec 执行进程,即开启服务器进程。

现在可以用 start 命令启动 Gunicorn 了:

sudo start gunicorn-demo.zmrenwu.com

以后如果更新了代码,只要运行下面的命令重启一下 Nginx 和 Gunicorn 就可以使新的代码生效了:

sudo service nginx reload
sudo restart gunicorn-demo.zmrenwu.com

使用 CDN 加快 Bootstrap 和 jQuery 的加载速度

我们的项目使用了 Bootstrap 和 jQuery,这两个文件我们是从本地加载的。如果服务器性能比较差的话,加载需要耗费很长的时间,网站打开的速度就变得无法忍受。我们使用 CDN 来加快加载速度。具体来说,替换 base.html 的几个静态文件的加载标签:

base.html

- <link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">
- <script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>
- <script src="{% static 'blog/js/bootstrap.min.js' %}"></script>
+ <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+ <script src="https://cdn.bootcss.com/jquery/2.1.3/jquery.min.js"></script>
+ <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

这样网站访问的速度将大大提升!

部署过程自动化

在整个部署过程中我们运行了十几条命令,手动输入了 N 个字符。如果每次更新代码都要远程连接到服务器执行这些命令的话将变得非常麻烦。接下来的教程我们将介绍使用 Fabric 自动化整个部署过程。写好部署脚本后,只需要执行一条命令,就可以非常方便地自动完成整个部署。

总结

本章节的代码位于:Step14: deploy using nginx and gunicorn

如果遇到问题,请通过下面的方式寻求帮助。

  • 在下方评论区留言。
  • 将问题的详细描述通过邮件发送到 djangostudyteam@163.com,一般会在 24 小时内回复。
  • Pythonzhcn 社区的新手问答版块 发布帖子。

-- EOF --


371 条评论 / 128 人参与
连天苟仁
Centos7:
usermod -a -G wheel myuser
  • 回复

suwenkun1126
之前应经在一台阿里云服务器上部署过一个网站了,这次如果要再部署一个网站的话,监听的端口是不是要改成非80的端口,希望楼主能讲一讲多个网站部署在同一台服务器上需要注意哪些问题,感谢!

Anderson Shao
自动启动gunicorn按照建议解决了start,然而自动启动后502。手动启动gunicorn是没问题的,请教了

想吃肉的小猫熊
楼主查看 nginx日志
发现下面问题:
2017/12/22 10:28:47 [crit] 22332#22332: *143 connect() to unix:/tmp/demo.zmrenwu.com.socket failed (2: No such file or directory) while connecting to upstream,

想吃肉的小猫熊
求助各位大佬,只有服务器ip,没有域名(域名没有备案),请问需要怎么修改
/etc/nginx/sites-available/demo.zmrenwu.com

server {
charset utf-8;
listen 80;
server_name demo.zmrenwu.com; ①

location /static { ②
alias /home/yangxg/sites/demo.zmrenwu.com/django-blog-tutorial/static;
}

location / { ③
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/demo.zmrenwu.com.socket;
}
}

非常感谢。。

Xiao淩喺个死肥仔 想吃肉的小猫熊

同问同问


吉超 Xiao淩喺个死肥仔

填ip


倣肆的嘲笑
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.xiaoqianglove.com]这里字符串超长了导致少了一个单引号怎么解决

韦子扬不想穿秋裤
开启nginx后能从外网直接访问到nginx默认的页面,然后经过一番配置,删除了site-availble里面的default,添加了自己的配置文件,并且也bind上去了,gunicorn也能顺利开启,但是从外网访问的时候,,一直显示不出页面,服务器一直拒绝我请求。这可能是什么原因呢

追梦人物 [博主] 韦子扬不想穿秋裤

有可能是相关端口没开?好像阿里云、腾讯云什么的有些端口需要手动开启,评论中一些朋友遇到过这种问题。


tianbaoo
我把后边的内容文章、分页什么的功能都做了,现在回过头来部署,然后就是在服务器:pip install -r requirements.txt的时候,报错:Could not find a version that satisfies the requirement pywin32==221 (from -r requirements.txt (line 39)) (from versions: )
No matching distribution found for pywin32==221 (from -r requirements.txt (line 39))
请问一下怎么解决呢?pywin32不能安装在Ubuntu里?

追梦人物 [博主] tianbaoo

你为什么会有这个包的依赖呢?我的示例项目里面是没有的。


EruDev
大佬们,问个问题,配置Nginx的时候,出现这样的错误,但是有这个文件的呀,我是创建了的

sudo: unable to resolve host iZbp16qs1mo55kgqlfrlg8Z
ln: failed to create symbolic link '/etc/nginx/sites-enabled/demo.erublog.cn': File exists

zhangyu1402 EruDev

你已经创建过一个符号链接了。


damonfly
Ubuntu 16.04 LTS,用户是siar,非root用户
1. 新建目录(自启动服务文件存放目录)
sudo mkdir -p /usr/lib/systemd/system

2. 新建文件(自启动的服务文件)
sudo vim /usr/lib/systemd/system/siar.service

2.1 添加如下内容
[Unit]
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
# 你的用户
User=siar
# 你的目录
WorkingDirectory=/home/siar/sites/django-blog-learning/blogproject
# gunicorn启动命令
ExecStart=/home/siar/sites/env/bin/gunicorn --bind unix:/tmp/siar.socket blogproject.wsgi:application
Restart=on-failure
[Install]
WantedBy=multi-user.target
有一些参数我也不是太懂,具体可以参照下面的systemd.service 中文手册链接。
2.2 保存并退出
:wq

3. 启动服务
sudo systemctl start siar

我的文件名是siar.service,所以就sudo systemctl start siar
4. 添加服务到开机自动运行
sudo systemctl enable siar.service

5. 验证启动
ps -ef | grep gunicorn

查看gunicorn是否已经启动,有两个进程。

damonfly
关于 自动启动 Gunicorn
ubuntu 16.04 不适合使用教程里面的方法。。。

可以参考这里
http://www.siar.me/post/9/

damonfly
d@e:~/sites/blogproject$ sudo start gunicorn-demo.zmrenwu.com
start: 无法连接到 Upstart: Failed to connect to socket /com/ubuntu/upstart: 拒绝连接

damonfly
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

我找到了为什么nginx 配置这么写
proxy_pass http://unix:/tmp/demo.zmrenwu.com.socket;

water-law damonfly

damonfly water-law

谢谢  这个问题我已经弄明白


gogogoman
想问前辈们,自动启动gunicorn这个环节,我的系统是Ubuntu 16.04
输入:sudo start gunicorn-xxx
结果:start: Job failed to start
但是参照评论中另外一个同学的Ubuntu 16.04系统的解答方法也不行,在它的第三个步骤启动服务中,
输入:sudo systemctl start siar
结果: Failed to stop flamingo.service: Launch helper exited with unknown return code 1 See system logs and 'systemctl status flamingo.service' for details

希望前辈们能给点建议

Anderson Shao gogogoman

跟你一样,始终解决不了,你解决了吗


请别叫我小熊熊熊
问题描述:
1.一路按照群主教程部署下来的,最后也成功启动了gunicorn ;
2.但是打开页面因为域名未备案通过所以通过域名访问时,一直显示的是未备案的画面。
3.所以按照其他人的做法在线上通过vim更改了setttings.py文件,将主机ip加到了可访问的列表里,然后重启nginx,重启gunicorn,输入ip还是只能看到欢迎与页面。
4.于是按照教程删除了sites-enabled下面的default文件,再次重启nginx 和gunicorn .输入ip还是失败,只看到欢迎语。
跪求群主解答下这个到底是啥问题

0蜗牛云web开发0 请别叫我小熊熊熊

测试下评论


0蜗牛云web开发0 0蜗牛云web开发0

可以


gogogoman 请别叫我小熊熊熊

2 域名都要先备案的啊你可以用服务器IP登录

3 如果用IP登录把允许域名改成你的服务器IP

4 重启服务器

sudo service nginx reload 

再重新启动,gunicorn --bind unix:/tmp/你的域名或ip.socket blogproject.wsgi:application


502885507 gogogoman

配置文件不用改么


yuanfeng0416
我用IP直接访问,一直是nginx访问页,删除了sites-enabled的default也是502错误,这应该怎么解决呀
server{
charset utf-8;
listen 80;
server_name www.superlight.xin;
location /static {
alias /root/sites/www.superlight.xin/myBlog/static;
}
location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/www.superlight.com.socket;
}
}

gogogoman yuanfeng0416

把你setting中的允许域名改成你的ip,因为你是用ip登录不是域名登录,


追星星的猫_
博主大大你好,教程十分详细。但是小白有个地方没弄好就是正确配置后访问网站没有加载出css跟js QAQ

...
location /static {
alias /home/blank/sites/*****/Django-blog/blogproject/static;
}
...
(****是网站的域名)

改成这样也试过 alias /home/blank/sites/*****/Django-blog/blogproject/blog/static;
也是不行 = =

追梦人物 [博主] 追星星的猫_

/home/blank/sites/*****/Django-blog/blogproject/static 这个路径径必须是你的静态文件所在路径。


谢亚波 追星星的猫_

我也是这样


EruDev
##收集静态文件##
这是什么原因呀
raise ImproperlyConfigured("You're using the staticfiles app "
django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
还有就是怎么在服务器的 /etc/nginx/sites-available/ 目录下新建一个配置文件,小白求解呀- -
卡这好久了 。

追梦人物 [博主] EruDev

1. 你必须设置静态文件路径,具体请看教程中 #部署前的项目配置 节的内容。

2. 就是新建配置文件,可以使用 vi 编辑器新建文件,至于 vi 编辑器的基本用法请自行百度。


EruDev 追梦人物 [博主]

博主大大,这个意思是地址没解析成功的意思吗,因为我在阿里云上只买了一个月的服务器,然后说要备案,但是备案好像要三个月才行,我输入公网地址,可以看到域名已经解析成功了,输入网址就提示需要备案

(env) zhaopf@iZbp16qs1mo55kgqlfrlg8Z:~/sites/demo.erublog.cn/myblog$ sudo ln -s /etc/nginx/sites-available/demo.erublog.cn /etc/nginx/sites-enabled/demo.erublog.cn 

sudo: unable to resolve host iZbp16qs1mo55kgqlfrlg8Zln: failed to create symbolic link '/etc/nginx/sites-enabled/demo.erublog.cn': File exists


韦子扬不想穿秋裤
输入start gunicorn-community(我自己的项目名)后,出现这个怎么办:
start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
具体配置文件如下:

start on net-device-up
stop on shutdown

respawn

setuid weiziyoung
chdir /root/zxlt.site/dx-cloud-community/community

exec /bin/gunicorn --bind unix:/tmp/zxlt.site.socket community.wsgi:application

rookie250
sudo pip3 install virtualenv后老是出现
Traceback (most recent call last):
File "/usr/bin/pip3", line 5, in
from pkg_resources import load_entry_point
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2708, in
working_set.require(__requires__)
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 686, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 584, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==1.5.4 网上查了一下 也没有什么合适的解决方案。。

rookie250 rookie250

已解决。。


rookie250 rookie250

 ubuntu 版本太老了 ubuntu 版本太老了


rookie250
linux学的不好,请问一个基础问题。 root 下部署代码不安全,可是先添加的用户又加入超级权限组。那和root的权限不是相同么? 为什么新添加的用户就比root安全了?

Jenny的太空漫游
你好!请教一下博主,网站已经可以正常访问,GitHub的仓库代码和本地代码是一样的,网站上的css样式也是正常的,但是为什么打开http://127.0.0.1:8000/的时候css样式是缺失的呢?在pycharm执行python manage.py runserver 时terminal显示是类似"GET /static/blog/img/bitbug_favicon.ico HTTP/1.1" 404 108 的信息?

Y才小圣
你好!我跟着前面的步骤,到了现在这里,我在想可不可以直接就用前面代码,而不是再去建议个Github仓库,再
去拉一遍代码
想这样的:yangxg@localhost:~/sites/demo.zmrenwu.com$ git clone https://github.com/zmrenwu/django-blog-tutorial.git
但是之后我就遇到了这样一个东西
(env) yangxg@localhost:~/sites/demo.zmrenwu.com/django-blog-tutorial$ pip install -r requirements.txt
我的文件夹里面没有requirements.txt。没有其他的解决方法

追梦人物 [博主] Y才小圣

应该是你的 clone 出了问题。不要直接 clone 我的仓库,先 fork 到自己的 github,然后 clone。


Y才小圣 追梦人物 [博主]

 您好!我按照您之前的教程,就是在centos环境做的,我觉得现在我应该不需要做Git之类的操作吧?还有就是教程当中static发生了改变,那是不是代码之中也要改呢?

教程中是这样的:

blogproject/settings.py

 # 其他配置... 

 STATIC_URL = '/static/' 

# 加入下面的配置 

STATIC_ROOT = os.path.join(BASE_DIR, 'static')


base.html文件中,是这样的,在这个路径“blog/css/”:

<link rel="stylesheet" href="{% static 'blog/css/pace.css' %}"> 

<link rel="stylesheet" href="{% static 'blog/css/custom.css' %}"> 

<link rel="stylesheet" href="{% static 'blog/css/highlights/github.css' %}">

是不是直接把/workspace/blogproject/blog/static/blog/css的staitc

变成/workspace/blogproject/static/


Y才小圣 追梦人物 [博主]

还有一个问题就是

(blogproject_evn) [root@Cxs1103 blogproject]# python manage.py runserver 0.0.0.0:8000

现在这样我用“域名:8000”是可以访问的

那是不是把这个进程挂到后台,就可以了呢?

只要我改成这样,就会报502的错误

proxy_pass http://unix:/tmp/demo.zmrenwu.com.socket;


Y才小圣 追梦人物 [博主]

{% extends 'base.html' %} {% block main %} {% for post in post_list %}

{{ post.title }} 

{{ post.category.name }} {{ post.created_time }} {{ post.author }} {{ post.comment_set.count }} 588 阅读 

{{ post.excerpt }} 

继续阅读 →

{% empty %}

暂时还没有发布的文章! 

{% endfor %}

... 

6

8

 ... 

11 

{% endblock main %}

改完之后,访问域名就成了,一直跑源码了???


Y才小圣 追梦人物 [博主]

忘记说了,我的环境是centos 6.9,编译安装的tengine2.1.0 


Afetmin
网站无法访问,未备案或未接入,什么问题?

追梦人物 [博主] Afetmin

没有备案。


Afetmin 追梦人物 [博主]

我去备案,要备案服务号,但找的时候说是三个月以上才有备案服务号,可我只买了一个月,只是为了练习,

这就很无奈了


acooooo Afetmin

直接用公网ip访问也一样


SONGFFFFFFF
一切部署完成后访问显示 502 Bad Gateway
按照有一位大神说的去/var/log/nginx下的error.log查看 错误记录为空...
请大神救救我

SONGFFFFFFF SONGFFFFFFF

已经解决了..


Stallionshell SONGFFFFFFF

你是怎么解决的 我之前出现一直出现nginx初始页面,改了一些后就502了


SONGFFFFFFF Stallionshell

我是删除default后忘记启动gunicorn了- -


yuanfeng0416 SONGFFFFFFF

我用IP直接访问,一直是nginx访问页,删除了sites-enabled的default也是502错误,这应该怎么解决呀server{    charset utf-8;     listen 80;    server_name www.superlight.xin;    location /static {        alias /root/sites/www.superlight.xin/myBlog/static;    }    location / {        proxy_set_header Host $host;        proxy_pass http://unix:/tmp/www.superlight.com.socket;    }}


Mori-Dd
博主,我现在都可以正常访问了,但我一旦把gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application结束掉,就不能访问了,就会显示502错误,难道我要一直开着自己电脑吗?我用的是阿里云的云服务器

Mori-Dd Mori-Dd

解决了,感觉被自己蠢哭了


yuanfeng0416 Mori-Dd

你怎么解决哒,可以分享一下嘛,我也是阿里云的服务器


Anderson Shao Mori-Dd

请问如何解决的


吉超 Anderson Shao

放后台执行就好 了


Mori-Dd
博主,折腾了好久按教程现在都成功了,后台也可以登录,但是没有样式,界面排版全部在左侧挤着,这是什么原因?

Mori-Dd Mori-Dd

解决了,原来static路径打错了,教程很细,谢谢博主


muyuan265714
运行 gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application 的时候。出现了No module named django.core.wsgi 这是什么意思啊,我用的博主的模板。

Stallionshell muyuan265714

blogproject是你的项目名  


damonfly muyuan265714

是因为你没有在blogproject 文件夹下运行命令


water-law muyuan265714

一般来说, 在一个项目中 django 有一个和 项目名字一样的 app, blogproject.wsgi 的意思是 使用 blogproject 这个 app 下的 app 文件,而且 project 的 名字可以改为任何你想要的名字。

谢谢 up! 感觉学得很多。


water-law muyuan265714

一般来说, 在一个项目中 django 有一个和 项目名字一样的 app, blogproject.wsgi 的意思是 使用 blogproject 这个 app 下的 wsgi 文件(一种用于部署的文件, 我之前用 uwsgi 部署),而且 project 的 名字可以改为任何你想要的名字。

谢谢 up! 感觉学得很多。


UncleStrawberry
运行sudo start gunicorn-demo.zmrenwu.com这条语句的时候显示sudo: start: command not found,望指教,谢谢

ljx___- UncleStrawberry

我摸索了一下午。。没用配置文件,直接在虚拟空间启动的命令后面gunicorn --bind unix:/tmp/www.echoljx.com.socket django-project.wsgi:application,加上一个“&”,就能在后台运行,就是gunicorn --bind unix:/tmp/www.echoljx.com.socket django-project.wsgi:application&  这样。


ljx___- ljx___-

希望有人能指出更好的方法


BastinT ljx___-

你好,我也遇到了同样的问题,请问你找到更好的解决办法了吗?


water-law UncleStrawberry

首先  进入 su 系统管理员身份, 运行 whersis start , 如果提示 start 的位置, 则将位置的根目录添加到环境变量中。

否则 (举个例子, ubuntu 16.04)下 start, restart, stop 属于 系统的 task,  运行 sudo apt install upstart。

然后 运行 sudo dpkg-divert --local --rename --add /sbin/initctl 和 sudo ln -s /bin/true /sbin/initctl (参考:quqi99 的博客


water-law water-law

是 whereis start 哈


UncleStrawberry
博主,在 配置 Nginx 中,怎么在服务器新建文件和写文件啊,完全不会啊?请指教

Lichunyangcoder UncleStrawberry

1.按  i 进入编辑
2 现在可以编辑页面

3.完成后按 esc

4 输入 :w 保存

5输入 :q 推出


Lichunyangcoder Lichunyangcoder

sudo vi 文件名  写文件


Lichunyangcoder Lichunyangcoder

sudo touch 文件名 新建文件


胖葵葵胖
在阿里云服务器里面运行 pip install -r requirements.txt 后有的东西显示安装不了怎么办

Stallionshell 胖葵葵胖

你的requirments可能包含了一些你在博客需要的库意外,你自己其他项目安装的第三方包,而在阿里云里边pip install的时候 可能没有对应的版本之类的,这种情况下  你根据错误提示信息 修改requirments中对应的第三方包版本或者如果确认无关,直接删除即可


BitMan_XY
博主你好,我解析了域名之后可以ping通,然后启动nginx:sudo service nginx start。 但在浏览器输入域名的时候看不到welcome to nginx这个页面,而是无法访问此网站,请问可能是什么原因呢?

BitMan_XY BitMan_XY

解决了 因为没有开放主机的80端口...


Lichunyangcoder BitMan_XY

怎么开放主机80端口


bpzj Lichunyangcoder

qq 1521189886,我也遇到这个问题了,买的vps,没有权限开端口


bpzj Lichunyangcoder

我已经搞定了,加QQ 1521189886


YY饺子
请问一定要使用自己创建的账户进行ubuntu上的操作嘛,直接用root用户操作有什么坏处吗?

sancica-github
总结下 之前问题是 只能访问nginx页面,访问不到项目页面
解决方法: 请使用 ubuntu14.04版本 删除/etc/nginx/sites-avaible/的default文件 在 使用Gunicorn 这一步骤之前使用 sudo service nginx reload

Stallionshell sancica-github

你好 我删除sites-available的default之后 反而出现了502错误 请问你有遇到过吗   博主说的是删除enable的default 但我仍然不行


Anderson Shao sancica-github

感谢,用ip访问成功了,等域名备案完成!


君名流岚
start 命令提示start: Unknown job是什么原因呢

gogogoman 君名流岚

你好啊

请问下你是怎么解决的?


toddtsui gogogoman

同问,请问解决了么?


toddtsui toddtsui

找到错误了,gunicorn-demo.zmrenwu.com脚本里面有错误


君名流岚
博主,你好,在你的文章指导下,我成功运行了项目,要是我想要跑多个Django项目要怎么做呢,我能不能用这个Nginx再搭建lamp环境呢?

GXwar
博主你好,我按照你的方法成功将网站绑定了blog.keyboardman.tech这个域名,但是有点不懂如何把网站同时绑定在www.keyboardman.tech上,使得访问这两个网址都能找到这个django project.

ccovor
输入sudo start 时显示Command not find请问这个怎么解决?

GXwar ccovor

我是彻底卸载,然后重装解决的。。。


ccovor GXwar

虽然试过还是不行...


UncleStrawberry ccovor

我遇到了同样的问题 请问解决了吗?怎么解决的?谢谢


曹宇聪
为什么我的主页面正常,后台admin可以登陆已创建的账户,但是点击登录后立刻返回“Server Error (500)”错误

彭志鹏 曹宇聪

你解决了吗,我现在也出了这个问题


hyangzz
我删了default文件,但是访问ip地址还是只能显示nginx的欢迎页面

曹宇聪 hyangzz

重启服务器试试


SONGFFFFFFF hyangzz

请问下怎么删除default文件啊


Stallionshell SONGFFFFFFF

rm default    如果权限不够  sudo rm default


Stallionshell hyangzz

请问你解决了吗?我按照一个评论提示的额外删除了availab的default文件 在nginx欢迎界面外出现了502错误


SONGFFFFFFF Stallionshell

好的谢谢


GXwar
请问一下,为什么我部署了后,运行gunicorn --bind unix:/tmp/blog.gxwar.tech.socket blogproject.wsgi:application这条命令时,总是显示没有安装mysqlclient或者MySQLdb。可是我在服务器上
可以用自带的wsgi的python manage.py runserver成功运行,说明依赖应该没有问题。

Tom
为什么这一节我部署完毕了~~ 访问域名 , 总是显示Nginx首页的内容 ,系统是centos7.3? 求指教~~

Tom Tom

而且也重启过了,执行

gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application

这条命令也没有报错,启动成功的~~  


Tom Tom

好了,已解决~~


GXwar Tom

请问一下你是怎么解决的啊


狮子山的牧羊人 Tom

请问一下你是怎么解决的呀?


连海峰append Tom

请问是怎么解决的,我也是一直显示nginx页面


ccovor 连海峰append

cat 观察一下 /etc/nginx/sites-available/default 和 /etc/nginx/sites-available/demo.zmrenwu.com 的端口


Annihilater Tom

请问是怎么解决的?我也遇到了和你同样的问题


Annihilater Annihilater

问题解决了,重新来一遍   最后在自动启动gunicorn之前重启nginx:sudo service nginx reload就正常显示网页了。不需要删除sites-enabled/default软链。


教程没问题!!!我用的python2,自动化部署的时候要把python3改成python2。


UncleStrawberry Tom

请问一下 怎么在服务器新建文件和写文件啊 完全没有头绪啊


追梦人物 [博主] UncleStrawberry

用自带的 vi 编辑器,如何操作请网上找找相关教程,我就不做 linux 系统教学了。


yuanfeng0416 Tom

你最后是怎么解决的呀,我删除了sites-enabled中的default也不行啊


grb2015
遇到的坑,记录下,供来着参考:

1.我这边没有域名,只有IP ,所以

/etc/nginx/sites-available/emo.zmrenwu.com 要进行修改: #server_name demo.zmrenwu.com;
server_name localhost;
2. 遇到了访123.207.55.189总是出现的为nginx首页的页面。

解决方法: 因为我们设置了自己的配置文件, /etc/nginx/sites-available/emo.zmrenwu.com 重启ubuntu即可,下次就好了。

D_zongrong grb2015

proxy_pass http://unix:/tmp/demo.zmrenwu.com.socket

请问这个改成什么样子?


TechManiaTC grb2015

请问怎么直接用ip访问部署的博客啊,我按你这个设置输入ip只显示nginx的欢迎界面,配置文件具体要怎么改呢


yuanfeng0416 grb2015

我用IP直接访问,一直是nginx访问页,删除了sites-enabled的default也是502错误,这应该怎么解决呀

server{    

charset utf-8;     

listen 80;   

 server_name www.superlight.xin;   

 location /static {        

alias /root/sites/www.superlight.xin/myBlog/static;   

 }    

location / {       

 proxy_set_header Host $host;       

 proxy_pass http://unix:/tmp/www.superlight.com.socket;   

 }

}


皮皮欧呢
解决了,80端口没开放,我真是智障了

皮皮欧呢
不知道,Google了也没能找到方法,也或许是自己英语太菜,dial tcp : i/o timeout

皮皮欧呢
博主,为什么我开启了nginx,域名也解析了,访问域名还是出现dial tcp 公IP地址: i/o timeout

追梦人物 [博主] 皮皮欧呢

tcp连接超时?网络问题?


huangshizhe 追梦人物 [博主]

博主我想请教下您,我可以通过域名(没有www)访问到服务器上的项目,加上www就会跳转到nginx的欢迎页面去,这个应该怎么设置他的跳转,在阿里云解析上是有解析的呀


zgGitHub
按照项目依赖的时候,我本地的依赖有很多,而才看你的依赖只有很少的几个,以下是我的依赖项目:
altgraph==0.10.2
ansible==2.1.0.0
attrs==17.2.0
Automat==0.6.0
bdist-mpkg==0.5.0
beautifulsoup4==4.6.0
bonjour-py==0.3
certifi==2017.7.27.1
cffi==1.6.0
chardet==3.0.4
constantly==15.1.0
cryptography==1.3.2
cssselect==1.0.1
Django==1.10.6
enum34==1.1.6
hyperlink==17.3.1
idna==2.6
incremental==17.5.0
ipaddress==1.0.16
Jinja2==2.8
lxml==3.8.0
macholib==1.5.1
Markdown==2.6.9
MarkupSafe==0.23
matplotlib==1.3.1
modulegraph==0.10.4
numpy==1.8.0rc1
pandas==0.20.3
paramiko==2.0.0
parsel==1.2.0
powerline-status==2.5
py2app==0.7.3
pyasn1==0.1.9
pyasn1-modules==0.1.4
pycparser==2.14
pycrypto==2.6.1
PyDispatcher==2.0.5
Pygments==2.2.0
pyobjc-core==2.5.1
pyobjc-framework-Accounts==2.5.1
pyobjc-framework-AddressBook==2.5.1
pyobjc-framework-AppleScriptKit==2.5.1
pyobjc-framework-AppleScriptObjC==2.5.1
pyobjc-framework-Automator==2.5.1
pyobjc-framework-CFNetwork==2.5.1
pyobjc-framework-Cocoa==2.5.1
pyobjc-framework-Collaboration==2.5.1
pyobjc-framework-CoreData==2.5.1
pyobjc-framework-CoreLocation==2.5.1
pyobjc-framework-CoreText==2.5.1
pyobjc-framework-DictionaryServices==2.5.1
pyobjc-framework-EventKit==2.5.1
pyobjc-framework-ExceptionHandling==2.5.1
pyobjc-framework-FSEvents==2.5.1
pyobjc-framework-InputMethodKit==2.5.1
pyobjc-framework-InstallerPlugins==2.5.1
pyobjc-framework-InstantMessage==2.5.1
pyobjc-framework-LatentSemanticMapping==2.5.1
pyobjc-framework-LaunchServices==2.5.1
pyobjc-framework-Message==2.5.1
pyobjc-framework-OpenDirectory==2.5.1
pyobjc-framework-PreferencePanes==2.5.1
pyobjc-framework-PubSub==2.5.1
pyobjc-framework-QTKit==2.5.1
pyobjc-framework-Quartz==2.5.1
pyobjc-framework-ScreenSaver==2.5.1
pyobjc-framework-ScriptingBridge==2.5.1
pyobjc-framework-SearchKit==2.5.1
pyobjc-framework-ServiceManagement==2.5.1
pyobjc-framework-Social==2.5.1
pyobjc-framework-SyncServices==2.5.1
pyobjc-framework-SystemConfiguration==2.5.1
pyobjc-framework-WebKit==2.5.1
pyOpenSSL==0.13.1
pyparsing==2.0.1
python-dateutil==1.5
pytz==2013.7
PyYAML==3.11
queuelib==1.4.2
requests==2.18.4
scipy==0.13.0b1
Scrapy==1.4.0
service-identity==17.0.0
six==1.10.0
Twisted==13.1.0
urllib3==1.22
vboxapi==1.0
w3lib==1.18.0
xattr==0.6.4
zope.interface==4.1.1

BitMan_XY zgGitHub

因为你用的不是原生的python3+django。而是用了一些python的IDE,比如pycharm或者anaconda等,所以一些不需要的依赖库也被包含进去了。


WhereIsMyHead
为什么我的服务器在绑定域名后仍然访问不了,就算用公网IP也不能访问

WhereIsMyHead WhereIsMyHead

已解决


等一片枫叶 WhereIsMyHead

请问如何解决的


Misengkang
博主你好,感谢教程的指点,有几个问题想请教下,第一:生成数据库那里 python manage.py migrate,无法成功,显示Access denied for user 'root'@'localhost,然后用sudo python manage.py migrate,显示ImportError: Couldn't import Django. Are you sure it's installed and available PYTHONPATH environment ,django显示已安装。环境变量要额外添加吗,是否这样export PYTHONPATH="$PYTHONPATH:/home/user/sites/www.blog.site/env/bin/django-admin"我用的mysql,服务器上创建和配置好了。
第二 前面的pip install -r requirements.txt 安装依赖环境失败,只下载不安装,能否自己虚拟环境下 pip instal 安装各个呢

追梦人物 [博主] Misengkang

看你用的 ubuntu,有没有先激活虚拟环境然后再运行上述命令?至于数据库创建问题:Access denied for user 'root'@'localhost,可能是你的数据库限制了 root 用户的访问。


Misengkang 追梦人物 [博主]

谢谢指点 ,已搞定,数据库的原因,mysql配置密码和端口忘记改了, 


huangshizhe 追梦人物 [博主]

server {        charset utf-8;        listen 80;         server_name huangshizhe.xyz;                location /static {                alias /home/huangsz/sites/huangshizhe.xyz/BLOG/static;        }                       location / {                proxy set header Host $host;                proxy_pass http://unix:/tmp/huangshizhe.xyz.socket;        }       }      

博主你好 我按照你的配置之后出现启动不了nginx的情况

 nginx: [emerg] "proxy" directive is not allowed here in /etc/nginx/sites-enabled/huangshizhe 

Sep 20 19:31:34 learndebian nginx[1841]: nginx: configuration file /etc/nginx/nginx.conf test failed 

Sep 20 19:31:34 learndebian sudo[1823]: pam_unix(sudo:session): session closed for user root

 Sep 20 19:31:34 learndebian systemd[1]: nginx.service: control process exited, code=exited status=1 

Sep 20 19:31:34 learndebian systemd[1]: Failed to start A high performance web server and a reverse proxy server.-- Subject: Unit nginx.service has failed

请问第一行的proxy代理为什么错误


huangshizhe huangshizhe

已经解决


皮皮欧呢 huangshizhe

你好?怎么解决的?我也出现了这个情况


huangshizhe 皮皮欧呢

你是不是看评论说把sites-enabld里面的default删掉了 。直接重新安装一个nginx就可以了 。


huangshizhe huangshizhe

不需要删除掉这个默认配置的


王_小_花_
博主你好,想请教一个问题,我之前在本机上没有使用虚拟环境,请问安装项目依赖那一步应该怎么做?

追梦人物 [博主] 王_小_花_

直接运行命令,python会把项目依赖安装到你的本地环境下。


王_小_花_ 追梦人物 [博主]

问题解决了,谢谢!

还有一个问题想请教,在启动Gunicorn时报错:ImportError: No module named 'blogproject',如何解决?


王_小_花_ 王_小_花_

已解决,是运行目录弄错了。

另外,非常感谢博主的教程,讲得很细致,还在评论里耐心解答。


花重-城 王_小_花_

能详细说一下嘛,怎么解决的,我现在也是这个问题


莫世威 王_小_花_

请问你是怎么解决的?我也出现了同样的问题


王_小_花_ 花重-城

我创建django项目的时候项目名称不叫blogproject,抄博主代码自然会报错。


又一块大番薯
阿里云学生专区只有这几种:
Windows Server 2008 标准版 SP2 32位中文版
Windows Server 2012 R2 数据中心版 64位中文版
SUSE Linux Enterprise Server 12 SP1 64位
CoreOS 681.2.0 64位
Debian 8.8 64位
该选哪个?

追梦人物 [博主] 又一块大番薯

可能改了,我以前买的可以装 ubuntu 的。Debian 可能是最接近 Ubuntu 的,不过一些命令请根据系统不用而做相应修改。


又一块大番薯 追梦人物 [博主]

明白,谢谢!


cnzaobao
没有这个目录etc/init/,是不是要新建一下,因为我是生产服务器,我没有自己试,想直接问楼主。

追梦人物 [博主] cnzaobao

这里使用的 upstarts 做自启动脚本,你看看你的系统需要把脚本放在哪个文件。


ge_go
你好,我的网站配置好了,也可以访问了,但是访问下级页面时提示 server error 500,请问是什么情况?

IHaoMing ge_go

应该是html文件不存在或者名字没对应上


ge_go IHaoMing

本地开发都可以,放服务器就不行了


ge_go ge_go

你好,问题解决了,发现时我代码提交,更新部署没成功的原因。


happpygc ge_go

我也遇到了这个情况,之前是成功了的,后来我提交更新了,然后访问博客页面就不行了(Server Error (500)),但是后台管理的页面还是可以正常访问的,现在就不知道哪里的代码出了问题…………


mudy happpygc

你好,你的问题解决了吗,我也是遇到了同样的问题了

  • 回复

韦子扬不想穿秋裤
您好,我这里什么都配置好了,网站也能访问,但是所有的静态文件都被403 Forbidden禁止请求了是怎么回事啊

追梦人物 [博主] 韦子扬不想穿秋裤

这很大概率是 static 文件夹的访问权限问题了吧。具体搜一下吧,我对 linux 也不熟。


志子杰-勇士哥 韦子扬不想穿秋裤

我也是差不多,我所有的静态文件都是类似这样404无法访问 "GET /static/blog/css/bootstrap.min.css HTTP/1.1" 404 107

你的问题解决了没?求指导……


CodeZsx 韦子扬不想穿秋裤

请问楼主解决了吗    同样的问题


IHaoMing 韦子扬不想穿秋裤

我也是一样的问题,还没解决


韦子扬不想穿秋裤 志子杰-勇士哥

404是你自己的问题,静态文件目录之类的没弄好


韦子扬不想穿秋裤 CodeZsx

统一回答,解决了,是权限问题,需要给nginx的配置文件上root权限


志子杰-勇士哥 韦子扬不想穿秋裤

谢谢,我的问题解决了,应该跟楼下说的一样,删除default文件或者reboot重启服务器就好了


hstk
我用的服务器是ubuntu16.04,在启动nginx那步,输入命令后访问我的域名它显示的是apache2,不是nginx,不知道是不是出问题了,还是系统的问题。请指教!

追梦人物 [博主] hstk

我以前遇到过这个问题,ubuntu16.04 有些版本好像默认绑定了 apache,当时按照网上的方法也没把 apache 删掉,一气之下换成 14 了


hstk 追梦人物 [博主]

那我也用14试试看,还有一个问题是终端总是显示说 
"GET /static/blog/js/script.js HTTP/1.1" 404 98

而且其他的js文件导入都是正确的只有它不对,是文件用问题吗?我检查过base.html文件 和js文件夹应该都没问题啊??


sakura1357
之前的评论没有了,我重新写一个吧,在自动启动gunicorn的时候由于操作系统不一致,导致有一些不一样的地方,我用的是Ubuntu 16的系统,具体配置可以看我写的这篇记录,http://www.siar.me/post/9/

追梦人物 [博主] sakura1357

赞!Ubuntu 16的系统的朋友如遇到问题请参考这篇文章


LINDAZS
博主你好, 我买了阿里云 , 但是,无法访问到我的项目, nginx监听80端口, 服务器也设置了安全组, 开放80端口, 就是无法访问,

追梦人物 [博主] LINDAZS

具体是什么样子的呢?


LINDAZS 追梦人物 [博主]

刚买完服务器, 安装了nginx, 但是我还没有配置安全组,这样就是在浏览器里输入服务器的ip链接不上.

然后我查了好多说是安全组没有设置, 我设置了安全组,同时设置80端口对外开放, 可以访问到nginx的欢迎页面, 正常来说, 在服务器里, 通过 python manage.py runserver 0.0.0.0:8000这样是可以让外网通过ip访问到你的博客,但是还是不行.....现在不知道怎么办好了, 提了工单, 感觉他没有说道我想问的答案.


追梦人物 [博主] LINDAZS

是的,你这可能是服务器的问题,看看 8000 端口被占用了么?或者没有开发?换成其它端口试一下。还有就是先关掉 nginx,runserver 看看能不能访问。


韦子扬不想穿秋裤 LINDAZS

我今天配置的时候跟你出现了同样的问题,是这样的,你要设置安全组,阿里云是默认把外网隔离掉的,所以你不管怎么请求它,它都拒绝。


LINDAZS 韦子扬不想穿秋裤

请问该怎么设置, 我设置为完 ,就是ssh无法链接


韦子扬不想穿秋裤 LINDAZS

看阿里云安全组的文档。


LINDAZS 韦子扬不想穿秋裤

非常感谢, 问题已经解决,


Tom LINDAZS

你这个添加安全组就OK了~~


SkyReal
在收集静态文件,执行python manage.py collectstatic时 出现了:
Traceback (most recent call last):
File "manage.py", line 8, in
from django.core.management import execute_from_command_line
ImportError: No module named 'django'
During handling of the above exception, another exception occurred:缺少Django

之前我在执行pip install -r requirements.txt的时候有几个地方是这样的:
Downloading get-0.0.21.tar.gz
Requested get==0.0.21 from https://pypi.python.org/packages/51/48/1712952bd7f42ee22fedb9afdd106781058eaaf2b1419c8ef8d38b2cbff3/get-0.0.21.tar.gz#md5=804e1221fe5a7bd8e80dcb97e6e7f5c8 (from -r requirements.txt (line 6)), but installing version None

以及
Collecting pypiwin32==220 (from -r requirements.txt (line 15))
Could not find a version that satisfies the requirement pypiwin32==220 (from -r requirements.txt (line 15)) (from versions: 219)
No matching distribution found for pypiwin32==220 (from -r requirements.txt (line 15))
不知道出了什么问题
Django显示安装成功 import Django 时 No module named 'django'

追梦人物 [博主] SkyReal

如果使用了虚拟环境,确保 django 正确安装到了虚拟环境且使用虚拟环境下的 python 运行 manage.py 文件。


SkyReal 追梦人物 [博主]

我发现 requirements.txt中的所有module都没安装,pip install -r 之后好像都只是下载了 没安装  这是这么回事?辛苦的了博主大人


SkyReal SkyReal


已经解决,是我生成的requirements.txt的问题 默认是unicode  改成UTF-8就好了


皮皮欧呢
我找到这个问题的原因了,并不是代码的问题。而是uwsgi的问题。我把uwsgi直接kill了,用uwsgi --stop uwsgi.pid然后再启动不行,kill之后再启动就行了。

lilong1919119
博主,执行gunicorn的自动启动脚本sudo start gunicorn-xxx(我自己的域名) ,总是linux反馈:sudo: start: command not found,是服务没注册么,我不太懂linux,还是没添加系统变量,反正不能用。

追梦人物 [博主] lilong1919119

这可能是你的 linux 系统问题,查看一下 gunicorn 的文档看看在不同系统下的启动方式。


陈建辉w lilong1919119

请问这个问题你解决了吗?我也遇到了一样的问题。


皮皮欧呢
class UserAdmin(admin.ModelAdmin):
list_display = [
'username','email'
]
admin.site.register(User,UserAdmin)

这个方法我试过了,后台还是只有POST,Tags,Category

皮皮欧呢
博主,我一个项目里边两个应用,blog项目和users项目,我想把它整合在一起管理,但是后台只显示blog的内容。每个项目都有自己的admin,我settings里添加了两个应用,也试图把users中的models导入blog的admin中去构造UserAdmin类,但是还是不行。

追梦人物 [博主] 皮皮欧呢

为什么要放到一起呢?分开管理不是很好么?在 user app 下创建 admin 类然后注册就可以在后台看到了。


a137757130
博主,centos7.3 系统 部署时会出现 ModuleNotFoundError: No module named 'blogproject.wsgi 这个错误,请问
gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application 这里的blogproject.wsgi:application是什么意思啊

追梦人物 [博主] a137757130

即 blogproject 下的 wsgi.py 里的 application,你可以打开这个文件就可以看到了。所以要确保这个文件正确的路径设置,否则就会 ModuleNotFoundError: No module named 'blogproject.wsgi,即找不到这个模块。


linuxying a137757130

你好,我遇到过这个问题,你要进入到你的项目目录中,再执行博主的命令就没有问题了。


xier
服务器的域名 也要写成 demo.zmrenwu.com 这种形式?demo是啥

追梦人物 [博主] xier

demo.zmrenwu.com 是我的域名,你需要替换成你与服务器 ip 绑定的域名。


yangjian
请问你的问题解决了吗?

yangjian
已解决,代码错误。。

yangjian
请问你的是怎么解决的?我也碰到这样的问题了

yangjian
请问你是怎么解决500错误的?

pennygone
博主 我操作到“使用 Gunicorn”这一步后,访问域名还是nginx的页面,这是怎么回事呀

追梦人物 [博主] pennygone
这个问题并非所有人遇到。请在评论中找找和你遇到同样问题的朋友,看看他们的解决方案是否对你有效。

pennygone 追梦人物 [博主]
看到置顶的问题和我的差不多,不过我的sites-enabled里面没有default文件。。。

追梦人物 [博主] pennygone
你的系统不同,根据系统版本和nginx 版本查一下 default 文件所在的具体位置删除即可

lilong1919119 pennygone

解决了么,我也是这个问题,删除了default文件,还是这样


xier lilong1919119

解决了么,我也是这样 ,头都大了


pennygone xier

没有,云服务器重装后再操作一次还是一样


xier pennygone

我一顿瞎搞 之后成功了


Annihilater 追梦人物 [博主]

删除之后访问域名就变成502 Bad Gateway nginx/1.4.6 (Ubuntu),没删除default之前一直都是Nginx的欢迎访问的页面。求解


Annihilater Annihilater

问题解决了,重新来一遍   最后在自动启动gunicorn之前重启nginx:sudo service nginx reload就正常显示网页了。不需要删除sites-enabled/default软链。


Xiang99 Annihilater

为什么我照你的做了之后还是不行,还是一直显示welcome to Nginx


oliverfree
备案等了好几天,今天终于成功了,谢谢博主!不需要删除default文件,重启实例就可以了哈哈!

chenyou
正解来了。并不需要删除default文件,只需要重启下ubuntu系统就行了。不信你试试

Xiang99 chenyou

还是不行。。。求解


jerry_zj
请问博主我在学习搭配环境的时候,可以先不买域名,直接在浏览器输入公网ip可以吗?我运行了nginx之后,在浏览器输入公网ip是无法访问的。
另外,阿里云网站提供了网页的远程连接,请问这跟用xshell有什么不一样的吗

追梦人物 [博主] jerry_zj
可以的,没有区别。只是相关设置要记得替换,和教程中会略有不同。

想吃肉的小猫熊 追梦人物 [博主]

求需要替换哪些部分,非常感谢。小白一个


Qiu kong Wong
Could not find a version that satisfies the requirement Brlapi==0.6.4
而且Could not find a version that satisfies the requirement apturl==0.5.2


这是为什么啊。。其他步骤和博主一样

追梦人物 [博主] Qiu kong Wong
你的 requirements.txt 内容和我的一样么?仔细对比一下

聽雨聲-淅淅瀝瀝
博主,弄完之后出现Server Error (500)可能会是什么问题?前面welcome to nginx能显示,gunicorn也成功开启了,可就是界面显示不出来

聽雨聲-淅淅瀝瀝 聽雨聲-淅淅瀝瀝
好吧,是工程代码出问题了。感谢博主的教程!!!

KOI科少
忙活了好几天,终于配置好了,目前总结的经验如下:
1、如果在最开始启动nginx的时候出现过welcome to nginx的话,在后期出现无法出现页面的错误情况,应该是nginx配置环节出现错误,具体错误信息可以在nginx的目录下用命令sudo nginx -t查看
2、如果出现502 bad gateway的话,个人认为好的解决方法是把目录切换到 /var/log/ngnix 目录下 有个error.log文件 用vim打开可以看到具体是什么原因产生的错误
最后谢谢博主的博客教程,写的很好!

空城如忆
博主,我的页面始终是乱七八糟的,CSS样式没有加载全,如何处理?都好几天了,重新部署了好几次,都是这样。

追梦人物 [博主] 空城如忆
在浏览器中确认一下 css 等文件是否加载成功,还有 nginx 代理静态文件的路径是否正确。

空城如忆 追梦人物 [博主]
/static/blog/css/highlights/github.css Failed to load resource: the server responded with a status of 404 (Not Found)
/static/blog/css/custom.css Failed to load resource: the server responded with a status of 404 (Not Found)
/static/blog/css/bootstrap.min.css Failed to load resource: the server responded with a status of 404 (Not Found)
/static/blog/css/pace.css Failed to load resource: the server responded with a status of 404 (Not Found)
bootstrap.min.js Failed to load resource: the server responded with a status of 404 (Not Found)
jquery-2.1.3.min.js Failed to load resource: the server responded with a status of 404 (Not Found)
pace.min.js Failed to load resource: the server responded with a status of 404 (Not Found)
modernizr.custom.js Failed to load resource: the server responded with a status of 404 (Not Found)
script.js Failed to load resource: the server responded with a status of 404 (Not Found)
bootstrap.min.js Failed to load resource: the server responded with a status of 404 (Not Found)
pace.min.js Failed to load resource: the server responded with a status of 404 (Not Found)
modernizr.custom.js Failed to load resource: the server responded with a status of 404 (Not Found)
script.js Failed to load resource: the server responded with a status of 404 (Not Found)
github.css Failed to load resource: the server responded with a status of 404 (Not Found)
custom.css Failed to load resource: the server responded with a status of 404 (Not Found)
pace.css Failed to load resource: the server responded with a status of 404 (Not Found)
bootstrap.min.css Failed to load resource: the server responded with a status of 404 (Not Found)

在浏览器中打开后出现这样的错误,还是不行

空城如忆 追梦人物 [博主]
指向“http://47.94.101.46/static/blog/js/bootstrap.min.js”的