远程登录服务器
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创建虚拟环境
- 下载 Miniconda 安装脚本:
在终端中执行以下命令,从 Miniconda 的官方网站下载适用于你的操作系统的安装脚本。你可以选择适用于 Python 3.x 的版本。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
- 运行安装脚本:
在终端中执行以下命令,运行下载的安装脚本(请注意,文件名可能会因下载的版本而有所不同):
bash Miniconda3-latest-Linux-x86_64.sh
- 按照安装向导完成安装:
按照安装向导的提示进行安装。ctrl + c
跳过解释,通常情况下,选择默认选项即可。 - 启动一个新的终端窗口:
安装完成后,你需要启动一个新的终端窗口,以使新的 Conda 环境变量生效。 - 测试 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用户设置密码
- 登录到 MySQL 服务器: 打开终端并使用以下命令登录到 MySQL 服务器。你将需要输入安装过程中设置的 MySQL root 用户密码。
mysql -u root -p
如果成功登录,你将进入 MySQL 命令行界面。
- 设置 root 用户密码: 在 MySQL 命令行中,使用以下命令来设置 root 用户的密码。将
new_password
替换为你想要设置的实际密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'new_password';
替换 'new_password'
为你要设置的实际密码。
- 刷新权限: 在设置密码后,需要刷新权限以确保更改生效。
FLUSH PRIVILEGES;
- 退出 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换源
- 备份当前sources.list文件:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 编辑sources.list文件:
nano /etc/apt/sources.list
- 注释掉原有的源,加入新的软件源:
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等服务,直接部署项目
- 开启防火墙,配置服务器防火墙规则:
确保服务器的防火墙允许来自外部网络的连接到达你选择的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