[分享] CentOS 7 Python Web 环境配置

2014-11-06 12:34:22 +08:00
 hustlzp

尝鲜用了下CentOS 7跑Flask应用。

总体感觉除了systemd带来一些不习惯之外,其他都还行,包的版本也比6.5要新,比如Python默认就是2.7.5。BTW,CentOS 7安装MySQL时,默认安装的是MariaDB,不知道这个东西有什么坑…不过反正是跑一些自己的一些业余小项目,也无所谓了。

下面是经验记录,使用Nginx作为反代,MariaDB作为数据库,用Adminer管理MariaDB,然后顺便安装了Supervisor:

系统更新

yum -y update

安装常用包

# 一些常用工具集,比如gcc
yum groupinstall -y development
# 安装Pillow所需要的图像库
yum install -y  libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel
yum install -y vim git python-devel mariadb-devel

安装pip、virtualenv

系统默认的Python版本为2.7.5,够用了。

安装pip:

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py

安装virtualenv:

pip install virtualenv

安装Nginx

vim /etc/yum.repos.d/nginx.repo,输入如下内容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

然后yum install nginx即可。

启动Nginx、配置Nginx开机启动:

systemctl start nginx.service
systemctl enable nginx.service

安装MariaDB

yum -y install mariadb-server mariadb

然后执行mysql_secure_installation,按提示完成安全设置。

启动MariaDB、配置MariaDB开机启动:

systemctl start mariadb.service
systemctl enable mariadb.service

安装Adminer

yum install php php-mysql php-fpm

PHP版本为5.4.16。

启动php-fpm、配置php-fpm开机启动:

systemctl start php-fpm.service
systemctl enable php-fpm.service

在Nginx中配置php-fpm,编辑/etc/nginx/conf.d/default.conf,加入:

location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/$fastcgi_script_name;
}

systemctl restart nginx.service重启nginx。

安装Adminer:

cd /usr/share/nginx/html
wget http://www.adminer.org/latest.php

访问http://your_IP/latest.php即可进入Adminer管理页面。

安装Supervisor

pip install supervisor
echo_supervisord_conf > /etc/supervisord.conf
sudo mkdir /etc/supervisord.d/

vim /etc/supervisord.conf,在其中加入如下:

[include]
files = /etc/supervisord.d/*.conf

此处的/etc/supervisord.d/用于存放各种program的supervisord启动脚本(后缀为conf)。

然后添加Supervisor的service控制命令:

vim /usr/lib/systemd/system/supervisord.service,并输入:

[Unit]
Description=Supervisord

[Service]
Type=forking
PIDFile=/tmp/supervisord.pid
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

启动Supervisord、配置Supervisord开机启动:

systemctl start supervisord.service
systemctl enable supervisord.service

参考

10705 次点击
所在节点    Linux
19 条回复
awanabe
2014-11-06 12:45:03 +08:00
python web 配置在哪里? flask的好伙伴 uwsgi在哪里呢?
怎么变成配置php了?
这种分享有意义么?
教程一大把而且题目和内容又不搭..
humiaozuzu
2014-11-06 12:50:03 +08:00
部署可以用 supervisor + gunicorn
virtualenvwrapper 已经是标准配件了
Mac 下的 Sequel Pro 管理数据库很方便
hustlzp
2014-11-06 13:13:36 +08:00
@awanabe

* 重点是在CentOS 7下为Python Web开发配置一些基础的东西好吗?
* 你没看见pip、virtualenv、支持Pillow的图像库?
* 你确定flask的好伙伴是uwsgi?而不是gunicorn?
* 你看题目中有php吗?难道没看出来php是用来支持Adminer的?

@humiaozuzu

恩恩,我部署都是用supervisor + gunicorn。
virtualenvwrapper还没有看过,找时间去看看。
Sequel Pro确实没有用过...最近一直用Adminer的Web界面来管理。谢谢推荐!去试试~
ericFork
2014-11-06 13:14:02 +08:00
@humiaozuzu 完全赞同...
no13bus
2014-11-06 14:35:03 +08:00
@ericFork
@hustlzp
@humiaozuzu
@awanabe
我想问你们开发的时候用python的构建工具吗?buildout。这东西跟virtualenv差不多,但是比他强大(网上说的)。有什么优点呢?
hustlzp
2014-11-06 14:43:03 +08:00
@no13bus 跑单元测试用的构建工具,我用的是更加成熟的Jenkins,然后用virtualenv创建虚拟环境。

http://docs.python-guide.org/en/latest/scenarios/ci/

这里是一些推荐的CI工具。
eriale
2014-11-06 14:47:16 +08:00
@hustlzp 倒是想找个jenkins在flask中的使用实践文章。
hustlzp
2014-11-06 14:49:57 +08:00
之前写的一篇博文:

http://hustlzp.com/post/2014/08/jenkins

仅供参考啊。
hustlzp
2014-11-06 14:50:13 +08:00
@eriale 以上。
hustlzp
2014-11-06 14:53:00 +08:00
@eriale

以前也做过一个相关的PPT,一并分享:

http://hustlzp.github.io/jenkins-presentation
ericFork
2014-11-06 15:31:37 +08:00
@no13bus

我没有尝试过,不过知乎团队在用 http://www.zhihu.com/question/19638115

这里有个更为详细的答案:

http://www.zhihu.com/question/21639330/answer/21889237
awanabe
2014-11-06 16:42:00 +08:00
@hustlzp 题目不是python web环境么, 通篇没见你提过"开发"环境.. 难道还不是文不对题么, 这种题目拿出去不都是 配置线上运行环境么?
开发的话需要要用web方式访问db? 既然都在用命令行了..这个真是有点多此一举了...
hustlzp
2014-11-06 16:48:47 +08:00
@awanabe 恩,确实文不对题。
eriale
2014-11-06 17:22:52 +08:00
@hustlzp 写的真不错,多谢多谢!
sivacohan
2014-11-06 18:49:29 +08:00
既然都写模板了。为啥不上salt,puppet。
最不济写个shell也成啊。
话说我自己电脑都用salt管了。基本告别手动apt,yum
hustlzp
2014-11-06 18:58:38 +08:00
@sivacohan 没有用过salt、puppet,请问哪一个好用一些?
sivacohan
2014-11-06 20:11:24 +08:00
@hustlzp
我是先看的puppet。然后因为Ruby,以及这货配置文件的逻辑,类似变量作用域那有点绕就放弃了。
具体puppet的优势还没体会到。

salt用起来还挺方便的。我的主要用途是软件版本管理,还有配置文件管理。其他的东西基本没碰。
另外salt是Python写的。如果你对Python熟悉。我推荐salt。
hustlzp
2014-11-06 21:21:13 +08:00
@sivacohan 恩,谢谢推荐,试试salt。
chinsonliu
2014-11-07 15:59:17 +08:00
赞!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/144370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX