GoLand编辑器远程连接基于Docker容器部署的开发环境

一、背景

  1. 在我们日常开发过程中, 有些特殊情况需要在服务器上, 进行开发和调试代码
  2. 所以需要将我们的代码编辑器连接到服务上
  3. 比如说连接到Docker容器上进行开发和调试
  4. 下面将详细介绍服务器主机配置和开发工具整体配置方式, 以对接服务Harbor为例子(主要是在容器运行时, 接入harbor网桥, 使用Harbor中的pgsql数据库, 大家不必关心,只是个例子), 原理是相通的
  5. 本文档介绍远程部署GO的开发环境
  6. 老样子, 不废话,直接开干

二、环境准备

  1. 工作目录准备
    • 在服务器主机上创建目录
    • 下载go安装包
    • 创建一个空的Dockerfile文件
[root@base harbor-clean]# mkdir -p /home/troila/app/harbor-clean
[root@base harbor-clean]# cd /home/troila/app/harbor-clean

# 当前目录结构如下
[root@base harbor-clean]# tree
.
├── Dockerfile
└── go1.22.5.linux-amd64.tar.gz

0 directories, 2 files
[root@base harbor-clean]# 
  1. 服务器环境
    • docker环境
[root@base harbor-clean]# docker info
Client: Docker Engine - Community
 Version:    26.1.4
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.14.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.27.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 12
  Running: 12
  Paused: 0
  Stopped: 0
 Images: 14
 Server Version: 26.1.4
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 1
 .......
 Registry Mirrors:
  https://registry.cn-hangzhou.aliyuncs.com/
  https://registry.docker-cn.com/
  https://docker.mirrors.ustc.edu.cn/
  https://ma8p1z36.mirror.aliyuncs.com/
  https://mirror.ccs.tencentyun.com/
  http://hub-mirror.c.163.com/
 Live Restore Enabled: true

[root@base harbor-clean]# 
  • 镜像准备
    • 下载镜像
[root@base harbor-clean]# docker pull ubuntu:24.10
  • 自定义镜像
    • 设置远程连接
    • 安装go环境
    • 工作目录设置为workspace, 后续GO开发的代码都将实时同步到此目录
    • 容器启动后, 自动配置GO环境, 自动启动SSH服务, ssh密码可以自己修改
    • 复制一下代码到上述创建的Dockerfile中
[root@base harbor-clean]# vi Dockerfile

# 使用 ubuntu:24.10 作为基础镜像
FROM ubuntu:24.10

# 设置工作目录
WORKDIR /workspace

# 设置识趣
ENV TZ=Asia/Shanghai
# 设置GO的版本
ENV GO_VERSION=1.22.5
# 设置SSH密码
ENV SSH_PASSWORD=troila@123
# 设置GO环境变量
ENV PATH="$PATH:/usr/local/go/bin"

# 复制已经下载的go环境文件
COPY go${GO_VERSION}.linux-amd64.tar.gz /workspace

