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环境的优点: virtualenv只能创建系统原有的python版本,而不能创建创建任意版本的环境 而Anaconda的虚拟环境中,你可以指定任意现存可使用的python环境(包括比原环境版本高的python版本&a…...
分析若依的文件上传处理逻辑
分析若依的文件上传处理逻辑 注:已经从若依框架完成拆分,此处单独分析一下人家精彩的封装,也来理解一下怎么做一个通用的上传接口!如有分析的,理解的不透彻的地方,大家多多包含,欢迎批评指正&am…...
Note3---初阶二叉树~~
目录 前言🍄 1.树概念及结构☎️ 1.1 树的概念🎄 1.2 树的相关概念🦜 1.2.1 部分概念的加深理解🐾 1.2.2 树与非树🪴 1.3 树的表示🎋 1.4 树在实际中的运用(表示文件系统…...
ElasticSearch学习篇8_Lucene之数据存储(Stored Field、DocValue、BKD Tree)
前言 Lucene全文检索主要分为索引、搜索两个过程,对于索引过程就是将文档磁盘存储然后按照指定格式构建索引文件,其中涉及数据存储一些压缩、数据结构设计还是很巧妙的,下面主要记录学习过程中的StoredField、DocValue以及磁盘BKD Tree的一些…...
ROS机器人入门
http://www.autolabor.com.cn/book/ROSTutorials/ 1、ROS简介 ROS 是一个适用于机器人的开源的元操作系统。其实它并不是一个真正的操作系统,其 底层的任务调度、编译、寻址等任务还是由 Linux 操作系统完成,也就是说 ROS 实际上是运 行在 Linux 上的次级…...
30. 深度学习进阶 - 池化
Hi,你好。我是茶桁。 上一节课,我们详细的学习了卷积的原理,在这个过程中给大家讲了一个比较重要的概念,叫做input channel,和output channel。 当然现在不需要直接去实现, 卷积的原理PyTorch、或者TensorFlow什么的…...
工业应用新典范,飞凌嵌入式FET-D9360-C核心板发布!
来源:飞凌嵌入式官网 当前新一轮科技革命和产业变革突飞猛进,工业领域对高性能、高可靠性、高稳定性的计算需求也在日益增长。为了更好地满足这一需求,飞凌嵌入式与芯驰科技(SemiDrive)强强联合,基于芯驰D9…...
Webrtc 学习交流
花了几周的时间研究了一下webrtc ,并开发了一个小项目,用来点对点私密聊天 交流传输文件等…后续会继续扩展其功能。 体验地址,大狗子的ID,我在线时可以连接测试到我 f3e0d6d0-cfd7-44a4-b333-e82c821cd927 项目特点 除了交换信令与stun 没…...
华为云之轻松搭建 Nginx 静态网站
华为云之轻松搭建 Nginx 静态网站 一、本次实践介绍1. 本次实践目的2. 本次实践环境 二、ECS弹性云服务器介绍三、准备实践环境1. 预置环境2. 查看ECS服务器的账号密码信息3. 登录华为云4. 远程登录ECS服务器 四、安装配置 Nginx1. 安装nginx2. 启动nginx3. 浏览器中访问nginx服…...
【pytorch】图像运行过程中,保证梯度情况下变换
部分操作是危险的,会中断梯度流。 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 连接服务器时,发现一段时间不操作就会自动断开连接,解决方法如下: 打开 /etc/ssh/ssh_config 文件: sudo vim /etc/ssh/ssh_config在文件最后添加: # 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 映射库的集成: GsonJacksonJSON-B Jackson 是首选的默认库。 Jackson Spring-boot-starter-json 提供了…...
Flink系列之:State Time-To-Live (TTL)
Flink系列之:State Time-To-Live TTL 一、TTL二、TTL实现代码三、过期状态的清理 一、TTL Flink的TTL(Time-To-Live)是一种数据过期策略,用于指定数据在流处理中的存活时间。TTL可以应用于Flink中的状态或事件时间窗口࿰…...
数据结构(Chapter Two -01)—线性表及顺序表
2.1 线性表 线性表是具有相同数据类型的n个数据元素的有限序列。第一个元素为表头元素,最后一个元素为表尾元素。除第一个元素,每个元素有且仅有一个直接前驱。除最后一个元素,每个元素都仅有一个直接后继。 其中线性表包括以下(…...
【刷题笔记1】
笔记1 string s;while(cin>>s);cout<<s.length()<<endl;输入为hello nowcoder时,输出为8 (nowcoder的长度) 2.字符串的输入(有空格) string a;getline(cin, a);cout<<a<<endl;输入为ABCabc a 输出为ABCabc a …...
视频数据卡设计方案:120-基于PCIe的视频数据卡
一、产品概述 基于PCIe的一款视频数据收发卡,并通过PCIe传输到存储计算服务器,实现信号的采集、分析、模拟输出,存储。 产品固化FPGA逻辑,实现PCIe的连续采集,单次采集容量2GB,开源的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`(上)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
