2024最新从0部署Django项目(nginx+uwsgi+mysql)

云服务器

我这里用的是腾讯云免费试用的2H4Gcentos服务器(后升级为2H8G,保险一点提高内存)

因为网上很多关于django部属的教程都是宝塔啊,python版本控制器啊这种的,我也误打误撞安装了宝塔面板,但这里我只是简单初始化了一下,然后就删除了

(因为它自带安装了nginx和php,mysql啥的,弄得环境很混乱,下载了如果不熟练宝塔操作的话建议删除宝塔,删除的时候要sudo一下

[wget http://download.bt.cn/install/bt-uninstall.sh],[sh bt-uninstall.sh]

它会自己将额外下载的软件都删掉),

后续其他安装软件,配置环境,部署都是通过命令行+pycharm操作,不使用宝塔提供的建站功能。

原因是原版的python版本控制器已经下架,其次现在的宝塔python项目建站对于配置项目环境非常不便,比如我们不想要服务器自带的3.6版本python,并且有大量的其他库需要安装,这时候宝塔提供的python安装版本不属于一个实际的环境,也就是说我们能得到这个版本的python,但是并无法将其当做环境配置。(据我了解好像通过软链接或者其他办法可以修改系统环境)

服务器配置

anaconda

其实不在服务器上的话,大多数人应该自己本地都有anaconda的,由于服务器上环境实在是需要虚拟环境,不管是哪种部属办法,所以我们这里还是用anaconda来管理虚拟环境,也方便了后续pycharm中选择环境

这里要先自己创建一个文件夹存放anaconda,有宝塔面板的话相当于也可以图形化界面操作,没有的话如果用腾讯云提供的在线命令行窗口也可以进行图形化界面操作,如果是其他ssh方式连接的命令行就需要mkdir了

最新的linux安装anaconda指令(不sudo不行)

sudo wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh

这条命令得到的.sh文件会直接存放在当前文件夹下,也就是提前要自己cd改好当前路径

确定当前文件夹下有.sh文件,执行命令

bash Anaconda3-2024.02-1-Linux-x86_64.sh

然后按回车开始阅读相关条例,大概要一直按到15.12,(可以按住回车不放)

到这里的时候可以输入yes了,然后会提供安装路径选择,这时候可以填上刚刚创建的文件夹了,也可以直接回车,我看这个路径就是我们用户路径下就没改了,直接按得回车

新建一个窗口后打开时就会有一个默认的用户base环境了

运行一个简单的conda指令检测安装环境是否正确

创建自己指定版本的conda虚拟环境(这里以3.9为例)

conda create -n env_name python=3.9

激活环境:conda activate env_name

这里的env_name是自己取的,激活的时候要与创建的时候名字一致


nginx

我腾讯云服务器上的系统仓库中没有nginx,不能直接执行yum install nginx

直接从nginx官网下载源文件压缩包进行操作,我选择了稳定版本1.24.0

>cd ~

>wget http://nginx.org/download/nginx-1.24.0.tar.gz

>tar -zxvf nginx-1.24.0.tar.gz

>cd cd nginx-1.24.0

>./configure --prefix=/usr/local/nginx --with-http_ssl_module  // 解压到/usr/local/nginx文件夹下,并且支持ssl

>make

>sudo make install

输入nginx -v看配置是否正确

我这里是遇到了好几类错误

1.关于库文件找不到(如openssl相关库)

2.日志文件找不到,打不开,无权限...

3.启动时nginx权限不够,无法绑定默认端口(80)

1.第一个问题我的解决方案是,通过find命令,找到对应的库,设置软链接

[以nginx: error while loading shared libraries: libcrypto.so.3: cannot open shared object file: No such file or directory为例]

①sudo find / -name "libcrypto.so.3"

②sudo ln -s /home/lighthouse/anaconda3/lib/libcrypto.so.3 /usr/lib64/libcrypto.so.3

注意:

第二步左侧的路径是执行第一步后,命令行输出的众多路径中选择一条(避免后续出现权限不足的问题,如果有home路径下的可选项尽量都选home路径下的)

2.第二个问题我的解决方案是,如果文件不存在,那就创建文件,如果文件夹不存在就创建文件夹,如果没权限,就直接将权限开到最大

>>创建文件的方法我就省略了,提一下开放权限的命令

cd /usr/local/nginx/

chmod -R 777 logs 

注意:

这里的777是最高权限的一个代码,不要改

logs是你要开放权限的文件夹

3.第三个问题,使用vim进入配置文件将监听端口改为8080

具体vim指令进入文件后的操作如上图所示

(另:80端口也行,好像用sudo指令启动就不会报错)

还有可能遇到pid文件不存在的情况,pid一般由nginx启动自己生成,是为了防止重复启动,表示nginx进程已经存在的标识文件,所以这个文件不存在的问题一般不用管

这里再附上几个测试用的指令

ps ajx|grep nginx  //我的服务器好像是一直有一条记录,启动后会有四条

//查看80端口使用情况(正常情况未启动时应该没有记录输出)

netstat -tuln | grep :80

//查看nginx版本

nginx -v

//检查配置文件的正确性

nginx -t

//根据指定配置文件启动nginx(不要打多余的空格,每个间隔一个空格即可)

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

//友好退出nginx

/usr/local/nginx/sbin/nginx -s quit

//暴力退出nginx

/usr/local/nginx/sbin/nginx -s stop

以上除了三、四条执行不需要sudo以外,如果遇到指令不被允许执行的情况自行添加sudo

执行上面的启动指令之后,

看到这个页面,nginx的正确配置以及启动就结束了


项目python环境配置

先启动conda环境,输入conda list如果找不到指令的话,进入~/.bashrc,在末尾添加conda可执行文件的环境变量(这里也是通过vim指令修改)

export PATH=~/anaconda3/bin:$PATH

然后source ~/.bashrc,尝试conda activate env_name

系统提示让我输入conda init指令,输入完后又提示我要重启对话框,然后来到如下页面

注意这里的区别,有base则证明conda是启动了的,可以执行相关conda命令

然后activate我们的环境变量名称 conda activate env_name

此时进入到我们Django项目下找到requirements.txt文件(将项目文件上传到服务器的方法有很多,且没什么需要注意的点,这里就自行查找)

导出requirements.txt的方法(进入项目根目录)

pip install pipreqs

pipreqs .

在进入项目目录后,确保当前路径下存在requirements.txt文件

执行pip install -r requirements.txt


安装uwsgi

pip install uwsgi 报错:(python3.9版本)

ERROR: Could not build wheels for uwsgi, which is required to install pyproject.toml-based projects

解决办法:更换安装指令(不要信网上其他的安装办法,安一堆结果还是各种环境错误)

(conda指令yyds!!!)

conda install uwsgi

配置uwsgi.ini文件

在项目根目录下创建该文件(project/project/uwsgi.ini)

uwsgi --stop uwsgi.pid //根据pid文件停止uwsgi服务

uwsgi --ini uwsgi.ini //根据uwsgi.ini启动uwsgi服务(要cd到配置文件的上级目录)

配置nginx.conf文件

http {
    #其他内容
    upstream Django{
    server 127.0.0.1:8001;
    }
    server {
        listen       80;
        server_name  *.*.*.*;#这里写服务器ip

        charset utf-8;

        location /media {
        alias /home/lighthouse/PocketGen/media;
        }
        location /static{
        alias /home/lighthouse/PocketGen/static;
        }

        #access_log  logs/host.access.log  main;

        location / {
        uwsgi_pass Django;#这里要和upstream对应
        include uwsgi_params;
        }
    }
}

uwsgi.ini里的配置项只能多尽量不要少于我的

比如pidfile是用来停止uwsgi服务的,不然有点麻烦

其次log文件是帮助我们在debug=false情况下很好排查错误的地方

其他的配置也都有一定作用,需要修改可以自行查找相关资料

后续配置问题补充:

启动nginx发现一直502 bad gateway

查看uwsgi.log发现

uwsgi-invalid-request-block-size invalid request block size: *** (max 4096)...skip

解决办法:

nginx配置文件:添加两行:

uwsgi_buffer_size 16k;

uwsgi_busy_buffers_size 24k;

uwsgi.ini添加一行:

buffer-size = 32768 // 这个数值可以根据需求继续加大

后续配置问题补充:

打开网页无法正常加载对应静态文件

问题原因:nginx自身权限不足,需要在配置文件第一行改(补)写一行:

user root;


MySQL安装及配置

这里附上三篇保姆级教程,基本解决配置的全过程,且是24年最新的

http://t.csdnimg.cn/nCsAG

http://t.csdnimg.cn/cr3cC

http://t.csdnimg.cn/jOkPJ

留一句心得:凡是莫名其妙不可以执行的命令,用sudo有奇效

如果安装遇到这个错误在教程中有解决办法,补充执行一条命令即可,其他命令无需重复执行,且不影响mysql的正常使用

登录时遇到:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

处理办法:

通过指令找到该文件,并设置软链接即可

find / -name mysql.sock

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

软链接重启机器后概率会失效,最好还是去设置环境变量

命令总结:

ps -ef | grep mysql        //查看mysql进程

netstat -tlnp | grep mysql //查看mysql启动端口(默认3306)

systemctl start mysqld.service //启动mysql

systemctl stop mysqld.service //结束

systemctl restart mysqld.service //重启

mysql -uroot -ppassword //root为用户名,password为密码,登录命令

use mysql; //进入mysql数据库(有分号)

quit //退出mysql

大多数教程都是教navicat的连接方式,我这里附上dbeaver的连接方式

因为也是完全自己一个人尝试了很久试出来的

连接后大致看到的就是这样

导入本地数据库(导入已有数据)

先创建一个数据库,为了方便导入,数据库的名字也和本地取一样的(导出sql文件的时候会带有数据库名字的信息)

执行第一次python manage.py makemigrations

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.

这是我在本地没见过的报错,查找相关资料以后得出解决步骤:

//安装mysql驱动并指定为清华源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pymysql

//settins.py中对照修改好对应信息,host不用改

DATABASES = {
    'default':
    {
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': '', # 数据库名称
        'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
        'PORT': 3306, # 端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '', # 数据库密码
    }
}

//settings.py同级目录下找到__init__.py文件,写入以下代码

import pymysql
pymysql.install_as_MySQLdb()

剩下执行时django会帮我们检查项目中所有的导包问题,环境问题,以及语法错误

只需要对应做好环境配置修改即可

同时注意,清空各个app中的migrations文件,以便于有一个干净的数据库操作记录

然后执行migrate,显示信息应该大致相同

通过migrate创建出我们所有需要用的数据库表,然后本地只导出我们自己使用的那部分表的数据进行插入就好了

不熟悉导入导出操作的可以本地用自己本地数据库创建一个新库,模拟导入导出的过程,感受一下


PyCharm连接服务器

用pycharm连接服务器的好处在于有代码或者文件的更改能实时对应上服务器的状态,方便后续网站资源的更改和代码的修改

首先需要一个pycharm专业版,能够支持ssh连接,然后就是找一篇浏览高的博客(doge)

这里Pycharm连接我感觉对于Django项目的需求不是很大吧,服务器环境配好之后,后续代码小改的话,用本地run server 测试就够了,服务器只是方便后续上线供公网访问

大致的操作就是这样了,不用pycharm的话,项目中期可以试着将项目版本挂上去试试能不能跑,后期最终版确定之后,可能有新加的静态文件,可能有数据库的改动,省事的操作就是将老项目文件删了,然后重新收集一下静态文件,把数据库也全部删了,重新迁移一次。


(以上纯扯淡,虽然说不连,但还是连了

说下为什么还是连了,因为我项目文件有好几个G,而传统的文件传输方式都不支持大文件的传输,压成zip也不行,后来想起pycharm传zip再unzip可行,而且比较快,所以花了几分钟连了一下(之前连过两次,花了几个小时,也算是小小成长了一波!)

一、打开项目的python解释器,添加(选择ssh方式)

主机就是服务器的ip,用户一般添root,然后填密码啥的

二、选择conda虚拟环境

找到conda可执行文件,一般在bin目录下,名字就叫conda

然后加载已有的环境,选自己配好的那个就行

三、选择项目映射路径(这里是方便进行自动上传文件,自己选个位置就行了)

实在还没懂,点击链接查看图文教程


项目的额外事项

celery

前置的环境配置就是pip install 一堆,配置完之后再pip install 缺什么装什么就行

celery配置教程1

celery配置教程2

启动worker的指令,在项目根目录下

celery -A celery_task worker -l INFO

推荐后台启动,不然每次connection一断,worker也停了

Celery启动与停止教程

ps -ef | grep celery

redis

centos7无痛安装redis教程,最省事的一集

无需考虑gcc编译器版本不够,符合大部分服务器的初始配置

1.启动redis服务

redis-server

2.查看redis的启动状态

ps aux|grep redis

3.进入redis测试连接状态

redis-cli(服务启动了的话,左边就会显示运行的ip以及端口)

ping

关机后重启需要注意的点

  1. mysql启动文件用的软链接,得重新定向一下
  2. nginx和uwsgi可以直接用正常方法启动
  3. redis记得启动
  4. worker记得启动

到这里项目基本已经可以上线运行服务了,完结撒花~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/615366.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub靶场之FunBox-5

一.环境搭建 1.靶场描述 Lets separate the script-kids from script-teenies.Hint: The first impression is not always the right one!If you need hints, call me on twitter: 0815R2d2 Have fun...This works better with VirtualBox rather than VMwareThis works bett…

39-5 入侵检测系统(IDS)- 安装配置IDS(注意我没安装成功,阅读需谨慎)

官网:Snort Rules and IDS Software Download 参考: (这位大佬分享了安装包下载链接):https://www.cnblogs.com/taoyuanming/p/12722263.html (安装过程参考这位大佬):Snort 安装与配置(CentOS 7)_centos 7 snort-CSDN博客一、安装 IDS(我这里在 CentOS 7 虚拟机中安…

QT学习(1)——创建第一个QT程序,信号和槽,打开关闭窗口的案例

目录 引出规范和帮助文档创建第一个Qt程序对象树概念信号signal槽slot自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 打开关闭窗口案例 总结 引出 QT学习(1&#…

5个巨好用的论文查重降重/aigc降重网站!

给大家分享5个巨好用的论文查重降重,aigc降重网站! 1、checkbug↙:每天免费查重一次!用超级降重改全文,ai在线改写段落,智能查降查本系统一遍过稿,有套餐!支持aigc降低!…

精密机械设备运用弧形导轨中如何保持高精度?

导轨精度标准是对导轨的精度统一规定,无论是滑移运动、滑块运动还是旋转运动,都有一定的精度规格。而导轨精度标准是为了保证导轨运动时的精确度而设定的精度标准,它是规定各种导轨的精度统一标准,是机械设备的运动精度基础和保障…

履带车配置 一些小细节

履带车配置 一些小细节 485/CAN模式 自动识别上电后第一帧是485还是CAN指令,就进入对应通讯模式用485通讯这个驱动器通讯可以了,你再接CAN通讯,这个驱动器必须断电重启一下;不能在通电模式下切换 驱动器拨码开关 两个驱动器的…

家电无缝连接的奥秘—通过酷开系统实现智能家居互联互通

智能家居是消费升级与技术升级的共同产物,是时代发展的必然结果,日渐深入人心也是大势所趋。酷开科技智慧AI,让智慧家居成为生活中的一部分,以酷开系统为中心,实现家庭内智能家居的连接,并可通过酷开系统进…

抽空学学go

2024年5月9日11:14:24 学习go 看课8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili 文档[8小时转职Golang工程师 (yuque.com)]( 1.安装go 2024年5月9日11:27:16 2.安装 vscode go配置环境 vs code配置go开发环境 (zhihu.com) vscode里面配置代理&…

windows设置软件开机自启动

winr 输入 shell:startup C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup把要开机自动启动的程序的快捷方式放进来 输入快捷键 ctrlshiftesc 打开任务管理器 同时在任务管理器也可以看到

2.前端路由的配置和使用

一,路由的作用 路由的作用就是将页面文件跟URL地址形成对应匹配 二,如何安装路由 这里我们采用pnpm的方式在项目中执行 pnpm install vue-routernext --save三,路由如何使用 首先创建一个我们需要访问的页面文件,这里我先创建…

程序员的归宿。。

大家好,我是瑶琴呀。 相信每个进入职场的人都考虑过自己的职业生涯规划,在不同的年龄段可能面临不同挑战,这点对于 35 的人应该更为感同身受。 对于程序员来说,大部分人的职业道路主要是下面三种:第一条,…

【自动驾驶|毫米波雷达】逻辑化讲解测角全流程

第一次更新:2024/5/7 目录 一. 引入 基础概念 二. 测角原理 1. 接收天线不同位置 2. 角度几何关系 3. 角度正负规定 4. 角度测量 5. 最大不模糊角 三. 角度分辨率 1. 相位变化量 2. 角度表示 3. 角度变化量 三. 测角算法 1. 三维快速傅里叶变换 (3D-FFT&…

maven远程仓库访问顺序

首先需要了解一下各个配置文件,主要分为三类: 全局配置文件(${maven.home}/conf/settings.xml),maven安装路径下的/conf/settings.xml用户配置文件(%USER_HOME%/.m2/settings.xml),windows用户文件夹下项目配置文件:p…

汽车EDI:安通林Antolin EDI 项目案例

安通林(Antolin)是一家全球性的汽车零部件制造商,专注于汽车内饰系统和零部件的生产,致力于创新和采用先进的技术。近年来 安通林Antolin 推动其供应商部署EDI系统,使得双方能够通过EDI传输业务单据,极大提…

制造业如何选择合适的项目管理软件?(内含软件推荐)

近期,收到很多小伙伴的提问:“想了解制造行业如何选择到合适的项目管理软件?”在竞争激烈的市场环境中,有效的项目管理对于制造业的发展至关重要,而项目管理软件则是重要支撑,能帮助企业更好地规划和跟踪项…

OpenAI推动人工智能商业化:萨姆·奥尔特曼的《星门计划》

Sam Altman最近在斯坦福大学做了一次采访,这实际上是迄今为止最具洞察力的采访之一,我将深入探讨他说的几件事,并解释为什么它们实际上是如此具有洞察力,因为这确实是一次非凡的采访,所以,不再浪费时间&…

CSS 网格布局一行X个排列

<div class"icon-box"><divv-for"(item,index) in icon" :key"index" class"icon"style"cursor: pointer">{{item}}</div></div>.icon-box{display: grid; /**网格布局*/grid-template-columns: r…

烽火三十六技丨网络资产安全治理平台新版本发布,一文看懂四大核心优势

云计算、移动互联网、物联网等技术飞速发展&#xff0c;网络环境愈发开放互联&#xff0c;原有的资产管理方式已难以适应当下的变化。同时&#xff0c;网络资产需求的突发性和人为疏忽&#xff0c;也时常导致资产数量不明、类型模糊、安全漏洞检查不全面等问题。因此&#xff0…

鸿蒙ArkUI:【编程范式:命令式->声明式】

命令式 简单讲就是需要开发用代码一步一步进行布局&#xff0c;这个过程需要开发全程参与。 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Objective-C ObjectiveC 复制代码 UIView *cardView …

SNMPv3-原理浅谈+报文示例+简易配置

个人认为&#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息&#xff0c;更加便于理解协议。 因此本文将在 SNMPv3 协议报文的基础上进行介绍。 SNMPv3 相关 RFC 文档。 关于 SNMPv3 的基本内容介绍&#xff0c;可参考RFC3410-Intro…