一、python3源码包安装首先安装一些编译源码需要的依赖文件
yum -y install gcc make cmake zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel
2. 安装python3
cd /usr/local/
tar -zxvf Python-3.6.5.tgz # 注意版本
mkdir python3
cd Python-3.6.5
./configure --prefix=/usr/local/python3/
make && make install
yum install -y vim # 安装个vim先,vi强化版
vim /etc/profile # 编辑环境变量文件,添加python3的环境变量
PATH=$PATH:/usr/local/python3/bin/
export PATH
source /etc/profile
python3
二、virtualenv创建虚拟环境并安装Django安装基础环境配置
yum groupinstall "Development tools"
2. 安装virtualenv
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
3. 创建虚拟环境
cd /home/
virtualenv --python=python3 django_env
4. 进入虚拟环境
. /home/django_env/bin/activate
5. 虚拟环境中安装django
pip install django==2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
6. 创建Django项目
django-admin startproject mywebsite
7. 修改配置文件,允许任意主机访问
vim mywebsite/mywebsite/settings.py
8. 可以测试一下
python3 mywebsite/manage.py runserver 0.0.0.0:8000
看到报错
# 不要慌,这是SQLite版本问题,关闭版本检测即可
vim /home/django_env/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py
再次运行
python3 mywebsite/manage.py runserver 0.0.0.0:8000
在本机输入ip:8000,发现仍无法访问,是因为防火墙的原因,这里先关闭防火墙
systemctl stop firewalld.service # 关闭防火墙
systemctl disable firewalld.service # 设置开机默认关闭
python3 mywebsite/manage.py runserver 0.0.0.0:8000 # 运行django项目
恭喜你,项目运行了
三、uwsgi安装以上的运行方式,实际上调用了py内置的socket模块,单进程单线程,效率比较低
使用uwsgi启动django项目,可以支持多线程,且稳定效率高
pip3 install uwsgi
创建uwsgi配置文件uwsgi.ini
vim /home/django_env/bin/uwsgi.ini
写入如下内容
[uwsgi]
# Django-related settings
# the base directory (full path)
# 项目第一层绝对路径
chdir = /home/mywebsite
# Django's wsgi file
# 项目第二层相对路径
module = mywebsite.wsgi
# the virtualenv (full path)
# 指定虚拟环境位置,写虚拟环境第一层绝对路径
home = /home/django_env/
# process-related settings
# 主进程
master = true
# maximum number of worker processes
# 代表uwsgi运行的多进程数量,官方建议 2*CPU核数+1
processes = 3
# the socket (use the full path to be safe
# 通过什么访问,后边用nginx,打开socket注释
# socket = 0.0.0.0:8000
http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
# 服务停止时,自动清除pid之类的
vacuum = true
通过uwsgi启动项目
uwsgi --ini /home/django_env/bin/uwsgi.ini
浏览器能够正常访问
四、supervisor安装是一个py开发进程管理工具
作用:可以用它去启动uwsgi,当uwsgi挂掉了,supervisor帮助自动重启,还可以很方便地管理uwsgi进程安装
yum -y install python-setuptools
pip3 install supervisor
2. 生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
3. 修改生成的配置文件
vim /etc/supervisord.conf
文件最后追加如下内容
[program:mywebsite]
command= /home/django_env/bin/uwsgi --ini /home/django_env/bin/uwsgi.ini;
autostart=true ;
startsecs=10 ;
autorestart=true ;
stopasgroup=true ;
killasgroup=true ;
4. 启动supervisor,同时它会自动把uwsgi启动
supervisord -c /etc/supervisord.conf
5. 可以进入supervisor的终端控制台,进行管理来启动或停止你的项目
supervisorctl -c /etc/supervisord.conf
五、nginx整合nginx是什么是一个使用c语言开发的高性能的http服务器和反向代理服务器。
2. nginx的优点- 轻量级
- 在应对高并发情况时,能保持低资源低消耗高性能
- 高度模块化的设计,配置简洁
- 官方测试nginx能够支撑5万并发量,并且cpu、内存等资源消耗却非常低,运行非常稳定
3. nginx的应用场景- http服务器:Nginx可以独立提供http服务,可以做网页静态服务器
- 虚拟主机:可以实现在一台服务器虚拟出多个网站
- 反向代理,负载均衡
4. 下载安装
下载之前为保证不报错,做一些准备
yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel wget
使用wegt下载,版本自己定
wget http://nginx.org/download/nginx-1.18.0.tar.gz
解压nginx
tar -zxvf nginx-1.18.0.tar.gz
切换到nginx-1.18.0目录
cd nginx-1.18.0
执行configure,生成Makefile
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
编译安装
make && make install
创建软链接,并启动nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
mkdir -p /var/temp/nginx/
nginx
ps aux | grep nginx
验证是否成功,nginx默认80端口
5. 修改nginx配置
vim /usr/local/nginx/conf/nginx.conf
修改以下内容
location / {
# root html;
# index index.html index.htm;
uwsgi_pass 0.0.0.0:8000;
include uwsgi_params;
}
启动后,若修改配置,需要刷新,不需要重启nginx
nginx -s reload
此时nginx报error
6. 修改uwsgi配置
不能让用户直接访问项目,要通过nginx跳转过去,利用nginx做反向代理
vim /home/django_env/bin/uwsgi.ini
# 通过什么访问,用nginx访问时,打开socket注释
socket = 0.0.0.0:8000
# http = 0.0.0.0:8000
进入supervisor控制台,重新启动项目
supervisorctl -c /etc/supervisord.conf
restart mywebsite
查看项目运行状态,可以看出使用80端口访问到了项目,说明nginx做了反向代理
补充:关机下次启动是可能会报
nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
mkdir -p /var/run/nginx/
touch /var/run/nginx/nginx.pid
# 启动nginx
nginx
# 在虚拟环境里启动项目
. /home/django_env/bin/activate
supervisord -c /etc/supervisord.conf
至此centos+python3+virtualenv+uwsgi+supervisor+nginx部署Django发布环境完成