前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django + Gunicorn + Nginx 部署 Ubuntu 服务器

Django + Gunicorn + Nginx 部署 Ubuntu 服务器

作者头像
希希里之海
发布2018-08-02 15:14:55
2K0
发布2018-08-02 15:14:55
举报
文章被收录于专栏:weixuqin 的专栏weixuqin 的专栏

Django + Gunicorn + Nginx 部署服务器

获取腾讯云 root权限

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

代码语言:javascript
复制
sudo passwd root

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

代码语言:javascript
复制
sudo vim /etc/ssh/sshd_config 

修改 without-password 为 yes。

代码语言:javascript
复制
PermitRootLogin yes

重启 ssh 服务。

代码语言:javascript
复制
sudo service ssh restart

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

更新下系统

代码语言:javascript
复制
sudo apt-get update

sudo apt-get upgrade

安装必要的软件

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

代码语言:javascript
复制
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服务

代码语言:javascript
复制
sudo service nginx start

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

部署 Django 代码

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

代码语言:javascript
复制
mkdir -p /home/ubuntu/sites/weixuqin.cn

cd /home/ubuntu/sites/weixuqin.cn

git clone https://github.com/weixuqin/django_blog.git

创建虚拟环境并激活

代码语言:javascript
复制
virtualenv --python=python3 env

source env/bin/activate

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

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

代码语言:javascript
复制
cd django_blog

pip install -r requirements.txt

收集静态文件

代码语言:javascript
复制
pytohon manage.py collectstatic

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

代码语言:javascript
复制
sudo apt-get install mysql-server

安装完成后进入数据库。

代码语言:javascript
复制
mysql -u root -p

创建名为 blog 的数据库。

代码语言:javascript
复制
create database blog;

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

代码语言:javascript
复制
DEBUG = False

ALLOWED_HOSTS = ['*']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blog',
        'USER':'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '',
    }
}

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

代码语言:javascript
复制
python manage.py makemigrations

python manage.py  migrate

python manage.py createsuperuser

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

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

进入 MySQL,查看 MySQL 编码。

代码语言:javascript
复制
show variables like '%character%';

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

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

代码语言:javascript
复制
[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 打开文件。

代码语言:javascript
复制
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/ 。

代码语言:javascript
复制
sudo ln -s /etc/nginx/sites-available/django_blog /etc/nginx/sites-enabled/django_blog

使用 Gunicorn 管理进程

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

在虚拟环境下安装。

代码语言:javascript
复制
pip install gunicorn

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

代码语言:javascript
复制
gunicorn --bind unix:/tmp/weixuqin.cn.socket django_blog.wsgi:application

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

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

代码语言:javascript
复制
sudo rm default

sudo service nginx reload

创建 Gunicorn自启动脚本

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

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

代码语言:javascript
复制
sudo vim /etc/init/gunicorn-weixuqin.cn.conf
代码语言:javascript
复制
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

代码语言:javascript
复制
sudo start gunicorn-weixuqin.cn

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

代码语言:javascript
复制
sudo service nginx reload

sudo restart gunicorn-weixuqin.cn

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

(比如我的)

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django + Gunicorn + Nginx 部署服务器
    • 获取腾讯云 root权限
      • 更新下系统
        • 安装必要的软件
          • 启动 Nginx服务
            • 部署 Django 代码
              • 更改 MySQL 数据库默认编码格式
                • Nginx 部署
                  • 使用 Gunicorn 管理进程
                    • 创建 Gunicorn自启动脚本
                    相关产品与服务
                    云数据库 MySQL
                    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档