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访问了

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

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

相关文章

代码签名证书:数字安全世界的守门员

在这个信息化的时代&#xff0c;如果说互联网是高速流动的信息海洋&#xff0c;那么软件便是承载这些信息的庞大船队。而让人倍感安心地乘坐这些船的&#xff0c;正是被称为代码签名证书的重要安全措施。 你可以把代码签名证书想象成是软件世界的一位神秘守门员。它存在的目的&…

使用Python爬取公众号的合集

文章目录 前言讲解爬取思路开爬爬取文章url文章爬取结果爬取图片图片爬取结果优化下载图片代码 声明结尾关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游…

激活Windows过程及报错解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上, 运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本

激活Windows过程及报错问题解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上&#xff0c;运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本。 前言 最近在激活Windows过程中&#xff0c;遇到了报错: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上…

【数据分析与可视化】利用Python对学生成绩进行可视化分析实战(附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面对学生成句和表现等数据可视化分析 1&#xff1a;导入模块 import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][simhei] plt.rcParams[f…

【Android】使用 Glide 给 ImageView 加载图像的简单案例

前言 Android Glide是一个用于在Android应用中加载和显示图片的流行开源库。它提供了简单易用的API&#xff0c;可以帮助开发者高效地加载远程图片、本地图片以及GIF动画&#xff0c;并提供了缓存、内存管理等功能&#xff0c;使得图片加载在移动应用中更加流畅和高效。Glide还…

小白菜QQ云端机器人源码-去除解密授权

小白菜QQ云端机器人源码分享&#xff1a;解密授权学习版已去除 这款源码是专为群机器人爱好者设计的&#xff0c;它基于挂机宝机器人框架构建的网页站点。 用户可以通过网页登录QQ账号至挂机宝框架中&#xff0c;无需通过机器人实现登录。 而且&#xff0c;该源码解决了一个…

运筹学经典问题(三):最大流问题

问题描述 给定一个图网络 G ( V , E ) G(V, E) G(V,E)&#xff0c;网络中连边的权重代表最大容量&#xff0c;在这个图中找出从起点到终点流量最大的路径。 数学建模 集合&#xff1a; I I I&#xff1a;点的集合&#xff1b; E E E&#xff1a;边的集合。 常量&#x…

使用代理IP时的并发请求是什么意思?

很多做过数据采集的技术们应该都有所了解&#xff0c;在选择代理IP时会有一个并发请求的参数&#xff0c;这个参数是什么意思呢&#xff1f;可能有很多新手不是很了解&#xff0c;其实代理IP的并发请求就是指同时发送多个请求到目标服务器&#xff0c;以提高请求的效率和速度。…

docker-consul(容器的自动发现与注册)

1、微服务&#xff08;容器&#xff09;、容器的注册和发现&#xff1a;是一种分布式管理系统&#xff0c;用于定位服务的方法 &#xff08;1&#xff09;在传统的架构中&#xff0c;应用程序之间直连到已知的服务&#xff0c;设备提供的网络&#xff08;ip地址、基于tcp/ip的…

android 13.0 去掉recovery模式UI操作页面的菜单选项

1.概述 在13.0进行系统rom定制化开发中,在进行一些定制化开发中,会根据需要在进入recovery模式的时候,去掉recovery模式的一些菜单选项, Reboot to bootloader,Enter rescue等菜单项,经过分析得知, 就是在device.cpp去掉一些菜单选项就可以了,接下来就来分析实现相关功…

《PySpark大数据分析实战》-04.了解Spark

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

python进行描述性统计分析,python怎么做描述性统计

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python语言的描述错误的选项&#xff0c;python描述算法的方法有几种&#xff0c;今天让我们一起来看看吧&#xff01; 一、描述符是什么 描述符&#xff1a;是一个类&#xff0c;只要内部定义了方法__get__, __set__, …

strtok()的用法及实现哦

1. 用法 1. 声明&#xff1a;char *strtok(char *str, const char *delim) str -- 要被分解成一组小字符串的字符串。第一次调用 strtok() 时&#xff0c;这个参数应该是你想要分割的字符串。随后的调用应该将此参数设置为NULL&#xff0c;以便继续从上次的位置分割。delim -- …

接口自动化测试框架搭建

一、原理及特点 参数放在XML文件中进行管理用httpClient简单封装一个httpUtils工具类测试用例管理使用了testNg管理&#xff0c;使用了TestNG参数化测试&#xff0c;通过xml文件来执行case。测试报告这里用到第三方的包ReportNG 项目组织用Maven 二、准备 使用工具&#xff1…

SecureCRT设置log保存路径和格式

SecureCRT设置log保存路径和格式 D:\CRT.log%S%Y%M%D-%h%m%s.log [%Y%M%D_%h:%m:%s] [%h:%m:%s]

AJAX练习题:加强你的异步通信技能!

学习目标&#xff1a; 创建一个AJAX请求&#xff0c;从服务器获取一个JSON对象&#xff0c;并将其显示在网页上。 创建一个AJAX请求&#xff0c;向服务器发送数据并获取响应。使用获取到的响应数据更新网页上的内容。 创建一个AJAX请求&#xff0c;从服务器获取一个XML文件&a…

HBase 详细图文介绍

目录 一、HBase 定义 二、HBase 数据模型 2.1 HBase 逻辑结构 2.2 HBase 物理存储结构 ​2.3 数据模型 2.3.1 Name Space 2.3.2 Table 2.3.3 Row 2.3.4 Column 2.3.5 Time Stamp 2.3.6 Cell 三、HBase 基本架构 架构角色 3.1 Master 3.2 Region Server 3.3 Zo…

【DC-DC】世微 AP9166 降压恒压芯片 18V 2A同步降压转换器

600KHz&#xff0c;18V&#xff0c;2A同步降压转换器 概述 AP9166是一款完全集成的效率2A同步整流降压转换器。AP9166运行在宽输出电流上以高效率 负载范围。此设备提供两个操作模式、PWM控制和PFM模式切换控制&#xff0c;允许更宽范围的高效率 负载AP9166至少需要现成标准的…

基于ssm的汽车服务商城系统设计与实现论文

摘 要 本课题是根据用户的需要以及网络的优势建立的一个基于Vue的汽车服务商城系统&#xff0c;来更好的为用户提供服务。 本基于Vue的汽车服务商城系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于SSMVue框架开发。在网站的整个开发过程中&#xff0c;首先对…

坚持创新驱动,超卓航科入选为“新一批国家知识产权优势企业”!

近日&#xff0c;根据《国家知识产权局关于确定2023年新一批及通过复核的国家知识产权示范企业和优势企业的通知》精神&#xff0c;经湖北省知识产权局组织测评、推荐&#xff0c;国家知识产权局审核&#xff0c;超卓航科入选为“新一批国家知识产权优势企业”。 超卓航科以金属…