Skip to content

Commit b48c86b

Browse files
author
zmrenwu
committed
优化 README 中提及的相关内容
1. 优化 fake 脚本 2. 优化线上部署过程 3. 添加 requirements.txt 文件
1 parent 1ab325b commit b48c86b

File tree

7 files changed

+315
-136
lines changed

7 files changed

+315
-136
lines changed

README.md

+194-50
Original file line numberDiff line numberDiff line change
@@ -1,125 +1,253 @@
11

22

33
<p align="center">
4-
<img src="https://raw.githubusercontent.com/521xueweihan/img/master/hellogithub/logo/readme.gif"/>
4+
<img src="./cover.jpg"/>
55
<br><strong>HelloDjango-blog-tutorial</strong><br>
66
<strong>完全免费、开源的 HelloDjango 系列教程之博客开发</strong>。<br>
77
基于 django 2.2,带你从零开始一步步创建属于自己的博客网站。
88
</p>
99

10+
1011
<p align="center">
1112
<a href="https://raw.githubusercontent.com/521xueweihan/img/master/hellogithub/logo/weixin.png"><img src="https://img.shields.io/badge/Talk-%E5%BE%AE%E4%BF%A1%E7%BE%A4-brightgreen.svg?style=popout-square" alt="WeiXin"></a>
1213
<a href="https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial/stargazers"><img src="https://img.shields.io/github/stars/HelloGitHub-Team/HelloDjango-blog-tutorial.svg?style=popout-square" alt="GitHub stars"></a>
1314
<a href="https://weibo.com/hellogithub"><img src="https://img.shields.io/badge/%E6%96%B0%E6%B5%AA-Weibo-red.svg?style=popout-square" alt="Sina Weibo"></a>
1415
</p>
16+
**特别说明**:本项目不仅仅是教程用的演示项目!我们的目标是开发一个功能完善、测试充分、可用于生产环境的开源博客系统。和其他开源博客系统不同点在于,我们以教程的形式详细记录项目从 0 到 1 的开发过程。
1517

1618
## 分支说明
1719

18-
tutorial 分支为项目的主分支,每一篇教程的代码都和历史提交以及标签一一对应。
19-
20-
例如第一篇教程对应第一个 commit,对应标签为 step1,依次类推。
20+
master 分支为项目的主分支,每一步关键功能的开发都对应一篇详细的教程,并和历史提交以及标签一一对应。例如第一篇教程对应第一个 commit,对应标签为 step1,依次类推。
2121

2222
## 资源列表
2323

