在 Linux 服务器上使用 Nginx + Gunicorn 部署 Django

一键配置Ubuntu的OpenHarmony基础编译环境 阅读详情

我的 Django 博客项目是部署在阿里云 ECS 服务器上面的,服务器的系统是64位的 Ubuntu 16.04 系统,部署的方式是使用 Nginx + Gunicorn 实现,数据使用的是 MySQL。部署其实是一个大坑,我在部署的过程中也是踩过很多坑,所以这篇文章就来介绍一下我的项目的完整部署过程,希望看到的人能少走弯路。

项目准备

首先需要把自己本地的项目放到服务器上面来,我使用的是 Github 克隆项目,这种从代码库克隆的方式是比较推荐的,因为可以持续的使用 pull 来让服务器上面的项目保持跟代码仓库中同步。Github 的安装、配置和使用这里省略,如果需要请自行去查阅相关资料完成操作。

从 Github 上克隆项目

选择一个放置项目的文件夹,比如我把项目统一放在了自己的一个用户的根目录下面,这个目录的路径是 /home/alex

于是可以切换到当前用户的目录下克隆项目:

~$ git clone git@github.com:Hopetree/izone.git tendcode

上面这句 git 的命令是意思是将 izone.git 这个项目克隆到本地并命名为 tendcode,当然,项目的名称你可以按照自己的喜欢去命名。

创建一个虚拟环境

项目移植成功了,我们还需要来移植一个单独给项目使用的环境,所以需要使用虚拟环境。虚拟环境的安装和配置操作方式这里也不做说明,这里只介绍创建虚拟环境的过程。

我虽然在本地的 Windows 上面一直使用的 virtualenvwrapper 来操作虚拟环境,但是在服务器上面还是比较喜欢直接使用 virtualenv,这里就来以这种创建虚拟环境的方式说明。

在当前用户根目录(跟刚才克隆项目同目录)下创建一个虚拟环境 izone_env,使用如下命令:

~$ virtualenv izone_env

此时当前目录的结构是这样的:

/home/alex/tendcode
/home/alex/izone_env

复制虚拟环境

虚拟环境虽然已经创建,但是环境中还没有安装项目的依赖,所以现在要根据项目的依赖文件去安装依赖。

首先在当前用户目录下使用如下命令进入虚拟环境:

~$ source izone_env/bin/activate

然后将当前目录切换到你的项目的依赖文件 requirements.txt 的目录下,比如我的项目的依赖文件就在项目的一级目录下面,比如它的地址是这样的:

/home/alex/tendcode/requirements.txt

那么此时应该切换到这样:

(izone_env) ~$ cd tendcode

然后使用如下命令安装依赖:

(izone_env) ~$ pip install -r requirements.txt

此时,项目的基本运行条件已经准备好了,下面开始运行项目。

项目运行

在部署项目之前,先要保证项目在服务器上面能够正常运行,这是最起码的条件。

补充项目缺少的文件

这一步骤并不是一定需要的,这取决于你的项目。由于我的项目上传到 Github 上之前有忽略掉一个个人信息项目的配置文件,所以需要在克隆项目之后在服务器自行创建一份。比如我的博客项目中需要单独创建的是跟 settings.py 同级目录下面的一个 base_settings.py 文件,文件的具体内容可以查看我 Github 项目中的说明。如果你的项目不需要补充文件,可以跳过这一步。

创建数据库

如果项目同样适用的是 MySQL 数据库的话,在项目运行之前需要先创建数据库,比如我的项目中指定了数据库的基本信息,我创建数据库(进入mysql命令行下)的命令如下:

mysql > CREATE DATABASE `tendcode` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

这句命令的意思是创建一个名称为 tendcode 的数据库,并且将数据库的编码设定为 utf8mb4,这个按照自己的项目需求去创建即可。

迁移数据库

现在可以按照 Django 项目的数据库迁移步骤来操作了,当然,下面的操作都是在虚拟环境中进行的。

1、创建数据迁移,命令如下:

