vscode远程服务器中的docker开发golang-zero

vscode远程服务器中的docker开发golang

全部文档放在 github地址

安装版本 ubuntu-22.04.1-live-server-amd64.iso

  1. 安装Ubuntu虚拟机

选择minimize最小化安装,其他后续再安装

内存使用4096Mb,磁盘100G

  1. 允许root ssh登录

这个涉及到vscode远端开发的时候,如果不是root会非常麻烦


// 先设置root密码

sudo passwd

// 切换到root

su

// 编辑

vi /etc/ssh/sshd_config

// 找到PermitRootLogin without-password 修改为PermitRootLogin yes

// 重启sshd

service ssh restart
  1. 配置服务器

修改静态ip


vim /etc/netplan/00-installer-config.yaml

修改为


# This is the network config written by 'subiquity'

network:

ethernets:

enp0s3:

dhcp4: false

addresses: [192.168.1.13/24]

optional: true

routes:

- to: default

via: 192.168.1.1

nameservers:

addresses: [192.168.1.1]

version: 2

应用配置


netplan apply

Ubuntu基础环境安装配置完成

Vscode 远程连接设置

  1. 新建远程连接,弹出框中输入

ssh root@192.168.1.13 -A

回车后记得刷新一下列表

  1. 进入之后会自动安装配置vscode远端环境

然后显示

  1. 进入远端后终端自动连接到远端服务可以直接执行命令

// 创建一个开发目录

mkdir /home/code
  1. 点击打开文件夹,打开刚刚创建的目录

在SSH列表中就有刚刚连接的目录了,下次直接点击连接。

安装Docker

官方 apt 源中就有 Docker,我们可以直接通过 apt 来安装(其他版本的自行研究)


sudo apt update

sudo apt install docker.io

// 安装完查看

root@tdev:~# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

root@tdev:~# docker -v

Docker version 20.10.12, build 20.10.12-0ubuntu4

配置docker国内镜像源

增加Docker的镜像源配置文件 /etc/docker/daemon.json,如果没有配置过镜像该文件默认是不存的,在其中增加如下内容:


{

"registry-mirrors": ["http://hub-mirror.c.163.com"]

}

// 重启docker服务

service docker restart

// 查看镜像

root@tdev:~# docker info|grep Mirrors -A 1

Registry Mirrors:

http://hub-mirror.c.163.com/

安装docker-compose

  1. 通过github下载 docker-compose-linux-x86_64

网上有很多通过命令下载,不过有时候下载不下来,直接下载然后通过vscode直接拖拽进服务器。


mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

// 检查是否安装完成

root@tdev:/home/code# docker-compose

Usage: docker compose [OPTIONS] COMMAND

Docker Compose

Options:

--ansi string Control when to print ANSI control

characters ("never"|"always"|"auto")

(default "auto")

....

github ssh配置

为了服务器上传代码等资料到github上,开发的话可以参照这个发送代码上传gitlab公司库等


// 创建一个新的秘钥,在/root/.ssh

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

// 生成后

-rw------- 1 root root 3381 Feb 10 10:48 id_rsa

-rw-r--r-- 1 root root 744 Feb 10 10:48 id_rsa.pub

去github新建ssh key,把id_rsa.pub中的内容复制到


Omit --global to set the identity only in this repository.

fatal: no email was given and auto-detection is disabled

2023-02-10 11:01:47.060 [info] > git config --get-all user.name [2ms]

2023-02-10 11:01:47.070 [info] > git config --get commit.template [6ms]

2023-02-10 11:01:47.072 [info] > git for-each-ref --format=%(refname)%00%(upstream:short)%00%(objectname)%00%(upstream:track)%00%(upstream:remotename)%00%(upstream:remoteref) refs/heads/main refs/remotes/main [3ms]

2023-02-10 11:01:47.083 [info] > git status -z -uall [8ms]

2023-02-10 11:01:47.090 [info] > git for-each-ref --sort -committerdate --format %(refname) %(objectname) %(*objectname) [7ms]

git 提交报错,主要是添加username和email


git config --global user.name "xxxxx"

git config --global user.email "xxxx@126.com"

这样就可以使用vscode提交代码到github(现在这个是全局,多个git仓库我暂时没有配置过,这个项目暂时先这么处理,如果需要多个ssh key设置自行研究吧)

编写Dockerfile

单独创建了一个项目把dockerfile放在里面了 地址

Mysql Dockerfile


FROM mysql:5.7

LABEL maintainer="tim"

Redis Dockerfile


FROM redis:5.0

LABEL maintainer="tim"

docker-compose.yml


version: '1.0'

# 网络配置

networks:

backend:

driver: ${NETWORKS_DRIVER}

# 服务容器配置

services:

mysql:

build:

context: ./mysql

environment:

- TZ=${TZ}

- MYSQL_USER=${MYSQL_USERNAME} # 设置 Mysql 用户名称

- MYSQL_PASSWORD=${MYSQL_PASSWORD} # 设置 Mysql 用户密码

- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} # 设置 Mysql root 用户密码

privileged: true

volumes:

- ${DATA_PATH_HOST}/mysql:/var/lib/mysql # 引用 .env 配置中 DATA_PATH_HOST 变量,将宿主机上存放 Mysql 数据的目录挂载到容器中 /var/lib/mysql 目录

ports:

- "${MYSQL_PORT}:3306" # 设置容器3306端口映射指定宿主机端口

networks:

- backend

restart: always

redis:

build:

