我的第一个python web开发框架(20)——产品发布(部署到服务器)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:

首先按上一章节所讲述的,将服务器环境安装好以后,接下来就是按步骤将网站部署到服务器上了。

  我们的站点是前后端分离的,所以需要部署两个站点。首先来发布前端站点。

 

  部署前端站点

  输入命令进入svn管理文件夹:cd /data/svn/

  创建svn:svnadmin create simple_html

  

  进入svn帐号与密码管理文件夹:cd /data/svn/simple_html/conf/

  建立svn账号:vi authz   (在文件里面添加下面代码)

[simple_html:/]
py = rw

  编辑svn账号密码:vi passwd  (在文件里面添加下面代码)

py = 123456

  修改svn配置信息:vi svnserve.conf  (将配置文件里的内容对着下面参数进行修改)

anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

  进入勾子文件夹:cd /data/svn/simple_html/hooks/

  添加勾子文件:vi post-commit  (添加下面代码,用于svn提交代码成功后,自动将代码发布出去)

复制代码
#!/bin/sh
# POST-COMMIT HOOK

export LANG=en_US.UTF-8
/usr/bin/svn up --username=py --password=123456 /data/www/simple_html
复制代码

  给勾子赋可执行权限:chmod +x post-commit  (可有赋了可执行权限后,勾子才会被执行)

  创建前端网站发布文件夹:mkdir /data/www/simple_html

  检出svn到新创建的网站发布文件夹:svn checkout svn://localhost/simple_html /data/www/simple_html/  (输入前面创建的账号:py和密码123456,提示Store password unencrypted (yes/no) 时输入y就可以了。如果运行后出现svn: E000013 xxx  Permission denied错误,有可能是你刚刚修改的svn配置没有生效,重启一下svn就可以了)

  在本地电脑安装个svn客户端(我用的是TortoiseSVN-1.9.4.27285-x64-svn-1.9.4.msi),将刚创建的svn检出到本地

  

  将前端html代码复制到刚检出的文件夹里,提交到服务器端

  

  检查服务器网站文件夹,看看提交的svn是否自动发布了

  

  配置nginx,让浏览器可以正常访问

  进入nginx配置文件夹:cd /usr/local/nginx/conf/vhost/ (如果你按前面章节操作,这里已创建了test.conf配置,不然使用80端口会发生冲突,可以将它删除:rm -rf test.conf

  创建simple_html.conf配置文件:vi simple_html.conf (添加下面代码)

复制代码
server {
    listen      80;
    charset     utf-8;
    root        /data/www/simple_html;
    server_name am.zh192.168.0.128;

        location /favicon.ico {  
                log_not_found off;
        access_log off;
        } 

        location / {
                index  Index.html index.html;
        }

    access_log  /data/logs/nginx/simple_html.log  main;
}
复制代码

  重启nginx,让配置生效:/usr/local/nginx/sbin/nginx -s reload

  在浏览器中输入:http://192.168.0.128/ 就可以访问到前端html页面了,由于接口还没有部署,所以这里访问后中间那一块是空的,按F12也可以发现接口无法访问,接下来我们来部署后端接口服务。

  

 

  部署后端接口站点

  创建svn的相关步骤与前面的一样,我们创建一个名叫simple_interface的svn,具体大家自己参考前面内容

  在创建勾子时,由于接口我们要用到supervisord+uwsgi,所以在勾子里需要添加重启supervisord服务的命令,让发布的代码重新生效

  vi post-commit

复制代码
#!/bin/sh
# POST-COMMIT HOOK

export LANG=en_US.UTF-8
/usr/bin/svn up --username=py --password=123456 /data/www/simple_interface
/usr/bin/supervisorctl restart simple_interface
复制代码

  记得给post-commit赋可执行权限哦

  当你在服务器端检出simple_interface到/data/www/simple_interface后,接口svn就创建成功了,接下来配置supervisord

  输入命令:vi /etc/supervisord.conf (之前创建的test配置这里也可以直接删除)

  在supervisord.conf后面添加下面配置

复制代码
[program:simple_interface]
command=/usr/local/bin/uwsgi /etc/uwsgi/simple_interface.ini
directory=/data/www/simple_interface
stdout_logfile=/data/logs/supervisord/simple_interface.log
socket-timeout=3
autostart=true
autorestart=true
redirect_stderr=true
stopsignal=QUIT
复制代码

  添加uwsgi配置:vi simple_interface.ini (如果是正式项目上线,最好使用python35_plugin.so来运行xml配置,稳定性和性能会好很多,前期写服务器环境安装配置时没有经验,所以没有配置成功只能使用ini了)

复制代码
[uwsgi]
socket = 127.0.0.1:10080
chdir = /data/www/simple_interface/
wsgi-file = /data/www/simple_interface/main.py
limit-as = 512
reload-on-as = 256
reload-on-rss = 192
processes = 1
max-requests = 1000
pythonpath = /data/www/simple_interface/
daemonize = /data/logs/uwsgi/simple_interface_uwsgi.log
log-maxsize = 10000000
disable-logging = true
master = true
vacuum = true
no-orphans = true
复制代码

  supervisord载入添增配置(如果对supervisord.conf修改也需要使用这个命令):/usr/bin/supervisorctl reread

  更新到进程管理中:/usr/bin/supervisorctl update (这个命令会启动有更改的服务,如果不生效时,也可以使用/usr/bin/supervisorctl reload重启整个服务,如果更改的只是uwsgi配置文件,可以使用/usr/bin/supervisorctl restart xxx来启动指定项目)

  输入命令:ps -ef | grep uwsgi 就可以查看到刚刚添加的simple_interface正在运行了

  配置后端接口nginx

  创建simple_interface.conf配置文件:vi /usr/local/nginx/conf/vhost/simple_interface.conf (添加下面代码)

复制代码
server {
    listen      20080;
    charset     utf-8;
    root        /data/www/simple_interface;
    server_name 192.168.0.128;

        location /favicon.ico {  
                log_not_found off;
                access_log off;
        } 

        location / {
        include uwsgi_params;
        uwsgi_param UWSGI_PYHOME /data/www/simple_interface;
        uwsgi_param UWSGI_CHDIR /data/www/simple_interface;
        uwsgi_param UWSGI_SCRIPT main; # 对应main.py
        uwsgi_pass  127.0.0.1:10080;
        proxy_connect_timeout      2; #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_send_timeout         4; #后端服务器数据回传时间(代理发送超时)
        proxy_read_timeout         4; #连接成功后,后端服务器响应时间(代理接收超时)
    }

    access_log  /data/logs/nginx/simple_interface.log  main;
}
复制代码

  然后我们按前面步骤将代码提交到服务器端,并检查 /data/www/simple_interface/ 目录是否同步成功

  如果没有问题,我们访问:http://192.168.0.128:20080/api/about/  这个获取公司介绍的接口,会发现返回 {"msg": "\u67e5\u8be2\u5931\u8d25", "data": {}, "state": -1} (PS:msg内容是查询失败,它是Unicode编码,需要使用站长工具进行转换才能看到中文)

  这是因为我们还没有将数据库导入进来,我们先将本地的数据库导出,然后再导入到服务器里

  打开CMD,然后输入:cd C:\Program Files (x86)\PostgreSQL\9.6\bin\  (这是替换成你自己本地安装的PostgreSQL数据库的地址,我本地以前安装的是9.4)

  然后输入命令导出数据:pg_dump.exe -h localhost -U postgres -p 5432 simple_db > D:/simple_db.sql

  

  运行完命令后,会在D盘根目录下看到simple_db.sql这个文件,将它上传到服务器的/tmp/目录中

  切换数据库账号:su postgres

  登录postgresql:psql -U postgres

  创建数据库simple_db:createdb simple_db

  退出postgresql:\q

  切回root账号:su root (回车后输入密码)

  导入数据库结构与数据:psql simple_db < /tmp/simple_db.sql

  这时我们再次访问:http://192.168.0.128:20080/api/about/ 就可以看到返回的公司介绍内容了,而直接访问 http://192.168.0.128 会发现内容还是空的,这是因为我们还没有对前端进行反向代理处理,还需要做下面最后一步操作

  编辑前端hmtl的nginx配置:vi /usr/local/nginx/conf/vhost/simple_html.conf   (替换成下面配置内容)

复制代码
upstream myweb {
    ip_hash;
    server 127.0.0.1:20080 weight=1 max_fails=5 fail_timeout=5s; 
}

server {
    listen      80;
    charset     utf-8;
    root        /data/www/simple_html;
    server_name 192.168.0.128;

        location /favicon.ico {
                log_not_found off;
        access_log off;
        }

        location / {
                index  Index.html index.html;
        }

    location ~* ^/(index|api|upload)/ {
        proxy_pass                 http://myweb;
        proxy_cache_key            $host$uri$is_args$args;
        proxy_set_header           Host $host; 
        proxy_set_header           X-Real-IP $remote_addr; 
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout      3;
        proxy_send_timeout         5;
        proxy_read_timeout         5;
    }


    access_log  /data/logs/nginx/simple_html.log  main;
}
复制代码

  PS:添加了反向代理,当访问以index、api和upload为开头的url时,就会调用后端的接口地址了

  重启nginx服务,让刚刚的配置生效:/usr/local/nginx/sbin/nginx -s reload

 

  现在直接访问 http://192.168.0.128就可以看到首页有数据了

 

  我们输入http://192.168.0.128/login.html 想要登录后台时,验证码会显示出错,显示不了,这是因为我们使用的字体在服务器上不存在,需要上传验证码图片和修改验证码工具包的地址

  将文章后面的包下载下去,static文件夹里有arial.ttf字体,另外还需要修改common文件夹里的verify_helper.py文件,将参数修改为:font_type='/data/www/simple_interface/static/arial.ttf'  这是更改为你上传后字体文件所在的路径就可以了

   按以上步骤只要细心的话应该就能正常运行了。

 

  本文对应的源码下载(完整代码)


    本文转自 AllEmpty 博客园博客,原文链接:http://www.cnblogs.com/EmptyFS/p/8336785.html,如需转载请自行联系原作者



相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
24天前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
32 4
|
3天前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)
|
21天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
31 1
|
23天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
24天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
20天前
|
存储 人工智能 弹性计算
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理。通过合理优化资源分配、利用自动伸缩及高效数据管理,ECS能显著提升AI系统的性能与效率,降低运营成本,助力科研与企业用户在AI领域取得突破。
36 6
|
25天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
1月前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
1月前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
1月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。
204 2