• 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        
    Successfully installed mysqlclient-1.4.6

    接下来需要设置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]行并贴入如下内容:

    1 [mysqld]
    2 character-set-server=utf8mb4
    3 collation-server=utf8mb4_unicode_ci
    4 
    5 [client]
    6 default-character-set = utf8mb4
    7 
    8 [mysql]
    9 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
    

    贴入如下内容:

     1 #!/bin/bash
     2 
     3 NAME="DjangoBlog"
     4 DJANGODIR=/home/server/python/DjangoBlog #Django project directory
     5 USER=server # the user to run as
     6 GROUP=server # the group to run as
     7 NUM_WORKERS=1 # how many worker processes should Gunicorn spawn
     8 DJANGO_SETTINGS_MODULE=DjangoBlog.settings # which settings file should Django use
     9 DJANGO_WSGI_MODULE=DjangoBlog.wsgi # WSGI module name
    10 
    11 echo "Starting $NAME as `whoami`"
    12 
    13 # Activate the virtual environment
    14 cd $DJANGODIR
    15 source /home/server/python/env/djangoblog/bin/activate
    16 export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
    17 export PYTHONPATH=$DJANGODIR:$PYTHONPATH
    18 
    19 # Create the run directory if it doesn't exist
    20 RUNDIR=$(dirname $SOCKFILE)
    21 test -d $RUNDIR || mkdir -p $RUNDIR
    22 
    23 # Start your Django Unicorn
    24 # Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
    25 exec /home/server/python/env/djangoblog/bin/gunicorn  ${DJANGO_WSGI_MODULE}:application 
    26 --name $NAME 
    27 --workers $NUM_WORKERS 
    28 --user=$USER --group=$GROUP 
    29 --log-level=debug 
    30 --log-file=-

    注意,将该文件中的server修改成你自己的用户,如果是root用户的话,也要将/home/server修改为/root。同时,将DjangoBlog/settings.py中的DEBUG = True修改为DEBUG = False。 增加可执行权限:  (文件路径在 cd ~/python)

    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

    贴入如下内容:

     1 server {
     2 
     3     listen 80;
     4     server_name www.djangoblog.com;
     5     root /home/server/python/DjangoBlog/;
     6 
     7     access_log /var/log/nginx/django_access.log;
     8     error_log /var/log/nginx/django_error.log;
     9 
    10     location /static/ {
    11         alias /home/server/python//DjangoBlog/collectedstatic/;
    12         expires max;
    13         access_log        off;
    14         log_not_found     off;
    15     }
    16     location /media {
    17         # 静态文件配置
    18         alias /home/server/python/DjangoBlog/uploads/;
    19         expires max;
    20     }
    21     location ~ .py$ {
    22         return 403;
    23     }
    24 
    25     location / {
    26         proxy_set_header X-Real-IP $remote_addr;
    27         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    28         proxy_set_header Host $http_host;
    29         proxy_set_header X-NginX-Proxy true;
    30         proxy_redirect off;
    31         if (!-f $request_filename) {
    32             proxy_pass http://127.0.0.1:8000;
    33             break;
    34         }
    35     }
    36 
    37 }

    注意,将该文件中的server修改成你自己的用户,如果是root用户的话,也要将/home/server修改为/root

    保存并退出。重启nginx:

    sudo /etc/init.d/nginx restart

    配置Supervisor

    终端下执行:

    sudo vim /etc/supervisor/conf.d/djangoblog.conf

    贴入如下内容:

    1 [program:djangoblog]
    2 command = /home/server/python//gunicorn_start.sh
    3 user = server
    4 autostart=true
    5 autorestart=true
    6 
    7 redirect_stderr = true
    8 stdout_logfile = /var/log/djangoblog.log
    9 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。这里就不再赘述了。

  • 相关阅读:
    在不是modelAttribute的情况下,如何保存页面输入值的方法(多行遍历)
    关于Hibernate中No row with the given identifier exists问题的原因及解决
    Oracle中exit,return,continue
    如何将表的行数赋值给变量(MySQL)
    论MySQL中如何代替Oracle中select into new_table from old_table
    有关linux下redis overcommit_memory的问题,有需要的朋友可以参考下。
    CentOS 6.6 中 mysql_5.6 主从数据库配置
    CentOS 6.6 中jdk1.6的安装和配置方法
    解决 Amoeba连接mysql出错 解决方案
    Linux系统memcached安装
  • 原文地址:https://www.cnblogs.com/andy0816/p/12334227.html
Copyright © 2020-2023  润新知