centos7.4+Python3.6.8+Django2.1.5+Nginx1.12.2+uWSGI2.0.17.1搭建部署PythonWeb项目

转载大家请注明出处:小成吉思汗的创作世界
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 *
ok,今天的分享与记录就到此结束了,这是我的第一篇博客,我自己都不太相信,哈哈。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 接上一篇Python3.0 Django2.0.4 搭建项目(四),这一篇我们将为它创建一些自动化测试。 自动化测...
    听话哥阅读 651评论 1 0
  • 接上一篇Python3.0 Django2.0.4 搭建项目(三),这一篇主要是继续完善我们的投票应用。 编写一个...
    听话哥阅读 450评论 0 1
  • 今天股指开了空仓,向下的空间真的不敢说,今天还是处于空方占优,整体来看弱的很,没有意外消息刺激要在底部盘整几天,股...
    股市中求索阅读 436评论 0 0
  • 今天起床有点晚,可能是昨天在外练车有点累吧。依然是日常的看书学习。努力的培养自己看书的习惯,希望自己可以一...
    五指山下的悟空阅读 164评论 0 0
  • 打开简书,看看有没有消息。 消息处一片空白,那个小铃铛在的地方没有任何红色的小点点。 我像是得了强迫症,不停的打开...
    兰陵酒阅读 370评论 5 2