我正在进行一个Laravel项目,该项目将完全连续地部署到Cloud Run,并使用Cloud SQL作为存储服务。现在,我需要在本地环境中使用cloud_sql_proxy
手动执行php artisan migrate
。
有人知道是否可以自动执行这一步骤,可能是Dockerfile的一部分。
这是我当前的Dockerfile
:
FROM php:7
ENV PORT=8080
ENV HOST=0.0.0.0
RUN apt-get update -y
&& apt-get install --no-install-recommends -y openssl zip unzip git libonig-dev
&& apt-get clean
&& rm -rf /var/lib/apt/lists/*
RUN ["/bin/bash", "-c", "set -o pipefail && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer"]
RUN docker-php-ext-install pdo mbstring
WORKDIR /app
COPY . /app
RUN composer validate && composer install
EXPOSE 8080
CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8080"]
谢谢你的帮助!
不建议将迁移脚本放在Dockerfile中,因为它将为未来的每个请求触发。您只需要运行它一次,并且该执行应该由构建脚本或开发人员触发。
对于在提交或回滚时引入中断更改的迁移,必须进行完全停止,当然,还必须相应地计划回滚。
还要注意,提交/推送不应立即触发新的迁移。这些通常不是常规CI/CD生产线的一部分。
请确保手动部署用于迁移,而不是在CI/CD下
部署服务后,您可以创建一个新的修订版并分配一个标记,该标记允许您在不提供流量的情况下访问特定URL上的修订版。
这方面的一个常见用例是运行并控制对该容器的第一次访问。然后,您可以使用该标记将流量逐渐迁移到标记的修订版,并回滚标记的修订。
将现有服务的新修订版部署到生产:
gcloud beta run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
该标签允许您在特定的URL上直接测试(或通过迁移运行——这是第一个请求(新修订,而不提供流量。URL从您提供的标签名称开始:例如,如果您在服务myservice上使用了标签名称green
,您将在URLhttps://green---myservice-abcdef.a.run.app
上测试标记的修订
我通过ENTRYPOINT在每次部署时都运行迁移。
详情请点击此处回复:https://stackoverflow.com/a/69088911/867451