小奋斗 - 轻松学习从此开始!
IT小奋斗群 QQ群:62017228

Centos6.5 Python+FLask环境搭建

最近这段时间想搞个个人博客,但是又不想用wordpress觉得没啥技术含量,所以就用python+flask搭了一个网站准备自己建站。

推荐大家使用阿里云,腾讯云的学生特权真的都是骗人的,完全抢不到。阿里云9.9/月,很划算,就是centos 默认是 6.5 需要更一下python 也不是很麻烦。

写在前面(用腾讯云centos 7.2 请自动忽略以下内容)

    python升级:
    1.下载Python-2.7.5(这里推荐用ftp传一个python安装压缩包上去,wget特别慢不知道为啥)

    #wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.xz 

    2.解压

    #tar -xz Python-2.7.5.tar.xz  

    3.更改工作目录

    #cd Python-2.7.5  

    4.安装

    #./configure  
    #make all             
    #make install  
    #make clean  
    #make distclean  

    5.查看版本信息

    #/usr/local/bin/python2.7 -V  

    6.建立软连接,使系统默认的 python指向 python2.7

    #mv /usr/bin/python /usr/bin/python2.6.6  
    #ln -s /usr/local/bin/python2.7 /usr/bin/python  

    7.重新检验Python 版本

    #python -V  

    8解决系统 Python 软链接指向 Python2.7 版本后,因为yum是不兼容 Python 2.7的,所以yum不能正常工作,我们需要指定 yum 的Python版本

    #vi /usr/bin/yum  

    将文件头部的
    #!/usr/bin/python

    改成
    #!/usr/bin/python2.6
  • 第一步,基本环境配置

    首先当然是准备一个云主机啦,我试用了几家的云主机,腾讯和阿里都不错,腾讯云可以选择系统版本是centos 7.2 这就省去了进行python升级的步骤因为其内置的python版本就是 2.7.5,所以只需要搭建flask就好了,首先肯定是pip的安装:

    # wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate
    

    然后就是进行解压和编译了:

    #chmod +x pip-1.3.1.tar.gz 
    #tar xzvf pip-1.3.1.tar.gz 
    #cd pip-1.3.1 
    #python setup.py install 
    

    编译完成之后就可以使用pip安装各种所需架包了。
    在最后一步可能会报错”ImportError: No module named setuptools”,原因是没有安装setuptools

    安装setuptools

    #wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg  --no-check-certificate 
    #chmod +x setuptools-0.6c11-py2.7.egg 
    #sh setuptools-0.6c11-py2.7.egg 
    

    这一步也有可能报错”zlib not available”,可以使用#rpm -qa | grep zlib 查看可用的安装包,将没有安装的安装上(上面我们已经安装了zlib和zlib-devel)

    再次运行sh setuptools-0.6c11-py2.7.egg,发现还是报错?同样的错误?

    那么这应该不是zlib的问题,而是python的问题,我们需要重新编译python2.7.5,在编译之前需要修改一下Modules/Setup.dist文件。找到

    #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
    

    将注释去掉,重新编译python2.7.5

    #cd Python-2.7.5
    #./configure --prefix=/usr/local
    #make && make install
    

    这样zlib应该可以用了,回到setuptools的安装,再回到pip的安装,这回总算把pip安装上了。你可以在全局环境下安装flask相关的包(如果你的服务器中包括将来只想运行一个项目的话),也可以将包安装在虚拟环境中。先别急,把项目代码上传了再说。

  • 第二步,安装flask相关架包

    (直接pip install Flask==0.10.1(类推即可))

    Flask==0.10.1
    Flask-Login==0.2.11
    Flask-Mail==0.9.1
    Flask-Moment==0.4.0
    Flask-PageDown==0.1.5
    Flask-SQLAlchemy==2.0
    
  • 第三步 通过 FlashFxp 5.2 进行文件上传:

    安装vsftpd

    yum install -y vsftpd
    

    编辑ftp配置文件

    vi /etc/vsftpd/vsftpd.conf
    
    anonymous_enable=NO
    #anonymous_enable=YES
    

    去掉前面的注释

    chroot_local_user=YES
    

    不受限制的用户列表,用不用都OK

    #chroot_list_enable=YES
    #chroot_list_file=/etc/vsftpd/chroot_list
    

    加上这行解决了无法登陆的问题

    allow_writeable_chroot=YES
    

    启动/重新启动ftp

    service vsftpd start
    
    service vsftpd restart
    

    设置开机启动ftp

    chkconfig vsftpd on
    

    防 火墙配置(iptables)

    vi /etc/sysconfig/iptables
    
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
    

    防火墙重新启动

    建立ftp账户

    useradd -d /path/you/want -s /sbin/nologin ftpadmin
    

    修改密码

    passwd ftpadmin
    

    设置账户权限

    chown -R ftpadmin.ftpadmin /path/you/set
    
  • 第四步, 配置服务器代理:

    使用的代理一共有两个,nginx和uwsgi,先说明一下,如果不用nginx一样可以访问你的项目,使用nginx的目的是为了安全和负载均衡。配置了nginx做前端代理,uwsgi作后端代理的服务器(这里所说的前后端都是相对的位置,并无实际含义),在处理来自Internet的请求时,要先经过nginx的处理,nginx把请求再交给uwsgi,经过uwsgi才能访问到项目本身。

    没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到我们的项目中。nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。

    而uwsgi则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。所以只用uwsgi也是可以的。

    先安装uwsgi

    pip install uwsgi
    

    在你的项目根目录下创建一个配置文件uwsgiconfig.ini(uwsgi支持多种配置文件格式,xml,ini,json等)(记住这里的注释要全部删除掉才能用

    [uwsgi]
    
    socket = 127.0.0.1:8001     //启动程序时所使用的地址和端口,通常在本地运行flask项目,
                        //地址和端口是127.0.0.1:5000,
                        //不过在服务器上是通过uwsgi设置端口,通过uwsgi来启动项目,
                        //也就是说启动了uwsgi,也就启动了项目。
    chdir = /home/www/     //项目目录
    
    wsgi-file = manage.py      //flask程序的启动文件,通常在本地是通过运行  
                       //      python manage.py runserver 来启动项目的
    
    callable = app      //程序内启用的application变量名
    
    processes = 4     //处理器个数
    
    threads = 2     //线程个数
    
    stats = 127.0.0.1:9191      //获取uwsgi统计信息的服务地址
    

    保存配置文件,我们可以通过键入 uwsgi uwsgiconfig.ini 来启动uwsgi。

    安装nginx:由于nginx不在yum安装软件源里,所以添加上

    #rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
    #yum install nginx
    

    nginx的一些命令

    启动: nginx
    停止: nginx -s -stop
    强制停止: pkill -9 nginx
    查看nginx是否应用配置文件: nginx -t
    查看版本: nginx -v
    

    先别急着启动我们的nginx代理服务器,先来写一下nginx的配置文件。

    nginx的配置文件在/etc/nginx/conf.d/文件夹下,也有可能在/etc/nginx/sites-enabled/default。我们打开默认的配置文件,大部分内容都是加注释的,需要我们修改。(这里的注释不用删除 )

    events {
    worker_connections  1024;
    }
    http {
    include       mime.types;    
    default_type  application/octet-stream;    
    sendfile        on;    
    keepalive_timeout  65;
    
    server {
    listen       80;         //默认的web访问端口
    server_name  xxx.xxx.xxx.xxx;     //你的公网ip
    #charset koi8-r;
    access_log  /home/www/WebBlogold/logs/access.log;    //服务器接收的请求日志,
                                                         //需要在项目文件夹下创建
                                                         //logs文件夹,下同。
    error_log  /home/www/WebBlogold/logs/error.log;         //错误日志
    
    location / {
    
        include        uwsgi_params;     //这里是导入的uwsgi配置
    
        uwsgi_pass     127.0.0.1:8001;   //需要和uwsgi的配置文件里socket项的地址
                                         //相同,否则无法让uwsgi接收到请求。
    
        uwsgi_param UWSGI_PYHOME /home/www/WebBlogold/venv;   //python的位置(虚拟环境下)
    
        uwsgi_param UWSGI_CHDIR  /home/www/WebBlogold;     //项目根目录
    
        uwsgi_param UWSGI_SCRIPT manage:app;     //启动项目的主程序(在本地上运行
                                                 //这个主程序可以在flask内置的
                                                 //服务器上访问你的项目)
    
        }
    }
    }
    下面是一堆#,全都是注释,不用管它。
    

    在启动nginx时,如果发现报错”98:Address already in use”,不要着急,很有可能是因为你的nginx已经启动了。

    通过 netstat -ntlp 查看端口占用情况,看看是不是你的nginx占用的80端口。如果发现有其他程序占用了nginx的默认的80端口,可以杀掉这些进程,再启动nginx。

    这里介绍一下netstat基本命令:
    
    -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。
    -l 仅列出有在 Listen (监听) 的服務状态
    
    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令。
    
    以及怎么杀死进程:
        kill -pid
    

    到此,我们终于完成了所有的工作,马上就可以访问自己的项目了。

    现在,检查一下nginx的配置文件是否应用 nginx -t 没有成功应用的话,检查一下配置文件。

    键入 nginx 来启动nginx
    键入uwsgi uwsgiconfig.ini 启动uwsgi
    

    这时uwsgi会告诉你你的项目是否有错误,如果本地运行良好,一般是没有错误的。

    有可能会报的错是项目相关模块的引入路径不对,修改一下便可。没有报错的话,打开浏览器,输入你的服务器IP地址,或者如果你有相应的域名,并解析到了你的IP,输入域名也可以。

    如果一切顺利的话,显示的就是你想要的页面了,如果不是,首先查看一下日志文件,他们在你的项目根目录下logs文件夹里。

我来评几句
登录后评论

已发表评论数(0)