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

Django + Gunicorn + Nginx 部署 Ubuntu 服务器的更多相关文章

  1. Django + Gunicorn + Nginx 部署之路

    前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...

  2. 初次部署django+gunicorn+nginx

    初次部署django+gunicorn+nginx  博客详细地址  https://www.cnblogs.com/nanrou/p/7026802.html 写在前面,这只是我所遇到的情况,如果有 ...

  3. 11: Django + gunicorn + Nginx 的生产环境部署

    1.1 gunicorn介绍   1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...

  4. django+uwsgi+nginx部署(非常详细)

    django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...

  5. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

  6. virtualvenv+django+uWSGI+nginx 部署

    原创博文 转载请注明出处! 1. virtualvenv 2. django 3. uWSGI 4. nginx 5. 踩坑记录 1. virtualvenv virtualvenv install ...

  7. 解决django配合nginx部署后admin样式丢失

    解决django配合nginx部署后admin样式丢失 1.  在项目的settings.py文件里添加以下内容: STATIC_URL = '/static/' STATICFILES_DIRS = ...

  8. Django+uWSGI+Nginx 部署网站

    Django 1.11设置 保证Django在本地调试没有问题: 当然这是前提^_^ 收集静态文件至指定文件夹 Django静态文件设置具体参考:https://docs.djangoproject. ...

  9. nginx+uwsgi+django+virtualenv+supervisor部署web服务器

    wsgi 全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则 ...

随机推荐

  1. 网站漏洞扫描并自动化工具-XAttacker

    注:该脚本根据网站的cms类型来扫描,所以推荐用来扫外国的站 运行脚本 ┌─[root@sch01ar]─[/sch01ar/XAttacker] └──╼ #perl XAttacker.pl 询问 ...

  2. ll | wc -l的陷阱

    在平时我们可能经常使用ls和wc命令来统计某个文件夹下指定类型文件的个数.今天在使用的时候发现ls和ll出来的结果不一样. dwapp@pttest1:/home/dwapp/joe.wangh/te ...

  3. 如何发布可用于azure的镜像文件

    摘要:本篇文章讲述如何将蝉知,禅道和然之发布azure的镜像. azure是微软提供的云服务平台.并且针对中国用户专门开通了www.windowsazure.cn站点.同时还成了微软开放中国公司,推出 ...

  4. temp3

  5. Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

    转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...

  6. PHP PDO SQLSERVER

    $bbs = new PDO("odbc:MSSQLServer",   $username_bbs,    $password_bbs $bbs = new PDO('); $s ...

  7. ubuntu安装Docky 3.0

    添加PPA并在命令行安装,执行以下命令: sudo add-apt-repository ppa:ricotz/docky sudo apt-get update sudo apt-get insta ...

  8. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial—5.4 绘制数据图

    5.4 绘制数据图 参考视频: 5 - 4 - Plotting Data (10 min) 5.4.1 绘制曲线 1.画一个sin曲线 >> t = [:0.01:0.98]; > ...

  9. Vmware中的centos虚拟机克隆之后没有eth0

    克隆虚拟机之后,CentOS没有eth0的解决办法 我们常常需要从一台已经安装完成的虚拟机系统克隆出来一个新系统(克隆时候必须要改变网卡物理地址,这一点无需多说),但是新系统启动之后,会发现系统网络工 ...

  10. 01 java断言assert初步使用:断言开启、断言使用

    参考文件:http://blog.sina.com.cn/s/blog_59c9412d0100fd55.html 1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. ...