(izone_env) ~/tendcode$ python manage.py makemigrations
(izone_env) ~/tendcode$ python manage.py migrate

2、创建管理员账号:

(izone_env) ~/tendcode$ python manage.py createsuperuser

3、静态文件的收集:

(izone_env) ~/tendcode$ python manage.py collectstatic

启动项目

(izone_env) ~/tendcode$ python manage.py runserver 0.0.0.1:8000

如果你的服务器上面的8000端口开启了,那么可以访问你的服务器 IP 地址的8000端口看看项目是否正常运行:

http://server_domain_or_IP:8000

到这里顺便说一下,由于我的项目是有域名的,所以在项目中要先添加自己的域名,就像这样:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '.tendcode.com']

开始部署

安装和配置 Gunicorn

1、首先需要在虚拟环境中安装 Gunicorn:

(izone_env) ~/tendcode$ pip install gunicorn

2、创建项目的 Gunicorn 配置文件(退出虚拟环境):

~$ sudo vim /etc/systemd/system/gunicorn_tendcode.service

3、配置信息如下:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=alex
Group=www-data
WorkingDirectory=/home/alex/tendcode
ExecStart=/home/alex/izone_env/bin/gunicorn --access-logfile - --workers 2 --bind unix:/home/alex/tendcode/tendcode.sock izone.wsgi:application

[Install]
WantedBy=multi-user.target

上面的配置信息中需要根据自己的项目改的有以下几个地方:

  • User 填写自己当前用户名称
  • WorkingDirectory 填写项目的地址
  • ExecStart 中第一个地址是虚拟环境中 gunicorn 的目录,所以只需要改前半部分虚拟环境的地址即可
  • workers 2 这里是表示2个进程,可以自己改
  • unix 这里的地址是生成一个 sock 文件的地址,直接写在项目的根目录即可
  • izone.wsgi 表示的是项目中 wsgi.py 的地址,我的项目中就是在 izone 文件夹下的

启动配置文件

文件配置完成之后,使用下面的命令启动服务:

~$ sudo systemctl start gunicorn_tendcode
~$ sudo systemctl enable gunicorn_tendcode

查看服务的状态可以使用命令:

~$ sudo systemctl status gunicorn_tendcode

上面的命令启动没有问题可以看看自己的项目的跟目录下面,应该会多一个 tendcod.sock 文件的。

后续如果对 gunicorn 配置文件做了修改,那么应该先使用这个命令之后重启:

~$ sudo systemctl daemon-reload

然后再使用重启命令:

~$ sudo systemctl restart gunicorn_tendcode

配置 Nginx

首先创建一个 Nginx 配置文件,不要使用默认的那个:

~$ sudo nano /etc/nginx/sites-available/mynginx

配置信息如下:

server {
    # 端口和域名
    listen 80;
    server_name www.tendcode.com;

    # 日志
    access_log /home/alex/tendcode/logs/nginx.access.log;
    error_log /home/alex/tendcode/logs/nginx.error.log;

    # 不记录访问不到 favicon.ico 的报错日志
    location = /favicon.ico { access_log off; log_not_found off; }
    # static 和 media 的地址
    location /static/ {
        root /home/alex/tendcode;
    }
    location /media/ {
        root /home/alex/tendcode;
    }
    # gunicorn 中生成的文件的地址
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/alex/tendcode/tendcode.sock;
    }
}

server {
    listen 80;
    server_name tendcode.com;
    rewrite ^(.*) http://www.tendcode.com$1 permanent;
}

第一个 server 是主要的配置,第二 server 是实现301跳转,即让不带 www 的域名跳转到带有 www 的域名上面。

连接 Nginx 配置

上面的配置检查好之后,使用下面的命令来将这个配置跟 Nginx 建立连接,使用命令:

~$ sudo ln -s /etc/nginx/sites-available/mynginx /etc/nginx/sites-enabled

运行完毕之后可以查看一下 Nginx 的运营情况,看看会不会报错:

~$ sudo nginx -t