context: ./redis

environment:

- TZ=${TZ}

privileged: true

volumes:

- ${DATA_PATH_HOST}/redis:/data # 引用 .env 配置中 DATA_PATH_HOST 变量,将宿主机上存放 Redis 数据的目录挂载到容器中 /data 目录

ports:

- "${REDIS_PORT}:6379" # 设置容器6379端口映射指定宿主机端口

networks:

- backend

restart: always

.env


# 设置时区

TZ=Asia/Shanghai

# 设置网络模式

NETWORKS_DRIVER=bridge

# 宿主机上Mysql Reids数据存放的目录路径

DATA_PATH_HOST=./data

# Mysql 服务映射宿主机端口号,可在宿主机127.0.0.1:3306访问

MYSQL_PORT=3306

MYSQL_USERNAME=admin

MYSQL_PASSWORD=123456

MYSQL_ROOT_PASSWORD=123456

# Redis 服务映射宿主机端口号,可在宿主机127.0.0.1:6379访问

REDIS_PORT=6379

项目目录


.

├── LICENSE

├── README.md

├── docker-compose.yml

├── mysql

│ └── Dockerfile

└── redis

└── Dockerfile

启动


docker-compose up -d

测试mysql redis 连接成功

停止


docker-compose stop

删除


docker-compose rm

只要data目录不删除数据就会保留

配置golang环境

之前配置过在docker golang容器中开发,虽然可行,但是配置复杂并且连接很慢,所以直接在虚拟机配置golang开发环境

安装


rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.1.linux-amd64.tar.gz

// 在/etc/profile最后添加

export PATH=$PATH:/usr/local/go/bin

export GOPROXY=https://goproxy.cn

export GOPATH="/root/go"

export PATH=$PATH:$GOPATH/bin

// 然后profile生效

source /etc/profile

// 查看是否安装成功

root@tdev:/home/tim# go version

go version go1.19.1 linux/amd64

vscode 配置远端golang

在远端安装golang扩展

安装完会自动跳出安装go tools 点击安装就可以了


Installing github.com/cweill/gotests/gotests@v1.6.0 (/root/go/bin/gotests) SUCCEEDED

Installing github.com/fatih/gomodifytags@v1.16.0 (/root/go/bin/gomodifytags) SUCCEEDED

Installing github.com/josharian/impl@v1.1.0 (/root/go/bin/impl) SUCCEEDED

Installing github.com/haya14busa/goplay/cmd/goplay@v1.0.0 (/root/go/bin/goplay) SUCCEEDED

Installing github.com/go-delve/delve/cmd/dlv@latest (/root/go/bin/dlv) SUCCEEDED

Installing golang.org/x/lint/golint@latest (/root/go/bin/golint) SUCCEEDED

Installing golang.org/x/tools/gopls@latest (/root/go/bin/gopls) SUCCEEDED

All tools successfully installed. You are ready to Go. :)

修改一下gofmt不然格式化会有问题

至此 golang远端配置完成

安装nodejs


wget https://nodejs.org/dist/v18.14.0/node-v18.14.0-linux-x64.tar.xz

tar xf node-v18.14.0-linux-x64.tar.xz

mkdir /usr/local/lib/node

mv node-v18.14.0-linux-x64 /usr/local/lib/node/nodejs

sudo vim /etc/profile

// 添加

export NODEJS_HOME=/usr/local/lib/node/nodejs

export PATH=$NODEJS_HOME/bin:$PATH

// 刷新

source /etc/profile

至此基本开发环境中所需要的安装完毕。下一步就是创建项目编写代码

go-zero环境配置

  1. 安装goctl

GOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest
  1. protoc & protoc-gen-go安装(单体应用可以不装)

goctl env check -i -f --verbose
  1. vscode 远端安装goctl扩展,这样有代码提示和快捷键

tapi 接口开发

这部分需要先学习go-zero,不然很多操作无法理解


mkdir /home/code/tapi

使用vscode远程打开tapi目录进行项目开发了


// 项目初始化

go mod init tapi

在项目根目录创建一个project.api


type (

LoginRequest {

Name string `form:"name"`

Password string `form:"password"`

}

LoginResponse {

Code int64 `json:"code"`

Msg string `json:"msg"`

}

)

service User {

@handler Login

post /api/user/login(LoginRequest) returns (LoginResponse)

}

// 生成项目代码

goctl api go -api project.api -dir ./

// 项目处理依赖

go mod tidy

项目目录


root@tdev:/home/code/tapi# tree

.

├── etc

│ └── user.yaml

├── go.mod

├── internal

│ ├── config

│ │ └── config.go

│ ├── handler

│ │ ├── loginhandler.go

│ │ └── routes.go

│ ├── logic

│ │ └── loginlogic.go

│ ├── svc

│ │ └── servicecontext.go

│ └── types

│ └── types.go

├── project.api

└── user.go

下面我们只需要修改一下internal/logic/loginlogic.go


func (l *LoginLogic) Login(req *types.LoginRequest) (resp *types.LoginResponse, err error) {

// todo: add your logic here and delete this line

return &types.LoginResponse{

Code: 200,

Msg: "成功",

}, nil

}

运行项目


go run user.go -f etc/user.yaml

第一次执行有点慢

使用postman来访问一下看看

什么也没传递报错field name is not set

参数传递过去后,一切正常了

antd pro demo

使用Umi Max来安装antd pro


npx create-umi@latest

// 启动

yarn dev

正式后台开发

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!