我正在编辑我的现场生产服务器上的Python代码(Flask Web Server)。 我刚刚开始了一个网站,了解这不是一个可行的长期解决scheme。 我知道很多人在pipe理开发,testing和生产环境(可能还有更多)方面有很多不同的方法,但是有人可以指点一下我可以开始学习更多关于pipe理这种types的过程的地方stream? 我不知道从哪里开始。 谢谢。
让我们停下来一分钟,回想一下为什么我们将开发和生产环境分开。
总之,这是因为我们是人类,犯了错误 。 分离环境的意义在于尽早捕捉并纠正错误,并在影响用户之前。
设置这个应用程序的方式几乎和部署应用程序一样多。 无论你在做什么,最好的办法就是使用一种足够简单的方法来理解和使用,而不是试图去解决它,并且纠正到足以帮助你在问题出现之前就抓住问题。
现在,如果你想成为企业家,build立一个几乎没有人能够理解的,几乎没有人真正喜欢的东西 ,那么一定要遵循ITIL。 在那里有足够的过程来保持你的职业生涯的一半埋在文书工作。 但是,如果您正在某些行业或某些客户开发软件,则可能必须这样做。
从你的问题来看,这听起来像是一个开发人员或一个小团队,在一个需要更多灵活性和速度的项目上工作。
实质上,您需要两种types的工具:testing工具和部署工具。
至less,您真正需要的是两台服务器:生产服务器和testing(分段)服务器。 您将首先在本地工作站上testing您的更改。 如果一切似乎都正确,则将代码推送到登台服务器,然后再次进行testing。 如果一切还好,就把它推到生产线上,等待火警报警。
testing软件的最强大的方法之一就是持续集成 。 使用这种方法,无论您将代码签入共享存储库,服务器都会检出代码并运行整个testing套件。 (你没有为所有事情编写单元和functiontesting,对吧?)它也可以做集成testing。 如果所有testing都通过,则可以configuration此类工具以将代码生成并自动部署。 Github这样做,例如。 今天两个常见的CI工具是Jenkins和Travis。
最后是部署。 这似乎很明显:将新代码复制到(分段或生产)服务器,然后通知Web服务器在新代码上启动新工作人员。 Capistrano,Commando或Deployer等工具可帮助实现这一function。 如果出现问题,他们通常也可以回滚到以前的部署。 (你的语言或框架应该有办法处理回滚数据库模式的变化,比如Rails中的迁移。对于Flask,你可以使用类似SQLAlchemy和Alembic的东西。)
您可能希望进入的最终状态是您拥有100%testing覆盖率的所有testing,并且对所有内容都进行单元,function和集成testing,以便您可以利用持续集成来部署您的更改或发现错误尽可能迅速。 从一个简单的“testing”服务器开始,一路顺风,直到你到达那里。
任何人都可以通过可用的debugging工具在服务器上运行任意代码(这就是说,如果您处于debugging模式,那么如果您正在开发您的网站,那将是如此)。
staging.yourwebsite.com
网站 一个简单的NGINXconfiguration示例:
upstream production { server 127.0.0.1:5000; # Default Flask address } upstream staging { server 127.0.0.1:5001; } server { server_name yourwebsite.com default_server; access_log /var/log/nginx/yourwebsite_access.log; error_log /var/log/nginx/yourwebsite_error.log; location / { proxy_pass http://app; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { server_name staging.yourwebsite.com; access_log /var/log/nginx/staging_access.log; error_log /var/log/nginx/staging_error.log; allow YOUR_IP_ADDRESS; deny all; location / { proxy_pass http://staging; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
我真的不明白你的问题。
然而,有一种方法可以把从发展到生产的东西称为ITIL
这是“所有文字”,并提供/描述最好的实践和过程,把从开发到产品,最小化和控制风险… …