如果上面这句没有报错,那么恭喜你,你的配置文件没有问题,可以继续下一步,如果报错了,需要按照报错的信息去更改配置文件中对应行的代码,好好检查一下吧!

没报错的话,重启一下 Nginx:

~$ sudo systemctl restart nginx

好了,重启 Nginx 之后可以登录自己配置的域名,看看自己的项目是不是已经成功的运行了呢!

后续维护

之后的项目维护中,如果更改了 gunicorn 的配置文件,那么需要依次执行下面两条语句去重启服务,如果只是修改了 Django 项目的内容,只需要单独执行第二条重启命令即可:

~$ sudo systemctl daemon-reload
~$ sudo systemctl restart gunicorn_tendcode

如果修改了 Nginx 的配置文件,那么需要依次执行下面两条语句去重启服务:

~$ sudo nginx -t
~$ sudo systemctl restart nginx

以上就是我的项目部署的全部过程,希望看到这篇文章的人如果想要使用同样的方式部署 Django 项目的话,可以参考一下,有问题也可以指出。

文章来源:http://www.tendcode.com/article/set-up-django-with-nginx-and-gunicorn/

ubuntu20.04 Android14编译环境配置 创建 SWAP 文件 128G。ubuntu 更新和必要安装。window 打开samba。 Android系统编译环境 阅读详情

相关推荐

debian9安装好后的初始化配置

上一篇文章,已经说明了虚拟机的网络配置,此篇文章,就讲讲考拉自己在新系统安装好后的一些初始化配置。 声明: 考拉实验环境,virtualbox 5.2.0,宿主机 win10 企业版,网络连接 LAN ,客户机 debian-9.2.1,客户机只安装了基本系统,没有安装图形化界面。 1.Change the source(更换源) 在终端中,输入命令: lsb_release -a ,

流苏之月的博客 3795

Flask+Gunicorn+NginxLinux(Debian/Ubuntu)搭建记录(极简教程)

【代码】Flask+Gunicorn+NginxLinux(Debian/Ubuntu)完整搭建记录。

记忆胶囊 1788

【论文精读】Latent Diffusion

Latent Diffusion

weixin_44934783的博客 4437

【CentOS7】nginx部署前端 && gunicorn部署flask后端使用nginx反向代理

最后我们就可以成功访问我们的flask服务了。

BY_HEY的博客 1251

在Ubuntu 18.04上安装和配置pgAdmin 4服务器模式的方法

pgAdmin 是一个针对 PostgreSQL 及其相关数据库管理系统的开源管理和开发平台。它使用 Python 和 jQuery 编写,支持 PostgreSQL 中的所有功能。您可以使用 pgAdmin 从编写基本的 SQL 查询到监视数据库和配置高级数据库架构等各种操作。在本教程中,我们将演示如何在 Ubuntu 18.04 服务器上安装和配置最新版本的 pgAdmin,通过 Web 浏览器访问 pgAdmin,并将其连接到服务器上的 PostgreSQL 数据库。

rubys007的博客 2777

Gunicorn介绍、安装及使用

1、简介 Gunicorn ‘Green Unicorn’ 是一个 UNIX 下的 WSGI HTTP 服务器,它是一个 移植自 Ruby 的 Unicorn 项目的 pre-fork worker 模型。它既支持 eventlet , 也支持 greenlet 在管理 worker 上,使用了 pre-fork 模型,即一个 master 进程管理多个 worker 进程,所有请求和响应均由 Worker 处理。Master 进程是一个简单的 loop, 监听 worker 不同进程信号并且作出响应。比如

思南的博客 3650

如何在Linux服务器上后台持久运行Gunicorn

使用SSH远程连接到服务器并在终端启动**

qq_45430571的博客 3858

linux vim 编译python,Arch Linux下vim的Python编译环境配置

