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.mzph.cn/pingmian/10406.shtml

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

相关文章

浅谈运维数据安全

在数字化日益深入的今天,运维数据安全已经成为企业信息安全体系中的核心要素。运维工作涉及到企业信息系统的各个方面,从硬件维护到软件升级,从网络配置到数据备份,无一不需要严谨的数据安全保障措施。本文将从运维数据安全的重要…

民航电子数据库:select查询时部分字段缺失

目录 前言异常排查原因解决使用systemPath标签引入本地Jar包后无法打包 前言 1、对接民航电子数据库 2、框架为shardingsphere caedb mybatis 3、部分SQL查询时,会出现字段缺失的情况 4、查看日志打印出来的SQL,字段并未缺失 异常 这里省略SQL语句…

FreeRTOS事件组

什么是事件标志组? 事件标志位 :表明某个事件是否发生,联想:全局变量 flag 。通常按位表示,每一个位表示一个事件(高8 位不算) 事件标志组 是一组事件标志位的集合, 可以简单的理解事件标志组,就是一个整数。 事件标志组本质是一个 16 位或 32 位无符号的数据类型…

鸿蒙开发接口Ability框架:【DataAbilityHelper模块(JS端SDK接口)】

DataAbilityHelper模块(JS端SDK接口) 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在FA模型下使用。 使用说明 使用前根据具体情况引入如下模块 import featureAbility from …

Excel中实现md5加密

1.注意事项 (1)在Microsoft Excel上操作 (2)使用完,建议修改的配置全部还原,防止有风险。 2.准备MD5宏插件 MD5加密宏插件放置到F盘下(直接F盘下,不用放到具体某一个文件夹下) 提示:文件在文章顶部&…

【教程向】从零开始创建浏览器插件(三)解决 Chrome 扩展中弹出页面、背景脚本、内容脚本之间通信的问题

第三步:解决 Chrome 扩展中弹出页面、背景脚本、内容脚本之间通信的问题 Chrome 扩展开发中,弹出页面(Popup)、背景脚本(Background Script)、内容脚本(Content Script)各自拥有独立…

互联网轻量级框架整合之HibernateMyBatis

持久层框架 Hibernate 假设有个数据表&#xff0c;它有3个字段分别是id、rolename、note, 首先用IDEA构建一个maven项目Archetype选择org.apache.maven.archetypes:maven-archetype-quickstart即可&#xff0c;配置如下pom <project xmlns"http://maven.apache.org/…

攻防世界-web-unseping

题目 知识点 PHP代码审计PHP序列化和反序列化PHP中魔术方法命令执行绕过方式 解读源码 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function …

【算法】动态规划之背包DP问题(2024.5.11)

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列 【算法】动态规划之线性DP问题-CSDN博客 01背包 步骤&#xff1a; 分析容量j与w[i]的关系&#xff0c;然后分析是否要放…

户籍管理系统的设计与实现

【免费】户籍管理系统的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296790 ​​​​​​​户籍管理系统的设计与实现 摘 要 当今社会人们生活质量越来越高&#xff0c;人们对生活品质的追求不断提升&#xff0c;对于孩子求学&#xff0c;变更住…

Selenium中的隐式等待和显式等待

在Selenium中&#xff0c;“等待”在执行测试中起着重要作用。在本文中&#xff0c;您将学习Selenium中“隐式”和“显式”等待的各个方面。 在本文中&#xff0c;您将学习到 1. 为什么我们需要在selenium中等待&#xff1f; 2. 隐瞒等待 3. 明确等待 4. 流利的等待 为什么…

Join优化规则及应用层BI系统实践

目录 一、背景 二、查询优化器概述​编辑 2.1 System R Optimizer 2.2 Volcano Optimizer 2.3 Cascade Optimizer 三、Join相关优化规则 3.1 JoinReorder 3.1.1 少量表的Reorder 3.1.2 大量表的Reorder 3.1.3 星型模型的Reorder 3.2 外连接消除 3.3 Join消除 3.4 谓…

UDP多播

1 、多播的概念 多播&#xff0c;也被称为组播&#xff0c;是一种网络通信模式&#xff0c;其中数据的传输和接收仅在同一组内进行。多播具有以下特点&#xff1a; 多播地址标识一组接口&#xff1a;多播使用特定的多播地址&#xff0c;该地址标识一组接收数据的接口。发送到多…

[Vision Board创客营]--使用openmv识别阿尼亚

文章目录 [Vision Board创客营]使用openmv识别阿尼亚介绍环境搭建训练模型上传图片生成模型 使用结语 [Vision Board创客营]使用openmv识别阿尼亚 &#x1f680;&#x1f680;五一和女朋友去看了《间谍过家家 代号&#xff1a;白》&#xff0c;入坑二刺螈&#xff08;QQ头像也换…

小程序地理位置接口申请教程来啦4步学会

小程序地理位置接口有什么功能&#xff1f; 如果我们提审后驳回理由写了“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;如果你也碰到类似问题&#xff…

电火灶是燃气灶吗?节能、环保效果怎么样?

随着科技的进步&#xff0c;厨房中的传统设备也逐步被新型、高效且环保的设备所替代。电火灶&#xff0c;作为一种新型的电火烹饪设备&#xff0c;逐渐进入人们的视野。那么&#xff0c;电火灶是否与传统的燃气灶有所区别&#xff1f;其节能与环保效果又如何呢&#xff1f;下面…

2024.5.8 关于 SpringCloud —— Ribbon 的基本认知

目录 Ribbon 负载均衡原理 工作流程 Ribbon 负载均衡规则 Ribbon 负载均衡自定义化 代码方式修改规则 配置文件方式修改规则 小总结 Ribbon 设定饥饿加载 Ribbon 负载均衡原理 工作流程 order-service 使用 RestTemplate 发送请求&#xff0c;随后该请求将会被 Ribbon 所…

【强训笔记】day20

NO.1 思路&#xff1a;先判断能对砍几个回合&#xff0c;取最小值&#xff0c;因为回合数是整数&#xff0c;所以可能存在都大于0的情况&#xff0c;再判断一下如果都存活就再对砍一次&#xff0c;直到一家存活或者都死亡。 代码实现&#xff1a; #include<iostream>u…

土地档案管理关系参考论文(论文 + 源码)

【免费】javaEE土地档案管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296786 土地档案管理关系 摘 要 研究土地档案管理关系即为实现一个土地档案管理系统。土地档案管理系统是将现有的历史纸质档案资料进行数字化加工处理&#xff0c;建成标准化的…

TikTok海外运营:云手机的四种快速变现方法

随着TikTok用户基数的持续扩大&#xff0c;这个平台已成为全球创业者和品牌的新战场。其用户群接近20亿&#xff0c;并以年轻用户为主力军&#xff0c;市场渗透率逐年攀升。无论是大型组织、知名品牌&#xff0c;还是个人创业者&#xff0c;都无法忽视TikTok所带来的巨大商机。…