Рубрики
Uncategorized

Nestjs + Cloud Run с аутентификацией — голые кости

Простые Nestjs на Cloud Run Repo. Теги с nestjs, devops, teadercript, googlecloud.

Imo Nestjs был взрывом, с которым можно играть, и действительно позволил мне построить быстрые прототипы, принудив меня, чтобы я сохранял доменную конструкцию и ценностную единицу. Я планирую использовать эту статью базовую линию для ссылки на другие статьи Nestjs, которые я буду строить в течение следующих нескольких недель.

предварительно требует

  • GCloud CLI установлен -> здесь
  • Nestjs CLI установлен глобально -> здесь

Генерировать проект JS

  1. Generate Pestjs Project (мы назовем наш облачный Run)

    • гнездо нового облака
  2. Обновите nestjs, чтобы уважать переменную среды портов

SRC/Main.ts.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';

const logger = new Logger('APP');
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const port = process.env.PORT || 3000;
  await app.listen(port, () => {
    logger.log(`⛱ server running on port ${port}`)
  });
}
bootstrap();

вызывать NPM запустить начало: Dev Чтобы увидеть приложение начать вызывать NPM Run Test: COV Чтобы увидеть тестовый пробег устройства, и это сладкое покрытие кода 100%

-------------------|----------|----------|----------|----------|-------------------|
File               |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
-------------------|----------|----------|----------|----------|-------------------|
All files          |      100 |      100 |      100 |      100 |                   |
 app.controller.ts |      100 |      100 |      100 |      100 |                   |
 app.service.ts    |      100 |      100 |      100 |      100 |                   |
-------------------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.451s
Ran all test suites.


вызывать NPM Run Test: E2E чтобы увидеть, как набор E2E запустить

Облако построение

Теперь давайте сделаем некоторую конфигурацию, чтобы получить это, чтобы запустить на облаке

Мы создадим следующие файлы

  1. Dockerfile.
# use node 10 image
FROM node:10 as base

# set our working directory
WORKDIR /app

FROM base as development

# copy over dependecy manifests to install
COPY package*.json ./

# install production dependencies and copy them to a temp folder, we will use this for the final build step
RUN npm install --production
RUN cp -R node_modules /tmp/node_modules

# Install all dependcies
RUN npm install

# Copy source code
COPY . ./

# lint, unit test, e2e test and build our app
FROM development as builder
RUN npm run lint
RUN npm run test:cov
RUN npm run test:e2e
RUN npm run build

# release includes bare miniumum to run the app
FROM base as release
COPY --from=builder /tmp/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package.json ./

# Run the web service on container boot
CMD ["npm", "run", "start:prod"]

  1. .dockerignore.
coverage
node_modules/
dist
.idea
.vscode

  1. Cloudbuild.yaml.
steps:
  # build the container image
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/$_SERVICE_NAME', '.']
  # push the container image to Container Registry
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/$_SERVICE_NAME']
  # Deploy container image to Cloud Run
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'run'
      - 'deploy'
      - 'cloud-run'
      - '--image'
      - 'gcr.io/$PROJECT_ID/$_SERVICE_NAME'
      - '--region'
      - '$_REGION'
      - '--platform'
      - 'managed'
      - '--no-allow-unauthenticated'
images:
  - 'gcr.io/$PROJECT_ID/$_SERVICE_NAME'
substitutions:
  _SERVICE_NAME: "cloud-run"
  _REGION: "us-central1"

Регулировка учетной записи службы

  1. Войдите в GCP и перейдите в настроек Cloud Build и предоставьте облачную учетную запись службы Cloud Build Account Usc.

Trigger Build.

От вас типа командной строки GCloud Builds Отправить и посмотреть постройку и автоматическое развертывание

Проверьте!

curl -H \
"Authorization: Bearer $(gcloud auth print-identity-token)" \
$(gcloud run services describe SERVICENAME --format 'value(status.url)')

Оригинал: «https://dev.to/amammay/nestjs-cloud-run-with-authentication-bare-bones-1eji»