07月17日
使用 CloudStudio 部署基于 Go 的图片服务

当在 Coding 的 WebIDE 折腾好 Go 环境后,经小姐姐提醒原来 Cloud Studio 早就支持 Go ,心情很复杂 ~

不过之前的折腾并没有白费力气,从 WebIDE 到 Cloud Studio 只用了十几分钟,就成功部署了一个基于 Go 的图片服务( minio+imageserver); 除了 Cloud Studio 试问还有谁?

本篇文章将分享我是如何在 Cloud Studio 将一个包含上传,多功能预览图片服务部署的

通过此篇文章,十分钟部署一个图片服务完全不是问题,文末附效果图及部署地址

Cloud Studio 中 Go 环境的配置

登录 Cloud Studio

  1. 访问 https://studio.coding.net 登录你的 Coding 或者腾讯云账号
    (我用腾讯云登录然后创建 coding 账户,跳转 【正在查询用户信息...】 的时候突然又跳到登录了,切换到 coding.net 已经是登录状态,估计是没有同步吧)

  2. 再次访问登录,经过【正在查询用户信息...】【正在查询腾讯云信息...】,终于提示我可以开启专用主机了

    图片
    Coding Tip:专用主机是腾讯云提供的计算资源,用于支持本产品的各项功能,包括 Terminal,编译,运行等等。专用主机默认 1 核 1G 配置,
    带有独立外网 IP,免费一个月试用,后续最低 ¥ 9.9/月(受限于腾讯云的优惠政策)。用户可以选择自行升级专用主机的配置。

  3. 点击【立即开启】,我在等待一分钟后就已经将我的主机创建成功了,然后再次等待一分钟,工作空间也初始化完成。

    Coding Tip:创建专用主机可能会需要 15 分钟的时间,请耐心等待

Go 环境的使用与配置

初始化完毕后,默认有 Java、PHP、Python 三种语言的小示例可作为参考,若有想使用 Go 的朋友可以参考这篇文章。
初始化工作空间也是需要时间,故下面将在默认工作空间演示 Go 应用的部署,新建一个 Go 文件夹存放 Go 相关代码

  1. 点击右侧运行环境中的【添加环境】并使用 Go 环境,或使用 Default 环境自行安装最新版本的 Go
  2. 切换到 Go 环境后,在终端运行 go version 可查看当前版本 (通过 which go 可以看到 Go 的安装目录为 /usr/bin/go)

    图片

  3. 将 /home/coding/workspace/go 加入 $GOPATH

echo "export GOPATH=$HOME/workspace/go">>~/.zshrc
source ~/.zshrc
echo "export PATH=$PATH:$GOPATH/bin:">>~/.zshrc
source ~/.zshrc

在 Go 项目中需要有一个 $GOPATH ,这个环境变量用来指定 Go 语言的工作空间位置,并含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件
$GOPATH 可以设置多个目录,使用 go get(远程包安装命令)时远程包将会被安装在第一个目录下

4. 新建测试项目并运行

  • 在 $GOPATH 的 src 中新建 imgserver.com/main.go (/home/coding/workspace/go)

imageserver 的安装使用

Golang 中的图像服务器工具包,支持调整大小,旋转,转换等功能,将其作为图片服务器对图片的处理是一个不错的选择
项目地址:https://github.com/pierrre/imageserver

imageserver 的定位是一个工具包,所以如果要搭建图片服务器需要自行编写服务

当然作者也提供了一个如何创建服务的 demo, demo 中图片使用的远程图片,运行起来即可看到和官网的效果。

在实际使用中,一般都会去读取本地的图片目录,以及配置一些参数,所以需要自行修改一些代码使其符合自己的项目。
当前文章将使用我的测试代码作为演示

安装

  1. 切换到开发目录:workspace/go/src/imgserver.com
  2. 新建 main.go 并将测试代码拷贝进去
  3. 下载 imageserver 的依赖包:get get -v github.com/pierrre/imageserver
  4. 手动下载被墙的 golang/image 包:git clone https://github.com/golang/image.git $GOPATH/src/golang.org/x/image
  5. 运行:go run main.go,默认启动 8080 端口,并监听本地 upload 目录文件夹
  6. 点击右侧【访问链接】的创建链接,即可在浏览器中预览 Cloud Studio 运行的访问了。

使用

打开就会发现一个不怎么友好的提示了

图片

