beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署”
写在前面的话1. 为什么我要叫伪部署答: 因为我把它们放在服务器运行,都是开发模式。生产模式实在不会弄,所以就这样了。2. 系统环境答: 腾讯云服务器系统为:ubuntu 版本不记得,应该是比较高的。3. 前提假设答:假设你的服务器已经安装了docker。你的项目都已经上传到服务器对应的目录下。下面是我的beego 项目(wordhelpapi),和goAdmin项目(wor...
写在前面的话
1. 为什么我要叫伪部署
答: 因为我把它们放在服务器运行,都是开发模式。生产模式实在不会弄,所以就这样了。
2. 系统环境
答: 腾讯云服务器 系统为:ubuntu 版本不记得,应该是比较高的。
3. 前提假设
答:
- 假设你的服务器已经安装了docker。
- 你的项目都已经上传到服务器对应的目录下。下面是我的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:
- 注意 wordhelpapi 是我的镜像名字,你可以自己改成你想要的。
- 最后还有个 . 表示从当前目录下的Dockerfile 文件
结果如下:(都是我构建过的镜像)
ps:记录我出现过的问题 - CMD[“bee”,“run”] 他们的双引号,之前弄成了 中文的,报过错误。
- 中间如果出现go get…不成功的情况,就重新运行这个命令。
4. 利用 wordhelpapi 这个镜像 创建容器
docker run -it --name wordhelpapi -p 9000:9000 -v /leijiang_file/wordhelpweb:/go/src/wordhelpweb wordhelpapi
参数说明
- -i: 交互式操作。
- -t: 终端。
- –name wordhelpapi 指定生成容器的名称为 wordhelpapi
- -p aaa:bbb表示宿主机的aaa端口映射容器bbb端口。
- -v aaa:bbb 表示将本地aaa目录下的文件映射(复制)到容器bbb目录下面。
- wordhelpapi 最后这个 表示使用wordhelpapi这个镜像来生成容器。
5. 查看 wordhelpapi 这个容器是否创建成功
在这之前,一切顺利的话,你可能直接就进入到容器内部了。
假设我们还在宿主机里。
查看容器是否成功构建
docker ps -a
结果
查看容器是否运行
docker ps
结果
若没有运行(前提容器构建成功)
docker start wordhelpapi
知识补充
- docker run 从选择镜像到生成容器,并启动
- 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 -zxvf
和 unzip xxx.zip
命令就用了很多次。
另外
我们数据库服务启动成功了。
- 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了
最后声明下
- 这个不算是教程,是我的“伪"部署记录。
- goAdmin部署需要的一些包自行拖过去,基本上出现的package not found 之类的,一定是你GO环境变量下面没有对应的包。
- 鄙人大四了,找不到工作,有哪位大哥公司招人,可以考虑考虑下我,当个实习生。
- 这里可以留联系方式吗可以的话 手机号(WX):13409857017 QQ:962059238
- 加我问问题,感觉也行,毕竟刚弄完,知识还是热的。哈哈。
- 不说了,改论文去了。
更多推荐
所有评论(0)