DjangoBlog部署教程
本篇文章将会手把手教你如何部署DjangoBlog项目,首先介绍下我这里的基本环境,请大家仔细阅读此部分,下面的教程都会使用这些约定来介绍:
- 系统是
ubuntu 18.04 LTS
- 假设你的域名是
www.djangoblog.com
。 - python虚拟环境目录在
~/python/env
- djangoblog源码位置在
~/python/DjangoBlog
- 登入用户
server
- 编辑器使用vim,你可以使用你喜欢的编辑器。
安装ftp,把代码上传上去,路径就是~/python/DjangoBlog,注意连接阿里云的时候,使用ssh连接,端口22,
准备工作
升级系统
首先需要升级系统到最新版,终端下执行:
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 -y #安装pip和memcached sudo apt install supervisor -y sudo apt install nginx -y sudo apt-get install python-dev default-libmysqlclient-dev #安装mysqlclient依赖第一步 sudo apt install -y mysql-client 2. 基于python安装mysqlclient需要依次安装以下库: sudo apt-get install libmysqlclient-dev sudo apt install libssl-dev sudo apt install libcrypto++-dev sudo pip3 install 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 ‘#‘; CREATE DATABASE `djangoblog` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */; GRANT all ON djangoblog.* TO ‘djangoblog‘@‘localhost‘; FLUSH PRIVILEGES; exit #退出
同样,这里的#
密码也要改成你自己的密码。
修改djangoblog配置
修改DjangoBlog/settings.py
中的DATABASES
配置,如下所示,当然,你也可以将其中的配置写入你的.bashrc
中,这样就不需要改这个文件了,我这里只是介绍下如何修改:
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘: ‘djangoblog‘, ‘USER‘: ‘djangoblog‘, ‘PASSWORD‘: ‘#‘, ‘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 gunicorn_start.sh
执行:
./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
至此,全部完成。你可以通过你的浏览器访问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 中,让更多的人可以看到,谢谢大家。
本条目发布于 2019-08-05 。属于Python 分类, 被贴了 Django , python 标签。 作者是 admin 。