首页 > 其他分享 >Django 部署指南

Django 部署指南

时间:2023-11-08 21:35:02浏览次数:35  
标签:指南 部署 安装 apt Django ssh install 服务器 root

远程登录服务器

sudo ssh root@user_name
#删除 原来的ssh密钥命令
ssh-keygen -f "/home/shimmer/.ssh/known_hosts" -R "117.72.9.46"

延长服务器ssh超时自动断开时间,此处为30分钟

#默认情况下,SSH 配置文件位于 /etc/ssh/sshd_config。
ClientAliveInterval 1800
ClientAliveCountMax 3
#设置完成后,保存文件并重新启动 SSH 服务器:
sudo service ssh restart

建议安装FTP软件代替scp命令,本处使用FileZilla

首先更新服务器的软件

#用户为root用户
apt update
apt upgrade

升级python版本,安装pip

apt install python3
apt install python3-pip

我的服务器上,上一步的环境没解决好,有问题,pip不能切换,使用conda创建虚拟环境

  1. 下载 Miniconda 安装脚本:
    在终端中执行以下命令,从 Miniconda 的官方网站下载适用于你的操作系统的安装脚本。你可以选择适用于 Python 3.x 的版本。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  1. 运行安装脚本:
    在终端中执行以下命令,运行下载的安装脚本(请注意,文件名可能会因下载的版本而有所不同):
bash Miniconda3-latest-Linux-x86_64.sh
  1. 按照安装向导完成安装:
    按照安装向导的提示进行安装。ctrl + c跳过解释,通常情况下,选择默认选项即可。
  2. 启动一个新的终端窗口:
    安装完成后,你需要启动一个新的终端窗口,以使新的 Conda 环境变量生效。
  3. 测试 Conda 安装:
    在终端中运行以下命令,检查 Conda 是否正确安装:
conda --version

如果显示了 Conda 的版本信息,则表示安装成功。

现在,你可以使用 Conda 创建虚拟环境、安装软件包等。使用以下命令来创建一个名为 "myenv" 的虚拟环境:

conda create -n myenv python=3.8

然后激活这个环境:

conda activate myenv

在激活的环境中,你可以使用 Conda 安装所需的软件包,管理依赖项等。当你完成项目后,可以使用以下命令退出虚拟环境:

conda deactivate

安装requirements.txt库

pip install -r requirements.txt
#注意安装mysqlclient时需要先安装mysqlclient的开发库
apt-get install libmysqlclient-dev

上传并解压文件(推荐上传压缩包替代文件夹),

unzip MyBlog.zip

pip换国内源

mkdir ~/.pip
nano ~/.pip/pip.conf
--------------------------
#pip.conf文件输入以下内容,换为清华源
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

安装数据库,此处为MySql

apt install mysql-server

为mysql root用户设置密码

  1. 登录到 MySQL 服务器: 打开终端并使用以下命令登录到 MySQL 服务器。你将需要输入安装过程中设置的 MySQL root 用户密码。
mysql -u root -p

如果成功登录,你将进入 MySQL 命令行界面。

  1. 设置 root 用户密码: 在 MySQL 命令行中,使用以下命令来设置 root 用户的密码。将 new_password 替换为你想要设置的实际密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'new_password';

替换 'new_password' 为你要设置的实际密码。

  1. 刷新权限: 在设置密码后,需要刷新权限以确保更改生效。
FLUSH PRIVILEGES;
  1. 退出 MySQL 命令行: 输入以下命令退出 MySQL 命令行界面。
exit

运行django程序

  • mysql建立相应的数据库
  • 使用迁移命令建立相应的表
python3 manage.py makemigrations
python3 manage.py migrate

开启防火墙

#在配置nginx前,开启防火墙,不然下次可能无法通过ssh访问服务器
apt install ufw 
ufw enable
ufw allow 22/tcp

安装nginx

apt install nginx

配置nginx文件

nano /etc/nginx/sites-available/default
server {
  charset utf-8;
  listen 80;
  server_name 117.72.9.46.;

  location /static {
    alias /MyBlog/static;
  }

  location /media {
    alias /MyBlog/media;
  }

  location / {
    proxy_set_header Host $host;
    proxy_pass http://unix:/tmp/117.72.9.46.socket;
  }
}
service nginx reload

apt换源

  1. 备份当前sources.list文件:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
  1. 编辑sources.list文件:
nano /etc/apt/sources.list
  1. 注释掉原有的源,加入新的软件源:
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

收集静态文件

# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
python3 manage.py collectstatic

运行gunicorn

gunicorn --bind unix:/tmp/117.72.9.46.socket MyBlog.wsgi:application

gunicorn --bind unix:/tmp/117.72.9.46.socket --log-file /logfile.log MyBlog.wsgi:application

使用nginx获取真实ip

