beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署”

2023-11-20

写在前面的话

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. 不说了,改论文去了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署” 的相关文章

随机推荐

  • Vue学习(五)登陆页面之重置和发起登陆请求及弹窗提示

    Vue学习 五 登陆页面之重置和发起登陆请求及弹窗提示 表单重置 根据预验证结果决定是否发出登陆请求 编写代码 启动api服务器 弹窗提示 表单重置 直接调用element ui给我们写好的函数就可以了 获取当前表单的实例对象 通过这个实例
  • java中实现多态的机制是什么_java中实现多态的机制是什么? java什么是多态?

    学习java刚刚入门的小伙伴们 不知道大家在初次接触java中的多态一概念的时候 是否能清晰的讲出实现多态的机制是什么吗 什么才是java中的多态呢 多态性是指的面向对象程序设计代码重用的一个重要的机制 对于Java多态性 应该都不是第一次
  • Android Framework——进程间通讯学习,从Binder使用看起

    前言 Binder 是安卓中非常重要的进程间通讯工具 通过Binder 安卓在ServiceManager中对外提供了一系列的服务 学习Binder 将很好地为我们学习framework开个好头 Android 使用多进程 Android
  • 5分钟带你看懂Jeesite10大功能要点

    jeesite内容丰富 集成了大量优秀的组件 是一个值得研究的框架 它有 1 shiro安全权限控制 2 mybatis查询缓存接口扩展 3 ecache分布式缓存整合 4 页面资源缓存优化 5 多数据源灵活切换 6 mybatismapp
  • EasyExcel轻松读取Excel文件!

    EasyExcel是一个Java库 用于快速 简单地读写Excel文件 要使用EasyExcel 您首先需要将其添加为项目的依赖 如果使用Maven 可以添加以下依赖项
  • 算法:二分查找之第一个错误的版本

    方法一 class Solution public int firstBadVersion int n int left 1 int right n while left lt right int mid right left 2 left
  • 【React】 4课 react初识组件

    首先我们如1课创建一个文件夹在文件夹中安装react环境需要的配置文件 npm init y npm i babel standalone D npm i react react dom D 安装配置文件教程链接 https blog cs
  • 4个开源的Java代码静态分析工具

    1 PMD PMD是一款采用BSD协议发布的Java程序代码检查工具 该工具可以做到检查Java代码中是否含有未使用的变量 是否含有空的抓取块 是否含有不必要的对象等 该软件功能强大 扫描效率高 是Java程序员debug的好帮手 PMD支
  • Lex和Yacc应用教程(四).语法树的应用

    Lex和Yacc应用方法 四 语法树的应用 草木瓜 20070515 一 序 不论什么语言 语法结构总是那几种 可以想象任何程序体都可以解释成一棵语法树 语法树的本质是递归 很显然Yacc文法的核心思想也是递归 本文就通过具体实例 使用Ya
  • cesium加载影像的问题解决

    我用gdal把web墨卡托转为经纬度 再切分片时 发现对不上影像 经过两天排查 发现竟然是前端写错 viewer scene imageryLayers addImageryProvider new Cesium UrlTemplateIm
  • vscode乱码

    vscode中文乱码怎么解决 vscode是一款跨平台源代码编辑器 能够在桌面上运行 并且能够用途windows macOS以及Linux 但是有不少小伙伴们在使用vscode时 输入输出的却是中文代码 也不知道如何解决 那么今天小编就来告
  • Ribbon负载均衡策略DynamicServerListLoadBalancer的ServerListFilter解读

    一 DynamicServerListLoadBalancer在类图中的位置 二 DynamicServerListLoadBalancer源码解读 1 关键代码请见注释 2 源码位置 ribbon master ribbon loadba
  • JDK 8 List集合使用记录

    JDK8 的新特性给我们开发带来了很大的便利性 先声明 我没有系统的去学习 JDK8的这些所有新特性 本文只是记录一些我个人日常开发中常遇到的一些 JDK8 的新特性方法 1 提取对象集合中的某一属性集合 List lt 对象 gt gt
  • 【文件I/O】(一)标准I/O

    标准I O 库函数 一 I O相关知识 1 1最早接触的I O 1 2I O的种类 1 3库函数和系统调用 1 4什么是FILE 二 标准I O函数 1 fopen fclose strerror perror 打开 关闭文件 输出错误码信
  • 2022年网络安全比赛--数据库服务渗透测试中职组(超详细)

    2022年数据库服务渗透测试解析 一 竞赛时间 180分钟 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1 通过分析靶机Server01页面信息 寻找漏洞页面 将WEB服务存在SQL注入漏洞的页面名称作为Flag
  • 电脑提示vcomp100.dll丢失错误怎么办?(多种修复方法介绍)

    vcomp100 dll是由 Microsoft 开发的动态链接库 DLL 它是几个基于图形的应用程序 例如 Photoshop 以及多个游戏 例如巫师 3 所必需的 vcomp100 dll的作用包括 提供多线程支持 vcomp100 d
  • logback日志在项目启动后立刻清理历史日志

    扣扣技术分享交流群 1125844267 背景 搭了一个maven项目 只有一个main方法 然后打成一个jar包以供别的程序去启动执行 项目中配置了logback日志策略 但是在生产环境下发现日志可以正常生成 但是没有删除历史日志 设置的
  • 最全面、最详细web前端面试题及答案总结

    最全面 最详细web前端面试题及答案总结 总结不易 希望可以帮助到即将面试或还在学习中的web前端小伙伴 祝面试顺利 拿高薪 本章是HTML考点的 重难点 因此我们采 简略回答的 式进 撰写 所以不会有太多详细的解释 我们约定 每个问题后我
  • STM32外部EXTI中断笔记(开始于2021-07-13)

    STM32外部EXTI中断笔记 1 EXTI简介 在STM32上外部中断线共有19个 互联型 其上每个GPIO都可作外部中断输入 供GPIO的外部中断线供有16个 EXTI Line x x 0 15 stm32只分配7个中断向量给这16个
  • beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署”

    写在前面的话 1 为什么我要叫伪部署 答 因为我把它们放在服务器运行 都是开发模式 生产模式实在不会弄 所以就这样了 2 系统环境 答 腾讯云服务器 系统为 ubuntu 版本不记得 应该是比较高的 3 前提假设 答 假设你的服务器已经安装