写在前面的话
1. 为什么我要叫伪部署

答: 因为我把它们放在服务器运行,都是开发模式。生产模式实在不会弄,所以就这样了。

2. 系统环境

答: 腾讯云服务器 系统为:ubuntu 版本不记得,应该是比较高的。

3. 前提假设

答:

  1. 假设你的服务器已经安装了docker。
  2. 你的项目都已经上传到服务器对应的目录下。下面是我的beego 项目(wordhelpapi),和goAdmin项目(wordhelpweb)。
    . 在这里插入图片描述
4. 说明

答:
1. beego是作为小程序api接口的。
2. goAdmin是作为数据库管理后台界面的。
3. mysql不解释。
4. docker不解释。
5. natapp 小程序需要带证书的域名,所以买了个natapp的服务,理由不需要备案。

5. 可以从 二、docker部署mysql开始,不然配置半天发现数据库都没连。

正文开始

一 、docker部署beego

1. 在beego项目根目录下,编写Dockerfile 文件
FROM golang:latest
#定义环境变量
ENV GOROOT=/usr/local/go
ENV GOPATH=/www/go/
ENV PATH=$GOPATH/bin:$PATH
#首先安装beego bee mysql扩展
RUN go get github.com/astaxie/beego && go get github.com/beego/bee && go get github.com/go-sql-driver/mysql
## 复制Dockerfile 同目录的所有文件到docker 中的指定位置
COPY . /www/go/src/wordhelpapi/
## 开放 9000 端口
EXPOSE 9000
## 启动执行 bee run  命令 
CMD ["bee", "run"]

ps 其实这个 CMD [“bee”, “run”] 这条可以不要,可以进入手动启动。

2. 构建 wordhelpapi 这个镜像
docker build -t wordhelpapi .

由于我已经构建过,所以我就不贴结果图。

3. 查看 wordhelpapi 这个镜像 是否成功构建
docker images

参数说明:

-t :指定要创建的目标镜像名

. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

ps:

  1. 注意 wordhelpapi 是我的镜像名字,你可以自己改成你想要的。
  2. 最后还有个 . 表示从当前目录下的Dockerfile 文件
    结果如下:(都是我构建过的镜像)
    在这里插入图片描述
    ps:记录我出现过的问题
  3. CMD[“bee”,“run”] 他们的双引号,之前弄成了 中文的,报过错误。
  4. 中间如果出现go get…不成功的情况,就重新运行这个命令。
4. 利用 wordhelpapi 这个镜像 创建容器
docker run -it --name wordhelpapi -p 9000:9000  -v /leijiang_file/wordhelpweb:/go/src/wordhelpweb   wordhelpapi

参数说明

  1. -i: 交互式操作。
  2. -t: 终端。
  3. –name wordhelpapi 指定生成容器的名称为 wordhelpapi
  4. -p aaa:bbb表示宿主机的aaa端口映射容器bbb端口。
  5. -v aaa:bbb 表示将本地aaa目录下的文件映射(复制)到容器bbb目录下面。
  6. wordhelpapi 最后这个 表示使用wordhelpapi这个镜像来生成容器。
5. 查看 wordhelpapi 这个容器是否创建成功

在这之前,一切顺利的话,你可能直接就进入到容器内部了。
假设我们还在宿主机里。
查看容器是否成功构建

docker ps -a

结果
在这里插入图片描述
查看容器是否运行

docker ps 

结果
在这里插入图片描述
若没有运行(前提容器构建成功)

docker start wordhelpapi

知识补充

  1. docker run 从选择镜像到生成容器,并启动
  2. docker start 启动一个已经生成的镜像。

接下来假设我们要对容器 内部的beego项目修修改改。这是后我们要转战进入容器内部了

6. 进入 wordhelpapi 这个容器内部,并为所欲为
docker exec -it wordhelpapi  bash

结果:注意此时主机名称已经更改,显示的时容器Id,说明成功进入。
在这里插入图片描述
假设你要对容器内部的项目(之前构建容器时映射过来的项目),进行更改。那么肯定需要vim ,现实是这里啥也没有所以。(如果对容器内部文件不改动,可以不做以下步骤)
这样

apt-get update

然后这样

apt-get install vim

一切走上正轨之后。
可以这样运行你的beego(因为我打包部署不成功,所以只能以开发模式运行了,毕竟只是毕设演示用),在你beego根目录下,如果有wordhelpapi(你曾经bee run 出来的) 二进制文件,直接删了后

 nohup go run main.go &

这样beego 项目在容器里就一直后台运行了。
不管这个成功与否,到这里已经成功了,无非是你的数据还没有成功连接数据库。

补充知识:
1. 假设你现在在宿主机里。需要传文件到容器内部
docker cp ./aaa   6a72b1dd428c:/bbb

说明:将当前目录下的 aaa文件复制到Id为6a72b1dd428c的容器的/bbb目录下面。

2. 运行出错找出这个pid, kill他
lsof -i:9000

说明:lsof 没有的话你要安装;9000表示我的api 运行在9000端口。

kill 1096

说明:1096是查出来的pid。

突然转场一下 我们应该先部署mysql

接上一个步骤,退出wordhelpapi 这个容器

 exit

二 、docker部署MySql

1. 拉取mysql镜像

我数据用的mysql5.7。所以

 docker pull mysql:5.7

自行查看是否拉取成功

 docker images

结果
在这里插入图片描述

2. 利用镜像构建容器并运行

前面说了。docker run 表示利用镜像构建容器并运行。

 docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

搞这个也是搞了蛮久,建议直接复制,自行改改端口,改改数据库密码就行了。能力强的多搞搞。

