当前位置: 首页 > news >正文

Linux 使用 Anaconda+Uwsgi 部署 Django项目和前端项目

一、安装Anaconda

使用Anaconda创建python环境的优点:
virtualenv只能创建系统原有的python版本,而不能创建创建任意版本的环境
而Anaconda的虚拟环境中,你可以指定任意现存可使用的python环境(包括比原环境版本高的python版本),这对于不断迭代更新的python来说,非常的友好

1、下载Anaconda

Anaconda官网地址如下

https://www.anaconda.com/download

官网历史版本下载网址

https://repo.anaconda.com/archive/

在历史版本中选择符合自己要求的版本,比如我这里选择的最新的版本Anaconda3-2023.09-0-Linux-x86_64.sh

在服务器上指定一个下载目录,进入该目录下,输入命令下载

wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh

如果出现下载错误提示wget: command not found

是因为你还没有wget下载文件工具,具体解决办法如下:

Debian/Ubuntu系统:apt-get install -y wget

CentOS系统:yum install wget -y

然后重复执行命令:

wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh

下载完成之后,在下载目录输入 ls 命令,会出现以下画面
在这里插入图片描述

2、安装Anaconda

首先,为刚才下载的Anaconda3-2023.09-0-Linux-x86_64.sh文件赋权,否则文件会执行不了

chmod +x Anaconda3-2023.09-0-Linux-x86_64.sh

然后执行

./Anaconda3-2023.09-0-Linux-x86_64.sh

接下来会出现让你按Enter键继续的提示,我们按Enter键继续
然后会出现阅读Anaconda的信息,并且会出现More,继续按Enter,直至阅读完成信息
在这里插入图片描述
出现以下画面,输入yes
在这里插入图片描述
继续点击 Enter,会出现以下提示,输入 yes,添加环境变量

installation finished
DO you wish the installer to prepend the Anaconda3 install Location
to PATH in your /home/xxxx/ .bashrc ? 【yes | no ]
[no]  >>>  yes
Appending source /hone/xxx/ anaconda3/bin/activate to /home/xxx/ ,bashr
A backup will be made to: /home/xxx/ ,bashrc anaconda3 bak
For this change to become active, you have to open a new terminal.
Thank you for installing Anaconda3!

到这一步,Anaconda就算安装完成了,输出Anaconda版本检测一下是否成功

conda -V

如果顺利出现版本号
在这里插入图片描述
那么就算成功了,但是如果提示
在这里插入图片描述
那可能是最后一步添加环境变量没有成功,我们需要手动添加
输入命令:

vim ~/.bashrc

在文件最后一行输入:

export PATH=$PATH:你anaconda安装的目录/anaconda3/bin: $PATH

如我的anaconda安装在root目录,所以我这里输入的是

export PATH=$PATH:~/anaconda3/anaconda3/bin: $PATH

在这里插入图片描述
然后再进行测试:

conda -V

二、使用anaconda创建虚拟环境

创建虚拟环境命令,其中xxx为你的虚拟环境的名称(一般为项目名称),python后面跟的是你指定的虚拟环境的python版本号(这个版本要是现存的可使用的版本,否则会报错)

conda create -n xxx python=3.11.4

创建后,可以使用下面这条命令查看虚拟环境是否创建成功,并且查看该环境的位置

conda info --envs

下面这些命令是以后你可能会用到的操作虚拟环境的命令

conda activate xxx //切换到xxx该虚拟环境命令(如果该命令报错,可以使用source activate xxx )
conda remove --name xxx --all //删除xxx虚拟环境命令
conda deactivate //退出虚拟环境

三、操作Django项目

1、创建uwsgi.ini文件

该文件的位置与manage.py文件同级
在这里插入图片描述
文件内容
全面的配置可以参考官方文档
我这里就写我用到的

