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.rhkb.cn/news/325034.html

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

相关文章

【吊打面试官系列】Java高并发篇 - 同步方法和同步块,哪个是更好的选择?

大家好,我是锋哥。今天分享关于 【同步方法和同步块,哪个是更好的选择?】面试题,希望对大家有帮助; 同步方法和同步块,哪个是更好的选择? 同步块是更好的选择,因为它不会锁住整个对象…

【notepad++】使用

1 notepad 下载路径 https://notepad-plus.en.softonic.com/download 2 设置护眼模式 . 设置——语言格式设置——前景色——黑色 . 背景色——RGB :199 237 204 . 勾选“使用全局背景色”、“使用全局前景色” . 保存并关闭

Apache Flume概述

Apache Flume概述 1.Flume定义 ​ Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。 它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。 2.Flume基础架构…

【Web后端】jsp基础知识_请求转发和重定向

1.jsp基础知识 1.1简介 java server page&#xff0c;运行在服务器端的页面java代码html代码java代码全部都放在<%%>中间 1.2jsp表达式 作用&#xff1a;将动态信息显示在页面上&#xff0c;以字符串方式&#xff0c;返回给浏览器端语法&#xff1a;<%变量或表达式…

Debian安装Redis、RabbitMQ、Nacos

安装Redis&#xff1a; 启动Redis、开机自启动 sudo systemctl start redis-server #启动sudo systemctl enable redis-server #开机自启 Redis状态(是否在运行) sudo systemctl status redis-server #查看运行状态 redis-cli ping # 客户端尝试连接 安装RabbitMQ&#xff0c;…

【回溯 网格 状态压缩】52. N 皇后 II

本文涉及知识点 回溯 网格 状态压缩 LeetCode52. N 皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 示例 1&#xff1a; 输入&#x…

conan2 基础入门(02)-安装

conan2 基础入门(02)-安装 文章目录 conan2 基础入门(02)-安装⭐前言⭐安装python安装安装包安装自行操作 ⭐验证配置环境变量命令行验证conan配置文件 END ⭐前言 Conan 2.0: C and C Open Source Package Manager 官方提供三种安装conan的方式。分别为&#xff1a; Recommen…

1290.二进制链表转整数

给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1&#xff1a; 输入&#xff1a;head [1,0,1] 输出&#xff1a;5 解释&#xff1a;二进制数 (101) 转化为十进制…

在k8s中部署Prometheus并实现对k8s集群的监控

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Prometheus&#xff1a;监控的神》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、k8s简介 2、 Prometheus概述 二、准备k8s环境 1、…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git&#xff0c;本质上还是使用本地安装的Git软件&#xff0c;所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

HTTP超时时间设置

在进行超时时间设置之前我们需要了解一次http请求经历的过程 浏览器进行DNS域名解析&#xff0c;得到对应的IP地址根据这个IP&#xff0c;找到对应的服务器建立连接&#xff08;三次握手&#xff09;建立TCP连接后发起HTTP请求&#xff08;一个完整的http请求报文&#xff09;服…

在R的 RGui中,使用devtools 安装trajeR

创建于&#xff1a;2024.5.5 文章目录 1. 报错信息2. 尝试使用指定的清华镜像&#xff0c;没有解决3. 找到原因&#xff1a;官网把包删除了4. 尝试从网上下载&#xff0c;然后安装。没有成功5. 使用devtools安装5.1 尝试直接安装&#xff1a;install.packages("devtools&q…

Vue从入门到实战Day04

一、组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 1. scoped样式冲突 默认情况&#xff1a;写在组件中的样式会全局生效 -> 因此很容易造成多个组件之间的样式冲突问题。 1. 全局样式&#xff1a;默认组件中的样式会作用到全局 2. 局部样式&#xff1a;可以…

浅谈运维数据安全

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

122. Kafka问题与解决实践

文章目录 前言顺序问题1. 为什么要保证消息的顺序&#xff1f;2.如何保证消息顺序&#xff1f;3.出现意外4.解决过程 消息积压1. 消息体过大2. 路由规则不合理3. 批量操作引起的连锁反应4. 表过大 主键冲突数据库主从延迟重复消费多环境消费问题后记 前言 假如有家公司是做餐饮…

【Linux笔记】 基础指令(二)

风住尘香花已尽 日晚倦梳头 重命名、剪切指令 -- mv 简介&#xff1a; mv 命令是 move 的缩写&#xff0c;可以用来移动文件或者将文件改名&#xff0c;是 Linux 系统下常用的命令&#xff0c;经常用来备份文件或者目录 语法&#xff1a; mv [选项] 源文件或目录 目标文件或目录…

【吴恩达机器学习-week2】多个变量的特征缩放和学习率问题

特征缩放和学习率&#xff08;多变量&#xff09; 目标 利用上一个实验中开发的多变量例程在具有多个特征的数据集上运行梯度下降探索学习率对梯度下降的影响通过 Z 分数归一化进行特征缩放&#xff0c;提高梯度下降的性能 import numpy as np np.set_printoptions(precisio…

Windows 10 Manager (Win10优化工具),中文破姐版 v3.9.3

01 软件介绍 Windows 10 Manager是一款为Win10操作系统设计的综合优化工具。包含逾40种不同的功能模块&#xff0c;旨在全方位地提升系统性能。其核心效用体现在对Win10的优化、调整、清理、加速和修复方面。能够显著提高系统的运行速度&#xff0c;并有效地排查及解决系统问题…

C# Linq中的自定义排序

1.开发过程中&#xff0c;会遇到OrderBy/OrderByDescending排序无法满足的情况&#xff0c;此时就需要自定义排序&#xff0c;按照想要的排序规则取排序&#xff0c;比如订单的状态等等。 2.自定义泛型比较器代码如下&#xff1a; /// <summary>/// 自定义泛型比较器(用…

ISIS学习二——与OSPF相比的ISIS报文以及路由计算

目录 一.ISIS支持的网络类型 1.OSPF支持 2.ISIS支持 二.ISIS最优路径的选取 &#xff08;1&#xff09;.ISIS开销值设置 1.全局开销 2.接口开销 3.根据带宽设置开销 &#xff08;2&#xff09;.ISIS的次优路径 三.ISIS报文格式 1.ISIS专用报头——TLV 2.ISIS通用头…