虽说Arch Linux默认配置了Python,但也只是个Command line- -此前,咱只能在vmware_win下或windows下用idle来写代码,但毕竟常在Linux下活动,何况,对于python这种对缩进要求极精细的语言,的确非常蛋疼,于是,有了咱这晚的折腾:首先要准备一个pydiction插件copy至~/.vim/dict/其次,也就是最重要的地方了配置~/.vimrc,Ps...

weixin_34731217的博客 264

vim经典主题插件安装&编译环境配置

vim经典主题插件安装&编译环境配置

m0_56769186的博客 863

centos升级之vim vim8.0安装

sudo yum update vim

csdn_kou的博客 7190

在Windows下搭建GCC+VIM编译环境

在Windows下搭建GCC+VIM编译环境在windows下进行小型代码测试时,若启动大型的IDE,启动慢、效率低。可以采用GCC作为编译器,Vim作为代码编辑器,再对vim进行配置,集成gcc,可以一键自动化编译。 安装VIM 安装GCC 编译代码 -* 配置VIM一键运行* 安装VIM目前Vim已经升级到Vim8.0。下载VIM 配置安装GCCMinGW,即Minimalist GNU Fo

xiake001的专栏 4056

vim如何自动补全,ycm配置

Ubuntu配置vim 更新2018年11月8号 用了一段时间的Ubuntu 18简直太方便了。 三步操作全部配完!!! git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ~/.vimplus ./install.sh centos7配置ycm 更新2018/11/29,对文章进行重新排版 大牛的开源项目,一个键配置完...

csdn_kou的博客 5145

⚡ Windows系统下Vim插件YCM(YouCompleteMe)基本配置和用法

⚡ Windows系统中Vim插件YCM(YouCompleteMe)基本配置和用法

aitav0的博客 1406

【Go API 开发实战 4】Go API 开发环境配置

Go API 开发环境配置:Go 命令安装Go 有多种安装方式,比如 Go 源码安装、Go 标准包安装、第三方工具(yum、apt-get 等)安装。本教程 API 运行...

腾讯技术工程 424

搭建基于Vim的Go IDE

第一步当然是安装Go的编译环境了:http://golang.org/doc/install.html 安装好之后复制官方支持的脚本:go/misc/src/vim下的文件到$VIMRUNTIME,也可以从这里获取最新版本:https://github.com/jnwhiteh/vim-golang 这样基本就能高亮语法和自动完成了,如果想要更多的自动完成功能,可以安装这个基于服务器和客户

Ricky Wu的专栏 5578

debian Squeeze 编译安装vim 7.3

1.首先还是下载vim7.3的源码 ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2 2.安装编译环境 3.解压编译 cd到源码包的路径,比如我是放到 /home/softs/下面的 tar -xvzf vim-7.3tar.bz2sudo aptitude install build-essential libncurses-

rainysia的专栏 2432

服务器搭建以及vim配置过程

服务器搭建以及vim配置过程

GearyYoung的专栏 1430

fedora安装vim可用

centos安装vim7.4   系统版本centos6.4; root权限 su - root     卸载 $ rpm -qa | grep vim $ yum remove vim vim-enhanced vim-common vim-minimal     下载、解压 $ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar

show me code 2996

【QGIS入门实战精品教程】1.2:QGIS与ArcGIS的区别和联系

以下是GISGeography官方给出的两者之间的27点比较(译): 官方网址:https://gisgeography.com/qgis-arcgis-differences/ 1.QGIS容纳更多的数据格式 ArcGIS没有支持所有的数据格式,毫无疑问,QGIS在处理各种类型的数据时非常顺手,QGIS在数据格式方面是个多面手,在使用数据方面是它的长处。 QGIS使用GDAL/OGR库来读取和写入地理信息数据格式,支持超过70种矢量格式。QGIS一开始就是为了与PostGIS协作而诞生的,而支持的名单.

智慧空间实验室 1988

lcd_gc9503CV_mipi_YX.dtsi

lcd_gc9503CV_mipi_YX.dtsi

上一篇: Python爬虫之煎蛋网妹子图爬虫,解密图片链接加密方式
Stopfollow
博客等级 码龄9年 7粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值