[uwsgi]# 使用nginx链接时使用
# socket=127.0.0.1:8000# 直接做web服务器使用 
http=0.0.0.0:8858  #(填入你自己的端口)# 项目目录 [不需要引号]
chdir= /opt/myproject  #(这里写你的项目将放到服务器哪里,具体位置)#进程信息文件路径(这里指项目的根目录)(在项目启动的时候会自己创建,这里只指定路径)
pidfile=%(chdir)/uwsgi.pid# 指定启动的工作进程数
processes=3# 指定工作进程中的线程数
threads=2# 进程中,有一个主进程
master=True#日志文件路径,前提是该文件要存在,且可写(可以直接在django项目中创建log文件夹,在该文件夹中创建error.log 文件,将项目放到服务器上后,指定路径)daemonize = /opt/myproject/myproject/log/error.log #表示不记录正常信息,只记录错误信息,否则你的日志可能很快就爆满
disable-logging = true#项目的对接wsgi.py文件
module = 你的项目名.wsgi:application#当服务器退出的时候自动清理环境
vacuum = true# 设置虚拟环境的路径 [cd .virtualenvs]
virtualenv=xxxxx  #这里的路径需要使用`conda info --envs`查看你服务器创建的虚拟环境位置# 静态文件存储路径 ,不加admin静态资源访问不了
static-map=/static/=/opt/myproject/static

2、生成requirements.txt文件

requirements.txt文件里面记载的是你这个项目中所使用的依赖及版本

下面这条命令在项目目录下执行,会将当前环境的所有依赖全部写到requirements.txt文件,其中包含很多冗余依赖,可用但不推荐

pip freeze > requirements.txt

下面这条命令在项目目录下执行,会将当前django项目的import的依赖写到requirements.txt文件,不会冗余,推荐使用。

pipreqs ./ --encoding=utf-8 --force

备注:
1.pipreqs命令使用时可能会报该模块不存在,使用pip安装即可,安装命令:pip install pipreqs

2.pipreqs命令写入的依赖可能不全,需要手动写入依赖或者改版本

pip install -r requirements.txt 该命令即将依赖安装

3、修改setting文件

加入这两句,为静态文件指定位置

STATIC_URL = ‘static/’
STATIC_ROOT = os.path.join(BASE_DIR, ‘/static/’)

3、将项目无用文件夹删除

在这里插入图片描述
venv文件夹是Python 项目中的虚拟环境目录,在服务器中已经存在了,删除

4、检查

检查数据库、配置等是否已经根据上线需要更改

5、将项目放上服务器

使用Xftp将项目文件放到服务器指定位置,或使用其他方式进行传输

四、安装uwsgi

在原环境(注意,这里不是虚拟环境下,是原环境!!!!),依次输入以下命令进行操作:

anaconda search -t conda uwsgi

anaconda show conda-forge/uwsgi

conda install --channel https://conda.anaconda.org/conda-forge uwsgi

五、启动

切换到虚拟环境

conda activate xxx 或 source activate xxx

切换到django项目目录下,依次执行

python manage.py makemigrations

python manage.py migrate

python manage.py createsuperuser //创建超级管理员

python manage.py collectstatic //将静态文件copy到我们在uwsgi.ini文件中设置的静态文件存储路径中

启动

uwsgi --ini uwsgi_soc.ini

退出命令:

uwsgi --stop uwsgi.pid(切换到uwsgi.pid文件目录下)

强制杀死uwsgi进程

sudo pkill -f uwsgi -9

查看uwsgi进程

ps -ef|grep uwsgi

六、报错

可能出现的报错

1、启动没有问题,但是访问网页报500错误

这个时候我们就可以查看我们创建的error.log文件,打开,如果出现下面的错误:

Traceback (most recent call last):File "/opt/myproject/myproject/wsgi.py", line 12, in <module>from django.core.wsgi import get_wsgi_applicationFile "/root/anaconda3/envs/xxx/lib/python3.11/site-packages/django/__init__.py", line 1, in <module>from django.utils.version import get_versionFile "/root/anaconda3/envs/xxx/lib/python3.11/site-packages/django/utils/version.py", line 1, in <module>import datetimeFile "/root/anaconda3/envs/xxx/lib/python3.11/datetime.py", line 12, in <module>import math as _math
ImportError: /root/anaconda3/envs/lottery/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so: undefined symbol: _PyModule_Add
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 43924)
spawned uWSGI worker 1 (pid: 43925, cores: 1)
spawned uWSGI worker 2 (pid: 43926, cores: 1)
spawned uWSGI worker 3 (pid: 43927, cores: 1)
spawned uWSGI http 1 (pid: 43928)
--- no python application found, check your startup logs for errors ---
--- no python application found, check your startup logs for errors ---
--- no python application found, check your startup logs for errors ---
--- no python application found, check your startup logs for errors ---

