Maison  >  Article  >  développement back-end  >  Comment utiliser Golang pour implémenter le déploiement à distance

Comment utiliser Golang pour implémenter le déploiement à distance

PHPz
PHPzoriginal
2023-04-23 10:09:021050parcourir

Avec le développement rapide du cloud computing, du big data et de l'intelligence artificielle, la manière dont les logiciels modernes sont développés et déployés évolue également constamment. Afin de déployer des applications rapidement et efficacement, de nombreux développeurs commencent à utiliser le déploiement à distance pour réaliser un déploiement automatisé. Cet article explique comment utiliser Golang pour réaliser un déploiement à distance.

1. Qu'est-ce que le déploiement à distance

Le déploiement à distance fait référence au déploiement de l'application sur un ou plusieurs serveurs, et une fois le code source ou le package binaire mis à jour, le code du programme ou le package binaire est transféré au serveur cible via le réseau et traité. L'application est mise à jour et le service est redémarré.

Les avantages du déploiement à distance sont :

  • Vous pouvez mettre à jour les applications sur plusieurs serveurs sans avoir à vous connecter un par un
  • Vous pouvez contrôler la sortie des applications via le système de contrôle de version ;
  • Vous pouvez créer un système automatisé ; processus de déploiement.

La technologie de base du déploiement à distance est le protocole ssh. SSH est un protocole de sécurité qui peut créer des canaux cryptés pour garantir la sécurité de l'interaction des données. Grâce au protocole SSH, des opérations telles que la connexion à distance, le transfert de fichiers et l'exécution de commandes à distance peuvent être effectuées.

2. Utilisez Golang pour réaliser un déploiement à distance

Nous pouvons utiliser le langage Golang et le protocole ssh pour réaliser un déploiement à distance. Les avantages du langage golang sont :

  • Efficacité : la vitesse de compilation du langage golang est très rapide, et les programmes écrits sont également très rapides ;
  • Concurrence : le langage golang a une goroutine intégrée, qui peut facilement implémenter des opérations simultanées ;
  • Caractéristiques lisibles : la syntaxe du langage Golang est concise, claire et facile à lire et à maintenir.

Lorsque nous utilisons Golang pour implémenter un déploiement à distance, nous devons utiliser la bibliothèque ssh de Golang pour implémenter des opérations telles que la connexion à distance, le transfert de fichiers et l'exécution de commandes à distance.

Connexion à distance

Pour réaliser une connexion à distance, nous avons besoin du code suivant :

package main

import (
    "fmt"
    "golang.org/x/crypto/ssh"
)

func main() {
    config := &ssh.ClientConfig{
        User: "root",
        Auth: []ssh.AuthMethod{
            ssh.Password("your_password"),
        },

        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }

    // Connect to the remote server and perform the SSH handshake.
    conn, err := ssh.Dial("tcp", "remote.server.com:22", config)
    if err != nil {
        panic("Failed to dial: " + err.Error())
    }
    defer conn.Close()

    fmt.Println("Connected to remote.server.com")
}

Dans le code ci-dessus, nous définissons d'abord les paramètres de configuration du client ssh, y compris le nom d'utilisateur, le mot de passe, l'adresse IP du serveur cible, le numéro de port, etc. Ensuite, nous utilisons la méthode Dial pour nous connecter au serveur cible et exécuter le protocole de prise de contact ssh. Une fois la poignée de main réussie, nous pouvons effectuer des opérations telles que le transfert de fichiers et l'exécution de commandes à distance.

Transfert de fichiers

Ensuite, nous montrerons comment utiliser la bibliothèque ssh de golang pour le transfert de fichiers. Nous avons besoin du code suivant :

package main

import (
    "fmt"
    "golang.org/x/crypto/ssh"
    "io/ioutil"
)

func main() {
    config := &ssh.ClientConfig{
        User: "root",
        Auth: []ssh.AuthMethod{
            ssh.Password("your_password"),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }

    conn, err := ssh.Dial("tcp", "remote.server.com:22", config)
    if err != nil {
        panic("Failed to dial: " + err.Error())
    }
    defer conn.Close()

    client, err := sftp.NewClient(conn)
    if err != nil {
        panic("Failed to create sftp client: " + err.Error())
    }
    defer client.Close()

    file, err := ioutil.ReadFile("path/to/local/file")
    if err != nil {
        panic("Failed to read local file: " + err.Error())
    }

    sftpPath := "/path/to/remote/file"
    sftpFile, err := client.Create(sftpPath)
    if err != nil {
        panic("Failed to create remote file: " + err.Error())
    }
    defer sftpFile.Close()

    _, err = sftpFile.Write(file)
    if err != nil {
        panic("Failed to write remote file: " + err.Error())
    }

    fmt.Printf("File uploaded to %s\n", sftpPath)
}

Dans le code ci-dessus, nous utilisons la méthode sftp.NewClient pour créer le client sftp et la méthode Create pour créer le fichier distant. Lisez ensuite le fichier local en mémoire et utilisez la méthode Write pour écrire le fichier sur le serveur distant.

Exécution de commandes à distance

Enfin, nous démontrerons comment utiliser la bibliothèque ssh de golang pour réaliser l'exécution de commandes à distance. Nous avons besoin du code suivant :

package main

import (
    "fmt"
    "golang.org/x/crypto/ssh"
)

func main() {
    config := &ssh.ClientConfig{
        User: "root",
        Auth: []ssh.AuthMethod{
            ssh.Password("your_password"),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }

    conn, err := ssh.Dial("tcp", "remote.server.com:22", config)
    if err != nil {
        panic("Failed to dial: " + err.Error())
    }
    defer conn.Close()

    session, err := conn.NewSession()
    if err != nil {
        panic("Failed to create session: " + err.Error())
    }
    defer session.Close()

    cmd := "sudo apt-get update && sudo apt-get upgrade -y"
    output, err := session.CombinedOutput(cmd)
    if err != nil {
        panic("Failed to execute command: " + err.Error())
    }

    fmt.Println(string(output))
}

Dans le code ci-dessus, nous utilisons la méthode ssh.Dial pour nous connecter au serveur cible et utilisons la méthode conn.NewSession pour créer une nouvelle session à distance. Nous pouvons ensuite utiliser la méthode CombinedOutput pour exécuter la commande distante et lire le résultat de la commande.

3. Résumé

Dans cet article, nous avons présenté la méthode d'utilisation de Golang pour réaliser un déploiement à distance et avons donné des exemples de codes pour la connexion à distance, le transfert de fichiers et l'exécution de commandes à distance. L'utilisation du langage Golang peut bien organiser le processus de déploiement à distance et automatiser le processus de publication des applications, améliorant ainsi l'efficacité et la fiabilité du déploiement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn