基于Ubuntu的Djnago+uwsgi+nginx服务器部署(Django项目部署)
1、python3环境的安装
安装acc,用于后续安装Python时编译源码。
apt install gcc -y
安装Python依赖
sudo apt update
sudo apt install zlib1g-dev -y
sudo apt install libbz2-dev -y
sudo apt install ncurses-dev -y
sudo apt install libreadline-dev -y
sudo apt install libssl-dev -y
sudo apt install xz-utils liblzma-dev -y
sudo apt install sqlite3 libsqlite3-dev -y
sudo apt install libgdbm-dev -y
sudo apt install tk-dev -y
sudo apt install libmysqlclient-dev -y
sudo apt install python3-dev -y # 安装Python 3的开发库
sudo apt install libffi-dev -y
sudo apt install wget -y
在安装依赖的过程中会出现服务重启之类的提示,可以安下TAB键,然后回车即可
在服务器的根目录创建一个data文件,里面存放Django项目、Python相关的等。
#先进入根目录
cd /
#在使用文件夹创建命令
mkdir data
#查看一下
ls
#进入文件夹
cd /data
下载Python源码
#这里使用的是华为镜像: https://mirrors.huaweicloud.com/python/
wget https://mirrors.huaweicloud.com/python/3.9.5/Python-3.9.5.tgz
#查看一下,有一个tgz后缀的文件,表示成功
ls
解压&编译&安装
#解压
tar -xvf Python3.9.5.tgz
#进入Python文件
cd Python-3.9.5
#编译
./configure
make all
make install
#测试
python3
#出现3.9.5为成功了
Python 3.9.5 (default, Nov 12 2024, 000004)
[GCC 11.4.0] on linux
#如果版本不是自己解压下载的版本,则调整一下环境变量
#检查一下python3的路径
which python3
#创建链接
sudo ln -sf /usr/local/bin/python3.9 /usr/bin/python3
sudo ln -sf /usr/local/bin/python3.9 /usr/bin/python
sudo ln -sf /usr/local/bin/pip3.9 /usr/bin/pip3
sudo ln -sf /usr/local/bin/pip3.9 /usr/bin/pip
2、配置虚拟环境
# 安装virtualenv
pip3 install virtualenv
#在data目录里创建一个环境文件夹
#此时是在data目录下
cd /data
mkdir envs
cd envs
virtualenv /data/envs/web
#创建成功会有一个web文件,进入可以看到bin目录之类的python文件夹
#激活虚拟环境
source /data/envs/web/bin/activate
#安装相关的依赖,这里只是对Django+uwsgi+nginx的项目部署不做其他数据库等相关的操作。
#在激活的虚拟环境中安装Django
pip install django #有可能安装不成功,可以使用下面的命令,使用国内镜像
pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple
#在data目录创建一个django项目
cd /data
django-admin startproject web
3、配置uwsgi
配置uwsgi前,将django项目settings的一些配置做更改
vi /data/web/web/settings.py
#进入后,将DEBUG一定要改为False,允许ip改为通配符。
DEBUG = False
ALLOWED_HOSTS = ['*']
#在最后加上,如下,需要导os包
import os
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'web_static')
#配置完后,运行Django的静态文件打包命令,文件打包到web_static目录下
python manage.py collectstatic
更改后,安装uwsgi,并创建uwsgi的配置文件等
#安装uwsgi 注意这还是在虚拟环境中,安装报错,先尝试换国内源
pip install uwsgi
#安装完成,进入项目文件,创建一个uwsgi.ini,这是uwsgi的配置文件。
cd /data/web
vim uwsgi.ini
############## 这是配置文件的内容。
[uwsgi]
#使用http访问
http=0:8001
# 开启主进程
master = true
# 指定uwsgi工作的进程数
processes = 1
# 指定工作的每个进程下的线程数
threads = 2
# 指定项目的目录
chdir = /data/web
# wsgi.py文件的位置
wsgi-file= /data/web/web/wsgi.py
# 日志 需要去创建这个文件
logto = /data/web/logs/error.log
chmod-socket = 660
vacuum = true
max-requests = 1000
# uwsgi的运行状态
stats=/data/web/uwsgi.status
# uwsgi的进程id
pidfile=/data/web/uwsgi.pid
#################
#保存,创建一个日志文件夹,和一个日志文件
mkdir logs
cd logs
vim error.log
cd /data/web
#运行uwsgi、
uwsgi --ini uwsgi.ini
#查看uwsgi的情况,可以看到开启后是有好几个进程在被使用
ps aux | grep uwsgi
#停止uwsgi
uwsgi --stop uwsgi.pid
3.1、uwsgi成功后浏览admin页面
uwsgi启动成功之后,外网访问服务器,是需要开放端口,这就需要在服务器厂商那配置NAT转发。
在服务器设置页面找到NAT转发,类似的设置项。配置一下,列如这里使用了内部的8001端口。
而我们设置一个,外部端口连接这个内部的8001端口,协议使用tcp即可。
这里不在做说明,可以自行查找配置方法,
配置完成后,可以在外网,访问当服务器,列如,设置后,给你的是192.168.12.123:23125外部端口,
192.168.12.123:23125/admin #这样就可以访问到admin页面
在你访问这个地址的时候,这个端口就是指向你服务器的8001端口,所以它可以访问到你正在运行的django项目
4、nginx配置
在这,你可以使用deactivate退出当前的虚拟环境,也可以不退出,重新创建一个服务器连接进行接下来的操作,两者都可以选择
# 如果使用apt-get安装报错,可能是因为没有nginx的安装源,可以通过增加安装源,或者手动下载安装包进行安装。
sudo apt-get install nginx
#这是检测nginx配置是否正确的测试
nginx -t
#查看版本号
nginx -v
安装完nginx回到Django项目下的uwsgi.ini配置文件,对其做一下修改:注释http这行,并添加一行
。
[uwsgi]
#使用http访问
#http=0:8001#0.0.0.0表示所以ip
socket = 0.0.0.0:8002
# 开启主进程
master = true
# 指定uwsgi工作的进程数
processes = 1
# 指定工作的每个进程下的线程数
threads = 2
# 指定项目的目录
chdir = /data/web
# wsgi.py文件的位置
wsgi-file= /data/web/web/wsgi.py# 日志 需要去创建这个文件
logto = /data/web/logs/error.log
chmod-socket = 660
vacuum = true
max-requests = 1000
# uwsgi的运行状态
stats=/data/web/uwsgi.status
# uwsgi的进程id
pidfile=/data/web/uwsgi.pid
更改完毕后 ,复制一份nginx的配置文件,到Django项目下。
cp /etc/nginx/nginx.conf /data/web/
之后对其做更改
#将权限提高到管理员权限
user root;
#在http内添加upstream django以及server等配置,
http {
################
upstream django {
server 127.0.0.1:8001; #这个地方很重要,需要用与uwsgi.ini中socket写的端口一致
}
server{
listen 8000; #监听端口,浏览器访问的就是这个端口
server_name 192.168.196.1; #你的服务器IP
client_max_body_size 75M;
charset utf-8;
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params; #这个可以根据自己nginx的文件找到在哪
}
location /static/ { #配置静态资源,此处写什么,在浏览器访问就需要写什么
alias /data/web/my_static/; #静态资源的绝对路径,与8.中收集到的静态资源路径一致,最后的 /一定要加
}
location /media/ { #配置媒体资源,要求同静态资源一致
alias /data/web/media/;
}
location /templates/ {
alias /data/web/templates/;
}
}
}
测试一下配置文件
nginx -t -c /data/web/nginx.conf
#代表测试通过
nginx: the configuration file /data/my_web/nginx.conf syntax is ok
nginx: configuration file /data/my_web/nginx.conf test is successful
5.运行django+uwsgi+nginx项目
先启动uwsgi服务
#进入虚拟环境
source /envs/web/bin/activate
#启用uwsgi服务
uwsgi -ini /data/web/uwsgi.ini
在开启另外的终端,开启nginx服务。
#-c是指定运行的配置文件
nginx -c /data/web/nginx.conf
#使用lsof查看一下端口是否正常运行了,uwsgi以及nginx
lsof -i :8000
lsof -i :8001
如此部署完毕。当然,外网访问还是需要配置服务器的外部端口与内部端口的连通。不然配置再好也是访问不了的。
#配置好了外部端口,只需要只需要使用服务器ip地址+外部端口,即可访问我们的页面。
当然默认页面是没有东西的,这时候就尝试访问admin页面,检测一下部署效果,有页面,但没有css样式等,可能是静态文件的问题,需要自行解决。
如,服务器给的外部端口是192.168.196.1:24164浏览器输入:
192.168.196.1:24164/admin
即可访问admin页面,
更多推荐


所有评论(0)