是因为你没有在原环境执行安装uwsgi的命令,而是在虚拟环境安装的
或者使用的是pip install uwsgi命令
解决办法,查看uwsgi+anaconda+django启动问题的坑

2、执行启动uwsgi命令报错

可能是你没有在uwsgi.ini文件目录下执行,切换个目录试一下

七、前端项目部署

如果不想使用nginx的话,并且项目比较小,可以直接将前端项目打包之后,放到django项目的static文件夹中,启动uwsgi,就可以直接通过ip//static/dist/index.html访问了

相关文章:

Linux 使用 Anaconda+Uwsgi 部署 Django项目和前端项目

一、安装Anaconda 使用Anaconda创建python环境的优点&#xff1a; virtualenv只能创建系统原有的python版本&#xff0c;而不能创建创建任意版本的环境 而Anaconda的虚拟环境中&#xff0c;你可以指定任意现存可使用的python环境&#xff08;包括比原环境版本高的python版本&a…...

分析若依的文件上传处理逻辑

分析若依的文件上传处理逻辑 注&#xff1a;已经从若依框架完成拆分&#xff0c;此处单独分析一下人家精彩的封装&#xff0c;也来理解一下怎么做一个通用的上传接口&#xff01;如有分析的&#xff0c;理解的不透彻的地方&#xff0c;大家多多包含&#xff0c;欢迎批评指正&am…...

Note3---初阶二叉树~~

目录​​​​​​​ 前言&#x1f344; 1.树概念及结构☎️ 1.1 树的概念&#x1f384; 1.2 树的相关概念&#x1f99c; 1.2.1 部分概念的加深理解&#x1f43e; 1.2.2 树与非树&#x1fab4; 1.3 树的表示&#x1f38b; 1.4 树在实际中的运用&#xff08;表示文件系统…...

ElasticSearch学习篇8_Lucene之数据存储(Stored Field、DocValue、BKD Tree)

前言 Lucene全文检索主要分为索引、搜索两个过程&#xff0c;对于索引过程就是将文档磁盘存储然后按照指定格式构建索引文件&#xff0c;其中涉及数据存储一些压缩、数据结构设计还是很巧妙的&#xff0c;下面主要记录学习过程中的StoredField、DocValue以及磁盘BKD Tree的一些…...

ROS机器人入门

http://www.autolabor.com.cn/book/ROSTutorials/ 1、ROS简介 ROS 是一个适用于机器人的开源的元操作系统。其实它并不是一个真正的操作系统&#xff0c;其 底层的任务调度、编译、寻址等任务还是由 Linux 操作系统完成&#xff0c;也就是说 ROS 实际上是运 行在 Linux 上的次级…...

30. 深度学习进阶 - 池化

Hi&#xff0c;你好。我是茶桁。 上一节课&#xff0c;我们详细的学习了卷积的原理&#xff0c;在这个过程中给大家讲了一个比较重要的概念&#xff0c;叫做input channel&#xff0c;和output channel。 当然现在不需要直接去实现, 卷积的原理PyTorch、或者TensorFlow什么的…...

工业应用新典范,飞凌嵌入式FET-D9360-C核心板发布!

来源&#xff1a;飞凌嵌入式官网 当前新一轮科技革命和产业变革突飞猛进&#xff0c;工业领域对高性能、高可靠性、高稳定性的计算需求也在日益增长。为了更好地满足这一需求&#xff0c;飞凌嵌入式与芯驰科技&#xff08;SemiDrive&#xff09;强强联合&#xff0c;基于芯驰D9…...

Webrtc 学习交流

