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
安装必要的软件
这里我们需要用到的软件有: Nginx、Pytohn3、Git、pip 和 virtualenv。
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 服务器的更多相关文章
- Django + Gunicorn + Nginx 部署之路
前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...
- 初次部署django+gunicorn+nginx
初次部署django+gunicorn+nginx 博客详细地址 https://www.cnblogs.com/nanrou/p/7026802.html 写在前面,这只是我所遇到的情况,如果有 ...
- 11: Django + gunicorn + Nginx 的生产环境部署
1.1 gunicorn介绍 1.Gunicorn 1. Gunicorn是使用Python实现的WSGI服务器, 直接提供了http服务, 并且在woker上提供了多种选择, gevent, e ...
- django+uwsgi+nginx部署(非常详细)
django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
- virtualvenv+django+uWSGI+nginx 部署
原创博文 转载请注明出处! 1. virtualvenv 2. django 3. uWSGI 4. nginx 5. 踩坑记录 1. virtualvenv virtualvenv install ...
- 解决django配合nginx部署后admin样式丢失
解决django配合nginx部署后admin样式丢失 1. 在项目的settings.py文件里添加以下内容: STATIC_URL = '/static/' STATICFILES_DIRS = ...
- Django+uWSGI+Nginx 部署网站
Django 1.11设置 保证Django在本地调试没有问题: 当然这是前提^_^ 收集静态文件至指定文件夹 Django静态文件设置具体参考:https://docs.djangoproject. ...
- nginx+uwsgi+django+virtualenv+supervisor部署web服务器
wsgi 全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则 ...
随机推荐
- IDA Pro 权威指南学习笔记(二) - IDA 数据库文件
生成数据库文件 把要分析的文件用 IDA 打开后,会生成 3 个数据库文件 扩展名分别为 .id0,id1,nam .id0 文件是一个二叉树形式的数据库 .id1 文件包含描述每个程序字节的标记 . ...
- nginx反向代理负载均衡初次配置
反向代理,我个人理解是通过一台反向代理服务器,把客户端的把有请求按照一定的规则分发给后台的服务器.nginx作反向代理服务器的虚拟机配置如下: upstream itest { #正常情况下应该作如下 ...
- leetcode582
public class Solution { public IList<int> KillProcess(IList<int> pid, IList<int> p ...
- 搭建J2EE开发平台-Eclipse+MySql+tomcat
搭建J2EE开发平台-Eclipse+MySql+tomcat 分类: ·Java 2010-10-10 15:45 2596人阅读 评论(3) 收藏 举报 mysql平台eclipsetomcatj ...
- Django中间件CsrfViewMiddleware源码分析
Django Documentation csrf保护基于以下: 1, 一个CSRF cookie基于一个随机生成的值,其他网站无法得到,次cookie有CsrfViewMiddleware产生.它与 ...
- Hadoop完全分布式环境搭建(三)——基于Ubuntu16.04安装和配置Java环境
[系统环境] 1.宿主机OS:Win10 64位 2.虚拟机软件:VMware WorkStation 12 3.虚拟机OS:Ubuntu16.04 4.三台虚拟机 5.JDK文件:jdk-8u201 ...
- 面试题:volatile关键字的作用、原理
在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到“半个”单例. 而发挥神奇作用的volatile,可以当之无愧的被称为Java ...
- Hibernate-Criteria
Hibernate Criteria简介 一.Criteria接口的用途: 设计上可以灵活的根据criteria的特点进行查询条件的组装. CriteriaSpecification 接口是 Crit ...
- sql平时小总结
sql练习:举例子: 1.CREATE TABLE IF NOT EXISTS zz0 (number INT(11)); CREATE TABLE IF NOT EXISTS zz1 (number ...
- 4.python 系统批量运维管理器之paramiko模块
paramiko paramiko是ssh服务最经常使用的模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. paramiko实现ssh2不外乎两个角度:SSH客户端与服务端 SS ...