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

news2024/11/16 21:55:32

一、安装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_application
  File "/root/anaconda3/envs/xxx/lib/python3.11/site-packages/django/__init__.py", line 1, in <module>
    from django.utils.version import get_version
  File "/root/anaconda3/envs/xxx/lib/python3.11/site-packages/django/utils/version.py", line 1, in <module>
    import datetime
  File "/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.coloradmin.cn/o/1314455.html

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

相关文章

产品入门第五讲:Axure交互和情境

目录 一.Axure交互和情境的介绍 1.交互介绍 概念 常见的Axure交互设计技巧 2.情境介绍 概念 常见的Axure情境设计技巧&#xff1a; 二.实例展示 1.ERP登录页到主页的跳转 2.ERP的菜单跳转到各个页面 &#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个…

String类的hashCode()方法源码分析

Object类中的hashCode()方法&#xff1a; 同一个对象&#xff0c;hashCode必须相同&#xff1b;如果两个对象的equals相等&#xff0c;那么hashCode也必须要相等&#xff01;hashCode()方法是native本地方法&#xff0c;是C代码&#xff0c;hashCode的值&#xff0c;不一定是…

Web开发伴侣 Prepros 7.17 Crack

您友好的 Web 开发伙伴&#xff0c;Prepros 编译您的文件、转译您的 JavaScript、重新加载您的浏览器并 使开发变得非常容易测试您的网站&#xff0c;以便您可以专注于制作 他们完美。 编译一切 Prepros 可以编译 Sass、Less、Stylus、Pug/Jade、Haml、Slim、CoffeeScript 和 …

Linux 虚拟机复制后如何彻底修改ip共存

Linux那些事儿 1、复制 2、连接 3、cd /etc/sysconfig/network-scripts/ 4、ls -a 5、vi ifcfg-eth0 6、i 7、修改mac地址和ip地址&#xff0c;记住修改后的mac&#xff08;重要&#xff09; 8、关机 9、打开虚拟机设置此镜像&#xff1a;

Kubernetes与Docker:容器编排的未来

在当今快速变化的技术领域&#xff0c;容器化技术已经成为现代应用开发的核心。Docker 提供了一种轻量、可移植、自包含的容器化解决方案&#xff0c;而 Kubernetes&#xff08;简称K8s&#xff09;则崛起为容器编排的事实标准。本文将深入研究 Kubernetes 和 Docker 的关系&am…

武林风云之linux组软raid0

小y可喜欢玩文明系列的游戏了&#xff0c;因为小y也一直喜欢造轮子&#xff0c;属于自己的轮子。 每次小y听到”要向雄鹰一样&#xff0c;定要遨游于天际。”感觉自己给自己打了一针强心剂&#xff0c;要求自己拼搏进取。 众所周知&#xff0c;文明是个原生的linux游戏&#xf…

c++面经总结

C基础语法 C和c的区别 c中new和delete是对内存分配的运算符&#xff0c;取代了c中的malloc和free 标准c中的字符串类取代了标准c函数库头文件中的字符数组处理函数(c中没有字符串类型). 在c中&#xff0c;允许有相同的函数名&#xff0c;不过他们的参数类型不能完全相同&…

LeetCode:2415. 反转二叉树的奇数层(层次遍历 Java)

目录 2415. 反转二叉树的奇数层 题目描述&#xff1a; 实现代码与解析&#xff1a; BFS 原理思路&#xff1a; 2415. 反转二叉树的奇数层 题目描述&#xff1a; 给你一棵 完美 二叉树的根节点 root &#xff0c;请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c;…

三、Spring IoC 容器和核心概念

本章概要 组件和组件管理概念 什么是组件&#xff1f;我们的期待Spring充当组件管理角色&#xff08;IoC&#xff09;组件交给Spring管理优势 Spring IoC 容器和容器实现 普通和复杂容器SpringIoC 容器介绍SpringIoC 容器具体接口和实现类SpringIoC 容器管理配置方式 Spring I…

【Qt开发流程】之网络编程:`HTTP`和`FTP`的高级网络操作

概述 Qt Network模块提供了可以编写TCP/IP客户端和服务器的类。它提供了较低层次的类&#xff0c;如QTcpSocket、QTcpServer和QUdpSocket&#xff0c;来代表低层次网络概念&#xff0c;以及高级层次类&#xff0c;如QNetworkRequest、QNetworkReply和QNetworkAccessManager&am…

四十七、Redis分片集群

目录 一、分片集群结构 二、散列插槽 1、Redis如何判断某个key应该在哪个实例&#xff1f; 2、如何将同一类数据固定的保存在同一个Redis实例&#xff1f; 三、集群伸缩 四、故障转移 1、当集群中有一个master宕机时 &#xff08;1&#xff09;自动转移 &#xff08;2&…

Go delve调试工具的简单应用

Delve是个啥 Delve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you’re using a debugger, things aren’t go…

基于单片机的智能导盲杖设计 (论文+源码)

1. 系统设计 应用STC89C52单片机微处理器进行研究一种智能手杖系统&#xff0c;需要同时实现超声波自动测距、语音自动报警、距离自动显示、电机震动报警、LED指示灯灯光明灭自动提醒等多种功能&#xff0c;在手机通信提醒模式下手机用户可拨打固定手机电话信号实现手机通信提…

Helplook VS Salesforce:哪个知识库更好?

对于组织来说&#xff0c;选择一个合适的平台来管理在线知识库可能是一个具有挑战性的任务。而Salesforce的知识管理功能可以帮助组织更好地管理和分享他们的知识&#xff0c;从而更好地为客户提供服务。这是一种将知识管理集成到CRM平台中的方法&#xff0c;可以简化知识共享和…

IS-IS原理与配置3

IS-IS原理与配置 • IS-IS&#xff08;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff09;是ISO &#xff08;International Organization for Standardization&#xff0c;国际标准化组织&#xff09;为它的CLNP &#xff08;ConnectionL…

【深度学习目标检测】六、基于深度学习的路标识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…

uni-app微信小程序隐藏左上角返回按钮

官方文档链接&#xff1a;uni.setNavigationBarTitle(OBJECT) | uni-app官网 (dcloud.net.cn) 首先要明确的是页面间的跳转方式有几种、每一种默认的作用是什么。 uniapp五种跳转方式 第一&#xff1a;wx.navigatorTo 【新页面打开&#xff0c;默认会有返回按钮】第二&#x…

ClickHouse Kafka 引擎教程

如果您刚开始并且第一次设置 Kafka 和 ClickHouse 需要帮助怎么办&#xff1f;这篇文章也许会提供下帮助。 我们将通过一个端到端示例&#xff0c;使用 Kafka 引擎将数据从 Kafka 主题加载到 ClickHouse 表中。我们还将展示如何重置偏移量和重新加载数据&#xff0c;以及如何更…

「构」向云端 - 我与 2023 亚马逊云科技 re:Invent 大会

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 2023年亚马逊AWS re:Invent大会宣布一项Amazon Q的创新项目&#x…

微信小程序---使用npm包安装Vant组件库

在小程序项目中&#xff0c;安装Vant 组件库主要分为如下3步: 注意&#xff1a;如果你的文件中不存在pakage.json&#xff0c;请初始化一下包管理器 npm init -y 1.通过 npm 安装(建议指定版本为1.3.3&#xff09; 通过npm npm i vant/weapp1.3.3 -S --production 通过y…