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  *.*.*.*;#这里写服务器ipcharset 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记得启动

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE基础小知识Ⅱ(很容易错!!!)

1. 变量被final修饰后不能再指向其他对象,但可以重写 如果是引用变量被final修饰,那么的确如此; 基本变量不能重写 2. 下列代码的输出结果是? public class Test {static {int x 5; }static int x,y; public static void ma…

鸿蒙应用开发DevEco Studio工程目录模块介绍

面向开发者,HarmonyOS 推出了 DevEco Studio 和 Dev Device Tool 两款开发工具,前者目前迭代至 3.1 版本(对外开放版本),用于开发 HarmonyOS 应用;后者用于开发智能设备 应用的工程主体结构如上图 在这里我…

JWT深入浅出

文章目录 JWT深入浅出1.JWT是什么2.为什么选JWT2.1 传统Session认证2.2 JWT认证 3.JWT怎么用4. jwt绝对安全吗? JWT深入浅出 1.JWT是什么 JWT(JSON Web Token)是一种用于在网络应用间传递信息的开放标准,通常用于身份认证和非敏…

MSP430环境搭建

1.下载ccs编译器 注意:安装路径和工作路径不能出现中文! 没有说明的步骤就点next即可! 1.1下载适合自己电脑的压缩包。 下载好压缩包后解压,点击有图标进行安装。 1.2创建一个文件夹用于安装编译器位置 选择安装地址&#xff0…

Lombok介绍、使用方法和安装

目录 1 Lombok背景介绍 2 Lombok使用方法 2.1 Data 2.2 Getter/Setter 2.3 NonNull 2.4 Cleanup 2.5 EqualsAndHashCode 2.6 ToString 2.7 NoArgsConstructor, RequiredArgsConstructor and AllArgsConstructor 3 Lombok工作原理分析 4. Lombok的优缺点 5. 总结 1 …

【论文阅读笔记】jTrans(ISSTA 22)

个人博客地址 [ISSTA 22] jTrans(个人阅读笔记) 论文:《jTrans: Jump-Aware Transformer for Binary Code Similarity》 仓库:https://github.com/vul337/jTrans 提出的问题 二进制代码相似性检测(BCSD&#xff0…

微火全域外卖城市合伙人究竟是什么?详细介绍

随着外卖市场的蓬勃发展,微火全域外卖团购业务正逐渐崭露头角,成为商家与消费者之间的新桥梁。这种业务模式,也被称为全域合伙人,其魅力在于其独特的多平台销售策略和简便的管理系统。那么,这种全域外卖城市合伙人&…

qt for android 的架构原理

qt for android实现架构,分享这几幅很不错图。来自于 《Qt 林斌:整合Android IVI平台打造统一的Qt数字座舱体验》 1.实现架构图 2.qt for android能力 3.java 和 qt混合开发 4. AutoMotive

找不到msvcp120dll,无法继续执行代码的多种解决方法分享

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,我们需要采取一些措施来修复丢失的msvcp120.dll文件。本文将介绍6种常见的解决方法&…

服务器远程桌面局域网连接不上的解决方法

在企业网络环境中,服务器远程桌面局域网连接不上是一个常见且棘手的问题。这种问题可能导致工作效率下降,甚至影响业务运营。因此,我们需要采取专业的方法来解决这一问题。 服务器远程桌面局域网连接不上的解决方法: 1、确保服务器…

土壤墒情自动监测站—墒情异常数据报警提示

TH-TS600土壤墒情自动监测站通常配备有预警提示功能,用于在墒情出现异常情况时及时向用户发出警告。这一功能对于农业生产至关重要,因为它可以帮助农民或农田管理者及时发现土壤墒情的变化,并采取相应的措施来确保作物健康生长。 土壤墒情自动…

OBS插件--音频采集

音频采集 音频采集是一款 源 插件,类似于OBS的win-capture/game-capture,允许从特定应用程序捕获音频,而不是捕获整个系统的音频。避免了因为特定音频的采集而需要引入第三方软件,而且时延也非常低。 下面截图演示下操作步骤: …