24-
- [在线演示](https://hellodjango-blog-tutorial-demo.zmrenwu.com/)
25-
- 首发 HelloGitHub 微信公众号,博客同步更新:[HelloDjango - Django博客教程(第二版)](https://zmrenwu.com/courses/hellodjango-blog-tutorial/)
26-
- 项目前端模板:[Blog templates](https://github.com/zmrenwu/django-blog-tutorial-templates)
24+
- [成品在线预览](https://hellodjango-blog-tutorial-demo.zmrenwu.com/)
25+
- 教程首发 HelloGitHub 微信公众号和 [追梦人物的博客](https://www.zmrenwu.com/),在线学习地址:[HelloDjango - Django博客教程(第二版)](https://zmrenwu.com/courses/hellodjango-blog-tutorial/)
26+
- 项目 [源码仓库](https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial)
27+
- 项目 [前端模板源码仓库](https://github.com/zmrenwu/django-blog-tutorial-templates)
2728

2829
## 本地运行
2930

30-
### Pipenv
31+
可以使用 Virtualenv、Pipenv、Docker 等在本地运行项目,每种方式都只需运行简单的几条命令就可以了。
3132

32-
1. **克隆项目到本地**
33+
> **注意:**
34+
>
35+
> 因为博客全文搜索功能依赖 Elasticsearch 服务,如果使用 Virtualenv 或者 Pipenv 启动项目而不想搭建 Elasticsearch 服务的话,请先设置环境变量 `ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no` 以关闭实时索引,否则无法创建博客文章。如果关闭实时索引,全文搜索功能将不可用。
36+
>
37+
> Windows 设置环境变量的方式:`set ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no`
38+
>
39+
> Linux 或者 macOS:`export ENABLE_HAYSTACK_REALTIME_SIGNAL_PROCESSOR=no`
40+
>
41+
> 使用 Docker 启动则无需设置,因为会自动启动一个包含 Elasticsearch 服务的 Docker 容器。
3342
34-
```
35-
git clone https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial.git
36-
```
37-
38-
2. **安装 Pipenv(已安装跳过)**
43+
无论采用何种方式,先克隆代码到本地:
3944

45+
```bash
46+
$ git clone https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial.git
47+
```
48+
49+
### Virtualenv
50+
51+
1. 创建虚拟环境并激活虚拟环境,具体方法可参考:[开始进入 django 开发之旅:使用虚拟环境](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/59/#%E4%BD%BF%E7%94%A8%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83)
52+
53+
2. 安装项目依赖
54+
55+
```bash
56+
$ cd HelloDjango-blog-tutorial
57+
$ pip install -r requirements.txt
4058
```
41-
pip install pipenv
42-
```
43-
44-
3. **安装项目依赖**
4559

60+
3. 迁移数据库
61+
62+
```bash
63+
$ python manage.py migrate
4664
```
47-
cd HelloDjango-blog-tutorial
48-
pipenv install --dev
65+
66+
4. 创建后台管理员账户
67+
68+
```bash
69+
$ python manage.py createsuperuser
4970
```
50-
51-
> 关于如何使用 Pipenv,参阅:[开始进入 django 开发之旅](http://zmrenwu.com/post/3/) 的 Pipenv 创建和管理虚拟环境部分。
5271

53-
4. **迁移数据库**
72+
具体请参阅 [创作后台开启,请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)
73+
74+
5. 运行开发服务器
5475

55-
在项目根目录运行如下命令迁移数据库:
76+
```bash
77+
$ python manage.py runserver
5678
```
57-
pipenv run python manage.py migrate
79+
80+
6. 浏览器访问 http://127.0.0.1:8000/admin,使用第 4 步创建的管理员账户登录后台发布文章,如何发布文章可参考:[创作后台开启,请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)
81+
82+
或者执行 fake 脚本批量生成测试数据:
83+
84+
```bash
85+
$ python -m scripts.fake
5886
```
5987

60-
5. **创建后台管理员账户**
88+
> 批量脚本会清除全部已有数据,包括第 4 步创建的后台管理员账户。脚本会再默认生成一个管理员账户,用户名和密码都是 admin。
89+
90+
9. 浏览器访问:http://127.0.0.1:8000,可进入到博客首页
91+
92+
### Pipenv
93+
94+
1. 安装 Pipenv(已安装可跳过)
95+
96+
```bash
97+
$ pip install pipenv
98+
```
99+
100+
2. 安装项目依赖
101+
102+
```bash
103+
$ cd HelloDjango-blog-tutorial
104+
$ pipenv install --dev
105+
```
106+
107+
关于如何使用 Pipenv,参阅:[开始进入 django 开发之旅](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/59/) 的 Pipenv 创建和管理虚拟环境部分。
108+
109+
3. 迁移数据库
110+
111+
在项目根目录运行如下命令迁移数据库:
112+
```bash
113+
$ pipenv run python manage.py migrate
114+
```
115+
116+
4. 创建后台管理员账户
61117

62118
在项目根目录运行如下命令创建后台管理员账户
63119

64-
```
65-
pipenv run python manage.py createsuperuser
120+
```bash
121+
$ pipenv run python manage.py createsuperuser
66122
```
67123

68124
具体请参阅 [创作后台开启,请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。
69125

70-
6. **运行开发服务器**
126+
5. 运行开发服务器
71127

72128
在项目根目录运行如下命令开启开发服务器:
73129

74-
```
75-
pipenv run python manage.py runserver
130+
```bash
131+
$ pipenv run python manage.py runserver
76132
```
77133

78-
在浏览器访问:http://127.0.0.1:8000
134+
6. 浏览器访问 http://127.0.0.1:8000/admin,使用第 4 步创建的管理员账户登录后台发布文章,如何发布文章可参考:[创作后台开启,请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。
79135

80-
7. **进入后台发布文章**
136+
或者执行 fake 脚本批量生成测试数据:
81137

82-
在浏览器访问:http://127.0.0.1:8000/admin
138+
```bash
139+
$ pipenv run python -m scripts.fake
140+
```
83141

84-
使用第 5 步创建的后台管理员账户登录后台
142+
> 批量脚本会清除全部已有数据,包括第 4 步创建的后台管理员账户。脚本会再默认生成一个管理员账户,用户名和密码都是 admin
85143

144+
7. 在浏览器访问:http://127.0.0.1:8000/,可进入到博客首页。
86145

87146
### Docker
88147

89-
1. **安装 Docker 和 Docker Compose**
148+
1. 安装 Docker 和 Docker Compose
149+
150+
3. 构建和启动容器
90151

91-
2. **克隆项目到本地**
152+
```bash
153+
$ docker-compose -f local.yml build
154+
$ docker-compose -f local.yml up
155+
```
156+
157+
4. 创建后台管理员账户
92158

159+
```bash
160+
$ docker exec -it hellodjango_blog_tutorial_local python manage.py createsuperuser
93161
```
94-
git clone https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial.git
162+
163+
其中 hellodjango_blog_tutorial_local 为项目预定义容器名。
164+
165+
4. 浏览器访问 http://127.0.0.1:8000/admin,使用第 3 步创建的管理员账户登录后台发布文章,如何发布文章可参考:[创作后台开启,请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)。
166+
167+
或者执行 fake 脚本批量生成测试数据:
168+
169+
```bash
170+
$ docker exec -it hellodjango_blog_tutorial_local python -m scripts.fake
171+
```
172+
173+
> 批量脚本会清除全部已有数据,包括第 3 步创建的后台管理员账户。脚本会再默认生成一个管理员账户,用户名和密码都是 admin。
174+
175+
5. 为 fake 脚本生成的博客文章创建索引,这样就可以使用 Elasticsearch 服务搜索文章
176+
177+
```bash
178+
$ docker exec -it hellodjango_blog_tutorial_local python manage.py rebuild_index
95179
```
96180

97-
3. **构建镜像和启动容器**
181+
> 通过 admin 后台添加的文章会自动创建索引。
182+
183+
6. 在浏览器访问:http://127.0.0.1:8000/,可进入到博客首页。
184+
185+
### 线上部署
186+
187+
线上部署的详细文档请参考下方教程目录索引中的 **部署篇** 部分,如果不想了解细节或已了解细节,使用 Docker 仅需以下几个简单步骤就可以上线运行:
188+
189+
> **小贴士:**
190+
>
191+
> 国内服务器请设置好镜像加速,否则 Docker 构建容器的过程会非常缓慢!具体可参考 **部署篇** Docker 部署 django 中线上部署部分的内容。
98192

193+
1. 克隆代码到服务器
194+
195+
```bash
196+
$ git clone https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial.git
99197
```
100-
docker-compose -f local.yml build
101-
docker-compose -f local.yml up
198+
199+
2. 创建环境变量文件用于存放项目敏感信息
200+
201+
```bash
202+
$ cd HelloDjango-blog-tutorial
203+
$ mkdir .envs
204+
$ touch .envs/.production
102205
```
103206

104-
4. **创建后台管理员账户**
207+
3. 在 .production 文件写入下面的内容并保存
105208

106209
```
107-
docker exec -it hellodjango_blog_tutorial_local python manage.py createsuperuser
210+
# django 用于签名和加密等功能的密钥,泄露会严重降低网站的安全性
211+
# 推荐使用这个工具生成:https://miniwebtool.com/django-secret-key-generator/
212+
DJANGO_SECRET_KEY=0p72%e@r3qr$bq%%&bxj#_bem+na2t^0(#((fom6eewrg)gyb^
213+
214+
# 设置 django 启动时加载的配置文件
215+
DJANGO_SETTINGS_MODULE=blogproject.settings.production
216+
```
217+
218+
4. 修改 Nginx 配置:复制 compose/nginx/hellodjango-blog-tutorial.conf-tmpl 到同一目录,并重命名为 hellodjango-blog-tutorial.conf,修改第 6 行的 server_name 为自己的域名(如果没有域名就改为服务器的公网 ip 地址)
219+
220+
5. 启动容器
221+
222+
```bash
223+
$ docker-compose -f production.yml up --build -d
108224
```
109225

110-
其中 hellodjango_blog_tutorial_local 为项目预定义容器名
226+
6. 执行 docker ps 检查容器启动状况,看到如下的 3 个容器说明启动成功:
111227

112-
5. 进入后台发布文章
228+
- hellodjango_blog_tutorial_nginx
229+
- hellodjango_blog_tutorial_elasticsearch
230+
- hellodjango_blog_tutorial
113231

114-
在浏览器访问:http://127.0.0.1:8000/admin
232+
7. 配置 HTTPS 证书(没有配置域名无法配置,只能通过服务器 ip 以 HTTP 协议访问)
115233

116-
使用第 3 步创建的后台管理员账户登录
234+
```bash
235+
$ docker exec -it hellodjango_blog_tutorial_nginx certbot --nginx -n --agree-tos --redirect --email [email protected] -d hellodjango-blog-tutorial-demo.zmrenwu.com
236+
```
117237

118-
具体请参阅 [创作后台开启,请开始你的表演](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/65/)
238+
解释一下各参数的含义:
239+
240+
- --nginx,使用 Nginx 插件
241+
- -n 非交互式,否则会弹出询问框
242+
- --redirect,自动配置 Nginx,将所有 http 请求都重定向到 https
243+
- --email [email protected],替换为自己的 email,用于接收通知
244+
- -d 域名列表,开启 https 的域名,替换为自己的域名,多个域名用逗号分隔
245+
246+
8. 浏览器访问域名或者服务器 ip 即可进入博客首页
119247

120248
## 教程目录索引
121249

122-
**基础**
250+
**基础篇**
123251

124252
1. [开始进入 django 开发之旅](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/59/)
125253
2. ["空空如也"的博客应用](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/60/)
@@ -136,10 +264,16 @@ tutorial 分支为项目的主分支,每一篇教程的代码都和历史提
136264
13. [分类、归档和标签页](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/71/)
137265
14. [交流的桥梁:评论功能](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/72/)
138266
15. [优化博客功能细节,提升使用体验](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/73/)
267+
268+
**部署篇**
269+
139270
16. [Nginx+Gunicorn+Supervisor 部署 Django 博客应用](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/74/)
140271
17. [使用 Fabric 自动化部署](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/75/)
141272
18. [使用 Certbot 向 Let's Encrypt 免费申请 HTTPS 证书](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/76/)
142273
19. [使用 Docker 让部署 Django 项目更加轻松](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/77/)
274+
275+
**进阶篇**
276+
143277
20. [开发博客文章阅读量统计功能](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/78/)
144278
21. [Django 官方推荐的姿势:类视图](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/79/)
145279
22. [在脚本中使用 ORM:Faker 批量生成测试数据](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/80/)
@@ -149,6 +283,9 @@ tutorial 分支为项目的主分支,每一篇教程的代码都和历史提
149283
26. [开启 Django 博客的 RSS 功能](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/84/)
150284
27. [Django 博客实现简单的全文搜索](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/85/)
151285
28. [Django Haystack 全文检索与关键词高亮](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/86/)
286+
287+
**测试篇**
288+
152289
29. [单元测试:测试 blog 应用](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/87/)
153290
30. [单元测试:测试评论应用](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/88/)
154291
31. [Coverage.py 统计测试覆盖率](https://www.zmrenwu.com/courses/hellodjango-blog-tutorial/materials/89/)
@@ -160,5 +297,12 @@ tutorial 分支为项目的主分支,每一篇教程的代码都和历史提
160297
</p>
161298

162299

163-
## 声明
300+
## QQ 群
301+
302+
加入 QQ 群和更多的 django 开发者进行交流:
303+
304+
Django学习小组主群:696899473
305+
306+
## 版权声明
307+
164308
<img alt="知识共享许可协议" style="border-width: 0" src="https://licensebuttons.net/l/by-nc-nd/4.0/88x31.png"></a><br>本作品采用<a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh">署名-非商业性使用-禁止演绎 4.0 国际 </a>进行许可。

0 commit comments

Comments
 (0)