Django+nginx+gunicorn搭建服务器后台

本文详细介绍了如何在阿里云Ubuntu18.04轻量应用服务器上,通过SSH连接,安装Anaconda环境,部署Django项目,并结合Nginx和Gunicorn提供高效稳定的服务。步骤包括安装Anaconda、设置环境变量、安装Nginx和Git、配置Nginx与Gunicorn,最后实现通过公网IP访问项目。


本文以系统镜像选择Ubuntu18.04的阿里云轻量应用服务器为例,使用 Stacklens的开源项目

远程连接服务器

使用MobaXterm SSH连接阿里云服务器,根据提示输入账号和密码,进入成功后便可看到阿里云的欢迎界面。
在这里插入图片描述

部署到服务器后就不能使用Django自带的后台服务器了,而是选择使用Nginx和Gunicorn配合提供的网络服务。

  • 客户端发来 http 请求,Nginx 作为直接对外的服务器接口,对 http 请求进行分析;
  • 如果是静态资源请求,则由Nginx自己处理(效率极高);
  • 如果是动态资源请求,则把它转发给 Gunicorn 进行预处理后,转发给 Django,最终完成资源的返回。

安装anaconda环境

首先安装anaconda环境(用virtualenv同样可以)

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
bash Anaconda3-5.2.0-Linux-x86_64.sh -bfp /usr/anaconda

wget https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh
bash Anaconda3-5.2.0-Linux-x86_64.sh -bfp /usr/anaconda

安装之后使用conda命令查看是否安装成功
如果出现conda command not found 的话
使用如下命令

vim /etc/profile

按i键进入编辑模式
在文件内容的底部添加下面的内容,其中/usr/anaconda/bin是安装anaconda的位置

#Anacondaexport 
PATH=$PATH:/usr/anaconda/bin

然后按Ctrl + c键,输入:wq保存配置文件
再输入以下指令重新载入配置文件

source /etc/profile
conda create -n venv python=3.8
source activate venv

安装nginx和git

apt-get install nginx
apt-get install git

均成功后,创建并进入项目目录

mkdir -p /home/sites/myblog
cd /home/sites/myblog

接下来从Github上下载项目

git clone https://github.com/stacklens/django-vue-tutorial.git

下载好之后进入项目目录,安装依赖库、收集静态资源并迁移数据库:

cd django-vue-tutorial
pip3 install -r requirements.txt
python3 manage.py collectstatic
python3 manage.py migrate
python3 manage.py runserver

最后启动nginx

service nginx start

接下来在浏览器上输入你的公网ip,看到Nginx的欢迎界面就成功一半了。


配置nginx

打开配置文件

vim /etc/nginx/sites-available/myblog

用vim写入配置信息:

server {
  charset utf-8;
  listen 80;
  server_name XXX.XXX.XXX.XXX;  # 改成你的 IP

  # 定义 server 的根路径
  # 修改为你的项目的路径
  root /home/sites/myblog/django-vue-tutorial;

  # 以下4项都是在给静态资源配置转发路径
  # 注意路径名称一定要正确
  # 特别是中横线 - 和下划线 _ 别弄混了
  location /static {
    alias /home/sites/myblog/django-vue-tutorial/collected_static;
  }

  location /media {
    alias /home/sites/myblog/django-vue-tutorial/media;
  }

  location /js {
    alias /home/sites/myblog/django-vue-tutorial/collected_static/js;
  }

  location /css {
    alias /home/sites/myblog/django-vue-tutorial/collected_static/css;
  }

  # 将接口及后台请求转发给 Gunicorn
  location ~ (^/api|^/admin)  {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/XXX.XXX.XXX.XXX.socket;  # 改成你的 IP
  }

  # 其他所有请求均直接请求 Vue 打包的 html 文件
  location / {
    try_files /collected_static/index.html =404;
  }
}

将配置文件链接在可用配置上

ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled

配置Gunicorn

pip3 install gunicorn
# 重启nginx
service nginx restart
# 将XXX.XXX.XXX.XXX改为自己的公网ip
gunicorn --bind unix:/tmp/XXX.XXX.XXX.XXX.socket drf_vue_blog.wsgi:application

在这里插入图片描述
在浏览器上输入自己服务器的公网ip,便可看到:
在这里插入图片描述

### 已开发 Django 项目的部署方案 为了将已开发的 Django 项目成功部署到生产环境,可以采用 Django+Nginx+Gunicorn 的组合方式。以下是具体的实现方法: #### 1. 安装必要的依赖项 在目标服务器上安装 Python 和虚拟环境工具 `venv` 或者 `virtualenv` 来隔离项目所需的依赖包[^1]。 ```bash sudo apt update && sudo apt install python3-pip python3-venv nginx git -y ``` #### 2. 创建并激活虚拟环境 进入项目目录后创建一个新的虚拟环境,并激活它以便管理独立的 Python 包版本[^2]。 ```bash cd /path/to/your/project/ python3 -m venv env source env/bin/activate pip install --upgrade pip setuptools wheel ``` #### 3. 安装 Gunicorn 并测试运行 通过 Pip 安装 Gunicorn 后,在本地验证其能否正常启动服务[^3]。 ```bash pip install gunicorn gunicorn --bind 0.0.0.0:8000 your_project_name.wsgi:application ``` 如果一切顺利,则可以通过浏览器访问该地址确认页面加载无误。 #### 4. 设置 Nginx 反向代理配置文件 编辑 `/etc/nginx/sites-available/your_domain.conf` 文件来定义反向代理规则,确保静态资源由 Nginx 处理而动态请求转发给 Gunicorn[^4]。 ```nginx server { listen 80; server_name your_domain_or_ip; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /path/to/your/project/; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } } ``` 接着链接此站点启用状态下的配置路径至 sites-enabled 中去,并重启 Nginx 让更改生效[^5]: ```bash ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/ sudo systemctl restart nginx ``` #### 5. 使用 systemd 管理 Gunicorn 进程 编写一个简单的 Systemd 单元文件用于控制 Gunicorn 实例生命周期[^6]。 ```ini [Unit] Description=gunicorn daemon for Your Project Name After=network.target [Service] User=<username> Group=www-data WorkingDirectory=/path/to/your/project/ ExecStart=/path/to/your/project/env/bin/gunicorn \ --access-logfile - \ --workers 3 \ --timeout 90 \ --bind unix:/run/gunicorn.sock \ your_project_name.wsgi:application [Install] WantedBy=multi-user.target ``` 保存为 `/etc/systemd/system/gunicorn.service` ,之后重新载入守护进程配置表单以及开启自启功能[^7]: ```bash sudo systemctl enable gunicorn sudo systemctl start gunicorn ``` 完成以上步骤即完成了基本的服务端设置工作流程[^8]。 ```python # Example of a minimal WSGI application that could be served by Gunicorn. def app(environ, start_response): data = b"Hello, World!\n" status = '200 OK' response_headers = [ ('Content-type', 'text/plain'), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data]) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laccoliths

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值