#如果你使用了Nginx作为反向代理服务器,并且在Nginx配置中有一些代理相关的设置,那么在Django中通过#self.request.META.get('REMOTE_ADDR')获取到的IP地址可能会不准确,甚至为空。这是因为Nginx会将用户的真实IP地址放在特定的#HTTP头中,而不是直接传递给Django。

#在这种情况下,你可以通过访问特定的HTTP头来获取用户的真实IP地址。默认情况下,Nginx将用户的真实IP地址存储在X-Real-IP头中。以下##是如何在Django中获取用户真实IP地址的示例代码:

user_ip = self.request.META.get('HTTP_X_REAL_IP')  # 获取真实IP地址
if user_ip:
    url = f"http://ip-api.com/json/{user_ip}?lang=zh-CN"
    response = requests.get(url)
    data = response.json()
    print("国家:", data['country'])
    location_info = data['country']

当然你也可以不安装nginx、gunicorn等服务,直接部署项目

  1. 开启防火墙,配置服务器防火墙规则:

确保服务器的防火墙允许来自外部网络的连接到达你选择的Django运行端口

#查看防火墙状态
ufw status
#开启django运行的端口
ufw allow 8000/tcp
#重新加载防火墙规则
ufw reload

2.启动Django应用:

#切记运行接口是(0.0.0.0),而不仅仅是本地接口127.0.0.1
python manage.py runserver 0.0.0.0:8000

3.访问django程序

浏览器访问    公网IP:8000

标签:指南,部署,安装,apt,Django,ssh,install,服务器,root
From: https://blog.51cto.com/u_16349091/8258930

相关文章

  • 【django开发】知识经验总结共50页md文档。今日分享:django配置和数据库操作详解
    Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原......
  • 初识Django
    web框架web框架本质上可以看成是一个很强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端,两者通过网络请求实现数据交互,也可以从框架层面上先简单的将web框架看成是对前端、数据库的全方位整合web手敲框架步骤1.搭建socket服务端importsocketserver......
  • Django前提
    今日内容概要web应用程序手写web框架(帮助我们理解别人写好的成熟框架、重点在于思路的理解、代码无需掌握)Django框架的学习Python中得主流框架框架的下载、安装、版本、怎么启动、怎么使用等三板斧问题今日内容详细web应用程序#Django框架是一款专门用来开发web应......
  • sftp部署
    SFTP(SecureFileTransferProtocol):sftp为ssh自带的服务,无需额外安装软件,使用和配置很方便SFTP的优势主要有两点:1、不需要再配置个FTP服务端;2、SSH协议是安全传输,上传和下载是经过加密的,安全方面高于vsftp,由于传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。但sft......
  • 蓝绿部署:实现无缝可靠的软件发布
    在快节奏的软件开发世界中,在不造成中断或停机的情况下向用户提供新功能和更新是一项至关重要的挑战。这就是蓝绿部署策略有用的地方。组织可以通过使用称为“蓝绿部署”的发布管理策略,以安全有效的方式推出其软件的新版本。在快节奏的软件开发世界中,组织努力快速可靠地部署新功能和......
  • 单节点flink部署
    单节点flink推荐作用于测试环境,最好不要使用到线上环境一、环境配置:1、安装Java至少1.8版本https://www.cnblogs.com/xiaoyou2018/p/9945272.html2、系统环境变量vi-b/etc/profileexportFLINK_HOME=/opt/flink-1.18.0exportPATH=$PATH:$FLINK_HOME/bin 二、安装f......
  • linux单机部署minio
    1下载安装包centos环境为例wgethttps://dl.min.io/server/minio/release/linux-amd64/minio2给minio赋权chmod+xminio3设置用户名、密码/etc/profile文件中配置环境变量exportMINIO_ACCESS_KEY=adminexportMINIO_SECRET_KEY=admin1234564创建存储目录及日......
  • 调用API接口获取淘宝商品数据:详细指南与代码实践
    在电子商务领域,淘宝作为中国最大的电商平台之一,其商品数据量庞大且丰富。对于开发者来说,如何有效地获取并利用这些数据,是一个重要的问题。本文将详细介绍如何使用API接口来获取淘宝商品数据,包括请求方式、参数设置、数据处理等内容,并通过代码实践来加深理解。一、API接口简介API(App......
  • 从企业内部入手——CRM系统选型指南
    很多企业认为CRM选型很难做,其实只要有章法,CRM客户管理系统选型其实并不难,做到“知己知彼,借助工具“,即可高效选到适合自己的产品。下面这份CRM系统选型指南,希望可以对您有所帮助。从企业内部入手1、CRM选型要从”向内观照”开始,在看清自己之前,不要急于看向外部市场;2、看清自己......
  • [左神面试指南] 链表[上]篇
    CD48打印两个有序链表的公共部分/*归并*/publicclassCD48_1{publicstaticclassListNode{publicintval;publicListNodenext=null;publicListNode(intval){this.val=val;}pub......