项目地址:fresh-everyday

CentOS安装python3

为方便管理,在CentOS桌面创建一个文件夹,将软件包下载到这里,右键--在终端打开

安装python3.9.7 :

 wget https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz

(命令前的sudo如果是root用户可以去掉)

解压 :

 tar -zxvf Python-3.9.7.tgz

进入解压后的目录 :

cd Python-3.9.7

编译

./configure --prefix=/usr/local/python39

其中--prefix是Python的安装目录,指定把python安装到那里,同时也安装了setuptools和pip工具

安装

make && make install

如果提示权限不够的话切换到root用户,但是保留当前用户工作目录,再次执行命令即可

如果编译安装失败:一般情况都是因为缺少编译环境,通常python的编译环境需要zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make。执行下命令,再次安装即可

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

安装失败

安装成功

进入安装目录

 cd /usr/local/python39

创建软连接

ln -s /usr/local/python39/bin/python3.9 /usr/bin/python3
ln -s /usr/local/python39/bin/pip3 /usr/bin/pip3

验证是否配置成功:

python3 --version

出现版本号即成功

创建使用Python虚拟环境

安装虚拟环境

pip3 install virtualenv

如果出现以上信息,说明要安装OpenSSL

yum install -y openssl openssl-devel
yum clean all

再次执行命令pip3 install virtualenv,发现还是同样的问题。

查阅资料发现,在./configure过程中,如果没有加上–with-ssl参数时,默认安装的软件涉及到ssl的功能不可用,刚好pip3过程需要ssl模块,而由于没有指定,所以该功能不可用。

解决办法是重新进入python3.9目录进行编译安装,然后再执行命令pip3 install virtualenv,用一下过程来实现编译安装:

cd Python-3.9.7
./configure --with-ssl --prefix=/usr/local/python39
make && make install

安装成功

安装虚拟环境扩展包

pip3 install virtualenvwrapper

创建一个文件夹,用于存放所有的虚拟环境 (这里存放在/home/Ruyanjun/桌面/天天生鲜/virtualenvs)

mkdir -p virtualenvs

编辑~/.bashrc文件

vim ~/.bashrc

添加下面两行

export WORKON_HOME=/home/python/virtualenvs
source /usr/local/python39/bin/virtualenvwrapper.sh

使用

source ~/.bashrc

命令使其生效

提示/usr/bin/python: No module named virtualenvwrapper,是因为安装了2.x和3.x两个版本的python,在安装时使用的是sudo pip3 install virtualenvwrapper
在我运行的时候默认使用的是python2.x,但在python2.x中不存在对应的模块,只需要在bashrc文件里面加入如下命令即可,再次执行上述命令

VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

出现以下即执行成功

创建虚拟环境

mkvirtualenv -p python3 fresh_everyday

fresh_everyday:虚拟环境名 -p:指定python版本

报错:

原因分析:virtualenv依赖包被安装在默认Python目录下
解决方法:做一个软连接

ln -s /usr/local/python39/bin/virtualenv /usr/bin/virtualenv

重新创建即可

进入虚拟环境工作

workon fresh_everyday

