TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:

TOP云总站云服务器:https://topyun.vip/server/buy.html

TOP云C站云服务器:https://c.topyun.vip/cart

在云服务器上部署 gRPC 服务 涉及多个步骤,包括 开发 gRPC 服务端和客户端配置 TLS 加密(可选)使用负载均衡(如 Nginx)容器化(如 Docker) 以及 云服务器部署(如阿里云、腾讯云、AWS)。下面是一个完整的部署流程:


1. 开发 gRPC 服务(以 Go 为例)

(1) 定义 gRPC 服务(.proto 文件)

创建一个 hello.proto 文件:

syntax = "proto3";

package hello;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

(2) 生成 gRPC 代码

使用 protoc 编译器生成 Go 代码:

# 安装 protoc 和 Go 插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

# 生成代码
protoc --go_out=. --go-grpc_out=. hello.proto

生成 hello.pb.go(消息结构)和 hello_grpc.pb.go(服务代码)。

(3) 实现 gRPC 服务端

创建 server.go:

package main

import (
"context"
"log"
"net"

pb "path/to/your/proto/package" // 替换为你的 proto 包路径
"google.golang.org/grpc"
)

type server struct {
pb.UnimplementedGreeterServer
}

func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello, " + req.Name}, nil
}

func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
log.Println("gRPC server listening on :50051")
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}

(4) 实现 gRPC 客户端(可选)

创建 client.go:

package main

import (
"context"
"log"
"os"
"time"

pb "path/to/your/proto/package" // 替换为你的 proto 包路径
"google.golang.org/grpc"
)

func main() {
conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewGreeterClient(conn)

name := "World"
if len(os.Args) > 1 {
name = os.Args[1]
}

ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", r.Message)
}


2. 部署 gRPC 服务到云服务器

(1) 上传代码到云服务器

使用 scp 或 git 将代码上传到云服务器(如腾讯云、阿里云、AWS):

scp -r ./grpc-server user@your-server-ip:/home/user/grpc-server

(2) 安装依赖

在云服务器上安装 Go 环境(如果尚未安装):

# Ubuntu/Debian
sudo apt update
sudo apt install golang

# CentOS/RHEL
sudo yum install golang

(3) 运行 gRPC 服务

cd /home/user/grpc-server
go run server.go

默认监听 :50051 端口。


3. 配置 TLS 加密(可选但推荐)

gRPC 默认支持 TLS 加密,可以防止中间人攻击。

(1) 生成 TLS 证书

# 生成 CA 证书
openssl req -x509 -newkey rsa:4096 -nodes -keyout ca.key -out ca.crt -days 365

# 生成服务器证书
openssl req -newkey rsa:4096 -nodes -keyout server.key -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365

(2) 修改服务端代码支持 TLS

creds, err := credentials.NewServerTLSFromFile("server.crt", "server.key")
if err != nil {
    log.Fatalf("failed to load TLS: %v", err)
}
s := grpc.NewServer(grpc.Creds(creds))

(3) 修改客户端代码支持 TLS

creds, err := credentials.NewClientTLSFromFile("ca.crt", "")
if err != nil {
    log.Fatalf("failed to load TLS: %v", err)
}
conn, err := grpc.Dial("your-server-ip:50051", grpc.WithTransportCredentials(creds))

4. 使用 Nginx 反向代理(可选)

如果希望 gRPC 服务通过 HTTP/1.1 访问(如浏览器调试),可以使用 Nginx 作为反向代理。

(1) 安装 Nginx

# Ubuntu/Debian
sudo apt install nginx

# CentOS/RHEL
sudo yum install nginx

(2) 配置 Nginx 支持 gRPC

编辑 /etc/nginx/nginx.conf:

http {
    server { listen 80;
        server_name your-domain.com;

        location / {
            grpc_pass grpc://localhost:50051;
        }
    }
}

重启 Nginx:

sudo systemctl restart nginx

5. 使用 Docker 容器化部署(可选)

(1) 创建 Dockerfile

FROM golang:1.20

WORKDIR /app
COPY . .

RUN go mod download
RUN go build -o grpc-server .

EXPOSE 50051
CMD ["./grpc-server"]

(2) 构建并运行 Docker 容器

docker build -t grpc-server .
docker run -d -p 50051:50051 grpc-server

6. 云服务器安全配置

  • 开放端口:确保云服务器安全组开放 50051(gRPC 默认端口)或 80/443(如果使用 Nginx)。

  • 防火墙

    sudo ufw allow 50051/tcp
  • 使用 HTTPS(推荐):如果通过 Nginx 暴露 gRPC,建议配置 SSL 证书(如 Let's Encrypt)。


7. 测试 gRPC 服务

(1) 使用 grpcurl 测试

安装 grpcurl:

go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest

测试服务:

grpcurl -plaintext your-server-ip:50051 list
grpcurl -plaintext -d '{"name": "World"}' your-server-ip:50051 hello.Greeter/SayHello

(2) 使用客户端程序测试

go run client.go World

总结

步骤操作
1. 开发 gRPC 服务定义 .proto 文件,生成代码,实现服务端和客户端
2. 部署到云服务器上传代码,安装 Go,运行服务
3. 配置 TLS生成证书,修改服务端和客户端支持加密
4. 使用 Nginx 反向代理可选,支持 HTTP/1.1 访问
5. 容器化(可选)使用 Docker 部署
6. 安全配置开放端口,配置防火墙,启用 HTTPS

这样,你的 gRPC 服务就可以在云服务器上安全、高效地运行了! 🚀


不容错过
Powered By TOPYUN 云产品资讯