本篇文章将会教你如何部署DjangoBlog项目。
请仔细阅读,并和自己的环境做对比。
{% note info %}
DjangoBlog 开源项目下载:
https://gitee.com/lylinux/DjangoBlog
{% endnote %}
环境
* 系统是Debian 10
* 本地使用:使用虚拟机,使用的IP 地址。
* python虚拟环境目录在 ~/python/env
* djangoblog源码位置在 ~/python/DjangoBlog
* 系统的用户是Server
* 编辑器使用vim,你可以使用你喜欢的编辑器。
{% note info %}
可以使用VmWare虚拟机进行实验
{% endnote %}
准备工作
升级系统
首先升级系统到最新版,以Root的账户下的终端下执行:
apt-get update
apt-get upgrade
系统更新之后,重启下系统,终端下执行:
reboot
重启之后,可以开始安装Myslq及Python环境。
安装Mysql的准备
要将 MySQL APT 存储库添加到系统,请转到存储库下载页面并使用以下 wget 命令下载最新的发行包:
终端下执行:
wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb
下载完成后,以root 的用户执行安装发行:
apt-get insatll install ./mysql-apt-config_0.8.13-1_all.deb -y
您将看到配置菜单,您可以从中选择要安装的 MySQL 版本。
本篇使用的MySQL 8.0
要安装 MySQL 8.0 版。按 Tab 并选择 OK 最后按下 Enter。
安装MySQL
通过运行以下命令更新包列表并安装 MySQL 服务器包:
apt-get update
apt-get install mysql-server -y
安装程序将要求您设置 MySQL root 密码。记录设置的密码,后面会用的到。
安装完成后, MySQL 服务将自动启动,您可以通过键入以下内容来验证它:
systemctl status mysql
输出的结果:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-08-15 11:32:25 CST; 10h ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 391 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 447 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 2934)
Memory: 462.4M
CGroup: /system.slice/mysql.service
└─447 /usr/sbin/mysqld
Aug 15 11:31:58 debian10-ming systemd[1]: Starting MySQL Community Server...
Aug 15 11:32:25 debian10-ming systemd[1]: Started MySQL Community Server.
安装Django的环境
终端下运行:
apt-get install python3-dev python3-pip python-pip memcached -y
apt-get install supervisor -y
apt-get install nginx -y
apt-get install python-dev default-libmysqlclient-dev
接下来需要设置python的虚拟环境
设置Python的虚拟环境,配置如下:
安装虚拟环境
pip install virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple
{% note info %}
让PIP源使用国内镜像,提升下载速度和安装成功率
临时使用:
可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple
{% endnote %}
创建放虚拟环境的文件夹,终端下执行:
mkdir -p python/env && cd python/env
终端下执行
nano ~/.bashrc
安装完成后,在~/.bashrc写入以下内容
export WORKON_HOME=/home/server/python/env
source /usr/local/bin/virtualenvwrapper.sh
{% note info %}
第一行:virtualenvwrapper存放虚拟环境目录
第二行:virtrualenvwrapper会安装到python的bin目录下,所以该路径是python安装目录下bin/virtualenvwrapper.sh
{% endnote %}
读入配置文件,立即生效,终端下执行
source ~/.bashrc
virtualenv -p /usr/bin/python3 djangoblog
workon djangoblog
这样就完成了Python虚拟环境的设置。
下面开始安装djangoblog运行所需要的依赖,终端下执行:
cd ~/python/DjangoBlog
pip install -Ur requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
基本配置及部署
配置mysql数据库
使用root用户登录,这时候就是安装mysql 的时候配置的密码。终端下执行:
mysql -uroot -p
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/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
gunicorn 配置
安装,终端下执行:
source /home/server/python/env/djangoblog/bin/activate
pip install gunicorn -i https://pypi.tuna.tsinghua.edu.cn/simple
配置,终端下执行:
nano /home/server/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=-
{% note info %}
注意,将该文件中的server修改成你自己的用户
{% endnote %}
增加可执行权限:
chmod 755 gunicorn_start.sh
./gunicorn_start.sh
nginx配置
终端下执行:
# 删除默认配置
rm /etc/nginx/sites-enabled/default
nano /etc/nginx/sites-enabled/djangoblog.com.conf
贴入如下内容:
server {
listen 80;
server_name 192.168.1.100;
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;
}
}
}
{% note info %}
server_name 192.168.1.100;
这是你自己的服务器的IP地址。
{% endnote %}
保存并退出。重启nginx:
/etc/init.d/nginx restart
配置Supervisor
终端下执行:
nano /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修改成你自己等用户名. 保存成功后继续执行:
supervisorctl update
supervisorctl reload
/etc/init.d/memcached restart && /etc/init.d/nginx restart
至此,全部完成。你可以通过你的浏览器访问你的服务器IP地址