首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从当地的码头设置到库伯奈特的生产

从当地的码头设置到库伯奈特的生产
EN

Stack Overflow用户
提问于 2020-01-05 17:14:39
回答 2查看 270关注 0票数 0

我有一个由四个容器组成的本地Docker设置:一个烧瓶web应用程序、MySQL、Redis和一个RQ工作人员。

该设置基本上是相同的米格尔格林伯格的酒瓶超级教程。以下是他的教程代码的链接。

在我的例子中,唯一的不同是,我已经替换了他的导出博客文章功能,它运行在replaced上,而另一个功能计算量大,运行时间长(30分钟)。

--我把这个应用程序部署到生产中的最好方法是什么?

我只希望一到两个人一次访问它,并且他们每周只访问一到两次。

我一直在研究Kubernetes的例子,但是我很难将它们转换到我的设置中,并弄清楚如何部署到GCP。我愿意接受其他的部署方案。

下面是教程中的docker运行命令:

docker run --name redis -d -p 6379:6379 redis:3-alpine

代码语言:javascript
复制
docker run --name mysql -d -e MYSQL_RANDOM_ROOT_PASSWORD=yes \
    -e MYSQL_DATABASE=flaskapp -e MYSQL_USER=flaskapp \
    -e MYSQL_PASSWORD=mysqlpassword \
    mysql/mysql-server:5.7
代码语言:javascript
复制
docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
    -e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
    -e MAIL_USERNAME=example@gmail.com -e MAIL_PASSWORD=mysqlpassword \
    --link mysql:dbserver --link redis:redis-server \
    -e DATABASE_URL=mysql+pymysql://flaskapp:mypassword@dbserver/flaskapp \
    -e REDIS_URL=redis://redis-server:6379/0 \
    --entrypoint venv/bin/rq \
    flaskapp:latest worker -u redis://redis-server:6379/0 dyson-tasks
代码语言:javascript
复制
docker run --name flaskapp -d -p 8000:5000 --rm -e SECRET_KEY=my_secret_key \
    -e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
    -e MAIL_USERNAME=example@gmail.com -e MAIL_PASSWORD=mypassword \
    --link mysql:dbserver --link redis:redis-server  \
    -e DATABASE_URL=mysql+pymysql://flaskapp:mysqlpassword@dbserver/flaskapp \
    -e REDIS_URL=redis://redis-server:6379/0 \
    flaskapp:latest 
EN

回答 2

Stack Overflow用户

发布于 2020-01-05 17:36:47

既然你用Kubernetes和Google平台来标记这个问题,我想这就是你想要的方向。

在部署到云平台时,考虑使用云就绪存储/数据库解决方案。单节点MySQL不是一个现成的云端存储。考虑使用例如Google Cloud SQL

您的“烧瓶web应用程序”可以完美地部署为部署Google Kubernetes引擎 -但这要求您的应用程序是无状态的,并遵循十二因素应用原则

您的Redis也可以部署到Kubernetes,但是您需要考虑您的可用性需求有多重要。如果你不想考虑这个问题,你也可以使用Google,例如谷歌记忆 --一种为Redis提供的完全管理的内存数据存储服务。

如果您决定使用一个完全管理的缓存,您可以使用谷歌云运行将您的“烧瓶web应用程序”部署为一个容器--这是一个比完整的Kubernetes集群更受管理的解决方案,但也更加有限。但好的想法是你只为请求付费。

票数 1
EN

Stack Overflow用户

发布于 2020-07-23 23:06:11

我为GCP/GKE上的rq做了一个入门项目,这个项目应该大致符合你的需求。https://github.com/crispyDyne/GKE-rq

它由三个工作负载组成:

  • 领导者:一个接收外部流量和排队作业的烧瓶应用程序。
  • 工人:启动rq工人。
  • 仪表板:用于监视队列的仪表板。

一个google内存存储实例用于redis服务器。如果你想以便宜的价格来做这件事,这应该被替换成一个运行redis的容器(但是我很懒)。

如何创建内存存储redis实例:https://cloud.google.com/memorystore/docs/redis/quickstart-gcloud

此外,我使用节点端口来公开领导人应用程序,而不是负载均衡器。负载平衡器是惊人的昂贵。对于小型/廉价项目,节点端口应该可以正常工作。

对于一个新手(像我)来说,有几个不明显的步骤可以让所有的事情都说出来。

如何将“领导者”连接到redis队列.

从GCP控制台或gcloud redis instances describe ...获取redis。

在你的烧瓶应用程序中:

代码语言:javascript
复制
redis_conn = Redis(host={redisIP}, port=6379, db=0)
q = Queue('rq-server', connection=redis_conn)

如何将"Folower“连接到redis队列.

DockerFile:

代码语言:javascript
复制
FROM python:3
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
ENV PORT 6379
CMD [ "rq", "worker","--url", "redis://{redisIP}:6379", "rq-server" ]

如何将“仪表板”连接到redis队列.

DockerFile:

代码语言:javascript
复制
FROM python:3
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
ENV PORT 9181
CMD [ "rq-dashboard","-u", "redis://{redisIP}:6379"]

如何通过节点端口(或类似于仪表板)公开领导者。

注意目标端口。一个烧瓶应用程序应该是8080,rq仪表板应该是9181。

代码语言:javascript
复制
kubectl expose deployment rq-leader --name rq-leader-service /
 --type NodePort --port 80 --target-port 8080

然后打开{NodePort}。获取GCP控制台或kubectl get services ...上的节点端口。

代码语言:javascript
复制
gcloud compute firewall-rules create node-port-leader--allow tcp:{NodePort}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59602285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档