退出虚拟环境(先不用退出, 接下来的操作都在虚拟环境中进行

deactivate

安装项目需要的依赖包

安装Django

pip install django

安装pymysql

pip install pymysql

安装django-tinymce 富文本编辑器

pip install django-tinymce

安装itsdangerous 加密模块

pip install itsdangerous

安装celery 异步任务

pip install -U Celery

安装redis

pip install redis

安装django-redis

pip install django-redis

安装alipay-sdk-python

pip install alipay-sdk-python

安装django-haystack和whoosh 全文检索

pip install django-haystack
pip install whoosh

安装django-haystack失败,提示ModuleNotFoundError: No module named ‘_ctypes’,

解决方法:

1退出虚拟环境安装外部函数库(libffi)

yum install libffi-devel -y

然后回到python的安装过程,重新安装python即可

我的步骤:

cd ..
yum install libffi-devel -y
cd Python-3.9.7
make && make install
workon fresh_everyday
pip install django-haystack

 Successfully即是成功

安装py3Fdfs 分布式文件系统

pip install py3Fdfs==2.1.0

安装jieba 结巴分词

pip install jieba

安装Pillow ImageField依赖

python -m pip install Pillow

(安装的时候可能会超时,多试几次或者换源)

mysql的安装

安装mysql 5.7

wget 命令需先安装

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

安装MySQL源

yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

安装mysql

yum -y install mysql-community-server

安装过程可能存在问题:

方法:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

再执行安装命令即可

启动mysql 服务

systemctl start mysqld

登录mysql修改密码

此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

grep "password" /var/log/mysqld.log

找到root@localhost:后面的密码,copy下来

登录mysql

mysql -u root -p

粘贴复制的密码

设置密码策略

SET GLOBAL validate_password_policy=LOW;

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '这里输入你的密码';

设置远程访问

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '输入你的密码' WITH GRANT OPTION;

刷新权限

FLUSH PRIVILEGES; 

项目部署

在/root目录中创建文件夹fresh-everyday,将https://github.com/Ruyanjun/fresh-everyday/tree/main/app中的所有文件放入该fresh-everyday文件中

可以现将项目克隆到本地,再用Xftp软件将这些文件传到CentOS中

找到安装目录下的haystack目录

pip show django-haystack

进入/home/python/virtualenvs/fresh_everyday/lib/python3.9/site-packages/haystack/backends

在该目录下创建ChineseAnalyzer.py文件

touch ChineseAnalyzer.py

然后vi编辑,完成之后wq!保存

文件内容如下:

import jieba
from whoosh.analysis import Tokenizer, Tokenclass ChineseTokenizer(Tokenizer):def __call__(self, value, positions=False, chars=False,keeporiginal=False, removestops=True,start_pos=0, start_char=0, mode='', **kwargs):t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs)seglist = jieba.cut(value, cut_all=True)for w in seglist:t.original = t.text = wt.boost = 1.0if positions:t.pos = start_pos + value.find(w)if chars:t.startchar = start_char + value.find(w)t.endchar = start_char + value.find(w) + len(w)yield tdef ChineseAnalyzer():return ChineseTokenizer()

复制 whoosh_backend.py 文件,改为 whoosh_cn_backend.py

 cp  whoosh_backend.py whoosh_cn_backend.py

打开复制出来的新文件,引入中文分析类,内部采用jieba分词

from .ChineseAnalyzer import ChineseAnalyzer

打开复制出来的新文件,查找 analyzer=field_class.analyzer or StemmingAnalyzer() 改为 analyzer=field_class.analyzer or ChineseAnalyzer()

创建数据库

进入数据库执行

CREATE DATABASE fresh_everyday DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_bin

修改项目文件中数据库链接的指向 settings.py 对应自己的主机、端口、用户名、密码

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'fresh_everyday','HOST':'','PORT':'','USER':'','PASSWORD':'','OPTIONS': {"init_command": "SET foreign_key_checks = 0;" # 关闭外键约束}}
}

删除项目目录各个应用程序中migrations目录下xxxx_initial.py文件,比如 /root/fresh-everyday/goods/migrations/0001_initial.py

删除之后进入/root/fresh-everyday执行迁移

python manage.py makemigrations
python manage.py migrate

导入数据:将https://github.com/lang1427/py_fresh-everyday/dailyfresh.sql文件传递到服务器上/root/fresh-everyday目录中,连接到数据库后,选择fresh_everyday数据库(use fresh_everyday),通过source dailyfresh.sql;命令导入数据

配置自己的邮箱规则 settings.py

    # 邮箱配置EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'EMAIL_HOST = 'smtp.qq.com'EMAIL_PORT = 587EMAIL_HOST_USER = '' # 发送者邮箱EMAIL_HOST_PASSWORD = '' # 授权码

可以去网易邮箱设置SMTP服务或者其他邮箱

端口号可以百度,网易的为25

uwsgi + nginx 搭建服务

uwsgi + nginx搭建反向代理原理可以参考:Nginx反向代理

nginx的安装可参考:安装Nginx

uwsgi安装(本人安装在/root目录下)

pip3 install uwsgi

uwsgi的配置

  • 项目部署时,需要设置 settings.py 文件夹下的DEBUG=False,ALLOWED_HOSTS=['*']

uwsgi.ini 配置文件(在/root/fresh-everyday目录下)

