宝塔python项目本地能跑 部署就报错 宝塔运行python_python


在网上找过很多教程大多讲述的不够完善与清晰,对我们小学生真的不太友好,最主要的是djngo关于uwsgi的解释不太详细,再去看uwsgi的内容更是让人头疼,这里记录这些天来尝试最终安装成功的案例操作步骤,分享给大家。

项目已经做到,python多版本共存,pipenv的多虚拟环境,以及宝塔的可视化管理,宝塔挺好用的包括各种配置,所以安装他并与多个python项目共存。废话不多说了以下是安装的整个过程

1.安装依赖


yum整体修改为清华源参照如下网址
https://mirror.tuna.tsinghua.edu.cn/help/centos/ 
配置完成一定记得执行 
sudo yum makecache


1.1安装部分扩展


yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel mysql-devel sqlite-devel  gcc  gcc-devel python-devel 

yum install python-devel nginx


2.安装python对应版本,复制链接wget下载


http://npm.taobao.org/mirrors/python 
wget http://npm.taobao.org/mirrors/python/3.6.9/Python-3.6.9.tgz 
// 创建安装目录  
mkdir -p /usr/local/python3 
// 解压安装包  
tar -zxvf Python-3.6.9.tgz 
// 进入解压后的目录,编译安装  
cd Python-3.6.9  
./configure --prefix=/usr/local/python3  
make && make install  
# 执行pip升级 (错误或失败请查看2.1项是否已经创建好软连接)
pip3 install --upgrade pip  
pip3 install --upgrade setuptools


2.1.如果输入python不存在,则需要建立python3的软链


ln -s /usr/local/python3/bin/python3 /usr/bin/python3  
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3


此时执行python3就是我们新安装的python,执行python将会是服务器自带的

3.安装pipvenv


pip3 install pipenv 
# 查看虚拟环境 
pipenv --venv  
# 指定python版本环境 
pipenv --python 3.6.9 
#如果这时报错,找不到pipenv命令,则需要进行以下步骤 :
# 添加python的bin目录到path路径中,vim /etc/profile添加如下命令,完成后执行source /etc/profile生效  
export PATH=$PATH:/usr/local/python3/bin


3.1.创建虚拟环境


cd / mkdir www cd www python -m venv py3env 
# 启动/进入 source /www/wwwroot/py3env/bin/activate


4.虚拟环境安装django


pip3 install django (指定安装和你项目相同的版本)


5.虚拟环境与系统环境都装上uwsgi


# 在系统环境下安装后,一般在虚拟环境就有uwsgi,没有的话在虚拟环境安装一次 
pip3 install uwsgi 
# 退出虚拟环境在安一次,退出虚拟环境 exit 可能直接推出了linux远程


6.安装宝塔并安装nginx与mysql


yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh


安装好数据库之后在宝塔首页进入安全放行9090,也就是项目的指定端口,非必须9090

7.安装git


yum install git cd /www git clone https://git.lug.ustc.edu.cn/weishuyuan/djonevue.git


7.1此时可以安装项目需要的扩展


# 优先在本地导出pip3 freeze > requirements.txt 
pip3 install -r requirements.txt 
一定在宝塔安装完成数据库之后载安装,否则会导致安装失败


7.2将django的数据插入线上数据库


# 优先运行一次让django创建自己的必须数据库 
python3 manage.py migrate  
# xxxx为需要创建表的app名称 
python3 manage.py makemigrations xxxx 
# 运行完makemigrations只是创建了django的文件,在之后继续运行migrate


8.nginx配置


location / {    
    include uwsgi_params;    
    uwsgi_pass 127.0.0.1:9090;   
} 
location /static {     
     alias /www/wwwroot/xxxx.com/static; 
}


9.项目目录下uwsgi配置


[uwsgi] 
socket = 127.0.0.1:9494
chdir=/www/wwwroot/testinter 
wsgi-file=testinter/wsgi.py 
module=testinter.wsgi:application 
master=true vacuum=true 
virtualenv=/www/wwwroot/py3env 
env=DJANGO_SETTINGS_MODULE=testinter.settings


**不能存在空格**
socket 本地地址与nginx的配置要一毛一样
chdir 项目目录绝对路径
wsgi-file wsgi的相对路径
module wsgi书写格式不能变,项目下文件夹 点 wsgi 冒号 application
virtualenv 虚拟环境路径
env django项目配置(settings)导入

10.启动uwsgi


# 直接在对应的虚拟环境运行 
uwsgi --ini /www/wwwroot/testinter/uwsgi.ini 
uwsgi -d --ini /www/wwwroot/testinter/uwsgi.ini # 插入root
 # 查看是否启动 
ps -aux | grep uwsgi 
# 存在多个时,执行命令,查询uwsgi是否启动,端口检查netstat -ntlp|grep 80 
ps -aux | grep uwsgi 
# 被占用kill进程 kill -9 7043


10.1启动、重新加载与关闭uwsgi


# 命令行运行,会显示再shell界面 
uwsgi -i /www/wwwroot/testinter/uwsgi.ini 
# 插入root运行,系统运行 
uwsgi -d -i /www/wwwroot/testinter/uwsgi.ini 
uwsgi --stop /www/wwwroot/testinter/uwsgi.ini 
uwsgi --reload /www/wwwroot/testinter/uwsgi.ini 
**每次上传新代码后需要重新运行uwsgi,同时需要强制关闭uwsgi重启才有效**


*11.所以采用wget方式安装redis


# 选择redis版本, 
http://download.redis.io/releases/ 
wget http://download.redis.io/releases/redis-5.0.0.tar.gz 
# 解压安装包  
tar -zxvf redis-5.0.0.tar.gz 
# 需要gcc的支持,未安装使用:
yum -y install gcc automake autoconf libtool make 
# 进行gcc的编译安装 
make MALLOC=libc make install 
# 已经安装在了root目录下 
cd redis-5.0.0 
# 配置
redis vi redis.conf 
# 进程在后台运行 
daemonize no  修改为  daemonize yes
 # 日志输出文件等信息 
logfile ""  修改为指定的日志文件  logfile "/www/wwwlogs/redis_logs.log" 
# 保存退出,并创建对应位置的log 
touch /www/wwwlogs/redis_logs.log
 # 进入启动文件 
cd /root/redis-5.0.0/src 
# 启动redis 
./redis-server ../redis.conf 
# 查看redis是否使用了6379端口,不是直接kill掉重启 
netstat -nlpt 
# 命令行模式检测开启(再redis目录下) 
./redis-cli 
# 添加到启动 
mkdir  /etc/redis 
cp /root/redis-5.0.0/redis.conf /etc/redis/6379.conf 
# 将启动文件复制到init.d里面会有nginx与mysql在那里
cp /root/redis-5.0.0/utils/redis_init_script /etc/init.d/redisd 
# 执行自启命令 
cd /etc/init.d/ chkconfig redisd on 
# 启动与关闭 
service redisd start service redisd stop 
看结果是否支持chkconfig 如果报service redisd does not support chkconfig 错误 则修改redisd 文件 vi redisd 在第一行加入如下两行注释,保存退出
# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value database