Aller au contenu

Waypoint

Aide-mémoire complet des commandes et workflows HashiCorp Waypoint pour le déploiement d’applications et la gestion de versions sur différentes plateformes.

Installation et Configuration

CommandeDescription
waypoint versionAfficher la version de Waypoint
waypoint server install -platform=dockerInstaller le serveur sur Docker
waypoint server install -platform=kubernetesInstaller le serveur sur Kubernetes
waypoint context create -server-addr=localhost:9701Créer un contexte
waypoint loginConnectez-vous au serveur Waypoint

Gestion de Projet

Opérations de Projet

CommandeDescription
waypoint initInitialiser le projet
waypoint project listLister les projets
waypoint project inspect myappInspecter le projet
waypoint project destroy myappDétruire projet

Cycle de Vie de l’Application

Construction, Déploiement, Release

CommandeDescription
waypoint buildConstruire une application
waypoint deployDéployer l’application
waypoint releaseLibérer l’application
waypoint upConstruire, déployer et livrer

Gestion d’Application

CommandeDescription
waypoint statusAfficher le statut de l’application
waypoint logsAfficher les journaux de l’application
waypoint logs -followSuivre les logs de l’application
waypoint exec /bin/bashExécuter la commande dans le déploiement

Gestion d’Espace de Travail

CommandeDescription
waypoint workspace listLister les workspaces
waypoint workspace create devCréer un espace de travail
waypoint workspace use devChanger d’espace de travail

Exemples de Configuration

Configuration waypoint.hcl de Base

project = "myapp"

app "web" \\\\{
  labels = \\\\{
    "service" = "web"
    "env"     = "dev"
  \\\\}

  build \\\\{
    use "docker" \\\\{
      dockerfile = "./Dockerfile"
    \\\\}

    registry \\\\{
      use "docker" \\\\{
        image = "myapp"
        tag   = "latest"
      \\\\}
    \\\\}
  \\\\}

  deploy \\\\{
    use "docker" \\\\{
      service_port = 3000
    \\\\}
  \\\\}

  release \\\\{
    use "docker" \\\\{\\\\}
  \\\\}
\\\\}

Déploiement Kubernetes

project = "myapp"

app "web" \\\\{
  build \\\\{
    use "docker" \\\\{
      dockerfile = "./Dockerfile"
    \\\\}

    registry \\\\{
      use "docker" \\\\{
        image = "registry.example.com/myapp"
        tag   = gitrefpretty()
      \\\\}
    \\\\}
  \\\\}

  deploy \\\\{
    use "kubernetes" \\\\{
      probe_path = "/health"

      replicas = 3

      resources \\\\{
        requests \\\\{
          memory = "256Mi"
          cpu    = "250m"
        \\\\}
        limits \\\\{
          memory = "512Mi"
          cpu    = "500m"
        \\\\}
      \\\\}
    \\\\}
  \\\\}

  release \\\\{
    use "kubernetes" \\\\{
      load_balancer = true
      port          = 80
    \\\\}
  \\\\}
\\\\}

Déploiement AWS ECS

project = "myapp"

app "web" \\\\{
  build \\\\{
    use "docker" \\\\{
      dockerfile = "./Dockerfile"
    \\\\}

    registry \\\\{
      use "aws-ecr" \\\\{
        region     = "us-west-2"
        repository = "myapp"
        tag        = gitrefpretty()
      \\\\}
    \\\\}
  \\\\}

  deploy \\\\{
    use "aws-ecs" \\\\{
      region = "us-west-2"
      cluster = "production"

      memory = 512
      cpu    = 256

      count = 3

      subnets = [
        "subnet-12345",
        "subnet-67890"
      ]

      security_groups = [
        "sg-abcdef"
      ]
    \\\\}
  \\\\}

  release \\\\{
    use "aws-alb" \\\\{
      listener_arn = "arn:aws:elasticloadbalancing:..."

      health_check \\\\{
        enabled             = true
        healthy_threshold   = 2
        interval            = 30
        matcher             = "200"
        path                = "/health"
        port                = "traffic-port"
        protocol            = "HTTP"
        timeout             = 5
        unhealthy_threshold = 2
      \\\\}
    \\\\}
  \\\\}
\\\\}