注意(#此处根据你的实际情况修改)

[uwsgi]
# 指定IP端口,ip为内网ip,如果是云服务器,是云服务器内网ip
# http可以直接访问,socket是让Nginx指定的
#此处根据你的实际情况修改.
#单独用uwsgi的话把socket改成http
socket = 127.0.0.1:8001
# 项目目录,和manage.py同级的目录
#此处根据你的实际情况修改
chdir = /root/fresh-everyday
# 启动主进程,来管理其他进程
# 其它的uwsgi进程都是这个master进程的子进程
# 如果kill这个master进程,相当于重启所有的uwsgi进程
master = true
# 加载一个WSGI模块,这里加载wsgi.py这个模块
# 通常是在<django项目>/<和项目同名文件夹>/wsgi.py
# 但是如果chdir指定了项目绝对路径,只需要写<和项目同名文件夹>/wsgi.py
#此处根据你的实际情况修改
#module = /root/fresh-everyday/app/wsgi.py
#项目中wsgi.py文件的目录,相对于项目目录
#此处根据你的实际情况修改
wsgi-file=/root/fresh-everyday/app/wsgi.py
# 启动多少个进程,和核心数一样就行
processes = 1
# 每个进程最大的请求数
max_requests = 1000
# 运行的日志,通常放在 uwsgi_config 下
daemonize = /root/fresh-everyday/uwsgi_config/run.log
## 自动移除unix Socket和pid文件当服务停止的时候
vacuum = true
# 如果使用的是虚拟环境, 需要指定 pythonpath
# 如果是激活的是虚拟环境,使用命令:pip show django|grep -i location 即可得到
pythonpath = /home/python/virtualenvs/fresh_everyday/lib/python3.9/site-packages
# 指定pid文件,用于重启和停止,通常放在 uwsgi_config 下
pidfile = /root/fresh-everyday/uwsgi_config/uwsgi.pid
# 启用线程
enable-threads = true
#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,
# 等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,
# 如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
reload-mercy = 8
#设置虚拟环境的路径
#virtualenv=/root/home/python/virtualenvs/fresh_everyday  # 修改点

找到uwsgi执行位置,建立软链接

find / -name uwsgi

ln -s /usr/local/python39/bin/uwsgi /usr/bin/uwsgi

uwsgi的启动和停止 (此命令在/root/fresh-everyday目录下执行)

启动:uwsgi --ini 配置文件路径

uwsgi --ini uwsgi.ini

启动之后使用

ps -ef | grep uwsgi

查看(进程id)是否启动成功

出现以上提示才是启动成功

如果启动不成功多半是uwsgi --ini 配置文件的问题

多多检查修改uwsgi --ini 配置文件

测试uwsgi是否成功

新建一个uwsgi_test.py文件,并且内容如下

def application(env,start_response):start_response('200 OK',[('Content-Type','text/html')])return [b"hello,uwsgi"]

执行命令(在虚拟环境下)

uwsgi --http :8003 --wsgi-file uwsgi_test.py

执行结果

浏览器访问http://127.0.0.1:8003,如下即是成功

停止:这里先不用停止

uwsgi --stop uwsgi.pid

重启:

uwsgi --reload uwsgi/uwsgi.pid

如果在重启或者停止uwsgi服务的时候,报错signal_pidfile()/kill(): No such process [core/uwsgi.c line 1693]

  • 找到uwsgi.ini配置文件
  • 更改pid文件中的那个id(数)为实际进程id,如:37693
  • 重新执行下重启服务的命令就好了

使用nginx,需要将uwsgi.ini配置文件中的http形式变成socket形式,重启uwsgi

配置收集静态文件

settings.py中设置:STATIC_ROOT='收集的静态文件路径'

例如:STATIC_ROOT='/var/www/fresh_everyday/static'(手动添加)
        django收集静态文件的命令:python3 manage.py collectstatic 执行该命令,会把项目中所使用的静态文件收集到STATIC_ROOT指定的目录下

修改添加nginx的配置文件(在目录/usr/local/nginx/conf下)

如果不知道在哪可以使用命令查找

find / -name nginx

vim nginx.conf
 server {listen       8000;//     #nginx代理服务器监听8000端口server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {#proxy_pass http://127.0.0.1:3000;#如果安装node.js则用这个,这里不用uwsgi_pass 127.0.0.1:8001;     #uwsgi服务器端口,跟uwsgi.ini里面配置的一样#root   html;include /root/fresh-everyday/uwsgi_config/uwsgi_params;    #uwsgi_params文件地址,默认在//usr/local/nginx/conf,这里我更改了#index  index.html index.htm;}# 配置静态文件目录# 需要迁移静态文件,上述已经写过location /static {alias /root/fresh-everyday/static;}

重启nginx(在目录/usr/local/nginx/sbin下)

 ./nginx -s reload 

云服务器开放nginx server中的端口 即8000;就可以通过服务器ip:8000 访问该项目了

但是配置有些不同,具体可以参考这篇文章:传送门

这里我们没有云服务器的话输入127.0.0.1:8000/user/login访问就可以

如果运行有什么问题的话可以看运行日志run.log(这里我放在/root/fresh-everyday/uwsgi_config目录下)然后自行解决就可以了

项目大概搭建到这就差不多了,可能有些bug需要完善一下

Python项目(Django框架)天天生鲜在CentOS7.9搭建运行相关推荐

  1. 基于Python+django的 天天生鲜超市网上购物商城-计算机毕业设计

    项目介绍 根据毕业设计的需求,设计一个界面友好的网上生鲜超市系统,用户能够直观的浏览及查询到想要的信息,了解消费者的习惯,实现系统的基本功能,用户操作起来更方便.为了让管理者了解自己的权限,方便直观的 ...

  2. 天天生鲜项目 python邮箱_python3 之 天天生鲜 项目(初学者)1

    简单第一步 假设: 你已学过 python基础.高级:了解并简单使用linux操作系统:mysql数据库.redis数据库的简单使用:掌握Django框架的使用 这是一个 很多培训机构 讲解的项目 r ...

  3. 基于python下django框架 实现校园失物招领系统详细设计

    前言介绍(开发目的和意义) 本课题主要目标是设计并能够实现一个基于web网页的校园失物招领系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息 ...

  4. 基于python下django框架 实现校园教室图书馆座位预约系统详细设计

    前言介绍(开发目的和意义) 本课题主要目标是设计并能够实现一个基于web网页的教室图书馆座位预约系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管 ...

  5. 基于python下django框架 实现多用户商城平台详细设计

    前言介绍(开发目的和意义) 本课题主要目标是设计并能够实现一个基于web网页的多用户商城系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:用户通过登录网站,查询商品,购买商 ...

  6. 通过python利用Django框架搭建一个属于自己的免费网站(已更新)

    大家好,我是天空之城,今天给大家带来,通过python利用Django框架搭建一个属于自己的免费网站. 以下是网上找到的免费教程,https://djangogirlstaipei.gitbooks. ...

  7. 基于python下django框架 实现校园教室实验室预约系统详细设计

    前言介绍(开发目的和意义) 本课题主要目标是设计并能够实现一个基于web网页的教室实验室预约系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信 ...

  8. 基于python下django框架 实现网上图片分享平台详细设计

    前言介绍(开发目的和意义) 本课题主要目标是设计并能够实现一个基于web网页的图片分享平台,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息,设 ...

  9. 在线车辆推荐网 Python语言+Django框架+Mysql数据库 基于用户、物品的协同过滤推荐算法 开发在线汽车推荐系统 二手车网站推荐系统 分布式大数据、机器学习、人工智能开发

    在线车辆推荐网 Python语言+Django框架+Mysql数据库 基于用户.物品的协同过滤推荐算法 开发在线汽车推荐系统 二手车网站推荐系统 分布式大数据.机器学习.人工智能开发 CarRecom ...

最新文章

  1. 2021年大数据HBase(二):HBase集群安装操作
  2. MRP Overview
  3. Oracle中table函数的应用
  4. python脚本根据cookies自动登录网站_python模拟登录并且保持cookie的方法详解
  5. 十分钟快速了解 ES6 Promise
  6. 【转】RNN、LSTM、Transformer、BERT简介与区别
  7. 【BZOJ 1036】 树的统计count
  8. ERROR Could not find value for key log4j.appender.Console
  9. 【转】TIOBE 12 月排行榜:古老的 C 和后起之秀 Kotlin,谁是年度编程语言之王?...
  10. python之列表相关操作
  11. 2021年大学生可以参加的科创竞赛-最全信息汇总
  12. 闭区间连续函数的性质
  13. 计算机技术数字影音,技能大赛数字影音后期制作技术赛项规程.pdf
  14. 5.3 - 抽屉新热榜
  15. 测试工程师面试宝典QA(非编程)
  16. 中国SaaS驶入「2.0时代」
  17. 服务器管理软件LuManager2.0.99发布,含智能优化
  18. 【无标题】16 求素数 盛通教育(C++)
  19. 15数字华容道解法 图解_华容道解法图
  20. 如何在WPF中使用虚拟键盘

热门文章

  1. 关于用迅雷会下载到比较旧的资源版本?
  2. 开发工具和DBeaver,连接多种数据库
  3. 黄聪:Windows7立体声混音设置方法(stereo mix)(转)
  4. 仿大众点评——秒杀系统部分01
  5. 用python写了一个简易的记账软件,后期有可能更新!
  6. 计算机右键管理无法访问指定设备,简单几步解决win10打开任务管理器显示无法访问指定设备方法...
  7. Wondershare EDraw Max多种具有模块化特征
  8. Java集合源码浅析(一) : ArrayList
  9. sql优化的15个小技巧(必知五颗星),面试说出七八个就有了
  10. fastadmin 权限问题