安装django 博客

环境

升级系统

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依赖

接下来需要设置python的虚拟环境,终端下执行:

cd ~
mkdir -p  python/env && cd python/env
sudo apt install virtualenv

virtualenv -p /usr/bin/python3 djangoblog
source djangoblog/bin/activate

下面开始安装djangoblog运行所需要的依赖,终端下执行:

source ~/python/env/djangoblog/bin/activate
cd ~/python/DjangoBlog
pip install -Ur requirements.txt

配置mysql数据库

sudo mysql_secure_installation
y
2

密码
密码

y
y
y
n

使用root用户登录:

mysql -uroot -p

如果无法登录,可以使用如下步骤,请注意,我这里的密码只是示例,请修改成你自己的密码.:

sudo mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'daxiahy';
FLUSH PRIVILEGES;
exit

说明你的密码强度不够,需要提供更复杂的密码,如下所示:

set global validate_password_policy=0;
set global validate_password_length=1;

修改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!@#密码也要改成你自己的密码。

mysql 远端访问

#需要root权限,配置文件是只读的
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
#往下翻,注释掉这一行,保存退出
# bind-address          = 127.0.0.1

# 然后进入mysql 授权用户
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH   PRIVILEGES;
exit

# 最后重启
sudo /etc/init.d/mysql restart

修改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 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了。