安装Python3.8
安装编译相关工具
yum -y groupinstall "Development tools"
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 python-devel
yum install libffi-devel -y
下载安装包并解压
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
tar -xvf Python-3.8.0.tar.xz
编译安装python并创建软连接
mkdir /usr/local/python3
cd Python-3.8.0
./configure --prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
测试
python3 -V
pip3 -V
使用虚拟环境管理器创建虚拟环境
pip3 install --upgrade pip # 升级pip
pip3 install virtualenvwrapper
# 安装后找到virtualenvwrapper.sh文件,在下面要用
mkdir /usr/local/pythonvirtualenvs
vi ~/.bashrc
export WORKON_HOME=/usr/local/pythonVirtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/python3/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
保存退出后执行 source ~/.bashrc使配置生效
# 此时可以使用管理工具workon查看虚拟环境
# 创建虚拟环境
mkvirtualenv shop_admin
测试虚拟环境
# 查看
workon
#使用某个虚拟环境
workon shop_admin
#退出
deactivate
将项目导入到服务器
安装依赖
pip install -r requirements.txt
在项目根目录下新增uwsgi配置文件uwsgi.ini
[uwsgi]
chdir=/usr/local/shop_admin
#the local unix socket file than commnuincate to Nginx
socket=127.0.0.1:8001
# the virtualenv directory(full path)
home=/usr/local/pythonVirtualenvs/shop_admin/
module=adminDemo.wsgi:application
master=True
pidfile=/home/shop_admin/shop_admin.pid
# 使用supervisor进行监控时不能使用守护进程,否则supervisor启动uwsgi后无发监控uwsgi进程
# daemonize = /home/shop_admin/shop_admin.log
processes = 4
max-requests=5000
# daemonize=/var/log/uwsgi/shop_admin.log
chmod-socket=666
vacuum=True
# 修改代码后自动重启
# py-autoreload = 1
uwsgi --ini uwsgi.ini
# 查看
ps -aux | grep uwsgi
# 看到多个uwsgi进程即没有问题
安装nginx
yum install epel-release
yum install nginx
在/etc/nginx/conf.d文件夹下加入配置文件shop_admin.conf
# 将nginx用户改为root
vi /etc/nginx/nginx.conf
将user nginx 修改为user root
# 到/etc/nginx/conf.d目录下
vi shop_admin.conf
# 加入如下配置
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}
server{
listen 80;
server_name 192.168.154.129;
charset utf-8;
client_max_body_size 75M; #上传文件大小限制
# 网站静态文件所在目录
location /static{
alias /usr/local/shop_admin/static;
}
# 上传文件所在目录
location /media{
alias /usr/local/shop_admin/media;
}
# 动态文件交给uwsgi处理
location / {
uwsgi_pass 127.0.0.1:8001;
include /etc/nginx/uwsgi_params;
}
}
启动nginx
systemctl enable nginx && systemctl start nginx
配置supervisor
echo_supervisord_conf
echo_supervisord_conf > /etc/supervisord.conf
mkdir /etc/supervisor/
vi supervisord.conf
# 将下面配置
;[include]
;files = relative/directory/*.ini
#改成 ---切记要将[include]前面注释也去掉
[include]
files = /etc/supervisor/*.conf
/tmp/supervisor.sock 改成 /var/run/supervisor.sock, /tmp/supervisord.log 改成 /var/log/supervisor.log, /tmp/supervisord.pid 改成 /var/run/supervisor.pid
# 添加权限
chmod 777 /var/run
chmod 777 /var/log
# 创建supervisor.sock
touch /var/run/supervisor.sock
chmod 777 /var/run/supervisor.sock
在 /etc/supervisor/文件夹下加入需要管理的uwsgi配置文件uwsgi.conf
# 加入如下配置
[program:uwsgi]
# uwsgi的启动命令
command=/usr/local/pythonVirtualenvs/shop_admin/bin/uwsgi --ini /usr/local/shop_admin/uwsgi.ini
user=root
# uwsgi关闭后是否自动重启
autorestart=true
#是否随supervisor启动而启动
autostart=true
#启动失败自动重试次数,默认是 3
startretries=3
#把 stderr 重定向到 stdout,默认 false
redirect_stderr=true
#启动 5 秒后没有异常退出,就当作已经正常启动了
startsecs=5
#日志文件存放目录, 此目录需要新建
stdout_logfile=/var/log/django/supervisor.log
#是否干掉程序的所有进程(包括子进程)
stopasgroup=true
killasgroup=true
3程序启动优先级,若有多个进程管理时使用,默认-1
priority=100
启动supervisor
# 启动,如果echo_supervisord_conf > /etc/supervisord.conf不是将配置文件生成到默认路径,在每次使用supervisorctl 管理工具时需要指定配置文件:比如supervisorctl -c /xxx/supervisord.conf restart 进程名
supervisord -c /etc/supervisord.conf
# kill所有supervisor进程
pkill supervisord
# 查看所有进程ID
ps -aux | grep supervisord
#查看所有进程的运行状态
supervisorctl status
#查看某一进程的运行状态
supervisorctl status 进程名
#启动某一进程
supervisorctl start 进程名
#启动所有进程
supervisorctl start all
#停止某一进程
supervisorctl stop 进程名
#停止所有进程
supervisorctl stop all
#重启某一进程
supervisorctl restart 进程名
#重启所有进程
supervisorctl restart all
#新增进程后,更新进程(不影响其他进程运行)
supervisorctl update
#修改配置和新增进程后,重启所有进程
supervisorctl reload
在浏览器控制进程
# 编辑supervisord.conf将下面两行注释掉
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001
在浏览器输入ip+端口即可在网页查看supervisor管理的进程
写在最后
安装mysqlclient时报错OSError: mysql_config not found解决方法
# 创建软连接
ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
# 下载依赖
yum install mysql-devel
查看nginx日志,是否为connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream
改原因是因为SeLinux的限制
解决方法:
setsebool -P httpd_can_network_connect 1
常用命令
# 检查nginx配置文件是够有错误
nginx -t
# 重启nginx
service nginx restart
# 查看uwsgi进程
ps -aux | grep uwsgi
# 正常关闭uwsgi进程
uwsgi --stop /home/mysite_uwsgi/master.pid
# 强制关闭全部uwsgi进程
ps -aux | grep uwsgi |awk '{print $2}'|xargs kill -9
killall -s INT uwsgi
# 重新加载uwsgi
uwsgi --reload /home/mysite_uwsgi/master.pid
参考文档
建站指南