hugo-teek is loading...

go壁纸api可以部署在eop上吗

最后更新于:

go壁纸api可以部署在eop上吗

需求

1https://cnb.cool/onedayxyy/img-server 是一个go壁纸api项目,提供图片展示和随机图片API。
2
3运行项目的命令为:nohup ./main -port 8082 >> goimgapi_stdout.log 2>> goimgapi_stderr.log &
4
5请问如何把它部署在腾讯云的 eop上(Pages服务)?

回答

腾讯云 CloudBase Pages (EOP) 主要用于部署静态网站,而不能直接运行 Go 程序。对于这种情况,我建议以下几种解决方案:

方案1:使用云函数 + Pages(推荐)

  1. 将前端部分部署到 Pages
 1# .cloudbase/pages.yaml
 2name: img-server-web
 3displayName: 图片服务前端
 4
 5# 构建配置
 6build:
 7  commands:
 8    - npm install
 9    - npm run build
10  output: dist
11
12# 部署配置
13deploy:
14  type: static
15  configs:
16    - path: /
17      ignore: []
  1. Go后端改造为云函数
 1// main.go 改造为云函数格式
 2package main
 3
 4import (
 5    "github.com/tencentyun/scf-go-lib/cloudfunction"
 6)
 7
 8type APIResponse struct {
 9    URL string `json:"url"`
10}
11
12func handleRequest(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
13    // 原有的随机图片逻辑
14    imageURL := getRandomImage()
15    
16    return events.APIGatewayProxyResponse{
17        StatusCode: 200,
18        Headers: map[string]string{
19            "Content-Type": "application/json",
20            "Access-Control-Allow-Origin": "*",
21        },
22        Body: fmt.Sprintf(`{"url":"%s"}`, imageURL),
23    }, nil
24}
25
26func main() {
27    cloudfunction.Start(handleRequest)
28}

方案2:使用 API 网关 + 云服务器

  1. 在云服务器上运行Go程序
1# 登录云服务器
2ssh username@your-server-ip
3
4# 上传并运行程序
5nohup ./main -port 8082 >> goimgapi_stdout.log 2>> goimgapi_stderr.log &
  1. 配置API网关
 1# API网关配置
 2service:
 3  name: img-server-api
 4  protocols:
 5    - http
 6    - https
 7  
 8endpoints:
 9  - path: /random
10    method: GET
11    backend:
12      type: HTTP
13      url: http://your-server-ip:8082/random

方案3:静态化改造(纯Pages方案)

  1. 预生成图片列表
1// config.js
2export const images = [
3    'https://your-cos-bucket.cos.ap-region.myqcloud.com/1.jpg',
4    'https://your-cos-bucket.cos.ap-region.myqcloud.com/2.jpg',
5    // ...
6];
  1. 前端实现随机逻辑
 1<!DOCTYPE html>
 2<html>
 3<head>
 4    <title>Random Image</title>
 5</head>
 6<body>
 7    <div id="app"></div>
 8    <script type="module">
 9        import { images } from './config.js';
10        
11        function getRandomImage() {
12            return images[Math.floor(Math.random() * images.length)];
13        }
14
15        // 实现展示逻辑
16        document.getElementById('app').innerHTML = `
17            <img src="${getRandomImage()}" />
18        `;
19    </script>
20</body>
21</html>
  1. 部署到Pages
 1# cloudbase.json
 2{
 3  "envId": "your-env-id",
 4  "version": "2.0",
 5  "pages": {
 6    "index": {
 7      "path": "./",
 8      "ignore": [
 9        ".git",
10        ".github",
11        "node_modules",
12        "cloudbaserc.json"
13      ]
14    }
15  }
16}

最佳实践建议

考虑到你的需求,我建议采用以下组合方案:

  1. 图片存储
1# 将图片存储在腾讯云COS
2gsutil -m cp -r ./images gs://your-bucket/
  1. 前端部署
 1<!-- index.html -->
 2<!DOCTYPE html>
 3<html>
 4<head>
 5    <title>Random Wallpaper</title>
 6    <style>
 7        .image-container {
 8            width: 100vw;
 9            height: 100vh;
10            display: flex;
11            justify-content: center;
12            align-items: center;
13        }
14        img {
15            max-width: 100%;
16            max-height: 100%;
17            object-fit: contain;
18        }
19    </style>
20</head>
21<body>
22    <div class="image-container">
23        <img id="randomImage" src="" alt="Random Wallpaper" />
24    </div>
25    <script>
26        const API_ENDPOINT = 'https://your-api-gateway-url/random';
27        
28        async function loadRandomImage() {
29            try {
30                const response = await fetch(API_ENDPOINT);
31                const data = await response.json();
32                document.getElementById('randomImage').src = data.url;
33            } catch (error) {
34                console.error('Failed to load image:', error);
35            }
36        }
37
38        // 初始加载
39        loadRandomImage();
40
41        // 每8秒刷新一次
42        setInterval(loadRandomImage, 8000);
43    </script>
44</body>
45</html>
  1. 部署命令
1# 安装 CloudBase CLI
2npm install -g @cloudbase/cli
3
4# 登录
5tcb login
6
7# 部署
8tcb framework deploy
  1. 监控和日志
1# 在腾讯云控制台设置告警
2curl -X POST "https://monitor.tencentcloudapi.com/api/v3/metric/alarm" \
3  -H "Authorization: YOUR_SECRET" \
4  -d '{
5    "MetricName": "Availability",
6    "Threshold": "99",
7    "Period": "300",
8    "AlarmType": "METRIC"
9  }'

这个方案的优势是:

  • 静态资源通过CDN加速
  • 无需维护服务器
  • 成本可控
  • 易于扩展

需要注意的配置:

  1. CORS设置
  2. 缓存策略
  3. 错误处理
  4. 监控告警

希望这些信息对你有帮助!如果需要更详细的部署步骤或遇到具体问题,欢迎继续询问。

推荐使用微信支付
微信支付二维码
推荐使用支付宝
支付宝二维码
最新文章

文档导航