远程登录服务器

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