本文首發於 我的微信公衆號 代碼獵奇站 和 我的博客 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