我确实有一个要使用GitLab CI和Docker部署到我的VPS的(Python Flask)应用程序。
在我的服务器上,我希望拥有我的应用程序的正式版和登台版。他们两个都需要MongoDB连接。
我的计划是在GitLab上自动构建应用程序,并将其推送到GitLab的Docker Registry。如果要将应用程序部署到暂存或生产环境,请执行docker pull
,docker rm
和docker run
。
计划是将配置(例如secret_key
)存储在.production.env
(和.staging.env
)中,并使用docker run --env-file ./env.list
我已经在服务器上安装了MongoDB,并且应用程序的两个环境都应使用相同的MongoDB实例,但使用不同的数据库名称(在.env
中进行配置)。
这是部署我的应用程序的最佳实践吗?你有什么建议?谢谢!
答案 0 :(得分:1)
这是我的配置,在不同的组织和项目规模中都能很好地工作:
要构建:
要部署:
.env
文件中。 docker-compose文件可以引用各个环境变量。docker-compose up
(对于较小的应用程序)或将Docker堆栈重新部署到一个集群(对于较大的应用程序)。如果愿意,可以通过Docker Machine执行步骤3。我觉得,但是,在我的案子中并不能保证它的好处。
答案 1 :(得分:0)
我可以推荐的一件事是,我已经在生产中做过几次,就是部署带有TLS加密端点的Docker Swarm。 This link讨论了如何通过证书保护群。这是一项工作,但是它将允许您做的是为应用程序定义服务。
这些服务一旦联机,便可以具有多个副本,并且每当您更新一项服务(即IE部署新映像)时,这些群集都将确保所有服务始终在线。
docker service update <service name> --image <new image name>
某些VPS服务器实际上具有Kubernetes作为服务(如Digital Ocean),如果这样做,则更可取。 Gitlab实际上具有autodevops功能,并且可以远程管理Kubernetes集群,但是您也可以使用kubectl进行手动部署。