赞
踩
世界上没有免费的午餐,免费的只有水和空气。 --- 提前声明
目录
前言:如果你在布署Django项目时,遇到了困难,你可以私信我!我们一直交流讨论。世界上没有免费的午餐,免费的只有水和空气。
在宝塔的应用商店安装python管理器,安装python 3.8.5版本
如果是上线 API, 则不建议使用浏览器去检测是否正常访问
一般来说,浏览器都会有缓存。而建议下载 一个postman 或者 runapi 去测试接口。
安装runapi对写规范的接口文档很有帮助
(1.将本地计算机的项目下的模块打包
python -m pip freeze > requirements.txt
(2.配置settings,设置静态文件的位置
- DEBUG = True
-
- ALLOWED_HOSTS = ['121.xxx'] ## 公网IP
-
- STATIC_URL = '/static/'
-
- # STATICFILES_DIRS = [
-
- # os.path.join(BASE_DIR, "static")
-
- # ]
-
- STATIC_ROOT = os.path.join(BASE_DIR, "static")
在navicat导出sql文件,然后引入数据库,重新设置setting.py文件
步骤:先创建数据库,然后输入xxx 用户名, root 密码(这其实可以认为是一个变量,因为顶部的 root密码
才是真实的数据库密码)
注意:以后修改数据库,可以选择在本地的navicat连接远程 宝塔中的数据库。 (具体详情看下方)
准备两个端口,3233 (外网访问) , 3234 (内网连接)
公网ip默认 80, 只需再准备一个 7788 (内网连接端口)
左侧的网站添加新的网站, 点击 添加站点
。
前面的域名可以随便设置,然后设置访问的 公网IP + 端口
(外网 3233)
双击根目录,上传项目下的网站数据
先把默认的的404.html和404.html文件删除,然后点击上传。项目下的所有文件
上传python模块包列表
在项目下新建一个uwsgi.ini空白文件,添加下面的内容,
注意:放行 阿里云和宝塔的端口 7788 (自定义,内网连接端口)
这个是nginx和uwsgi启动服务的套接字连接端口
#添加配置选择 [uwsgi] #配置和nginx连接的socket连接, socket=127.0.0.1:3234 #### 修改端口 #配置项目路径,项目的所在目录 chdir=/www/wwwroot/www.myDjangoAPI.com/ #### 绝对路径的子目录,不建议删除。 #配置wsgi接口模块文件路径,也就是 wsgi.py 这个文件所在的目录,这个文件是Django下的默认配置文件 wsgi-file= TTAS/wsgi.py #### 修改文件夹 #配置启动的进程数 processes=4 #配置每个进程的线程数 threads=2 #配置启动管理主进程 master=True #配置存放主进程的进程号文件 pidfile=uwsgi.pid #配置dump日志记录, ` 不要舍去 , 日志保存在项目下, 否则可能会出现编码格式错误 daemonize=/www/wwwroot/www.myDjangoAPI.com/uwsgi.log`
然后,连接nginx,修改网站配置
网站--》 选中当前项目 --》 设置 ---》 配置文件
记得点击保存
nginx找到 映射到 运行的项目中 7788商品 (其实也不用开启外网访问的端口)
- location / {
- include /www/server/nginx/conf/uwsgi_params; ### 如果这个关闭了,会导致uswgi无法运行
- uwsgi_pass 127.0.0.1:7788; #端口要和uwsgi里配置的一样
- uwsgi_param UWSGI_SCRIPT TTAS.wsgi; #wsgi.py所在的目录名+.wsgi
- uwsgi_param UWSGI_CHDIR /www/wwwroot/www.myDjangoAPI.com/; #项目路径
- }
- location /static/ {
- alias /www/wwwroot/myDjango/static/; #静态资源路径
- }
python管理器添加项目
如果还需要其它模块, 可以点击 python管理器中的 当前项目的 模块, 进行安装。
python管理器中,可以查看当前项目的配置,(就是上面输入的uwsgi.ini的文件内容)
也可以到终端的虚拟环境venv 安装模块
- source /www/wwwroot/myDjango/myDjango_venv/bin/activate
-
- 一般是在项目下(出现xxx_venv)
- source myDjango_venv/bin/activate
注意: myDjango_venv是在python管理器添加项目时生成的文件名,里面保存着模块。 项目名+ _venv
任何处理uwsgi服务信息,都需要重新启动项目。
浏览器会存在延迟,可以先使用xxx:3000等后端进行测试缓存。
如果在第一步没有设置好settings文件,则需要进行更新 (并且需要 在nginx添加 外网访问的静态文件 location / static/ { ... }),, 测试连通性也依然可以使用php文件。
除了在settings文件添加
STATIC_ROOT = os.path.join(BASE_DIR, "static")
- cd myDjango
- source myDjango_venv/bin/activate 激活虚拟环境,可以使用pip命令
-
- pip list 查看模块
- python manage.py collectstatic 采集静态资源,结果会保存在项目下的static目录,
- 而不是应用里面的static目录,所以它只是一个收集的作用。
其实这里访问的还是静态文件,nginx访问的是直接文件
如果说需要访问应用下的static,那还要自定义路由,将应用下的static暴露出来。
总结:外网访问的顺序, 1. 直接路径, 就是可以直接找到的文件,
2.匹配路径,当前项目下的nginx配置, location xxx{ }
(1. 最长先匹配
(2. 有后缀的再匹配
(3. 最后再匹配 “/” 根路径。(一般就是自动运行的应用路由)
注意:只要前面匹配到了相关模式,不管结果如何,都不会再次进行匹配。
在使用uwsgi服务前,可以先进行测试。数据库和运行
启用前,请先经过测试,再运行项目。
运行环境出错 (测试)
<span style="background-color:#f8f8f8"><span style="color:#333333">需要在(venv)下运行 python manage.py runserver 7788</span></span>
(1.无法识别mysql包
- 在应用项目下添加__init__.py文件夹
- import pymysql
- pymysql.install_as_MySQLdb()
(2.mysql数据库出错。 (密码要设置为xxxx)
- mysql -u root -p
- use mysql;
- 宝塔终端,查看密码,结果是密码有问题
(3.数据模型出错
- 在(venv)下运行 执行:python manage.py migrate
-
- 它可以让我们在修改Model后可以在不影响现有数据的前提下重建表结构。
(4.无法访问重启后的资源
- 确认是使用Django模块, 而不是使用python
- 使用uwsgi启动。
这里测试运行: 公网ip + 已经放行的端口
, 虚拟环境下使用
python mange.py runserver 0.0.0.0:3233 上面的settings只要允许 公网IP主机访问就行。
浏览器中,如果可以正常访问,说明项目可以运行,没有问题
访问地址 : 公网ip:端口
查看 端口是否已经使用, 查看 uwsgi是否可以正常运行
下面是python管理器正常运行的项目, 项目是会占有 一定的CPU, 如果是占用不到百分之一,那就有可能出现了问题。
uwsgi.log` 自定义位置,生成的项目运行文件 , 但真实上线必需删除控制台的输出
1.可以看到uwsgi 运行的日志
2.可以看到 项目在控制台输出的信息
前言,布署环节不应该修改以上测试成功的代码,包括配置路径。这里只是检查是否有缺少的设置。uwsgi.ini不要去修改,上面已经是正确的配置。
(1.端口占用
首先暂停相关已经开启的uwsgi.ini 服务,(就是关闭网站),然后kill杀死进程。
在阿里云服务器或者宝塔服务器终端云kill端口 先查询端口 netstat -anp | grep 3233 再查看端口对应的PID lsof -i:3233 根据PID杀死进程 kill -s 9 xxxxxx 或者 kill xxxx
(2.无法启用python项目 (????)
然后在创建项目的时候,仔细查找刚才关闭的uwsgi.ini是否还存在(否则会python管理器会无法运行)
也可以再次查看 3233 , 3234端口。
宝塔面板的终端和项目下的终端
最后在 /www/wwwroot/www.myDjangoAPI.com/uwsgi.log 项目运行的日志文件中找到
WARNING: you are running uWSGI as root, 或者说 chdri() : to /www/wwwroot/www.myDjangoAPI.com/ 没有找到,则一定是nginx的配置出现 了问题。
其实就是nginx找不到这个子文件夹,因为nginx 中有个 include属性 它可以帮助我们找到这个子目录。
每次开关网站,都有可能会自动关闭这个选项。
python管理器又可以重新开启这个项目。
特别说明: 如果不行的话,可以尝试使用 命令启动 uwsgi.ini ,而不是通过python 管理器
(3. 出现无法访问网站
出现无法访问,并且端口开启却没有使用。 那就是项目还有缓存, 即使 nginx 重启,也没有更新项目。
重启nginx服务必须先暂停所有网站的连接(网站+管理器)
先检查是否可以访问网站, (默认有index.html文件, 或者可以创建一个getapi.php文件)
使用 xxxx:端口/getapi.php
- <?php
-
- header('Access-Control-Allow-Origin: *'); ## 使用真正接口的参数
- echo '{ "username" : "zhangsan", "content":"这是一个测试"}';
-
- echo "这是一个getapi.php";
如果还是访问不了,那就检查nginx服务有没有开启。 修改完nginx, 打开 需要运行的项目, 并重新启动nginx, 一般就可以 使用 xxxx:端口/getapi.php
再检查是否放行的端口没有正确使用(在宝塔的 安全
选项卡中可以查找端口的使用情况)
重要的事情说三遍:暂停所有项目,然后再操作nginx ( 点击首页, nginx中的重启)
如果说前面已经点击 “nginx面板” 的 重载配置 , 并且网站使用的是默认 80端口, 那原来默认是指向 888 端口的,所以需要修改为 80 端口。(这是nginx的总配置)
然后检查是否是 uswgi.ini 的问题
uwsgi.ini 文件配置 --》 当前网站项目 的 文件配置
不过这又 回到无法启用python项目的 步骤了
,主要是查看 uwsgi.ini 的端口(3234),然后查看一下 uwsgi.ini的运行日志。
最后,在uwsgi.ini中出现的异常,自身解决不了,可以找度娘。
(4. 504 网关错误
即使再变,也不要修改以上基本流程的代码。 本次测试,其实,只是nginx服务器出现了小的异常
如果有问题, 再去看看来时的方向。 使用宝塔面板快速部署Django项目-Django社区,Django中文网,django教程,Django!
- **部署使用的端口**
-
- (1. 外网访问这个公网的项目,使用的是3233这个端口
- (2. (nginx配置文件就是监听这个3233 ),当接收到外来的访问,
- 就会找到 公网下的本地路径 location /{ },. 如果外网需要访问静态资源
- 还需要设置静态目录 location /static/{ }
-
- (3. 而location / { 里面包含了 是否可以自启动的 模块 (uwsgi.ini )
- 127.0.0.1:3234 }, 指定这个公网下的本地运行端口 3234. 如果没有找到直接路
- 径,就会在运行的项目中是否有相关的路由(外网是不能直接访问 运行项目中
- 的 static文件)
- (4. 而项目下的 uwsgi.ini 使用的是 127.0.0.1:3324 这个端口, 并且 python管理器
- 也是使用这个 3234 端口。 uwsgi.ini 是自启动的功能, python管理器 主要是对
- 项目的模块进行管理, 并且连接数据库 (如果外网需要访问 静态资源,则不能
- 直接在项目中获取失败,毕竟它没有返回的接口数据)。</span></span>
一个公网下,可以添加多个端口号来制作成不同的项目。
wwwroot目录
这个目录可以放前端项目,也可以放置后端项目,就是改端口号
单个项目:
一般来说 公网 IP
可以直接配置 vue
前端项目, 访问也可以直接通过 公网 IP
访问网站。 当然,把唯一的 公网IP的访问功能
让给后端也可以。就是省去添加端口号(80)。同时,也可以使用反向代理,访问在 wwwroot
运行的nodejs 后端接口 。
多个项目:
在单个项目的基础
上, 可以在不先指定域名的情况下,先创建项目再配置域名。而后配置的域名就可以使用再 端口 的形式,制作多个后端接口。 公网IP + 不同端口
访问后端接口, 公网 IP
访问前端网站。
一般使用python的 rest_framework
去安装的制作接口的话,就需要使用这种方式。后端接口也可以直接指定域名。
无法访问通过 DNS找到公网 IP + 80
, 但可以使用 公网 IP + 其它端口
公网ip 默认端口号 80, 花生壳的域名无法解析到结果, 只有通过 公网号IP + 端口
才能通过域名解析,找到对应的主机。
1.创建一个空的域名。不允许在 这里使用 公网号IP + 不同端口
格式
2.修改项目指向的项目的域名 (这里可以直接放置真实域名)
3.开放端口后,可以通过 公网号IP + 不同端口
格式访问
4.上面可以直接添加真实域名,DNS解析到服务器。
也可以使用花生壳的域名, 添加映射的 公网号IP + 不同端口
,找到IP服务器。
通过花生壳的域名访问目标服务器,ok, 搞定。
宝榙和阿里云服务器上放行3306端口。
定塔放行数据库权限 ,(所有人访问)
navcat访问宝塔数据库 (名称是 xxx, 密码是root, 端口3306, 主机 :公网ip)
创作不易,请不要转载!支持原创,才是正道。我们要有所为,有所不为!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。