花了几周的时间研究了一下webrtc &#xff0c;并开发了一个小项目&#xff0c;用来点对点私密聊天 交流传输文件等…后续会继续扩展其功能。 体验地址&#xff0c;大狗子的ID,我在线时可以连接测试到我 f3e0d6d0-cfd7-44a4-b333-e82c821cd927 项目特点 除了交换信令与stun 没…...

华为云之轻松搭建 Nginx 静态网站

华为云之轻松搭建 Nginx 静态网站 一、本次实践介绍1. 本次实践目的2. 本次实践环境 二、ECS弹性云服务器介绍三、准备实践环境1. 预置环境2. 查看ECS服务器的账号密码信息3. 登录华为云4. 远程登录ECS服务器 四、安装配置 Nginx1. 安装nginx2. 启动nginx3. 浏览器中访问nginx服…...

【pytorch】图像运行过程中,保证梯度情况下变换

部分操作是危险的&#xff0c;会中断梯度流。 self.patch_transformer(adv_patch, lab_batch, img_size, do_rotateTrue, rand_locFalse)p_img_batch self.patch_applier(img_batch, adv_batch_t) # torch.Size([56, 3, 329, 416])可行危险操作 torch.clamp(adv_batch, 0…...

学习Java第70天,过滤器Filter简介

过滤器概述 Filter,即过滤器,是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是Java Web项目中最为实用的技术之一 Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口 Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和…...

Ubuntu Desktop 22.04 设置 ssh 超时时间

Ubuntu Desktop 22.04 使用 ssh 连接服务器时&#xff0c;发现一段时间不操作就会自动断开连接&#xff0c;解决方法如下&#xff1a; 打开 /etc/ssh/ssh_config 文件&#xff1a; sudo vim /etc/ssh/ssh_config在文件最后添加&#xff1a; # ssh 客户端会每隔 30 秒发送一个…...

【微服务】Spring Aop原理深入解析

目录 一、前言 二、aop概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk代理示例 3.1.2 jdk动态代理模拟实现…...

Spring Boot JSON中文文档

本文为官方文档直译版本。原文链接 Spring Boot JSON中文文档 引言Jackson自定义序列化器和反序列化器混入 GsonJSON-B 引言 Spring Boot 提供与三个 JSON 映射库的集成&#xff1a; GsonJacksonJSON-B Jackson 是首选的默认库。 Jackson Spring-boot-starter-json 提供了…...

Flink系列之:State Time-To-Live (TTL)

Flink系列之&#xff1a;State Time-To-Live TTL 一、TTL二、TTL实现代码三、过期状态的清理 一、TTL Flink的TTL&#xff08;Time-To-Live&#xff09;是一种数据过期策略&#xff0c;用于指定数据在流处理中的存活时间。TTL可以应用于Flink中的状态或事件时间窗口&#xff0…...

数据结构(Chapter Two -01)—线性表及顺序表

2.1 线性表 线性表是具有相同数据类型的n个数据元素的有限序列。第一个元素为表头元素&#xff0c;最后一个元素为表尾元素。除第一个元素&#xff0c;每个元素有且仅有一个直接前驱。除最后一个元素&#xff0c;每个元素都仅有一个直接后继。 其中线性表包括以下&#xff08;…...

【刷题笔记1】

笔记1 string s;while(cin>>s);cout<<s.length()<<endl;输入为hello nowcoder时&#xff0c;输出为8 &#xff08;nowcoder的长度&#xff09; 2.字符串的输入(有空格) string a;getline(cin, a);cout<<a<<endl;输入为ABCabc a 输出为ABCabc a …...

视频数据卡设计方案:120-基于PCIe的视频数据卡

一、产品概述 基于PCIe的一款视频数据收发卡&#xff0c;并通过PCIe传输到存储计算服务器&#xff0c;实现信号的采集、分析、模拟输出&#xff0c;存储。 产品固化FPGA逻辑&#xff0c;实现PCIe的连续采集&#xff0c;单次采集容量2GB&#xff0c;开源的PCIe QT客…...

Windows使用VNC Viewer远程桌面Ubuntu【内网穿透】

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…...

javascript 数组处理的两个利器: `forEach` 和 `map`(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...