# 更新包索引并安装必要工具, 容器中创建go相关的文件夹, 开启ssh远程连接
RUN apt-get update && apt-get install -y --no-install-recommends curl openssh-server ca-certificates postgresql-client && apt-get clean && \
    mkdir -p /workspace/src && \
    mkdir -p /workspace/pkg && \
    mkdir -p /workspace/bin && \
    mkdir -p /workspace/env && \
    echo "root:${SSH_PASSWORD}" | chpasswd && \
    sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config && \
    sed -i "s/#PasswordAuthentication yes/PasswordAuthentication yes/" /etc/ssh/sshd_config && \
    rm -rf /var/lib/apt/lists/*

# 安装并配置GO环境
RUN tar -C /usr/local -xzf /workspace/go${GO_VERSION}.linux-amd64.tar.gz && rm go${GO_VERSION}.linux-amd64.tar.gz && \
    go env -w GO111MODULE=on && \
    go env -w GOPROXY=https://goproxy.cn,direct && \
    go env -w GOPATH=/workspace && \
    echo "export PATH=$PATH:/usr/local/go/bin:/workspace/bin" >> /etc/profile && \
    echo "export GOPATH=/workspace" >> /etc/profile && \
    go install github.com/swaggo/swag/cmd/swag@latest && \
    go install github.com/zxmfke/swagger2openapi3/cmd/swag2op@latest

# 默认命令
CMD ["/bin/bash", "-c", "service ssh start && bash"]

[root@base harbor-clean]# 
  1. 构建镜像
    • 在当前目录下构建镜像, 别忘了后面的点
[root@base harbor-clean]# docker build -t troila-harbor-clean:v2.10.3 .
  1. 检查镜像
[root@base harbor-clean]# docker images
REPOSITORY                                  TAG       IMAGE ID       CREATED        SIZE
troila-harbor-clean                         v2.10.3   646ab3e521df   3 hours ago    798MB
ubuntu         															24.10     94351b6d67ec   9 months ago   78.2MB
base.troila.com:9000/library/nacos-server   v2.4.2    53ac5b6aa651   6 months ago   285MB
goharbor/redis-photon                       v2.10.3   359683ebd59c   8 months ago   165MB
goharbor/harbor-registryctl                 v2.10.3   96efb27ac641   8 months ago   152MB
goharbor/registry-photon                    v2.10.3   f73ad548d874   8 months ago   84.7MB
goharbor/nginx-photon                       v2.10.3   0ae16f53f286   8 months ago   154MB
goharbor/harbor-log                         v2.10.3   9ee81cca16ce   8 months ago   163MB
goharbor/harbor-jobservice                  v2.10.3   053df0842d37   8 months ago   143MB
goharbor/harbor-core                        v2.10.3   ed909856be82   8 months ago   171MB
goharbor/harbor-portal                      v2.10.3   c8c29cea2ef3   8 months ago   162MB
goharbor/harbor-db                          v2.10.3   c623b46fd89d   8 months ago   269MB
base.troila.com:9000/library/ubuntu         24.10     94351b6d67ec   9 months ago   78.2MB
base.troila.com:9000/library/mysql          8.0.22    d4c3cafb11d5   4 years ago    545MB
[root@base harbor-clean]# 
  1. 运行容器
    • 我这里要调用harbor的db, 所以要添加网桥
    • 设置容器名称为clean
    • 映射容器内部8050端口到宿主机, 后续容器内部的应用用8050端口, 提前做映射
    • 映射内部22远程访问端口到宿主机的2222端口, 后续远程连接使用
    • 开启伪终端, 保持后台运行
[root@base harbor-clean]#  docker run -idt --name clean --network harbor_harbor -p 8050:8050 -p 2222:22 -v /home/troila/harbor/data:/harbor/data troila-harbor-clean:v2.10.3

## 查看容器运行情况
[root@base harbor-clean]# 
[root@base harbor-clean]# docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                  CREATED        STATUS                  PORTS                                             	NAMES
402f9a9f9b7c   troila-harbor-clean:v2.10.3           "/bin/bash -c 'servi…"   3 hours ago    Up 3 hours     0.0.0.0:8050->8050/tcp, 0.0.0.0:2222->22/tcp               	clean
c7a3f5639e7d   goharbor/harbor-jobservice:v2.10.3    "/harbor/entrypoint.…"   3 months ago   Up 3 months                                                     						harbor-jobservice
2eb1141752c3   goharbor/nginx-photon:v2.10.3         "nginx -g 'daemon of…"   3 months ago   Up 3 months    0.0.0.0:9000->8080/tcp, :::9000->8080/tcp        						nginx
c8f29eb447a5   goharbor/harbor-core:v2.10.3          "/harbor/entrypoint.…"   3 months ago   Up 3 months                                                     						harbor-core
25dd3dd92d98   goharbor/harbor-registryctl:v2.10.3   "/home/harbor/start.…"   3 months ago   Up 3 months                                                     						registryctl
7c4c0f0a1f85   goharbor/registry-photon:v2.10.3      "/home/harbor/entryp…"   3 months ago   Up 3 months                                                     						registry
ced3e88c5355   goharbor/harbor-portal:v2.10.3        "nginx -g 'daemon of…"   3 months ago   Up 3 months                                                     						harbor-portal
436b0ddd8f07   goharbor/harbor-db:v2.10.3            "/docker-entrypoint.…"   3 months ago   Up 3 months                                                     						harbor-db
f1ea8e121746   goharbor/redis-photon:v2.10.3         "redis-server /etc/r…"   3 months ago   Up 3 months                                                     						redis
3b390c0a99a0   goharbor/harbor-log:v2.10.3           "/bin/sh -c /usr/loc…"   3 months ago   Up 3 months    127.0.0.1:1514->10514/tcp                        						harbor-log
[root@base harbor-clean]#
  1. 终端连接验证
    • 地址填写宿主机ip
    • 端口填写22端口映射的端口
    • 用户、密码填写ssh用户和密码, 参考上述dockerfile

image-20250319140353022

  1. 连接成功如图

image-20250319140524949

  1. 验证容器开发环境
    • 版本正确
    • 服务器配置到此结束
Last login: Wed Mar 19 03:10:20 2025 from 172.28.110.9
root@402f9a9f9b7c:~# go version
go version go1.22.5 linux/amd64

## 查看配置
root@402f9a9f9b7c:~# go env
GO111MODULE='on'
GOARCH='amd64'
..........
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
...................
GOMODCACHE='/workspace/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/workspace'
GOPRIVATE=''
GOPROXY='https://goproxy.cn,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.22.5'

.............

root@402f9a9f9b7c:~# 
  1. 在容器中创建空项目, 为后续连接使用
root@402f9a9f9b7c:~# mkdir -p /workspace/src/xincan.com.cn/tarot-harbor-clean

三、GoLand配置

  1. 本机工程目录
## 本地工作开发目录
~/workspace/goworkspace  ll
total 0
drwxr-xr-x  11 xincan  staff   352B  1  7 14:27 bin
drwxr-xr-x   5 xincan  staff   160B  8 16  2024 pkg
drwxr-xr-x   6 xincan  staff   192B 12 21 14:27 src
~/workspace/goworkspace 

## 代码位置, src下创建xincan.com.cn/tarot-harbor-clean
~/workspace/goworkspace/src/xincan.com.cn  ll
total 0
drwxr-xr-x   4 xincan  staff   128B 11 13 14:26 tarot-harbor-clean
~/workspace/goworkspace/src/xincan.com.cn 
  1. GoLand打开创建的项目
    • 设定go环境
    • 点击确定ok

image-20250319141723379

  1. 点击运行环境配置

image-20250319141842545

image-20250319141959783

image-20250319142105505

  • 填写服务器主机ip, 映射出来的端口
  • ssh登录用户
  • 点击NEXT

image-20250319142239575

  • 点击OK

image-20250319142320970

  • 填写密码

image-20250319142414801

  • 点击NEXT

image-20250319142443066

  • Project path on target: 此处填写上述第二步, 第9部分在容器中创建的目录/workspace/src/xincan.com.cn/tarot-harbor-clean
  • 点击ok
  • Go Executable: 此处填写服务器中的容器中的go环境安装位置, 可以通过go env查看, 也可以在Dockerfile中找到
  • GOPATH: 此处直接在服务器中的容器中用go env查看, 也可在Dockerfile中找到

image-20250319142822343

  • 展开Additional Settings
    • 配置Project sources directory: 服务器中的容器中的存放代码资源的文件夹, 如下图
    • 配置Complied dexecutables directory: 服务器中的容器中的编译后执行文件位置, 如下图
    • 点击CREATE创建

image-20250319143531126

  • 点击链接成功

image-20250319144146546

  • 选择刚才创建连接的服务端信息
  • 点击ok

image-20250319144320140

  • 在编辑器中(下方),当前文件夹下执行go mod init 项目初始化
  • 创建一个main.go文件, 代码测试
  • 运行代码

image-20250319144711727

  • 控制台中输出打印成功信息

image-20250319144917876

  • 服务器容器内部检查
  • 发现刚才在本地代码编辑器中的文件目录和代码, 都已经上传服务器中了

image-20250319145046519

三、验证服务器中容器中的代码是否是在其内部执行

  1. 获取服务器傻姑娘workspace下的文件夹, 有哪些
  2. 成功获取服务上的文件夹
  3. 说明本地运行代码, 实则是服务器上在跑代码

image-20250319150410593

完结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值