本文首发于 我的微信公众号 代码猎奇站 和 我的博客 ISLANDmysql
陆陆续续已经更新到了第十三期,基本的知识点都已经讲解的差很少,那么最后一步就是对项目进行部署。这里咱们将项目部署到 Linux 的服务器 Docker 上。本期知识点包括交叉编译和Docker部署。linux
什么是交叉编译呢?交叉编辑简单的说就是一个平台生成另外一个平台的可执行程序。咱们大部分开发环境是 windows 或者 macOS ,固然也有使用 linux 用户(其实在 windows 上更加推荐使用 WSL 进行开发),而咱们的上线服务器通常都是 linux,因此咱们要进行项目的交叉编译。Go 中对交叉编译相对简单,咱们只须要进行简单的设置便可完成交叉编译。git
打开咱们的项目根目录,打开终端,设置 GOOS 和 GOARCH。github
在 windows 下编译为 linux 程序。web
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o out/linux/gin_hello .
复制代码
这里的 go build -o out/linux/gin_hello
是指将编译后的文件输出到 out/linux 下,编译后的二进制叫作 gin_hello 。sql
我将命令写到了 .bat
方便处理,不用每次都执行贴一下这几行命令。docker
在项目根目录下新创建 build.bat
,而后执行该文件。固然,不少工程或者项目使用 Makefile
进行的编译shell
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o out/linux/gin_hello .
exit
复制代码
执行完该文件就会在 out/linux 下出现 gin_hello数据库
这里咱们便完成了交叉编译,编译后的程序是 linux 下的可执行文件。vim
这里使用的操做系统为 centos 7 ,安装前要更新一下软件源 sudo yum update
,以后对 Docker 软件源进行添加。
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
复制代码
再次更新一下软件源 sudo yum update
,最后就能够安装咱们的 docker 了
sudo yum install docker-ce
复制代码
添加到开机启动
sudo systemctl enable docker
复制代码
启动Docker
sudo systemctl start docker
复制代码
此时,咱们的 Docker 已经完成安装。可是咱们还须要为咱们的 Docker 设置远程链接,让咱们本地开发能够链接到服务器。
🚫警告 下面的方法仅仅是为了教程演示 请勿在生成环境中使用该方法,该方法存在缺陷,使 Docker 端口暴漏在公网环境中,任何人均可以在Docker进行部署。若是须要生产环境中打开远程端口,须要配置权限认证方式,这里不过多作介绍
在 Centos 7 中,进行对下面的文件进行编辑
vim /usr/lib/systemd/system/docker.service
复制代码
找到 ExecStart 开头的进行以下添加和修改。
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock
复制代码
此时,重启服务器或者从新启动 Docker 就完成了 Docker 的远程链接。
首先咱们要在 dockers 上进行 数据库 MySQL 的安装。首先在执行咱们的搜索命令,看看能不能找到MySQL 相关的信息 docker search mysql
。
确承认以查找到 MySQL 后,就能够完成 MySQL 进行的拉取 ,经过命令 docker pull mysql
拉取 MySQL 镜像。此时并无指定 MySQL 的版本,会给咱们拉取最新的 MySQL 版本。
拉取完毕,经过 docker iamges
查看当前全部的镜像,这里咱们只有一个 MySQL 。
我已经对 MySQL 镜像进行了获取,那么接下来就是经过镜像建立容器。
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql
复制代码
此时咱们的 MySQL 容器就建立成功,而且启动完成,并且咱们制定了 MySQL 的密码为 1234,端口为 3306。
docker exec -it mysql /bin/bash
复制代码
咱们为 MySQL 指定一个终端,来进行数据库的建立。
输入 mysql -u root -p
回车后输入密码 1234
,进入数据库。输入 create database ginhello
和咱们本地数据库名称一致。
这样,咱们在服务器上的操做就完成了。
首先咱们要对咱们的代码进行简单的修改,以前咱们一直是 DEBUG 模式在运行项目,而如今咱们要正式上线了,须要修改咱们的启动模式,在 main.go
中进行添加。
gin.SetMode(gin.ReleaseMode)
复制代码
此时就能够执行咱们的交叉编译时候写的脚本 build.bat,会生成新的 linux 可执行文件。
新建 Dockerfile,编写 Dockerfile
FROM alpine
WORKDIR /web/gin
COPY ./out/linux/. .
CMD ./gin_hello 复制代码
简单的说一下这些含义,拉取一个 alpine 的镜像,这基本是最小的 linux , 指定咱们的 WORKDIR, 将咱们生成的 linux 可执行程序复制到 WORKDIR 下,运行项目。
固然这些还不够,当咱们编写完成该文件的时候,在第一行会出现运行按钮。
单击运行按钮,选择 Edit 'Dockerfile'
会出现下面的界面。点击 ① 处的省略号,出现旁边的界面,进行 Docker 的配置,在 ② 处填写咱们的 IP 端口为 2375 设置完成后,等待,看看 ③ 处是否有 Connection successful 。否者连接失败,查看上述步骤是否出错。完成后点击 OK。
完成 Docker 的配置,接着完成端口映射。
Host port 表示宿主主机端口,就是咱们的服务器端口,而 Container port 表示咱们的 容器的端口。由于 gin 项目运行在容器内,且启动端口为 8080,咱们经过端口映射,访问宿主主机 80 端口,而映射到 8080 端口。
完成上述设置,就能够点击启动咱们的 Dockerfile。
咱们能够在 Goland 的 Service 中找到当前进度。
等待完成,打开服务器公网IP。
能够看到咱们以前写的代码。
此时咱们就完成了部署。
经过本章节的 交叉编译,Docker 安装,Docker 镜像安装和启动容器,部署 Gin 项目,完成了一个项目经过 Docker上线部署的过程。
本章节代码可使用以前任何一个章节代码,可是这里仍是进行了代码的上传,包含本章节使用的 Dockerfile 和 build.bat
Gin(一):Hello
Gin(二):路由Router
Gin(三):模板tmpl
Gin(四):表单提交校验和模型绑定
Gin(五):链接MySQL
Gin(六):文件的上传
Gin(七):中间件的使用和定义
Gin(八):Cookie的使用
Gin(九):生成restful接口
Gin(十):集成 Swagger
Gin(十一)集成ORM-gorm
Gin(十二)集成JWT