新服务器运行django站点

远程登录服务器

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

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

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

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

首先更新服务器的软件

1
2
3
#用户为root用户
apt update
apt upgrade

升级python版本,安装pip

1
2
apt install python3
apt install python3-pip

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

  1. 下载 Miniconda 安装脚本:

    在终端中执行以下命令,从 Miniconda 的官方网站下载适用于你的操作系统的安装脚本。你可以选择适用于 Python 3.x 的版本。

    1
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  2. 运行安装脚本:

    在终端中执行以下命令,运行下载的安装脚本(请注意,文件名可能会因下载的版本而有所不同):

    1
    bash Miniconda3-latest-Linux-x86_64.sh
  3. 按照安装向导完成安装:

    按照安装向导的提示进行安装。ctrl + c跳过解释,通常情况下,选择默认选项即可。

  4. 启动一个新的终端窗口:

    安装完成后,你需要启动一个新的终端窗口,以使新的 Conda 环境变量生效。

  5. 测试 Conda 安装:

    在终端中运行以下命令,检查 Conda 是否正确安装:

    1
    conda --version

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

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

1
conda create -n myenv python=3.8

然后激活这个环境:

1
conda activate myenv

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

1
conda deactivate

安装requirements.txt库

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

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

1
unzip MyBlog.zip

pip换国内源

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

安装数据库,此处为MySql

1
apt install mysql-server

为mysql root用户设置密码

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

    1
    mysql -u root -p

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

  2. 设置 root 用户密码: 在 MySQL 命令行中,使用以下命令来设置 root 用户的密码。将 new_password 替换为你想要设置的实际密码。

    1
    ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'new_password';

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

  3. 刷新权限: 在设置密码后,需要刷新权限以确保更改生效。

    1
    FLUSH PRIVILEGES;
  4. 退出 MySQL 命令行: 输入以下命令退出 MySQL 命令行界面。

    1
    exit

    运行django程序

  • mysql建立相应的数据库

  • 使用迁移命令建立相应的表

    1
    2
    python3 manage.py makemigrations
    python3 manage.py migrate

    开启防火墙

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

安装nginx

1
apt install nginx

配置nginx文件

1
nano /etc/nginx/sites-available/default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
}
}


1
service nginx reload

apt换源

  1. 备份当前sources.list文件:
1
cp /etc/apt/sources.list /etc/apt/sources.list.bak
  1. 编辑sources.list文件:
1
nano /etc/apt/sources.list
  1. 注释掉原有的源,加入新的软件源:
1
2
3
4
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

收集静态文件

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

运行gunicorn

1
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

1
2
3
4
5
6
7
8
9
10
11
12
#如果你使用了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运行端口

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

2.启动Django应用:

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

3.访问django程序

1
浏览器访问    公网IP:8000

:D 一言句子获取中...