当前位置:   article > 正文

Python项目(Django框架)天天生鲜在CentOS7.9搭建运行_天天生鲜项目 python

天天生鲜项目 python

项目地址: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
  1. ./configure --with-ssl --prefix=/usr/local/python39
make && make install

安装成功

安装虚拟环境扩展包

pip3 install virtualenvwrapper

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

mkdir -p virtualenvs

 编辑~/.bashrc文件

vim ~/.bashrc

添加下面两行

  1. export WORKON_HOME=/home/python/virtualenvs
  2. 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即可

我的步骤:

  1. cd ..
  2. yum install libffi-devel -y
  3. cd Python-3.9.7
  4. make && make install
  5. workon fresh_everyday
  6. 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!保存

文件内容如下:

  1. import jieba
  2. from whoosh.analysis import Tokenizer, Token
  3. class ChineseTokenizer(Tokenizer):
  4. def __call__(self, value, positions=False, chars=False,
  5. keeporiginal=False, removestops=True,
  6. start_pos=0, start_char=0, mode='', **kwargs):
  7. t = Token(positions, chars, removestops=removestops, mode=mode, **kwargs)
  8. seglist = jieba.cut(value, cut_all=True)
  9. for w in seglist:
  10. t.original = t.text = w
  11. t.boost = 1.0
  12. if positions:
  13. t.pos = start_pos + value.find(w)
  14. if chars:
  15. t.startchar = start_char + value.find(w)
  16. t.endchar = start_char + value.find(w) + len(w)
  17. yield t
  18. def ChineseAnalyzer():
  19. 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 对应自己的主机、端口、用户名、密码

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME': 'fresh_everyday',
  5. 'HOST':'',
  6. 'PORT':'',
  7. 'USER':'',
  8. 'PASSWORD':'',
  9. 'OPTIONS': {
  10. "init_command": "SET foreign_key_checks = 0;" # 关闭外键约束
  11. }
  12. }
  13. }

删除项目目录各个应用程序中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

  1. # 邮箱配置
  2. EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  3. EMAIL_HOST = 'smtp.qq.com'
  4. EMAIL_PORT = 587
  5. EMAIL_HOST_USER = '' # 发送者邮箱
  6. 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目录下)

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

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

  1. def application(env,start_response):
  2. start_response('200 OK',[('Content-Type','text/html')])
  3. 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
  1. server {
  2. listen 8000;// #nginx代理服务器监听8000端口
  3. server_name localhost;
  4. #charset koi8-r;
  5. #access_log logs/host.access.log main;
  6. location / {
  7. #proxy_pass http://127.0.0.1:3000;#如果安装node.js则用这个,这里不用
  8. uwsgi_pass 127.0.0.1:8001; #uwsgi服务器端口,跟uwsgi.ini里面配置的一样
  9. #root html;
  10. include /root/fresh-everyday/uwsgi_config/uwsgi_params; #uwsgi_params文件地址,默认在//usr/local/nginx/conf,这里我更改了
  11. #index index.html index.htm;
  12. }
  13. # 配置静态文件目录
  14. # 需要迁移静态文件,上述已经写过
  15. location /static {
  16. alias /root/fresh-everyday/static;
  17. }

重启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需要完善一下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/704564
推荐阅读
相关标签
  

闽ICP备14008679号