• Django + Gunicorn + Nginx 部署 Ubuntu 服务器


    Django + Gunicorn + Nginx 部署服务器

    获取腾讯云 root权限

    本人的服务器使用的是腾讯云,腾讯云默认是没有开放 root 用户的,我们来创建 root 用户。
    创建 root 账号并设置密码。

    sudo passwd root
    

    设置 root 账户登录需要密码。

    sudo vim /etc/ssh/sshd_config 
    

    修改 without-password 为 yes。

    PermitRootLogin yes
    

    重启 ssh 服务。

    sudo service ssh restart
    

    关闭窗口,重新使用 root 账号登录。
    PS: 平时的话我们使用用户账号登录就行了,上面只是为了获取 root 权限。

    更新下系统

    sudo apt-get update
    
    sudo apt-get upgrade
    

    安装必要的软件

    这里我们需要用到的软件有: NginxPytohn3Gitpipvirtualenv

    sudo apt-get install nginx
    
    sudo apt-get install python3
    
    sudo apt-get install python3-pip
    
    sudo apt-get install git
    
    sudo pip3 install virtualenv
    

    启动 Nginx服务

    sudo service nginx start
    

    在浏览器中输入域名,如果能成功看到 Nginx 欢迎页面,便说明我们的Nginx 服务是成功启动的。

    部署 Django 代码

    我们将从本地上传到 GitHub 的代码下载到我们的服务器中(这里以我的博客代码为例)。
    我们还要设置 Django 代码的存放路径,我的路径是在 /home/ubuntu/sites/weixuqin.cn 下。

    mkdir -p /home/ubuntu/sites/weixuqin.cn
    
    cd /home/ubuntu/sites/weixuqin.cn
    
    git clone https://github.com/weixuqin/django_blog.git
    

    创建虚拟环境并激活

    virtualenv --python=python3 env
    
    source env/bin/activate
    

    接下来我们便可以在虚拟环境中通过 pip 安装需要的依赖库了。

    移动到下载好的源码目录:django_blog,安装需要的依赖库。

    cd django_blog
    
    pip install -r requirements.txt
    

    收集静态文件

    python manage.py collectstatic
    

    安装 mysql
    由于我的博客使用的是 MySQL 数据库,Linux 并没有带有 MySQL,所以需要我们另外安装。
    使用 apt-get 安装并设置密码。

    sudo apt-get install mysql-server
    

    安装完成后进入数据库。

    mysql -u root -p
    

    创建名为 blog 的数据库。

    create database blog;
    

    在 settings.py 中设置 debug 为 False,同时设置可用域名,并修改数据库密码,

    DEBUG = False
    
    ALLOWED_HOSTS = ['*']
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'blog',
            'USER':'root',
            'PASSWORD': '',
            'HOST': 'localhost',
            'PORT': '',
        }
    }
    

    生成数据库文件和创建一个Django 超级用户。

    python manage.py makemigrations
    
    python manage.py  migrate
    
    python manage.py createsuperuser
    

    更改 MySQL 数据库默认编码格式

    liunx 上 MySQL 数据库的默认编码方式不是 utf8,一定要自己更改后使用,刚开始自己使用默认方式创建数据库,结果到了管理后台写文章的时候发现文章全部乱码(如下图),所以一定要注意数据库编码格式。

    进入 MySQL,查看 MySQL 编码。

    show variables like '%character%';
    

    可以看到数据库默认编码为 latin1

    需要修改MySQL 配置文件: /etc/mysql/my.cnf
    打开 my.cnf ,在各项中添加如下语句。

    [client]
    default-character-set=utf8
    [mysqld]
    character-set-server=utf8
    [mysql]
    default-character-set=utf8
    

    保存并退出。

    再次执行 show variables like '%character%'; ,便可以看到编码已经修改了。

    删除原来创建的数据库,并重新创建一个同名数据库,执行 python manage.py migrate , 再次打开后台编写文章,我们的文章便不再显示乱码了。

    Nginx 部署

    在服务器 /etc/nginx/sites-available/ 目录下新建一个配置文件(这里以我的为例)。

    sudo vim django_blog 打开文件。

    server {
        charset utf-8;
        listen 80;
        server_name weixuqin.cn;
    
        location /media  {
            alias /home/ubuntu/sites/weixuqin.cn/django_blog/uploads;
        }
    
        location /static {
            alias /home/ubuntu/sites/weixuqin.cn/django_blog/staticfiles; 
        }
    
        location / {
            proxy_set_header Host $host;
            proxy_pass http://unix:/tmp/weixuqin.cn.socket;
        }
    }
    

    设置监听端口,指定媒体文件和静态文件存放地址等。.socket 文件会自动生成,我们可以不用去管这个文件。

    创建一个符号链接,将上述配置文件放到启用的网站列表中区。被启用网站的目录在 /etc/nginx/sites-enabled/ 。

    sudo ln -s /etc/nginx/sites-available/django_blog /etc/nginx/sites-enabled/django_blog
    

    使用 Gunicorn 管理进程

    我们使用 gunicorn 来管理多个进程。

    在虚拟环境下安装。

    pip install gunicorn
    

    移动到 django 项目中,用 Gunicorn 启动服务器进程。

    gunicorn --bind unix:/tmp/weixuqin.cn.socket django_blog.wsgi:application
    

    在浏览器中输入域名,便能看到访问成功了。

    PS: 如果输入域名后还是出现 Nginx 的欢迎界面,可能是 /etc/nginx/site-enabled/ 的默认文件 default覆盖了我们自定义的配置文件,将 default 删除即可,并重新启动 Nginx。

    sudo rm default
    
    sudo service nginx reload
    

    创建 Gunicorn自启动脚本

    如果手动启动 Gunicorn,一旦服务器重启后我们便需要再次执行启动命令,未免太过麻烦,我们创建脚本来实现 Gunicorn 的自动启动。

    在 /etc/init/ 下新建一个 .conf 文件。

    sudo vim /etc/init/gunicorn-weixuqin.cn.conf
    
    start on net-device-up
    stop on shutdown
    
    respawn
    
    setuid ubuntu
    chdir /home/ubuntu/sites/weixuqin.cn/django_blog
    
    exec ../env/bin/gunicorn --bind unix:/tmp/weixuqin.cn.socket django_blog.wsgi:application
    
    • start on net-device-up 只在服务器联网时启动 Gunicorn。
    • 进程崩溃后,respawn 自动重启 Gunicorn。
    • setuid 以 ubuntu 用户的身份运行 Gunicorn 进程。
    • chdir 指定 Gunicorn 运行目录(项目目录)。
    • exec 开启服务器进程。

    启动 gunicor

    sudo start gunicorn-weixuqin.cn
    

    如果以后更新了代码,只需重启下 Nginx 和 Gunicorn 就行了。

    sudo service nginx reload
    
    sudo restart gunicorn-weixuqin.cn
    

    到这里,如果一路顺利的话,打开浏览器输入你的域名,便能看到正确部署后的 Django 项目生成后的页面了。

    (比如我的)

    PS: 为啥数据库类型不支持 emoji 表情符号的,我明明在 Markdown 写了好多好玩的表情符号(╯-_-)╯~╩╩

    欢迎大家访问我的博客 weixuqin.cn
  • 相关阅读:
    solr6.5搭建以及使用经验
    Intellij IDEA svn的使用记录
    初次从eclipse转到intellij idea上的一些经验
    Linux一键安装PHP/JAVA环境OneinStack
    CentOS下yum安装mysql,jdk以及tomcat
    centos yum换阿里云源
    ehcache配置:使用Spring+SpringMVC+Mybatis或者有shiro
    微博短链接的生成算法(Java版本)
    手把手教你使用Git
    工作中有关分布式缓存的使用和需要注意的问题梳理
  • 原文地址:https://www.cnblogs.com/weixuqin/p/9385449.html
Copyright © 2020-2023  润新知