转载大家请注明出处:小成吉思汗的创作世界
(https://www.jianshu.com/p/cafe0bf74fad)
第一次写博客大家不要见笑,说一下写这篇文章的初衷,这段时间自己用Python搞了一个Web项目需要部署到服务器,那么问题来了,如何部署?
老办法,百度一下,搜出来的答案五花八门并且不全。
本片文章会给大家分享从0到1的过程,并把在这个过程中遇到的问题和解决办法分享给大家,有不妥之处,欢迎留言指正。
Python3.6.8的安装
1、为了保险起见,在安装Python之前,需要先安装一些依赖包,如果你不确定你机器上有没有安装,执行下面命令。
yum groupinstall 'Development Tools'
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
2、对系统自带的Python2.7.5进行备份,
cd /usr/bin
mv python python.bak
3、下载python3.6.8的源码压缩文件和pip工具
#创建安装路径,也可以换成你自己创建的目录
mkdir -p /usr/local/python/python3
#操作路径 /usr/local
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
wget https://bootstrap.pypa.io/get-pip.py
4、解压源码压缩包
#操作路径 /usr/local
tar -zxvf Python-3.6.8.tgz
5、编译安装环境
#操作路径 /usr/local/Python-3.6.8/
./configure --prefix=/usr/local/python/python3
6、进行安装
#操作路径要在/usr/local/Python-3.6.8
make && make install
7、设置Python软连接
ln -s /usr/local/python/python3/bin/python3 /usr/bin/python
8、验证是否安装成功
python -V
输出下方信息,证明成功了
Python 3.6.8
9、安装pip
#操作路径 /usr/local
python get-pip.py
10、设置pip软链接
ln -s /usr/local/python/python3/bin/pip3 /usr/bin/pip
注意:由于centos7的yum要使用到python2.7.5的环境,我们要指定yum使用的版本,使用3.6.8会导致yum命令无法使用,需要修改以下两个文件。vi命令可以自行百度。
#第一个:
vi /usr/bin/yum
#把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.7保存退出即可。
#第二个
vi /usr/libexec/urlgrabber-ext-down
#同样把文件头部的#!/usr/bin/python改成#!/usr/bin/python2.7保存退出即可。
到此Python3.6.8就安装完成了。我们准备进入下一个环节。
Django的安装
pip3 install Django
Ngnix安装
1、安装Nginx存储库
sudo yum install epel-release
2、 安装Nginx
sudo yum install nginx
3、启动Nginx,如果有防火墙请关闭。
sudo systemctl start nginx
#以下为停止,重启命令
systemctl stop nginx
systemctl restart nginx
如果要实现开机启动使用以下命令
sudo systemctl enable nginx
uWgsi安装
pip3 install uwsgi
在追加几个uwgsi的常用命令
uwgsi --ini name.ini
uwgsi --reload name.ini
uwgsi --stop name.pid
因为我使用的市MySql数据库,所以还需要安装一个库
pip3 install PyMySQL
到目前为止所有的安装工作基本告一段落,当然每个人项目所用的python库不一样,项目所需要的库都需要进行安装。
下面进入环境配置环节
uWsgi配置,配置uwsgi启动django的参数
我的操作习惯是这样,先假设设Django项目名字是mysite,里面模块叫myapp,已经把mysite项目上传到服务器的/var/local目录下。
在此目录下新建一个配置文件:uwsgi_mysite.ini,编辑文件为如下内容。
vi uwsgi_mysite.ini
[uwsgi]
# 通过uwsgi访问Django项目需要配置成http
# 通过nginx请求uwsgi来访问Django项目 需要配置成socket
# 9000 是Django项目的端口号
socket = :9000
# web项目根目录
chdir = /var/local/mysite
# module指定项目自带的的wsgi配置文件位置
module = mysite.wsgi
# 允许存在主进程
master = true
# 开启进程数量
processes = 3
# 服务器退出时自动清理环境
vacuum = true
#下面两条配置用于生成.status和.pid文件,后续关闭uwsgi时,会用到pid文件
stats=/var/local/uwsgi_forest.status
pidfile=/var/local/uwsgi_forest.pid
Nginx配置
nginx默认使用的是80端口,可以修改成你自己喜欢的端口,比如8089
#修改配置文件
vi /etc/nginx/nginx.conf
server {
listen 8089;
listen [::]:8089;
...
...
}
systemctl restart nginx 重启nginx,直接访问http://ip:8089 ,看到nginx欢迎界面说明成功。
继续配置Nginx
vi /etc/nginx/nginx.conf
···
server {
listen 8089 default_server;
listen [::]:8089 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
}
location /static/ {
alias /var/local/mysite/myapp/static;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
···
8089 是对外的端口号。
server_name是nginx代理uwsgi对外的ip,保持默认就ok。
uwsgi_pass 127.0.0.1:9000;即当nginx收到8089端口的请求时,直接将请求转发给 127.0.0.1:9000。
uwsgi启动django
# 进入项目根目录
cd /var/local/mysite
# 启动
uwsgi --ini /var/local/uwsgi_mysite.ini
重启Nginx
systemctl restart nginx
到现在可以说项目可以正常运行了,但是,但是,但是,会有一个bug,就是当你访问http://ip:8089/admin时,admin模块的样式全部丢失了,这是为什么,经过研究,找到了解决办法。
在mysite项目的配置文件: setting.py 中新增配置 STATIC_ROOT , 然后执行 python manage.py collectstatic命令
#此时关于static的配置如下:
#我习惯把static与mysite项目放在同一级目录
···
STATIC_ROOT = '/var/local/static/'
STATIC_URL = '/static/'
···
执行 python manage.py collectstatic 命令
#进入到项目根路径/var/local/mysite
python manage.py collectstatic
可以看出 python manage.py collectstatic 的作用是收集Django项目,也就是mysite项目中所有涉及到的静态资源,统一放到 路径STATIC_ROOT 管理访问。
注意:此时还有一处需要修改,就是ngnix中配置静态文件的目录。
修改结果如下:
vi /etc/nginx/nginx.conf
···
server {
listen 8089 default_server;
listen [::]:8089 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
}
location /static/ {
alias /var/local/static;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
···
location /static/改为/var/local/static,就是刚刚我们配置的路径。
到这里可以说我们所有的配置就已将完成了。在我配置的过程中,我重启了服务器,发生了一个小插曲,就是mysql的1017错误
ERROR 1017 (HY000): Can't find file: './data_db/tabls.frm' (errno: 13 - Permission denied)
#不是表不见了,而是权限的问题
#需要切换到 tabls.frm 这个目录下面去,我这里是 /var/lib/mysql
#进入到这个目录后 可以看到所有数据库,然后进入到mysite项目的数据库,加入叫mysiteDB,然后进行以下操作
chown mysql.mysql *