2. 查看 mymysql这个容器是否运行

知识补充 docker ps表示 显示正在运行的容器,docker ps -a 显示所有容器(不管是否运行)

 docker ps

结果
在这里插入图片描述

3. 测试mymysql 这个容器服务是否正常。

这里我用navicat for mysql ,为什么选择这个呢,因为我主要搞前端比较多,后端薄弱,就是数据库查询这块不行,navicat 可以帮助我可视化地构建查询语句。前端小伙伴们可以了解下。

1. 新建连接。输入ip,用户名,密码.

在这里插入图片描述

2. 此时可以通过这个工具,将你地数据库进行导入了。

在这里插入图片描述
至此,mysql部分全部OK

三、docker部署goAdmin

1. 在goAdmin项目根目录下,编写Dockerfile 文件

跟弄beego那个差不多。可以直接复制那个文件Dockerfile 文件 改改端口号就好。
前提是你要自己成功运行过goAdmin。如果没有经验可以看我的上篇博客。那个是写goAdmin搭建后台管理页面的。

FROM golang:latest
#定义环境变量
ENV GOROOT=/usr/local/go
ENV GOPATH=/www/go/
ENV PATH=$GOPATH/bin:$PATH
## 到时候 手动复制github.com的包过来

## 复制Dockerfile 同目录的所有文件到docker 中的指定位置
COPY . /www/go/src/wordhelpweb/
## 开放 9003 端口
EXPOSE 9003
1. 利用当前Dockerfile 文件构建wordhelpweb镜像
 docker build -t wordhelpweb .
2. 利用当前wordhelpweb镜像构建wordhelpweb容器
 docker run -it --name wordhelpweb -p 9003:9003  -v /leijiang_file/wordhelpweb:/go/src/wordhelpweb   wordhelpweb.
3. 进入wordhelpweb,并为所欲为
 docker exec -it wordhelpweb bash
4. 运行wordhelpweb容器中的goAdmin项目

假设我到达容器中goAdmin项目的根目录位置

 nohup go run . &

不晓得为啥 nohup go run main.go & 这个命令会意外终止。所以就用了 nohup go run . &

补充

在这一步,会出现很多报错,因为 各个github.com里面有的包没有,所以你看你需要哪些包,就用前面提到的 docker cp 命令将你的包都搞进去。
前面也提到过,你要解压缩什么的 这些命令也是没有的,所以
apt-get update 之后,再安装你需要的命令工具,不然apt-get install 会无效。
话说这一步,我好多包都没搞过来,光docker cp命令和 tar -zxvfunzip xxx.zip命令就用了很多次。

另外

我们数据库服务启动成功了。

  1. beego中conf/app.go 文件中,数据库IP地址建议用内网地址,因为beego,mysql,goAdmin三者都是容器化,所以他们都算在一个局域网内。查看mysql的内网地址
    首先进入mymysql这个容器,然后cat出主机名称就可以看到了
docker exec -it mymysql bash
 cat /etc/hosts

结果
在这里插入图片描述 2.同样地,goadmin中的main.go 中的数据库配置部分也是可以用mymysql的内网IP.

四、wordhelpapi容器运行natapp

微信小程序接口需要带证书的域名,还要备案了的域名,所以,作为学生党,啊呸,还有一个月就不是了。没钱所以从natapp买了个二级域名,记得要选择可以免费开启https的。
还是说一下完整的步骤把,怕有的同学这个不会弄。

1.购买二级域名

在这里插入图片描述
在这里插入图片描述
然后按照步骤付费就是了。

2. 可能第一步之前你要先购买隧道,那就去点购买隧道,购买一个把,vip_1那个就可以了。
3.配置隧道

在这里插入图片描述

4.进入wordhelpapi 容器中,并启用隧道

假设你已经进来了,假设你按照我之前的apt-get update了,那么你可以安装下wget 用来下载natapp的客户端,或者本地下载好上传宿主机,再上传容器中(相信一般人都是怕麻烦的)所以我们用wget下载

1. 首先 复制下载链接地址

在这里插入图片描述

2. wget 链接地址

可以先创建个文件夹 mkdir natapp 来存放它,再cd进入吗,再下载。

 wget http://download.natapp.cn/assets/downloads/clients/2_3_9/natapp_linux_amd64_2_3_9.zip
2. 解压这个zip 文件
 unzip natapp_linux_amd64_2_3_9.zipe

这是这个目录下会多出一个 natapp可执行文件。
但是如果你现在直接参照官网的

./natapp -authtoken=xxxxx

会说你权限不行。所以我们向后退一级目录 cd../

chmod -R 777 natapp

赠与它最高权限,再进入 cd natapp/ 在运行即可(我参照官网的用 nohub 运行未果,所以就用普通的这个运行了)
出现 online的绿色状态,说明穿透成功了。

这一刻我才发现,natapp 可以直接在宿主机里就开始代理9000端口,我非要在容器里代理,真的是傻了。。。。

至此所有的步骤都OK了

最后声明下

  1. 这个不算是教程,是我的“伪"部署记录。
  2. goAdmin部署需要的一些包自行拖过去,基本上出现的package not found 之类的,一定是你GO环境变量下面没有对应的包。
  3. 鄙人大四了,找不到工作,有哪位大哥公司招人,可以考虑考虑下我,当个实习生。
  4. 这里可以留联系方式吗可以的话 手机号(WX):13409857017 QQ:962059238
  5. 加我问问题,感觉也行,毕竟刚弄完,知识还是热的。哈哈。
  6. 不说了,改论文去了。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