Я развернул приложение Flowstack (I.E. Frontend/Backend) на платформе Google Cloud с Kubernetes. А с Разработчики ленивые Я все автоматизировал с Gitlab CI.
Это далеко от PHP, развернутого вручную на сервере Apache. Если вы заинтересованы в перемещении снаряжения и посмотрите, как это работает, читать дальше.
Мое заявление
Мой проект, который я сейчас работаю, делится на три части: Frontend , Backend , Очередь работы Отказ
Каждая часть работает в отдельном Контейнеры Докер. Таким образом, у них все есть `Dockerfile ‘:
- Frontend Использует изображение Node.js, которое строит Угловая 9 а затем изображение Nginx, которое обслуживает статические файлы
- Backend использует Node.js Изображение, которое запускает веб-сервер на порт 3000
- job_queue также использует изображение Node.js, которое запускает Node.js Скрипт, который связывается с базой данных Postgres и выполняет автономные действия.
Таким образом, мой проект имеет следующую структуру:
├── Backend ├── Докер ├── Docker-Compose.yml.yml.yml └── внешний интерфейс
Поэтому я хотел создать эти изображения автоматически во время Git push
И публикуйте его на Google Cloud Platform с Kubernetes. Для этого я использовал Gitlab ci. Но логика должна быть идентична кругу GitHub CI.
База данных Postgres не зависит от Kubernetes и работает на [Google Cloud SQL для PostgreSQL] ( https://cloud.google.com/sql/docs/postgres ). Я не буду говорить об этом здесь ..
Автоматизация с GitLab CI
GitLab позволяет определить рабочий процесс вещей, когда вы нажимаете код через .gitlab-ci.yml
файл. Это часто полезно для запуска A трубопровод (последовательность действий), которая будет запустить модульные тесты, код линтера и т. Д… ` В моем случае я создал следующие действия:
- `test ‘: Испытания запуска запуска
Опубликовать
: Создание докера изображения и публикации в личном реестре GCloudРазвертывание
: говорит GCloud развертывать изображения ранее Загружено Отказ
Таким образом, структура файла `.gitlab-Ci.yml ‘выглядит так:
# .gitlab-ci.yml # ... stages: [test, publish, deploy] job:test:backend: stage: test # ... job:publish:backend: stage: publish # ... job:deploy-develop:backend: stage: deploy # ...
Я только держал работу, которая включает в себя «бэкэнд», чтобы упростить.
Я пойду на тебя через шаги. Вот так.
Тест: беговые тесты
Это самый простой шаг. Я не буду тратить слишком много времени на это, потому что многие учебники существуют, и это не предмет этой статьи.
Итак, мы начинаем две работы:
Работа: Тест: Backend
Инициализируйте приложение, подключите базу данных Postgres и запуститеТест пряжи
Отказ
job:test:backend: stage: test services: - postgres:12.3-alpine variables: POSTGRES_DB: database POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_HOST_AUTH_METHOD: trust before_script: - cd backend - cp .example.env .env - yarn install script: yarn test
Работа: Тест: Frontend
будет инициализировать приложение и запуститьТест пряжи
Но из изображения, содержащего хромированный драйвер для эмуляции навигации.
job:test:frontend: image: weboaks/node-karma-protractor-chrome:alpine stage: test before_script: - cd frontend - yarn install script: yarn test
Там вы идете.
Опубликовать: создание образа докера и публикуя его в личном реестре изображений GCloud.
Опубликовать
Шаг будет построить докер изображения различных приложений и опубликовать их на GCloud — реестр контейнера Отказ Для этого мы создадим работу для каждого изображения (Frontend, Backend и работника).
Для того, чтобы создать изображения и опубликовать их, нам нужно использовать:
- Изображение
Google/Cloud-SDK
Что позволяет общаться с GCloud и опубликовать изображения. - Услуги [Docker-In-Docker] ( https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-workflow-with-docker-executor ) Что позволяет использовать команды Docker в контейнере Docker.
Тогда можно использовать:
gcloud auth
подключиться к GCloud в контейнере.- GCloud Auth Configure-Docker для подключения докера к GCloud
Docker Build/push
создать изображение и опубликовать его
Последнее, что нужно знать: подключиться к GCloud в GitLab CI, вы должны сначала войти в систему. Для этого необходимо добавить учетные данные GCloud в настройках GitLab CI в разделе «Настройки> Переменные». Как только это будет сделано, можно войти в работу, используя следующую команду:
echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
Ниже окончательный результат для Работа: Опубликовать: Backend
:
job:publish:backend: stage: publish image: google/cloud-sdk:latest when: on_success services: - docker:dind tags: - dind variables: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" before_script: - cd backend - cp .develop.env .env - echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json - gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json - gcloud auth configure-docker script: - docker build --compress -t us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA} . - docker push us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA} - docker image rm -f us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA} - echo "us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA} image build with success and pushed"
Я пропускаю детали двух других, потому что они очень похожи.
Развертывание: Спросите GCloud развернуть изображения, ранее загруженные.
Использовать kubectl
Мы также будем использовать Google/Cloud-SDK
Изображение, которое содержит утилиту Kubernetes.
Но прежде чем мы начнем кодировать скрипт, нам нужно создать три развертывание :
DPL-My-App-Frontend
на https://my-app/DPL-My-App-Backend
на https://api.my-app/ ОтказDPL-My-App-app - рабочий
это не выставлено
Чтобы создать их, вы можете использовать интерфейс GCloud или использовать kubectl
Прямо на вашем компьютере (не забудьте Настроить кластерный доступ для Kubectl ).
Для версии командной строки используйте Kubectl Создать развертывание
:
kubectl create deployment dpl-develop-data-frontend --image=us.gcr.io/mazen-158916/data-k8s-frontend kubectl create deployment dpl-develop-data-backend --image=us.gcr.io/mazen-158916/data-k8s-backend kubectl create deployment dpl-develop-data-worker --image=us.gcr.io/mazen-158916/data-k8s-worker
Мы можем проверить, что все прошло хорошо с Kubectl Получить развертывание
который должен перечислить наши три новых развертывания.
Тогда нам просто нужно создать рабочие места, которые будут обновлять Контейнеры в этих развертывании и укажите переадресацию порта.
Для этого вам также нужно использовать gcloud auth
Как вы видели раньше. Тогда просто позвоните в методы:
Kubectl Set Image
Чтобы обновить изображение контейнера.Kubectl Patch Развертывание
Чтобы обновить информацию контейнера (например, изменение метаданных)
Вот полная версия для Работа: Развернуть - Разработка: Backend
:
job:deploy-develop:backend: stage: deploy image: google/cloud-sdk:latest before_script: - echo $GCLOUD_SERVICE_KEY > ${HOME}/gcloud-service-key.json - gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json - gcloud config set compute/zone us-east1-c - gcloud config set project ${GCLOUD_PROJECT_NAME} - gcloud container clusters get-credentials ${K8S_CLUSTER_NAME} - gcloud auth configure-docker script: - kubectl set image deployment/${APP_NAME}-backend data-k8s-backend=us.gcr.io/${PROJECT_NAME}/${APP_NAME}-backend:${CI_COMMIT_SHA} - kubectl patch deployment ${APP_NAME}-backend -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"
Там вы идете.
Тогда просто перейдите в интерфейс GCloud в разделе «ДВИГАТЕЛЬ ДВИГАТЕЛЬНОСТИ ДВИГАТЕЛЬНОСТИ CUBERNETES>», найдите соответствующие рабочие нагрузки и создайте записи DNS на провайдер имени доменных имен и укажите их в соответствующие развертывания.
Вывод
Для моей части я нашел подход платформы Google Cloud Solution, но довольно хорошо документирован. Время вложено в изучение этой технологии, кажется мне хорошо инвестированным, потому что архитектура действительно Масштабируемое и позволяет снизить затраты на инфраструктуру.
Единственная черная точка может быть то, что мы зафиксируем себя в провайдере Но я думаю, что веб-сервис Amazon или Microsoft Azure разделяет ту же терминологию, потому что их технология также основана на Kubernetes на мой взгляд.
Ссылки
- Оригинальный пост
- Развертывание контейнерного веб-приложения
- Развертывание приложения полного стека в Google Kubernetes Engine — Shine Solutions Group
- Подключите передний конец к задней части с помощью службы
- Создание докеровских изображений с Gitlab CI/CD] ( https://docs.gitlab.com/ee/ci/docker/using_docker_build.html )
Оригинал: «https://dev.to/madeindjs/deploy-a-fullstack-application-on-google-cloud-plateform-with-gitlab-ci-1n91»