预计阅读时间:10 分钟
本篇文章将会手把手教你如何部署DjangoBlog项目,首先介绍下我这里的基本环境,请大家仔细阅读此部分,下面的教程都会使用这些约定来介绍:
- 系统是
ubuntu 18.04 LTS
- 假设你的域名是
www.djangoblog.com
。 - python虚拟环境目录在
~/python/env
- djangoblog源码位置在
~/python/djangoblog
- 登入用户
server
- 编辑器使用vim,你可以使用你喜欢的编辑器。
另外请注意,尽量不要使用root用户来部署,如果要使用root用户的话,需要使collectedstatic
目录所有用户都有读权限。
准备工作
升级系统
首先需要升级系统到最新版,终端下执行:
sudo apt update
sudo apt upgrade -y
待完成更新之后,建议重新启动下系统,再进行后面的操作。终端下执行:
sudo reboot
待系统启动后,可以开始安装依赖的mysql以及python环境了。
安装依赖
终端下执行:
sudo apt install mysql-server -y #安装mysql
sudo apt install python3-dev python3-pip python-pip memcached virtualenv -y #安装pip和memcached
sudo apt install supervisor -y
sudo apt install nginx -y
sudo apt-get install python-dev default-libmysqlclient-dev #安装mysqlclient依赖
接下来需要设置python的虚拟环境,终端下执行:
cd ~
mkdir -p python/env && cd python/env
virtualenv -p /usr/bin/python3 djangoblog
source djangoblog/bin/activate
在执行完上述命令之后,你的终端应该看起来是类似于下面的样子:
更多关于python的虚拟环境介绍请参考Python虚拟环境设置 这篇文章。
下面开始安装djangoblog运行所需要的依赖,终端下执行:
source ~/python/env/djangoblog/bin/activate
cd ~/python/DjangoBlog
pip install -Ur requirements.txt
基本配置及部署
配置mysql数据库
终端下执行:
sudo mysql_secure_installation
类似下图,需要输入的地方我都用红色箭头标注了出来,需要注意,root密码一定要牢记,后面会用到。
使用root用户登录:
mysql -uroot -p
如果无法登录,可以使用如下步骤,请注意,我这里的密码只是示例,请修改成你自己的密码.:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Q1W2E3R4T5#$%qwe';
FLUSH PRIVILEGES;
exit
如果提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
,则说明你的密码强度不够,需要提供更复杂的密码,如下所示:
修改mysql默认字符集,使用你喜欢的编辑器,如vim或者nano,打开
/etc/mysql/conf.d/mysql.cnf
,配置文件,注意,需要使用root权限,如vim:
sudo vim /etc/mysql/conf.d/mysql.cnf
删除该文件的[mysql]
行并贴入如下内容:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
退出并保存,重启mysql服务,终端下执行:
sudo /etc/init.d/mysql restart
接下来就可以登录mysql数据库并创建用户和数据了,终端下执行:
mysql -uroot -p #进入mysql终端
CREATE USER 'djangoblog'@'localhost' IDENTIFIED BY 'DjAnGoBlOg123!@#';
CREATE DATABASE `djangoblog` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
GRANT all ON djangoblog.* TO 'djangoblog'@'localhost';
FLUSH PRIVILEGES;
exit #退出
同样,这里的DjAnGoBlOg123!@#
密码也要改成你自己的密码。
修改djangoblog配置
修改djangoblog/settings.py
中的DATABASES
配置,如下所示,当然,你也可以将其中的配置写入你的.bashrc
中,这样就不需要改这个文件了,我这里只是介绍下如何修改:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangoblog',
'USER': 'djangoblog',
'PASSWORD': 'DjAnGoBlOg123!@#',
'HOST': 'localhost',
'PORT': 3306,
'OPTIONS': {'charset': 'utf8mb4'},
}
}
接下来开始执行数据库迁移,终端下执行:
./manage.py makemigrations
./manage.py migrate
./manage.py createsuperuser #创建超级用户
./manage.py collectstatic --no-input
./manage.py compress --force
下面可以尝试启动网站,终端下执行:
./manage.py runserver
看到如下所示,则说明启动成功了:
接下来你就可以使用浏览器打开
http://127.0.0.1:8000/
来查看了。你需要访问http://127.0.0.1:8000/admin/
在站点
中,将默认的example.com
修改成你自己的,如www.djangoblog.com
。
gunicorn 配置
安装,终端下执行:
source ~/python/env/djangoblog/bin/activate
pip install gunicorn
配置,终端下执行:
vim ~/python/gunicorn_start.sh
贴入如下内容:
#!/bin/bash
NAME="djangoblog"
DJANGODIR=/home/server/python/djangoblog #Django project directory
USER=server # the user to run as
GROUP=server # the group to run as
NUM_WORKERS=1 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=djangoblog.settings # which settings file should Django use
DJANGO_WSGI_MODULE=djangoblog.wsgi # WSGI module name
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/server/python/env/djangoblog/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/server/python/env/djangoblog/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--log-file=-
注意,将该文件中的server
修改成你自己的用户,如果是root
用户的话,也要将/home/server
修改为/root
。同时,将djangoblog/settings.py
中的DEBUG = True
修改为DEBUG = False
。
增加可执行权限:
chmod +x ~/python/gunicorn_start.sh
执行:
cd ..
./gunicorn_start.sh
如果看到类似下面的输出,则说明成功了。
然后使用
Ctrl+c
来终止。
nginx配置
终端下执行:
# 删除默认配置
sudo rm /etc/nginx/sites-enabled/default
sudo vim /etc/nginx/sites-enabled/djangoblog.com.conf
贴入如下内容:
server {
listen 80;
server_name www.djangoblog.com;
root /home/server/python/djangoblog/;
access_log /var/log/nginx/django_access.log;
error_log /var/log/nginx/django_error.log;
location /static/ {
alias /home/server/python/djangoblog/collectedstatic/;
expires max;
access_log off;
log_not_found off;
}
location /media {
# 静态文件配置
alias /home/server/python/djangoblog/uploads/;
expires max;
}
location ~ \.py$ {
return 403;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:8000;
break;
}
}
}
保存并退出。重启nginx:
sudo /etc/init.d/nginx restart
配置Supervisor
终端下执行:
sudo vim /etc/supervisor/conf.d/djangoblog.conf
贴入如下内容:
[program:djangoblog]
command = /home/server/python//gunicorn_start.sh
user = server
autostart=true
autorestart=true
redirect_stderr = true
stdout_logfile = /var/log/djangoblog.log
stderr_logfile=/var/log/djangoblog.err
同样,需要将server
修改成你自己等用户名.
保存成功后继续执行:
sudo supervisorctl update
sudo supervisorctl reload
sudo /etc/init.d/memcached restart && sudo /etc/init.d/nginx restart
django的部分配置
你需要配置settings.py
中的ALLOWED_HOSTS
,如果你想要使用https的话,还需要配置CSRF_TRUSTED_ORIGINS
,代码是在:settings.py
至此,全部完成。你可以通过你的浏览器访问http://www.djangoblog.com
了。
更多配置相关可以参考: https://github.com/liangliangyy/djangoblog/blob/master/docs/config.md。这里就不再赘述了。
更新代码
因为我会一直维护这个项目,为其添加新功能或者修复bug,所以后续如果我更新项目之后建议你也同步的更下下你的源码。更新方式建议你直接fork我的仓库,然后在我修改过之后,从我的仓库拉取修改合并入你的仓库,然后使用ftp或者直接使用git,来在你的线上环境更新源码。
下面列出两篇文章,介绍如何更新源码来供大家参考:
- https://jinlong.github.io/2015/10/12/syncing-a-fork/
- https://github.com/staticblog/wiki/wiki/保持fork之后的项目和上游同步
致大家
如果大家成功的使用本系统部署了自己的网站,请将自己的域名添加在 https://github.com/liangliangyy/djangoblog/issues/214 中,让更多的人可以看到,谢谢大家。
本文由 liangliangyy 原创,转载请注明出处。
博主在哪家公司高就呀
为什么不支持非admin账户添加文章啊
博主你好,非常感谢你分享源码,你这个模板就很简洁很清爽,我也稍加改造了下,后台也改成了simpleui的管理界面,感觉很不错哦
恭喜,搭建成功后记得在 https://github.com/liangliangyy/DjangoBlog/issues/214 加上你的网址哦。
好的,我现在是本地,下月应该会搭
请问安装依赖的时候,找不到django 3.0.5版本您知道是怎么回事吗,我看最新的只有2.2.12
尝试换下你的pip源
很棒 nginx这里写的有点简略 文章里好像没做转发 然后就是welcome to nginx
文章已更新。
from django.conf import settingsfrom django.conf import settingsfrom django.conf import settingsfrom django.conf import settingsfrom django.conf import settingsfrom django.conf import settingsfrom django.conf import settingsfrom django.conf import settingsfrom django.conf import settingsfrom django.