阿里云CentOS部署web.py生产环境初探

来源:互联网 发布:网络节点 编辑:程序博客网 时间:2024/06/10 02:41

在Upwork上面接了一个图像处理的web应用项目,考虑到原来学过python,选择了web.py框架进行实现,花了几天时间完成了相关功能及页面实现,并在本地测试通过。然而客户要求访问某个网址查看应用运行效果,于是便开始研究怎么部署到线上。

由于阿里云有优惠,于是选择了阿里云CentOS进行部署

  1. CnetOS 环境搭建
  2. nginx与uwsgi配置
  3. 启动运行
  4. 注意事项
  5. 错误及解决方案

1.CnetOS 环境搭建

购买云服务器,选择系统版本,我python开发是基于python2.7.12进行开发,因此选择“CentOS7 64位版本”。
远程连接进入主界面后,硬盘已经挂载,因此不需要进行其他操作,直接安装桌面
1、登录服务器,执行命令安装桌面环境。

先安装MATE Desktop

yum groups install "MATE Desktop"

安装好MATE Desktop 后,再安装X Window System。

yum groups install "X Window System"

设置服务器默认启动桌面

systemctl  set-default  graphical.target

安装完成后,执行命令重启服务器,在ECS服务器控制台,使用管理终端登陆服务器桌面。

reboot

2. python 应用环境

CentOS7 目前python自带版本为2.7.3 因此无需进行升级
直接使用pip install 进行安装应用所需要的包:
安装完毕后,将应用程序目录拷贝至某一目录 运行Python XXX.py 进行测试,打开http://host:8080 一切正常即表示环境移植成功。

3. nginx与uwsgi配置

Nginx 使用yum 直接安装 安装后路径为 /usr/sbin/nginx
uwsgi 使用pip 安装

安装完毕后,首先对原应用程序进行修改:

app = web.application(urls, globals())  #下面增加一行application = app.wsgifunc()

建立uwsgi的配置文件: uwsgi_conf.ini

[uwsgi]socket = :8090http-keepalive = 1master = 1wsgi-file = index.pymaser=true vhost=true workers=50max-requests=5000 limit-as=512processes = 8disable-logging = 1buffer-size = 50000harakiri = 5

socket: 监听窗口 这个需要和nginx保持一致
wsgi-file:应用程序启动文件 我的配置文件是直接建立在应用程序目录下,所以直接是文件名。
其他的基本没变,具体含义还没弄明白

修改nginx配置文件: 注意 nginx的运行目录和配置文件不在一起
我这里配置文件是: /etc/nginx/nginx.conf
运行目录是: /usr/sbin/nginx

  • server_name 修改为云服务器的公网ip地址,这里我没有申请域名,如果有域名这里改变即可
  • location 中修改:root 设置为应用程序目录 ;uwsgi_pass 设置为如下,注意这里的端口号
  • location /static 和 location ~* ^.+.(jpg|jpeg|gif|png|bmp)$ 部分是参考网上某一个,不知道起作用不。
    server {        listen       80 ;        #server_name  localhost;        server_name  XXX.XXX.XXX.XXX;         # Load configuration files for the default server block.        include /etc/nginx/default.d/*.conf;        location / {            root    /usr/code/Image;            include uwsgi_params;              uwsgi_pass 127.0.0.1:8090;        }        error_page 404 /404.html;            location = /40x.html {        }        error_page 500 502 503 504 /50x.html;            location = /50x.html {        }        location /static{            alias /usr/code/Image/static;        }        location ~* ^.+\.(jpg|jpeg|gif|png|bmp)$ {            access_log off;            root /usr/code/Image;             expires 30d;            break;        }    }

3.启动运行

进行如上设置后,开启应用:
/usr/sbin/nginx -t 这个是测试配置文件
/user/sbin/nginx 这个是启动
开启uwsgi:
uwsgi uwsgi_conf.ini 开启uwsgi

最后浏览器访问公网ip 即可

4.注意事项

以前完全没接触过linux系统,这几天的配置才发现这么麻烦,但是习惯了其实也还好。。。

  • uwsgi 每次启动之后关闭 直接 Ctrl+C 即可
  • nginx 启动之后想要关闭 killall - 9 /usr/sbin/nginx

`5.错误及解决方案

  1. 出现无法打开数据库的问题:
    解决办法:数据库路径不要使用绝对路径,否则可能会出现权限问题
  2. html 页面图片不显示的问题
    解决办法:web.py的图片资源必须放在static目录中,另外,路径不要使用绝对路径 ../static/xxx.bmp 即可
    3.html 页面图片不刷新
    解决办法:当img的src 没有变而内容发生改变时,地址没变默认不尽兴刷新,目前我采用的办法是生成随机地址,强制刷新。

总之,linux下面开发和windows 开发有很多不同==