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/lang1427/py_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, Token
class 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 = w
t.boost = 1.0
if 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 t
def 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 = 587
EMAIL_HOST_USER = '' # 发送者邮箱
EMAIL_HOST_PASSWORD = '' # 授权码
可以去网易邮箱设置SMTP服务或者其他邮箱
端口号可以百度,网易的为25
uwsgi + nginx 搭建服务
nginx的安装可参考:安装Nginx
uwsgi安装(本人安装在/root目录下)
pip3 install uwsgi
uwsgi的配置
- 项目部署时,需要设置 settings.py 文件夹下的
DEBUG=False,ALLOWED_HOSTS=['*']
uwsgi.ini 配置文件(在/root/fresh-everyday目录下)
[uwsgi]
#使用nginx连接时使用
socket=127.0.0.1:8001 # 配置nginx时使用
#直接做web服务器使用 python manage.py runserver ip:port
#http=127.0.0.1:8000 # 单独uwsgi时使用
#项目目录
chdir=/root/fresh-everyday # 修改点
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=/root/fresh-everyday/app/wsgi.py # 修改点
#指定启动的工作进程数
processes=4
#指定工作进程中的线程数
threads=2
master=True
#保存启动之后主进程的pid
pidfile=uwsgi.pid
#设置uwsgi后台运行,uwsgi.log保存日志信息
daemonize=uwsgi.log
#设置虚拟环境的路径
virtualenv=/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
停止:
uwsgi --stop uwsgi.pid
使用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的配置文件(在目录/root/fresh-everyday下)
vim nginx.conf
# django 天天生鲜部署 添加server
server {
listen 8000;
server_name localhost;
location / {
# 包含uwsig请求的参数
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 搭配uwsgi的socket值
}
location /static {
# 指定静态文件存放的目录
alias /var/www/fresh-every/static/;
}
}
重启nginx(在目录/usr/local/nginx/sbin下)
./nginx -s reload
云服务器开放nginx server中的端口 即8000;就可以通过服务器ip:8000 访问该项目了