== Cloud Studio 好像不能手动粘贴图片到 upload 啊,别慌,minio 了解一下

minio 的安装使用

Minio 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

项目地址:https://github.com/minio/minio

安装

将 minio 下载到 imgserver.com 并监听 upload 即可使用
关于各语言将文件上传到 minio 都有其相应的 sdk

  1. 下载:wget https://dl.minio.io/server/minio/release/linux-amd64/minio
  2. 赋予执行权限:chmod +x minio
  3. 运行:minio server ./upload,默认启动 9000 端口

    图片

  4. 右侧【访问链接】添加对 9000 端口的监听,浏览器中访问浏览 minio 后台,根据控制台输出的 AccessKey,SecretKey 登录到 minio 管理后台

    图片

注意

  1. 上传文件之前需要先建一个桶(文件夹)。
  2. 控制台复制的时候需要使用鼠标选中然后右键复制,粘贴时可以使用 Ctrl+Shirt+V

后台运行&绑定域名

当前应用直接在 Cloud Studio 运行只是暂时的,我们一刷新网页服务就会停止,所以我们还需要让应用后台运行

  1. 使用 go build -o imgserver 将 imgserver.com/main.go 打包成可执行程序

  2. 使用 nohup+& 后台运行应用
    imgserver 监听 upload 目录并运行 2233 端口:nohup imgserver -dir ./upload -http :2233 &
    minio 监听 upload 目录并运行 2244 端口:nohup minio server ./upload --address :2244 &
    运行之后的日志在 nohup.out,AccessKey,SecretKey 可以在其中查看

  3. 绑定域名的文档很详细,且亲测阿里云的域名也可以

  4. 在右侧添加绑定域名:添加解析的域名+端口号即可

    图片

知道如何后台运行肯定还得知道如何结束后台运行吧

结束后台运行

查找后台进程:ps -aux|grep minio,可以根据第二列的进程号进行删除kill 进程号
根据名字删除:killall imgserverkillall minio

要是修改了 imgserver 的代码就得去打包,删进程,是不是太麻烦了?没关系,写个脚本轻松搞定

使用脚本部署 imgserver

  1. 在项目中添加 deploy.sh,脚本如下
#!/bin/bash
echo '开始打包 imgserver'
go build -o ./imgserver
echo '重新启动 imgserver 服务'
killall imgserver
basepath=$(cd `dirname $0`; pwd)
nohup imgserver -http :2233 -dir $basepath/upload &

# 如果需要就取消注释
# echo '重新启动 minio 服务'
# killall minio
# nohup minio server $basepath/upload -address :2244  &
  1. 添加执行权限:chmod +x ./deploy.sh

  2. 使用 cat -v ./deploy.sh 查看脚本是否存在编码问题(会发现每行末尾多了一个^M)
    若存在则使用 vim 执行 set fileformat=unix 即可解决 ^M 问题

    图片

  3. 现在使用 ./deploy.sh 就能简单快速的部署服务了。

注意

upload 文件夹里面文件可能会很多,你可以通过最左侧顶部 Cloud Studio 的设置修改需要隐藏的目录隐藏 upload 文件夹
图片

效果图

图片

https://imgapi.yimo.link/
若想一睹为快 请戳这里

已将本文的 imgserver 发布到 GitHub,可以直接安装使用

wegt https://github.com/yimogit/myimgserver/releases/download/1.0.0/myimgserver
chmod +x myimgserver
myimgserver -dir ./upload -http :2333

最后再总结一下 Cloud Studio 的一些使用经验吧(linux新手~)

总结

  • Cloud Studio 控制台的复制粘贴
    复制需要使用鼠标选中右键复制,粘贴则可以使 Ctrl+Shift+V

  • Cloud Studio 写入环境变量的方式之一
    echo "export GOPATH=$HOME/workspace/go">>~/.zshrc&source ~/.zshrc

  • Cloud Studio 执行应用需要赋予执行权限
    chmod +x 应用名称

  • Cloud Studio 中 脚本编码格式导致的行末有 ^M 的问题
    使用 vim 执行 set fileformat=unix 设置编码格式即可(:wq 保存退出)

  • 后台运行应用
    nohup 应用...参数 &

  • 查看进程(第二列为进程号)
    ps -aux|grep 应用名称

  • 关闭进程
    kill 进程号
    killall 应用名称

参考

文中若有不足或者不对之处,欢迎提出您的意见

易墨3330