Projet Multi-Applications

project = "microservices"

app "api" \\\\{
  labels = \\\\{
    "service" = "api"
    "tier"    = "backend"
  \\\\}

  build \\\\{
    use "docker" \\\\{
      dockerfile = "./api/Dockerfile"
    \\\\}

    registry \\\\{
      use "docker" \\\\{
        image = "mycompany/api"
        tag   = gitrefpretty()
      \\\\}
    \\\\}
  \\\\}

  deploy \\\\{
    use "kubernetes" \\\\{
      probe_path = "/health"
      replicas   = 2

      env = \\\\{
        "DATABASE_URL" = var.database_url
        "REDIS_URL"    = var.redis_url
      \\\\}
    \\\\}
  \\\\}

  release \\\\{
    use "kubernetes" \\\\{
      port = 8080
    \\\\}
  \\\\}
\\\\}

app "frontend" \\\\{
  labels = \\\\{
    "service" = "frontend"
    "tier"    = "frontend"
  \\\\}

  build \\\\{
    use "docker" \\\\{
      dockerfile = "./frontend/Dockerfile"
    \\\\}

    registry \\\\{
      use "docker" \\\\{
        image = "mycompany/frontend"
        tag   = gitrefpretty()
      \\\\}
    \\\\}
  \\\\}

  deploy \\\\{
    use "kubernetes" \\\\{
      probe_path = "/"
      replicas   = 3
    \\\\}
  \\\\}

  release \\\\{
    use "kubernetes" \\\\{
      load_balancer = true
      port          = 80
    \\\\}
  \\\\}
\\\\}

Variables et Configuration

Définitions de Variables

variable "database_url" \\\\{
  description = "Database connection URL"
  type        = string
  sensitive   = true
\\\\}

variable "replicas" \\\\{
  description = "Number of replicas"
  type        = number
  default     = 2
\\\\}

variable "environment" \\\\{
  description = "Environment name"
  type        = string
  default     = "dev"
\\\\}

Utilisation des Variables

app "web" \\\\{
  deploy \\\\{
    use "kubernetes" \\\\{
      replicas = var.replicas

      env = \\\\{
        "DATABASE_URL" = var.database_url
        "ENVIRONMENT"  = var.environment
      \\\\}
    \\\\}
  \\\\}
\\\\}

Fonctions et Expressions

Fonctions Intégrées

app "web" \\\\{
  build \\\\{
    registry \\\\{
      use "docker" \\\\{
        image = "myapp"
        tag   = gitrefpretty()  # Git reference
      \\\\}
    \\\\}
  \\\\}

  deploy \\\\{
    use "kubernetes" \\\\{
      env = \\\\{
        "BUILD_TIME" = timestamp()
        "GIT_SHA"    = gitsha()
        "VERSION"    = gitrefpretty()
      \\\\}
    \\\\}
  \\\\}
\\\\}

Plugins et Constructeurs

Plugin de Construction Personnalisé

app "web" \\\\{
  build \\\\{
    use "pack" \\\\{
      builder = "heroku/buildpacks:20"
    \\\\}
  \\\\}
\\\\}

Plugin de Déploiement Personnalisé

app "web" \\\\{
  deploy \\\\{
    use "nomad" \\\\{
      datacenter = "dc1"
      region     = "global"

      resources \\\\{
        cpu    = 500
        memory = 256
      \\\\}
    \\\\}
  \\\\}
\\\\}

Meilleures Pratiques

Structure de Projet

project/
├── waypoint.hcl
├── .waypointignore
├── apps/
│   ├── api/
│   │   ├── Dockerfile
│   │   └── src/
│   └── frontend/
│       ├── Dockerfile
│       └── src/
├── infrastructure/
│   └── terraform/
└── scripts/
    └── deploy.sh

Sécurité