2017-06-05 更新:
针对很多朋友反映按照教程的做法始终只能看到 Nginx 欢迎页面的问题,Tian Pengfei sanyuwen 给出了很好的建议。如果你也被类似问题困扰,不妨尝试一下这个建议。
这个问题也困扰了很久,最终发现是sites-enabled文件夹里默认的default文件中的配置覆盖了自己写的配置,导致配置不生效,把default文件删掉就可以正常被nginx代理过去了,亲测有效
我们博客的基础功能已经开发的基本差不多了,虽然还有很多地方可以完善,但我们还是希望早点把博客部署到服务器上,让他人可以通过外网访问。至于有待完善的地方,可以等部署完后一点点地迭代和改进。现在就让我们来把博客部署到服务器上吧!
注意:本文的每一个步骤都在真实环境下验证无误。除非你知道自己在做什么,否则我们建议每一步均严格按照教程的指导来,这样能保证你顺利完成部署。
部署前准备
我们将使用比较流行的 Nginx + Gunicorn 的方式将 Django 开发的博客部署到自己的服务器,让别人能够通过域名访问你的博客。至于 Nginx、Gunicorn 是什么暂时放到一边,读完本教程后你就会知道它们的作用和使用方法了。
为了部署我们的博客,需要满足以下两个条件:
- 有一台可以通过外网访问的服务器。
- 有一个域名。
如果你已经满足以上条件,可以直接跳到后面的搭建服务器部分。这里简单介绍一下我目前所知的以最低成本满足以上两个条件的方式。
购买服务器
如果你是学生,推荐购买阿里云服务器,学生优惠价是 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 启动成功了。
部署代码
部署前的项目配置
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 文件,找到 DEBUG
和 ALLOWED_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 --
博主你好
我在使用gunicorn时 输入
gunicorn --bind unix:/tmp/wuxinhe.xyz.socket blogproject.wsgi:application 显示
File "/home/hyyang/sites/wuxinhe.xyz/django_blog/blogproject/blogproject/__init__.py", line 1, in <module> import pymysqlImportError: No module named 'pymysql
这个怎么搞啊
博主你好,我在安装requirements的相关库时,提示没有找到对应的版本,这该怎么办
请问博主,绑定域名以后是不是得需要备案啊?我这访问域名时,提示我未备案或者未接入
## 无MySQLdb模块
执行 python manage.py collectstatic 后报错,说我没有MySQLdb模块,我压根就没有导入过这个模块啊
nginx.conf 里面转移proxy pass 没有/temp/xx.socket怎么办啊 哭了
哈哈,我也遇到了。
我是这样解决的,重启 nginx 就好了
博主,我是按照教程使用的阿里云ubuntu系统,安装完nginx后,在浏览器输ip, 域名都没有反应,不过用命令行curl http://localhost,是有显示的
处理好了,是由于阿里云的设置,需要修改安全组https://blog.csdn.net/sinat_25957705/article/details/80641077
一直详情页的兄弟们来这里看看,应该能解决 链接文字
http://112.74.47.33
另外请教一个关于gunicorn自启动脚本的问题:
按照博主的脚本,运行时发现提示
start: Unknown job: myproject.conf
。谷歌后发现,似乎与
setuid
这个关键字有关,某些版本的upstart识别不了setuid
导致无法正确加载.conf
文件。我查看的参考文章 中ahunt的答案表示用到
setuid
的地方可用使用设置环境变量USER+su -c
的命令操作。无奈不太懂upstart脚本,想请教按照上述说法是否可行,如果可行具体脚本该怎么修改?(操作系统版本CentOS 6.9)
一样遇到了Nginx的配置文件导致的访问始终在欢迎界面的问题,这是我的解决办法:
1. 通过
$ps -ef | grep nginx
查找了一下CentOS 6.9下(我使用的系统)的路径,发现和博主的路径有所不同:不存在sites-abailable
和sites-enabled
路径,不知道是不是操作系统差异导致的还是Nginx版本导致的;2. 配置文件需要
.conf
后缀;3. 查询了
/etc/nginx/nginx.conf
文件,http加载自定义模块的路径在/etc/nginx/conf.d/*.conf/
评论里大家提到的default.conf
文件我也在该文件夹找到了;4. 尝试将配置文件键在
/etc/nginx/conf.d/
下,比如www.xxx.com.conf
重新加载Nginxsudo service nginx reload
,成功进入到项目界面;但是遇到另一个问题,就是静态文件渲染不成功。
F12查询了一下,发现本地静态文件都加载失败,提示403。
查询了一些静态文件权限,目录775,文件664,理论上是能够加载的;然后又怀疑是否是调用nginx的用户不存在,查了一下
nginx.conf
文件,对应用户是user nginx
,使用cat /etc/passwd
查询,用户是存在的。由于找不到其他解决办法,就尝试修改了nginx.conf
的user为之前创建的超级用户user xxx;
重载后渲染成功。关于nginx用户加载不成功的问题,后续谷歌了一下用户的区别,发现之前创建的具有高级权限的用户属于普通用户类,而nginx的编号在1-499之间,属于伪用户。不知道是否与这个有关?老哥这个403错误的解释太棒了,感谢老哥
执行sudo start gunicorn-时sudo:start:commond not found 怎么办哇 而且一直在Welcome to nginx!界面
我也是这样的,,请问你是怎么解决的
你好,我想问下,乌班图16版本后教程中的Gunicorn自启脚本已经无法使用,那么在新版本中该如何写自动重启脚本呢
我域名绑定了另一个网站,这个用ip地址可以不
迷迷糊糊搞了俩消息,只能看到Welcome to nginx!该怎么办啊
我查看了错误文件,说是。。。。recv() failed (104:Connection reset by peers)
您好,502错误是什么原因啊?
踩了个大坑,对于网络基础为0同学,在启动nginx这一步,输出代码时,特别注意字与字之间的间距,例如“location /static”中间是有空格的,而斜杠和static一起组成路径,在评论中有同学给出了很好的建议
1、如果在最开始启动nginx的时候出现过welcome to nginx的话,在后期出现无法出现页面的错误情况,应该是nginx配置环节出现错误,具体错误信息可以在nginx的目录下用命令sudo nginx -t查看
2、如果出现502 bad gateway的话,个人认为好的解决方法是把目录切换到 /var/log/ngnix 目录下 有个error.log文件 用vim打开可以看到具体是什么原因产生的错误
太棒了!Nginx 这一块我确实写的不太清楚,下一版教程我会根据大家的反馈努力完善,你的分享太棒了。
我刚开始是出现 Nginx 欢迎页面,后来 reload 后就出现 502 网关错误,不知道怎么办了,可以指导一下吗?
我是用IP访问部署的博客,在地址栏中输入129.28.199.45:8000,没有正常显示,“错误代码: HTTP ERROR -2146697211”,请问博主、朋友有没有遇到过,如何解决?
确定是程序绑定的 80 端口吗?
感谢各位大佬们,弄了两天,从centos换回Ubuntu终于能行了
想问一下啊
python manage.py collectstatic
这个命令的目的是什么呢?
会将各个 app 下的 static 下的文件收集到一个统一的文件夹下,这个文件夹由 settings.py 里的 STATIC_ROOT 指定
博主,我按您的步骤,到 启动 Nginx 服务 一直显示“无法访问此网站”,没有Nginx启动成功的页面,请问是什么原因呢 ????搜索了各种方法还是不行。
域名和服务器绑定成功,也开放了 我的电脑的80端口,看其他评论后开启了云服务器的80端口,电脑的防火墙也关了,但是总是显示“无法访问此网站”,不知道还有什么办法,请问是什么原因呢
同问 解决没?
也有可能是域名解析的问题
博主,国庆节快乐,我安装你的教程完成了项目的部署,部署完了之后发现,中文显示的都是??????????,使用的是腾讯云服务器,安装的是Ubuntu 的系统,数据库使用的mysql,发现问题后感觉是编码的问题,首先修改了mysql编码,数据库编码,还是显示的????,之后修改Ubuntu系统编码,还是不行,百思不得其解,只能求助博主了,还望博主看到后指点迷津
修改MySQL编码后,之前那个数据表编码依然是不会变的,需要把之前那个删除掉,然后重新创建一个,重新迁移数据库和创建管理员,就能够输入中文了。希望能帮助你。
博主请教一下!
我已经完成了域名的部署,通过外部能够访问我的博客,但是我在后台写入“文章”、“分类”、“标签”时,只能够写入数字和英文,如果我写入中文,就会报错“Server Error (500)”。
我在本地服务器上发布文章没有任何问题。
PS:当初配置服务器时,python manage.py migrate 命令创建数据库文件失败,我认为是因为我的ubuntu上没有Mysql数据库,于是动手安装了mysql,解决了这个问题。不知道是不是这个数据库的原因导致文章无法写入中文。
问题已经解决。Ubuntu下MySQL编码问题,导致不能插入文中......
请问阁下是如何解决不能使用中文字符的,我也遇到同样的问题了,我试着修改Ubuntu下Mysql编码,修改之后重启了mysql后依然还是不能正常使用中文字符,还望指点迷津
请教个简单的问题。。
关闭CRT,或者断开ssh后,好像gunicorn就自动关了,网站就等不了了。
这个问题是不是用了 “自动启动 Gunicorn” 这个脚本就可以解决了?
正规途径是不是就是这样解决的呢?
解决方法有很多,原理就是让 gunicorn 这个进程在后台运行。直接命令行启动的退出命令栏就会退出进程
安装完后,浏览器访问网站提示无法访问此网站,这是什么原因呢
zzz@Ubuntu:~$ ls -l /etc/nginx/sites-enabled/ /etc/nginx/sites-available/ /home/zzz/sites/zzzsdust.com/blogproject/static/
/etc/nginx/sites-available/:
total 4
-rw-r--r-- 1 root root 305 Sep 13 18:43 zzzsdust.com
/etc/nginx/sites-enabled/:
total 0
lrwxrwxrwx 1 root root 39 Sep 13 19:13 zzzsdust.com -> /etc/nginx/sites-available/zzzsdust.com
/home/zzz/sites/zzzsdust.com/blogproject/static/:
total 8
drwxrwxr-x 6 zzz zzz 4096 Sep 13 18:39 admin
drwxrwxr-x 4 zzz zzz 4096 Sep 13 18:39 blog
zzz@Ubuntu:~$ cat /etc/nginx/sites-available/zzzsdust.com
server {
charset utf-8;
listen 80;
server_name zzzsdust.com;
}
zzz@Ubuntu:~$ systemctl status nginx.service
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-09-13 19:05:07 CST; 12min ago
Process: 846 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 695 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 851 (nginx)
CGroup: /system.slice/nginx.service
├─851 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
└─852 nginx: worker process
现在提示 502 了。
解决了,在设置/etc/nginx/sites-available/url.conf 之后,没有设置 gunicorn 之前,是不能访问域名,只有,全部设置完之后才能访问。另外可以查看 nginx 的报错信息 在 /var/log/nginx/error.log 中
磕磕绊绊建站成功,掉进很多坑又爬了出来,有问题的朋友可以留言,如果你的坑和我一样或许我能够帮上忙
请问浏览器访问提示 无法访问是什么原因,先关的配置如下:
```
zzz@Ubuntu:~$ ls -l /etc/nginx/sites-enabled/ /etc/nginx/sites-available/ /home/zzz/sites/zzzsdust.com/blogproject/static//etc/nginx/sites-available/:total 4-rw-r--r-- 1 root root 305 Sep 13 18:43 zzzsdust.com/etc/nginx/sites-enabled/:total 0lrwxrwxrwx 1 root root 39 Sep 13 19:13 zzzsdust.com -> /etc/nginx/sites-available/zzzsdust.com/home/zzz/sites/zzzsdust.com/blogproject/static/:total 8drwxrwxr-x 6 zzz zzz 4096 Sep 13 18:39 admindrwxrwxr-x 4 zzz zzz 4096 Sep 13 18:39 blogzzz@Ubuntu:~$ cat /etc/nginx/sites-available/zzzsdust.com server { charset utf-8; listen 80; server_name zzzsdust.com; location /static { alias /home/zzz/sites/zzzsdust.com/blogproject/static; } location / { proxy_set_header Host $host; proxy_pass http://unix:/tmp/zzzsdust.com.socket; }}zzz@Ubuntu:~$ systemctl status nginx.service ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-09-13 19:05:07 CST; 12min ago Process: 846 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 695 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 851 (nginx) CGroup: /system.slice/nginx.service ├─851 nginx: master process /usr/sbin/nginx -g daemon on; master_process on └─852 nginx: worker process
```
解决问题了,先关解答也写在楼上了,谢谢你
今天想给博客换壁纸,修改css样式一直不成功,怀疑是浏览器的问题,便清除了chrome的缓存,现在导致css和js等静态文件一直加载不出来,重启也没用,不知为什么啊
这边没有start命令,脚本有其他启动方法吗,查资料没查到相关的
关于静态文件不能加载的问题,可以先查看以下nginx的错误日志,如果是使用apt安装,日志文件在 /var/log/nginx/error.log,我这里遇到的问题是权限不够,具体可以参考这个链接 https://blog.csdn.net/onlysunnyboy/article/details/75270533
博主你好,经过重重关卡,所有都已经搭建完成,感谢博主。
但是网站这个要备案好烦啊,不然进不去,我感到一个月的服务器没有用了
用国外的服务器和国外的域名就不用备案了,但也有可能被墙
第一次没经验呜呜呜
不过坐等备案成功,好好继续下一步
sudo start gunicorn-demo.zmrenwu.com
这个命令用不了。。。
你系统版本是啥
为什么我把sites-enabled文件夹里默认的default删除了还是出现 Nginx 启动成功时的欢迎界面?
解决了。
请教一下如何解决的
我的是阿里云的服务器,需要手动开启端口,在重启配置
具体操作是怎样的,能说下吗,谢谢
你好, 请问一下, sites-enabled中配置的文件是以什么作为后缀名
你好,可以介绍一下具体的步骤吗?
博主,我操作了几遍还是显示nginx欢迎页面,也删除了sites-enabled下的default文件了。按照评论提示重启nginx时候提示nginx: [emerg] invalid number of arguments in "proxy_pass" directive in /etc/nginx/sites-enabled/jcj.techchang.rocks:12
我的配置文件:
server {
charset utf-8;
listen 80;
server_name jcj.techchang.rocks;
}
麻烦看一下什么问题
解决了这个问题,但是不报错还是只能显示nginx欢迎界面
在gunicorn 那里,我手动部署成功,但是自动就会失败,网页500错误,很奇怪,我也无法解决,看了下一章的fabric,我稍微改动了一点,这个自动部署的问题就也解决了,有同样问题的朋友可以先跳过去,看看下一章。
我是在fabric那个文件有一部分改成这样了:
run("""
cd {} &&
../env/bin/pip install -r requirements.txt &&
../env/bin/python3 manage.py collectstatic --noinput &&
../env/bin/python3 manage.py migrate &&
../env/bin/gunicorn --bind unix:/tmp/域名.socket 项目名.wsgi:application
""".format(source_folder))
域名是中文的朋友,我觉的我有必要把自己遇到的问题说一下,要是有人和我一样的情况可以参考一下。我按照博主流程搞了四五遍,什么样的问题都遇到过,一直都是欢迎nginx页面。经评论里的一位提醒,用Debug=True看了一下,问题出在了我的域名,我跟个傻子一样注册了中文的域名,这个域名输在浏览器的地址框里,发现它变成了乱码,所以settings文件,allow的地方,不能写成中文的域名,要改成浏览器里的乱码....。有一样情况的朋友可以看看这样能不能解决。
欸?评论里不能用markdown吗?
富文本编辑器,暂时不支持 Markdown
博主你好,我在pip install -r requirements.txt 是有很多都无法安装,实际上有几个我程序里也没用到,我能不能在requirements.txt里把那几个依赖删掉?因为某个安装失败了后面的就也不安装了。
用ip让外网访问要改以下几个地方:
1.nginx配置文件中,域名.socket替换成ip,注意socket也要去掉
2.创建软链接要使用绝对路径,就是博客里写的那样,不然会出现Too many levels of symbolic links错误,nginx应该也找不到网页.
3.删default文件
一直是nginx的欢迎界面的解决方法:
我的是centos7--- nginx version: nginx/1.14.0
备份好/etc/nginx/conf.d/default.conf
将/etc/nginx/sites-available/demo.url.com的配置改到 /etc/nginx/conf.d/default.conf文件下,sudo service nginx restart 然后运行gunicorn就可以了。
怎么改的?能截图操作一下。
有没有用windows的,小白一枚,windows环境下到了配置nginx这一步就卡住了,不知道怎么配置?
博主好,按照你的教程操作下来,可以运行,但是后台css样式没有,而且我额外又安装了django-filer,django-ckeditor,这两个样式也没有,不能上传文件,没有显示格式。我又执行了python manage.py collectstatic,但是出现如下错误:
Traceback (most recent call last):
File "manage.py", line 22, in
execute_from_command_line(sys.argv)
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/core/management/init.py", line 376, in execute_from_command_line
utility.execute()
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/core/management/init.py", line 368, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/core/management/base.py", line 294, in run_from_argv
self.execute(args, **cmd_options)
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/core/management/base.py", line 345, in execute
output = self.handle(args, **options)
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 193, in handle
collected = self.collect()
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 124, in collect
handler(path, prefixed_path, storage)
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 357, in copy_file
self.log("Copying '%s'" % source_path, level=1)
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 218, in log
self.stdout.write(msg)
File "/home/toptran/sites/nbtoptran.com/env/lib/python3.4/site-packages/django/core/management/base.py", line 110, in write
self._out.write(force_str(style_func(msg)))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 69-74: ordinal not in range(128)
查找修正方法:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
运行后又出现:
Traceback (most recent call last):
File "manage.py", line 5, in
reload(sys)
NameError: name 'reload' is not defined
真不知该怎么办了?
应该是中文编码问题,你要把服务器的默认编码设为 utf-8
已解决了,将最开始做的代码复制过来解决了。
终于上了。各种方法都试了还是只能留在欢迎界面
如果是过各种下面的方法的朋友还是不行,看下创建数据库的时候有没有先用Python manage.py makemigrations,再用Python manage.py migrate
正在学习django,v:15152295503,有问题一起来讨论学习啊
通过ip终于能从外网正常访问。首先感谢楼主的教程,很详细而且回复评论也很尽心。然后说说我的经验吧。
1)如果不能正常打开网页,可以先设置文章开头settings.py的DEBUG = True,看看报错什么。网站部署好了记得改回来就好
2)静态文件加载不了的情况,请先核对你的nginx配置中,location /static的路径与你的静态文件路径是否一致。
如果核对无误的话,重启服务器就好。
3)重启完服务器后,记得三步:进入虚拟环境,启动nginx,启动gunicorn
4)遇到问题先核查自己的内容与楼主的内容是否有差别。如命令打错等。
5)如果你也是ip访问的话,记得修改两个文件:一是nginx的配置文件,有关域名的全换成服务器的ip。二是文章开头的settings.py中的ALLOWED_HOSTS将域名改成你的服务器ip。
20180617
在AWS linux(类似centos)遇到的坑:
/etc/nginx/nginx.conf下的配置: include /etc/nginx/default.d/*.conf;
vim /lib/systemd/system/nginx.service
然后完了如果出错, " nginx error! The page you are looking for is temporarily unavailable. Please try again later.
Website Administrator Something has triggered an error on your website. This is the default error page for nginx that is distributed with Amazon Linux 2. It is located /usr/share/nginx/html/50x.html
You should customize this error page for your own site or edit the error_page directive in the nginx configuration file /etc/nginx/nginx.conf.
[ Powered by nginx ] [ Powered by Amazon Linux 2 ] " 这样的话就需要修改: 可以通过tail -f /var/log/nginx/error.log查看log 会发现是报socket无法找到: 需要如下修改 vim /lib/systemd/system/nginx.service PrivateTmp=false
另外:不要把源码放在/root下 不然后面nginx进程无法访问,我是放在/var/www下的
按照操作后访问ip显示Bad Request (400)怎么办
已经部署三次了还是这样
兄弟,我也是这个问题,你怎么解决的
针对好多同学遇到的问题sudo: start: command not found,我碰到并解决了,详情如下:
原因:Ubuntu 16版本已经没有upstart这个服务了,所以设置开机启动这个功能不能仿效博主。
解决:参考http://bgods.cn/post/5/
可以解决,谢谢
我用 caddy 部署的,ssl 自动申请并续期。
没有配置域名,配置完后 输入ip访问总是502错误 看了err log提示*9 connect() to unix:/tmp/140.82.5.100.socket failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: 140.82.5.100, request: "GET / HTTP/1.1", upstream: "http://unix:/tmp/140.82.5.100.socket:/", host: "localhost"
弄了好长时间了 不知道怎么回事 我的服务器是centos7的 gunicorn输出提示正常的
(env) [root@vultr django-blog]# gunicorn --bind unix:/tmp/140.82.5.100.socket mysite.wsgi:application
[2018-06-04 12:25:41 +0000] [861] [INFO] Starting gunicorn 19.8.1
[2018-06-04 12:25:41 +0000] [861] [INFO] Listening at: unix:/tmp/140.82.5.100.socket (861)
[2018-06-04 12:25:41 +0000] [861] [INFO] Using worker: sync
[2018-06-04 12:25:41 +0000] [864] [INFO] Booting worker with pid: 864
博主,你好,按照你的思路,我去买了个搬瓦工的VPS,然后在阿里云上买了个域名,域名也做了解析,现在是怎么在服务器上的nginx上配置刚刚买好的域名,因为我用IP登录显示成功,用我的域名就是不能访问
这个我也不懂了,哪个能用用哪个吧
我也遇到这样的问题了,我是因为没有域名解析导致的,希望能帮上你
一切步骤都做了,而且运行都正确,sites-enabled文件夹里默认的default文件也删了,但是就是只有Nginx的欢迎页面
先重启nginx,sudo nginx -s reload
再gunicorn --bind unix:/tmp/demo.xxxxxx.com.socket xxxxxxxx.wsgi:application
试试看,我就是这样好的
谢谢啊
客气
有用! 谢谢
是的,真的弄好了,多谢大侠。
请教,手动启动Gunicorn可以,但是自动启动 Gunicorn会报出start: Job failed to start
start on net-device-upstop on shutdownrespawnsetuid baoruichdir /home/baorui/sites/demo.arslanpioneer.com/myBlog/blogprojectexec ../env/bin/gunicorn --bind unix:/tmp/www.arslanpioneer.top.socket blogproject.wsgi:application
请问问题解决了吗,我也是这个问题
大哥你好,跟着你的方法部署后,静态文件加载不出来。已经搞了三天了
http://tunm.top/
解决了!
请问怎么解决的,我的也是静态样式加载不到
'用 Gunicorn 启动服务器进程:'步骤有问题,启动guinicorn正常。打开网站502 Bad Gateway.
Ngnix 配置位置:
env) ubuntu@ip-172-31-25-1:~/sites/www.demonhunter07.com/learn-django-blog$ ll /etc/nginx/sites-enabled/www.demonhunter07.com
lrwxrwxrwx 1 root root 48 May 17 08:40 /etc/nginx/sites-enabled/www.demonhunter07.com -> /etc/nginx/sites-available/www.demonhunter07.com
Ngnix 配置文件:
(env) ubuntu@ip-172-31-25-1:~/sites/www.demonhunter07.com/learn-django-blog$ cat /etc/nginx/sites-enabled/www.demonhunter07.com
server {
charset utf-8;
listen 80;
server_name www.demonhunter07.com;
}
Nginx error 日志如下:
(env) ubuntu@ip-172-31-25-1:/etc/nginx/sites-enabled$ tail -f /var/log/nginx/error.log
2018/05/17 09:17:58 [crit] 2918#2918: *4 connect() to unix:/tmp/www.demonhunter07.com.socket failed (2: No such file or directory) while connecting to upstream, client: 172.104.98.47, server: www.demonhunter07.com, request: "GET / HTTP/1.1", upstream: "http://unix:/tmp/www.demonhunter07.com.socket:/", host: "www.demonhunter07.com"
重启过系统、Nginx、gunicron均无效。 实测和default 配置无关。只要软链接到网站的目录 /etc/nginx/sites-enabled/ 就会报这个错误。
也尝试过子域名,同样的报错。实在不知为何?不过我在编辑 /etc/nginx/sites-enabled/www.demonhunter07.com 文件时,发现socket 的 .com 是红色的,不知是否有关系。
解决了:命令中少了 .socket
gunicorn --bind unix:/tmp/www.demonhunter07.com.socket blogproject.wsgi:application
代码部署之后仍然访问不了,Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
网页显示的上面这个
(env) starichat@iZwz91lflsecbld7pxmwcaZ:~/sites/demo.starichat.com/Blog_django/Blog$ gunicorn --bind unix:/tmp/demo.starichat.com.socket Blog.wsgi:application
[2018-05-05 20:24:56 +0800] [12814] [INFO] Starting gunicorn 19.8.1
[2018-05-05 20:24:56 +0800] [12814] [INFO] Listening at: unix:/tmp/demo.starichat.com.socket (12814)
[2018-05-05 20:24:56 +0800] [12814] [INFO] Using worker: sync
[2018-05-05 20:24:56 +0800] [12817] [INFO] Booting worker with pid: 12817
请教大佬,服务器部署成功,网站也能访问了,更新了模板文件后git pull过来如何生效呢?试了collectstatic不管用,Ctrl+F5强制刷新浏览器还是没更新?请问这个怎么解决,谢谢!
自答一下~ 重启服务器和gunicorn解决,不知道还有什么更好的方法么
继续求助,模板更新每次都要重启服务器么。。。不重启网页不生效。。。我用的是阿里云轻量服务器。
基本上是这样的,重启以便生效
执行gunicorn -w 4 -b 45.32.5.71:80 blogproject.wsgi:application后,终端显示如下:前端文件无法找到。网站后端可以运行,前端样式基本都没有了。请问如何解决啊,谢谢。
Not Found: /static/blog/css/pace.css
[2018-05-01 09:28:26 +0000] [26210] [INFO] Booting worker with pid: 26210
Not Found: /static/blog/css/custom.css
[2018-05-01 09:28:29 +0000] [26212] [INFO] Booting worker with pid: 26212
Not Found: /static/blog/css/pace.css
Not Found: /static/blog/css/highlights/github.css
[2018-05-01 09:28:32 +0000] [26214] [INFO] Booting worker with pid: 26214
Not Found: /static/blog/css/custom.css
[2018-05-01 09:28:35 +0000] [26216] [INFO] Booting worker with pid: 26216
Not Found: /static/blog/css/highlights/github.css
[2018-05-01 09:28:39 +0000] [26218] [INFO] Booting worker with pid: 26218
Not Found: /static/blog/js/pace.min.js
[2018-05-01 09:28:43 +0000] [26221] [INFO] Booting worker with pid: 26221
Not Found: /static/blog/js/modernizr.custom.js
[2018-05-01 09:28:46 +0000] [26223] [INFO] Booting worker with pid: 26223
Not Found: /static/blog/js/script.js
应该配置 nginx 来代理前端文件的请求哦,只把后端请求转发给gunicorn
我也遇到这个问题了,你解决了吗?如果解决了,麻烦你告诉我一下怎么解决的,多谢
请教杨大!我按照教程执行到手动gunicorn,gunicorn也执行成功!!在enabled和available目录下把default都删除了,并且重新开启了nginx,刷新域名还是在欢迎界面!!
你好解决了吗
服务器需要提前安装mysql是么?教程里好像没有提到哦
我们使用的sqlite3,要使用mysql可以自行配置
你好,博主,我问一下,现在执行搜集静态资源 python manage.py collectstatic
会报这个错误from pysqlite2 import dbapi2 as DatabaseModuleNotFoundError: No module named 'pysqlite2'
我百度了一下各种方式都试了还是没有解决!
博主,感觉还是前面出现过的问题,nginx和gunicorn配置都没说出错,但仍然是nginx欢迎页面,前面的方法试过了,还是不变
删掉 default 也不行?那这个问题还真不知道怎么办了。
我刚配置也是这样,一路都没报错,删了default 还是不行
终于可以了,其实还是按照博主的方法,删了default 不行之后我有重启了nginx 然后就好了
请问删了哪个default?
当然是删除/etc/nginx/sites-enabled/ 路径下的default ,然后sudo nginx -s reload重启nginx 就行了
请问我先在后台admin登录的了,前台却一直是welcome界面,哪里能解决呢,谢谢
你好,问题解决了吗,可以留个联系方式交流下吗。v:15152295503
博主好~想问下我为什么一只是error 500
default删除和不删除都试过了。要么就只能显示主页,要么就error 500 😭
500 error 的话你可以打开 debug=True 看一下具体的报错信息。
ProgrammingError at /(1146, "Table 'myblog.blog_post' doesn't exist")
但我migrate的时候都没错呀。上传代码到github的时候,是把migrations文件夹删掉么。😳
Tables_in_myblog
auth_group || auth_group_permissions || auth_permission || auth_user || auth_user_groups || auth_user_user_permissions || django_admin_log || django_content_type || django_migrations || django_session
我看了下,只有这些表。而models.py中写的都没有migrate过去😳😭,但migrate没有报错呀。
已解决。重新装了一遍mysql。。
我用postgresql也遇到过,migrate没问题,这种情况下我这里是因为makemigrations这一步,没有把app里的model同步,可以试一下 makemigraions <appname>,再migrate,一般就没问题了
不论是nginx还是直接用Gunicorn 都无法访问静态文件,在本地就是好的,服务器是Ubuntu16.04到底是为啥?要崩溃了。改了配置无数遍,collectstatic 命令也是正常工作,但是就是无法搞定静态文件。。。
我也是,请问你解决了吗
请问你现在问题解决了么?我也遇到了同样的问题,只能显示主页,加载静态文件404
我把default文件也删除了,没用
我搞定了,你可以在sites-available/myproject.com文件加一条
location /{
+uwsgi_pass project.com;
}
然后重启nginx和gunicorn。
你可以尝试一下,我是成功了。
为什么是加project.com???
博主,请问我在用 Gunicorn 启动服务器进程时,出现了如下的报错:
ImportError: No module named 'blogproject'
您好,请问你这个问题解决了么? 我也遇到了同样的问题
要在你的项目根目录下启动,同时把"blogproject"换成你自己项目的名称,也就是包含wsgi.py文件的那个文件夹的名称
问下 我为什么无法启动 nginx
显示sudo: unable to resolve host iZ2zej5nlzq48imjhhoi2tZ
阿里云服务器,Ubuntu 报错 sudo: unable to resolve host
博主, 按照你的教程已经部署成功了, 但是 CSS 样式显示不正常,网址 http://www.rubic.win/ ,麻烦能不能帮忙看一下我的部署哪里出了问题。 源码:https://github.com/lanlingsheng/blogprojecttwo.git
您好我也是出现这样的问题了,我跟博主的代码都对了一遍,还是这样???
大兄弟,你后面是怎么改好的
我用博主的代码去部署也一样有问题
请教 那你是如何改好的0.0
加个qq358665514吧
我没有改好啊,我的网站,很头痛头的是手机访问会正常,电脑访问异常
正常哈 css js都可以哈
这。。我这里不正常。。我换了IE 访问竟然正常了。。。谷歌浏览器的问题。。
这样聊好费力0.0 加个qq大兄弟 358665514
这里澄清一下,是我用谷歌浏览器访问有问题,其他浏览器就没问题。
我访问你的网站没有问题哦!
原因找到了,是之前nginx配置错误导致所有访问 css和 js 文件都会加 /,例如: script.js/ 浏览器在访问 script.js 的文件夹,所以返回 404。Ctrl + F5 刷新本地缓存就正常了。。。。
博主我的路径没错吧??就是css jss加载不出几天了
博主大大,我跟上面那位大哥私聊过了,权限没问题路径没问题,css js还是加载不出
博主,我按照你的教程已经部署成功了,但是根目录无法访问,其他目录都可以访问是什么原因?
什么叫做根目录无法访问?你部署在 root 目录下么?
不好意思,表达不太清楚,我的域名是forever16.cc,直接打开这个网址就会显示NOT FOUND,但如果在后面加上/admin或者网站的其他目录名是可以访问的。
比如打开 http://forever16.cc/blog/2018/04/11/Post-Title/ 就能得到正常的内容
我的urls文件是这样的
website/blog/urls.py
website/website/urls.py
在我这里运行是完全没问题的,希望博主能帮我看看,谢谢了
博主我解决了,还是谢谢了。
Sorry,回复慢了,解决了就好!
你好,我也想直接利用域名访问,我域名是 www.halolin.fun 但每次访问都要输入路径 www.halolin.fun/blog/index 才能访问,请问怎么改成直接利用域名访问??谢谢
说明你在 django 中没有设置根路径访问的 url 咯,设置一下即可。
这个我之前也想过,但在网上看到有一些说是用 nginx 的 proxy_pass 设置。。但弄了之后发现这个方法不行,可能是我设置的问题。
请问你是怎么解决的,我也碰到这个问题
按照操作后访问ip显示Bad Request (400) 是什么情况。。
客户端错误,这有可能是你的服务器封了端口什么的。请参阅服务商的文档然后打开相应端口。
你好,请问你解决了吗,我也是同样的问题
我也是Bad Request (400),请问你解决了吗
妈耶,我用的site域名,本来以为不用备案,结果还是要备案。
me too
后面加个点就可以访问。。。
博主,我之前只用过centos,我也可以用它搭建nginx+django的吧,我看到我的nginx下面没有那个site目录。有点不明白的是,python manage.py collectstatic 这个命令的意义是什么呢,我不太理解,因为我们写的博客每个页面都要渲染的,那就不存在静态页面了,为什么要执行这句命令呢。
操作系统可以随便选择,只是会和教程中的命令有些微差异,百度解决即可。
`python manage.py collectstatic` 用于收集各个 app 下的 css、js、图片等静态资源到一个统一的目录下(在 setings.py 中设置的 STATIC_ROOT),这样就可以把对这些静态文件的处理交给 nginx,django 服务器本身不在处理这些资源的请求(django处理会很慢)。
好的谢谢啊,懂了
如果我所有静态文件就放在项目文件夹下static文件夹中,应该就不需要执行python manage.py collectstatic这条语句了吧?
不用了,只要nginx能找到你的静态文件就可以。
感谢博主大大,我这边遇到个问题,就是 在setting 里把 DEBUG 设成 False之后,能进入后台管理页面,但是无法添加文章,DEBUG 设为 True可以添加文章并正常显示,这是网站示例 : www.jiangshibo.cn ,博主知道这个问题是咋回事么,,?
在 DEBUG 设成 False之后 要保证你的静态资源由 nginx 等服务器代为处理,但是添加文章等操作应该是不受限制的。
求教,很想知道,您这边用的是ubuntu 14.04+nginx,我的系统是CentOS release 6.9+tengine,,,有个问题我这边配好之后访问域名,直接显示代码,没有调用到CSS样式,求解决
难道是 nginx 没有伺服静态文件?你看静态文件加载是否显示 404?
www.mieken.cn/me.jpg 这样或者http://www.mieken.cn/1.txt是没有问题的
这个链接有问题,你在 settings 中设置了 static_url 么?
STATIC_URL = '/static/'
# 加入下面的配置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
#STATIC_ROOT='/mnt/workspace/blogproject/blog/static'
STATICFILES_DIRS = ( os.path.join(BASE_DIR), '/mnt/workspace/blogproject/blog/static',)
模板中是否使用 static 标签来获取图片的 url 的?
小白求问:debian 执行自动启动 Gunicorn输入:sudo start gunicorn-xxx,提示sudo: start: command not found,求大神解答
心累,我也是这样,linux...玩不转啊
aceback (most recent call last):
File "/home/masida/sites/120.79.212.120/env/lib/python3.5/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
worker.init_process()
File "/home/masida/sites/120.79.212.120/env/lib/python3.5/site-packages/gunicorn/workers/base.py", line 126, in init_process
self.load_wsgi()
File "/home/masida/sites/120.79.212.120/env/lib/python3.5/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
self.wsgi = self.app.wsgi()
File "/home/masida/sites/120.79.212.120/env/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/home/masida/sites/120.79.212.120/env/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/home/masida/sites/120.79.212.120/env/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/home/masida/sites/120.79.212.120/env/lib/python3.5/site-packages/gunicorn/util.py", line 352, in import_app
import(module)
File "/home/masida/sites/120.79.212.120/blogproject
各位大佬能否看看小弟这是什么错误
踩了个雷, 我把在服务器上运行正常的网站拉回到本地, 用127.0.0.1访问发现css样式不见了, 打开浏览器发现静态文件都无法读取. 常识后发现在本地测试时需要把settings.py中的DEBUG改成True
问一下,你的服务器是什么系统,我这边centos+nginx,配置出不来css样式
nginx 502 , socket failed (2: No such file or directory)
解决了,自动部署脚本那里添加手动命令
http://www.mahaoyang.cn/post/4/
http://www.mahaoyang.cn/post/4/
在gunicorn那个地方,如果只是单纯的重新起一个gunicorn的话,应该会造成gunicorn最后的进程越来越多,简单的在笔记本试了一下,确实是这样。很多运维的工具不支持python3,真是个大坑
我也是,怎么解决呢。。
博主你好,我按照你的一步步做完后发现仍只显示nginx欢迎页面,这可能是哪些原因引起的呢?
我知道了,/etc/nginx/sites-enable/defalut没有删除。博主的教程很详细!
6
请问 我安装nginx后默认没有/etc/nginx/sites-enable/这个文件夹,手动创建之后,也没有defalut这个文件啊
你可能不是使用的 nginx Ubuntu 发行版。
我用的是centos7 大家建议使用源码安装nginx 但是觉得源码安装好难
搞完了无法访问此网站,gg。。
failed (13: Permission denied) while connecting to upstream,这个错误为什么原因呢?
访问显示502,日志错误如上,但还是不知道哪里的问题,请指教
这个。。谷歌或百度吧。。我有问题都这样解决的
关闭 SELinux后好了。
为什么我的依赖环境连django都没有呢?我打开requirements.txt看了一下?
Centos7:
usermod -a -G wheel myuser
之前应经在一台阿里云服务器上部署过一个网站了,这次如果要再部署一个网站的话,监听的端口是不是要改成非80的端口,希望楼主能讲一讲多个网站部署在同一台服务器上需要注意哪些问题,感谢!
自动启动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,
同文,解决了么
碰到了同样的问题,网上搜了搜,将 /tmp 改为 /var/run 就正常了
https://stackoverflow.com/questions/35989291/connect-to-unix-tmp-php-fpm-sock-failed-2-no-such-file-or-directory
求助各位大佬,只有服务器ip,没有域名(域名没有备案),请问需要怎么修改
/etc/nginx/sites-available/demo.zmrenwu.com
server {
charset utf-8;
listen 80;
server_name demo.zmrenwu.com; ①
}
非常感谢。。
同问同问
填ip
解决了吗,哥们。求解!
请问解决了吗
server_name ip地址
proxy_pass http://unix:/tmp/ip地址.socket
比如:
server_name 192.168.1.110
proxy_pass http://unix:/tmp/192.168.1.110.socket
下面gunicorn启动的时候也将域名换成ip就行了,亲测可用。
我这里不行,,,,不知道怎么解决
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.xiaoqianglove.com]这里字符串超长了导致少了一个单引号怎么解决
开启nginx后能从外网直接访问到nginx默认的页面,然后经过一番配置,删除了site-availble里面的default,添加了自己的配置文件,并且也bind上去了,gunicorn也能顺利开启,但是从外网访问的时候,,一直显示不出页面,服务器一直拒绝我请求。这可能是什么原因呢
有可能是相关端口没开?好像阿里云、腾讯云什么的有些端口需要手动开启,评论中一些朋友遇到过这种问题。
您是如何解决的呢 ?
请问你解决了吗?我各种情况都试了,访问域名和IP 都是nginx welcome页面,也没别的错误。算是和你情况一样
我把后边的内容文章、分页什么的功能都做了,现在回过头来部署,然后就是在服务器: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里?
你为什么会有这个包的依赖呢?我的示例项目里面是没有的。
我用的是anaconda3的环境,前面都没什么问题,后面部署的时候提示anaconda版本不满足,然后在requirements.txt里面客户端版本貌似是1.6.5,暂无解答,先记录一下~
最快的解决方法是用博主的txt文档就ok了,因为我之前按了好多其他的插件,总会有些环境安不上的
大佬们,问个问题,配置Nginx的时候,出现这样的错误,但是有这个文件的呀,我是创建了的
sudo: unable to resolve host iZbp16qs1mo55kgqlfrlg8Z
ln: failed to create symbolic link '/etc/nginx/sites-enabled/demo.erublog.cn': File exists
你已经创建过一个符号链接了。
Ubuntu 16.04 LTS,用户是siar,非root用户
1. 新建目录(自启动服务文件存放目录)
sudo mkdir -p /usr/lib/systemd/system
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
sudo systemctl start siar
我的文件名是siar.service,所以就sudo systemctl start siar
4. 添加服务到开机自动运行
sudo systemctl enable siar.service
ps -ef | grep gunicorn
查看gunicorn是否已经启动,有两个进程。
你好,我按照你的方法还是不能开机自动启用服务,验证启动只有一个进程,想问一下
ExecStart=/home/siar/sites/env/bin/gunicorn --bind unix:/tmp/siar.socket blogproject.wsgi:application
这一行里env是虚拟环境名吗, 还有后面的/siar.socket这里siar代表的是域名吗
/home/siar/sites/env/bin/gunicorn 是 gunicorn 安装的路径,我安装在虚拟环境中。
siar.socket 是 socket 文件名,用于标识端口,这里我习惯将其以部署的网站域名命名,只要保证nginx转发代理的端口和这个文件名一致就行。
关于 自动启动 Gunicorn
ubuntu 16.04 不适合使用教程里面的方法。。。
可以参考这里
http://www.siar.me/post/9/
d@e:~/sites/blogproject$ sudo start gunicorn-demo.zmrenwu.com
start: 无法连接到 Upstart: Failed to connect to socket /com/ubuntu/upstart: 拒绝连接
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
我找到了为什么nginx 配置这么写
proxy_pass http://unix:/tmp/demo.zmrenwu.com.socket;
http://blog.csdn.net/quqi99/article/details/45100933 试试这个办法
谢谢 这个问题我已经弄明白
想问前辈们,自动启动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
希望前辈们能给点建议
跟你一样,始终解决不了,你解决了吗
我遇到了相同的问题 后来发现是gunicorn-xxx文件中写错了 改了就好了
问题描述:
1.一路按照群主教程部署下来的,最后也成功启动了gunicorn ;
2.但是打开页面因为域名未备案通过所以通过域名访问时,一直显示的是未备案的画面。
3.所以按照其他人的做法在线上通过vim更改了setttings.py文件,将主机ip加到了可访问的列表里,然后重启nginx,重启gunicorn,输入ip还是只能看到欢迎与页面。
4.于是按照教程删除了sites-enabled下面的default文件,再次重启nginx 和gunicorn .输入ip还是失败,只看到欢迎语。
跪求群主解答下这个到底是啥问题
测试下评论
可以
2 域名都要先备案的啊你可以用服务器IP登录
3 如果用IP登录把允许域名改成你的服务器IP
4 重启服务器
sudo service nginx reload
再重新启动,gunicorn --bind unix:/tmp/你的域名或ip.socket blogproject.wsgi:application
配置文件不用改么
我用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;
}
}
把你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 这个路径径必须是你的静态文件所在路径。
我也是这样
收集静态文件
这是什么原因呀
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/ 目录下新建一个配置文件,小白求解呀- -
卡这好久了 。
1. 你必须设置静态文件路径,具体请看教程中 #部署前的项目配置 节的内容。
2. 就是新建配置文件,可以使用 vi 编辑器新建文件,至于 vi 编辑器的基本用法请自行百度。
博主大大,这个意思是地址没解析成功的意思吗,因为我在阿里云上只买了一个月的服务器,然后说要备案,但是备案好像要三个月才行,我输入公网地址,可以看到域名已经解析成功了,输入网址就提示需要备案
(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
exec ../bin/。。。。。。。。
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 网上查了一下 也没有什么合适的解决方案。。
已解决。。
ubuntu 版本太老了 ubuntu 版本太老了
linux学的不好,请问一个基础问题。 root 下部署代码不安全,可是先添加的用户又加入超级权限组。那和root的权限不是相同么? 为什么新添加的用户就比root安全了?
你好!请教一下博主,网站已经可以正常访问,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 的信息?
你在本地调试的时候,把 DEBUG 设置成 True,CSS 的问题就解决了。
你好!我跟着前面的步骤,到了现在这里,我在想可不可以直接就用前面代码,而不是再去建议个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。没有其他的解决方法
应该是你的 clone 出了问题。不要直接 clone 我的仓库,先 fork 到自己的 github,然后 clone。
您好!我按照您之前的教程,就是在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/
还有一个问题就是
(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;
{% 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 %}
1
...
4
5
6
7
8
...
11
{% endblock main %}
改完之后,访问域名就成了,一直跑源码了???
忘记说了,我的环境是centos 6.9,编译安装的tengine2.1.0
网站无法访问,未备案或未接入,什么问题?
没有备案。
我去备案,要备案服务号,但找的时候说是三个月以上才有备案服务号,可我只买了一个月,只是为了练习,
这就很无奈了
直接用公网ip访问也一样
一切部署完成后访问显示 502 Bad Gateway
按照有一位大神说的去/var/log/nginx下的error.log查看 错误记录为空...
请大神救救我
已经解决了..
你是怎么解决的 我之前出现一直出现nginx初始页面,改了一些后就502了
我是删除default后忘记启动gunicorn了- -
我用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; }}
请问你现在解决了吗 我还是有这个问题
博主,我现在都可以正常访问了,但我一旦把gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application结束掉,就不能访问了,就会显示502错误,难道我要一直开着自己电脑吗?我用的是阿里云的云服务器
解决了,感觉被自己蠢哭了
你怎么解决哒,可以分享一下嘛,我也是阿里云的服务器
请问如何解决的
放后台执行就好 了
请问放后台执行是如何做到的,麻烦了
用nohup命令
博主,折腾了好久按教程现在都成功了,后台也可以登录,但是没有样式,界面排版全部在左侧挤着,这是什么原因?
解决了,原来static路径打错了,教程很细,谢谢博主
运行 gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application 的时候。出现了No module named django.core.wsgi 这是什么意思啊,我用的博主的模板。
blogproject是你的项目名
是因为你没有在blogproject 文件夹下运行命令
一般来说, 在一个项目中 django 有一个和 项目名字一样的 app, blogproject.wsgi 的意思是 使用 blogproject 这个 app 下的 app 文件,而且 project 的 名字可以改为任何你想要的名字。
谢谢 up! 感觉学得很多。
一般来说, 在一个项目中 django 有一个和 项目名字一样的 app, blogproject.wsgi 的意思是 使用 blogproject 这个 app 下的 wsgi 文件(一种用于部署的文件, 我之前用 uwsgi 部署),而且 project 的 名字可以改为任何你想要的名字。
谢谢 up! 感觉学得很多。
运行sudo start gunicorn-demo.zmrenwu.com这条语句的时候显示sudo: start: command not found,望指教,谢谢
我摸索了一下午。。没用配置文件,直接在虚拟空间启动的命令后面gunicorn --bind unix:/tmp/www.echoljx.com.socket django-project.wsgi:application,加上一个“&”,就能在后台运行,就是gunicorn --bind unix:/tmp/www.echoljx.com.socket django-project.wsgi:application& 这样。
希望有人能指出更好的方法
你好,我也遇到了同样的问题,请问你找到更好的解决办法了吗?
首先 进入 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 的博客)
是 whereis start 哈
博主,在 配置 Nginx 中,怎么在服务器新建文件和写文件啊,完全不会啊?请指教
1.按 i 进入编辑
2 现在可以编辑页面
3.完成后按 esc
4 输入 :w 保存
5输入 :q 推出
sudo vi 文件名 写文件
sudo touch 文件名 新建文件
在阿里云服务器里面运行 pip install -r requirements.txt 后有的东西显示安装不了怎么办
你的requirments可能包含了一些你在博客需要的库意外,你自己其他项目安装的第三方包,而在阿里云里边pip install的时候 可能没有对应的版本之类的,这种情况下 你根据错误提示信息 修改requirments中对应的第三方包版本或者如果确认无关,直接删除即可
博主你好,我解析了域名之后可以ping通,然后启动nginx:sudo service nginx start。 但在浏览器输入域名的时候看不到welcome to nginx这个页面,而是无法访问此网站,请问可能是什么原因呢?
解决了 因为没有开放主机的80端口...
怎么开放主机80端口
qq 1521189886,我也遇到这个问题了,买的vps,没有权限开端口
我已经搞定了,加QQ 1521189886
请问一定要使用自己创建的账户进行ubuntu上的操作嘛,直接用root用户操作有什么坏处吗?
总结下 之前问题是 只能访问nginx页面,访问不到项目页面
解决方法: 请使用 ubuntu14.04版本 删除/etc/nginx/sites-avaible/的default文件 在 使用Gunicorn 这一步骤之前使用 sudo service nginx reload
你好 我删除sites-available的default之后 反而出现了502错误 请问你有遇到过吗 博主说的是删除enable的default 但我仍然不行
感谢,用ip访问成功了,等域名备案完成!
start 命令提示start: Unknown job是什么原因呢
你好啊
请问下你是怎么解决的?
同问,请问解决了么?
找到错误了,gunicorn-demo.zmrenwu.com脚本里面有错误
博主,你好,在你的文章指导下,我成功运行了项目,要是我想要跑多个Django项目要怎么做呢,我能不能用这个Nginx再搭建lamp环境呢?
博主你好,我按照你的方法成功将网站绑定了blog.keyboardman.tech这个域名,但是有点不懂如何把网站同时绑定在www.keyboardman.tech上,使得访问这两个网址都能找到这个django project.
输入sudo start 时显示Command not find请问这个怎么解决?
我是彻底卸载,然后重装解决的。。。
虽然试过还是不行...
我遇到了同样的问题 请问解决了吗?怎么解决的?谢谢
我也是我是ubuntu16请问你解决了吗
为什么我的主页面正常,后台admin可以登陆已创建的账户,但是点击登录后立刻返回“Server Error (500)”错误
你解决了吗,我现在也出了这个问题
我删了default文件,但是访问ip地址还是只能显示nginx的欢迎页面
重启服务器试试
请问下怎么删除default文件啊
rm default 如果权限不够 sudo rm default
请问你解决了吗?我按照一个评论提示的额外删除了availab的default文件 在nginx欢迎界面外出现了502错误
好的谢谢
请问一下,为什么我部署了后,运行gunicorn --bind unix:/tmp/blog.gxwar.tech.socket blogproject.wsgi:application这条命令时,总是显示没有安装mysqlclient或者MySQLdb。可是我在服务器上
可以用自带的wsgi的python manage.py runserver成功运行,说明依赖应该没有问题。
为什么这一节我部署完毕了~~ 访问域名 , 总是显示Nginx首页的内容 ,系统是centos7.3? 求指教~~
而且也重启过了,执行
gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application
这条命令也没有报错,启动成功的~~
好了,已解决~~
请问一下你是怎么解决的啊
请问一下你是怎么解决的呀?
请问是怎么解决的,我也是一直显示nginx页面
cat 观察一下 /etc/nginx/sites-available/default 和 /etc/nginx/sites-available/demo.zmrenwu.com 的端口
请问是怎么解决的?我也遇到了和你同样的问题
问题解决了,重新来一遍 最后在自动启动gunicorn之前重启nginx:sudo service nginx reload就正常显示网页了。不需要删除sites-enabled/default软链。
教程没问题!!!我用的python2,自动化部署的时候要把python3改成python2。
请问一下 怎么在服务器新建文件和写文件啊 完全没有头绪啊
用自带的 vi 编辑器,如何操作请网上找找相关教程,我就不做 linux 系统教学了。
你最后是怎么解决的呀,我删除了sites-enabled中的default也不行啊
遇到的坑,记录下,供来着参考:
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即可,下次就好了。
proxy_pass http://unix:/tmp/demo.zmrenwu.com.socket
请问这个改成什么样子?
请问怎么直接用ip访问部署的博客啊,我按你这个设置输入ip只显示nginx的欢迎界面,配置文件具体要怎么改呢
我用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连接超时?网络问题?
博主我想请教下您,我可以通过域名(没有www)访问到服务器上的项目,加上www就会跳转到nginx的欢迎页面去,这个应该怎么设置他的跳转,在阿里云解析上是有解析的呀
按照项目依赖的时候,我本地的依赖有很多,而才看你的依赖只有很少的几个,以下是我的依赖项目:
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
因为你用的不是原生的python3+django。而是用了一些python的IDE,比如pycharm或者anaconda等,所以一些不需要的依赖库也被包含进去了。
把那些不需要的库手动删除就行了。
为什么我的服务器在绑定域名后仍然访问不了,就算用公网IP也不能访问
已解决
请问如何解决的
博主你好,感谢教程的指点,有几个问题想请教下,第一:生成数据库那里 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 安装各个呢
看你用的 ubuntu,有没有先激活虚拟环境然后再运行上述命令?至于数据库创建问题:Access denied for user 'root'@'localhost,可能是你的数据库限制了 root 用户的访问。
谢谢指点 ,已搞定,数据库的原因,mysql配置密码和端口忘记改了,
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代理为什么错误
已经解决
你好?怎么解决的?我也出现了这个情况
你是不是看评论说把sites-enabld里面的default删掉了 。直接重新安装一个nginx就可以了 。
不需要删除掉这个默认配置的
博主你好,想请教一个问题,我之前在本机上没有使用虚拟环境,请问安装项目依赖那一步应该怎么做?
直接运行命令,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 的,不过一些命令请根据系统不用而做相应修改。
明白,谢谢!
没有这个目录etc/init/,是不是要新建一下,因为我是生产服务器,我没有自己试,想直接问楼主。
这里使用的 upstarts 做自启动脚本,你看看你的系统需要把脚本放在哪个文件。
你好,我的网站配置好了,也可以访问了,但是访问下级页面时提示 server error 500,请问是什么情况?
应该是html文件不存在或者名字没对应上
本地开发都可以,放服务器就不行了
你好,问题解决了,发现时我代码提交,更新部署没成功的原因。
我也遇到了这个情况,之前是成功了的,后来我提交更新了,然后访问博客页面就不行了(Server Error (500)),但是后台管理的页面还是可以正常访问的,现在就不知道哪里的代码出了问题…………
你好,你的问题解决了吗,我也是遇到了同样的问题了
您好,我这里什么都配置好了,网站也能访问,但是所有的静态文件都被403 Forbidden禁止请求了是怎么回事啊
这很大概率是 static 文件夹的访问权限问题了吧。具体搜一下吧,我对 linux 也不熟。
我也是差不多,我所有的静态文件都是类似这样404无法访问 "GET /static/blog/css/bootstrap.min.css HTTP/1.1" 404 107
你的问题解决了没?求指导……
请问楼主解决了吗 同样的问题
我也是一样的问题,还没解决
404是你自己的问题,静态文件目录之类的没弄好
统一回答,解决了,是权限问题,需要给nginx的配置文件上root权限
谢谢,我的问题解决了,应该跟楼下说的一样,删除default文件或者reboot重启服务器就好了
请问如何给文件加上root权限??
0.0
我用的服务器是ubuntu16.04,在启动nginx那步,输入命令后访问我的域名它显示的是apache2,不是nginx,不知道是不是出问题了,还是系统的问题。请指教!
我以前遇到过这个问题,ubuntu16.04 有些版本好像默认绑定了 apache,当时按照网上的方法也没把 apache 删掉,一气之下换成 14 了
那我也用14试试看,还有一个问题是终端总是显示说
"GET /static/blog/js/script.js HTTP/1.1" 404 98
而且其他的js文件导入都是正确的只有它不对,是文件用问题吗?我检查过base.html文件 和js文件夹应该都没问题啊??
之前的评论没有了,我重新写一个吧,在自动启动gunicorn的时候由于操作系统不一致,导致有一些不一样的地方,我用的是Ubuntu 16的系统,具体配置可以看我写的这篇记录,http://www.siar.me/post/9/
赞!Ubuntu 16的系统的朋友如遇到问题请参考这篇文章
博主你好, 我买了阿里云 , 但是,无法访问到我的项目, nginx监听80端口, 服务器也设置了安全组, 开放80端口, 就是无法访问,
具体是什么样子的呢?
刚买完服务器, 安装了nginx, 但是我还没有配置安全组,这样就是在浏览器里输入服务器的ip链接不上.
然后我查了好多说是安全组没有设置, 我设置了安全组,同时设置80端口对外开放, 可以访问到nginx的欢迎页面, 正常来说, 在服务器里, 通过 python manage.py runserver 0.0.0.0:8000这样是可以让外网通过ip访问到你的博客,但是还是不行.....现在不知道怎么办好了, 提了工单, 感觉他没有说道我想问的答案.
是的,你这可能是服务器的问题,看看 8000 端口被占用了么?或者没有开发?换成其它端口试一下。还有就是先关掉 nginx,runserver 看看能不能访问。
我今天配置的时候跟你出现了同样的问题,是这样的,你要设置安全组,阿里云是默认把外网隔离掉的,所以你不管怎么请求它,它都拒绝。
请问该怎么设置, 我设置为完 ,就是ssh无法链接
看阿里云安全组的文档。
非常感谢, 问题已经解决,
你这个添加安全组就OK了~~
在收集静态文件,执行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'
如果使用了虚拟环境,确保 django 正确安装到了虚拟环境且使用虚拟环境下的 python 运行 manage.py 文件。
我发现 requirements.txt中的所有module都没安装,pip install -r 之后好像都只是下载了 没安装 这是这么回事?辛苦的了博主大人
已经解决,是我生成的requirements.txt的问题 默认是unicode 改成UTF-8就好了
怎么改的?求助
你好,我想问是怎么改这个的
我找到这个问题的原因了,并不是代码的问题。而是uwsgi的问题。我把uwsgi直接kill了,用uwsgi --stop uwsgi.pid然后再启动不行,kill之后再启动就行了。
博主,执行gunicorn的自动启动脚本sudo start gunicorn-xxx(我自己的域名) ,总是linux反馈:sudo: start: command not found,是服务没注册么,我不太懂linux,还是没添加系统变量,反正不能用。
这可能是你的 linux 系统问题,查看一下 gunicorn 的文档看看在不同系统下的启动方式。
请问这个问题你解决了吗?我也遇到了一样的问题。
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 类然后注册就可以在后台看到了。
博主,centos7.3 系统 部署时会出现 ModuleNotFoundError: No module named 'blogproject.wsgi 这个错误,请问
gunicorn --bind unix:/tmp/demo.zmrenwu.com.socket blogproject.wsgi:application 这里的blogproject.wsgi:application是什么意思啊
即 blogproject 下的 wsgi.py 里的 application,你可以打开这个文件就可以看到了。所以要确保这个文件正确的路径设置,否则就会 ModuleNotFoundError: No module named 'blogproject.wsgi,即找不到这个模块。
你好,我遇到过这个问题,你要进入到你的项目目录中,再执行博主的命令就没有问题了。
服务器的域名 也要写成 demo.zmrenwu.com 这种形式?demo是啥
demo.zmrenwu.com 是我的域名,你需要替换成你与服务器 ip 绑定的域名。
请问你的问题解决了吗?
已解决,代码错误。。
请问你的是怎么解决的?我也碰到这样的问题了
请问你是怎么解决500错误的?
博主 我操作到“使用 Gunicorn”这一步后,访问域名还是nginx的页面,这是怎么回事呀
这个问题并非所有人遇到。请在评论中找找和你遇到同样问题的朋友,看看他们的解决方案是否对你有效。
看到置顶的问题和我的差不多,不过我的sites-enabled里面没有default文件。。。
你的系统不同,根据系统版本和nginx 版本查一下 default 文件所在的具体位置删除即可
解决了么,我也是这个问题,删除了default文件,还是这样
解决了么,我也是这样 ,头都大了
没有,云服务器重装后再操作一次还是一样
我一顿瞎搞 之后成功了
删除之后访问域名就变成502 Bad Gateway nginx/1.4.6 (Ubuntu),没删除default之前一直都是Nginx的欢迎访问的页面。求解
问题解决了,重新来一遍 最后在自动启动gunicorn之前重启nginx:sudo service nginx reload就正常显示网页了。不需要删除sites-enabled/default软链。
为什么我照你的做了之后还是不行,还是一直显示welcome to Nginx
备案等了好几天,今天终于成功了,谢谢博主!不需要删除default文件,重启实例就可以了哈哈!
正解来了。并不需要删除default文件,只需要重启下ubuntu系统就行了。不信你试试
还是不行。。。求解
请问博主我在学习搭配环境的时候,可以先不买域名,直接在浏览器输入公网ip可以吗?我运行了nginx之后,在浏览器输入公网ip是无法访问的。
另外,阿里云网站提供了网页的远程连接,请问这跟用xshell有什么不一样的吗
可以的,没有区别。只是相关设置要记得替换,和教程中会略有不同。
求需要替换哪些部分,非常感谢。小白一个
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
这是为什么啊。。其他步骤和博主一样
你的 requirements.txt 内容和我的一样么?仔细对比一下
博主,弄完之后出现Server Error (500)可能会是什么问题?前面welcome to nginx能显示,gunicorn也成功开启了,可就是界面显示不出来
好吧,是工程代码出问题了。感谢博主的教程!!!
忙活了好几天,终于配置好了,目前总结的经验如下:
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”的