您的位置:

golang应用部署,golang linux应用开发

本文目录一览:

Golang项目部署3,容器部署

容器部署即使用 docker 化部署 golang 应用程序,这是在云服务时代最流行的部署方式,也是最推荐的部署方式。

跨平台交叉编译是 golang 的特点之一,可以非常方便地编译出我们需要的目标服务器平台的版本,而且是静态编译,非常容易地解决了运行依赖问题。

使用以下指令可以静态编译 Linux 平台 amd64 架构的可执行文件:

生成的 main 便是我们静态编译的,可部署于 Linux amd64 上的可执行文件。

我们需要将该可执行文件 main 编译生成 docker 镜像,以便于分发及部署。 Golang 的运行环境推荐使用 alpine 基础系统镜像,编译出的容器镜像约为 20MB 左右。

一个参考的 Dockerfile 文件如下:

其中,我们的基础镜像使用了 loads/alpine:3.8 ,中国国内的用户推荐使用该基础镜像,基础镜像的 Dockerfile 地址: ,仓库地址:

随后使用 " docker build -t main . " 指令编译生成名为 main 的 docker 镜像。

需要注意的是,在某些项目的架构设计中, 静态文件 和 配置文件 可能不会随着镜像进行编译发布,而是分开进行管理和发布。

例如,使用 MVVM 模式的项目中(例如使用 vue 框架),往往是前后端非常独立的,因此在镜像中往往并不会包含 public 目录。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的项目中,也往往并不需要 config 目录。

因此对于以上示例的 Dockerfile 的使用,仅作参考,根据实际情况请进行必要的调整。

使用以下指令可直接运行刚才编译成的镜像:

容器的分发可以使用 docker 官方的平台: ,国内也可以考虑使用阿里云: 。

在企业级生产环境中, docker 容器往往需要结合 kubernetes 或者 docker swarm 容器编排工具一起使用。

容器编排涉及到的内容比较多,感兴趣的同学可以参考以下资料:

如何在Docker中设置Go并部署应用

步骤一 - 创建Dockerfile

如下的Dockerfile可以满足以上的要求:

**FROM** golang:1.6

*# Install beego and the bee dev tool*

**RUN** go get github.com/astaxie/beego go get github.com/beego/bee

*# Expose the application on port 8080*

**EXPOSE** 8080

*# Set the entry point of the container to the bee command that runs the*

*# application and watches for changes*

**CMD** ["bee", "run"]

第一行,

FROM golang:1.6

将Go的官方映像文件作为基础映像。该映像文件预安装了 Go 1.6 . 该映像已经把 $GOPATH 的值设置到了 /go 。所有安装在 /go/src 中的包将能够被go命令访问。

第二行,

RUN go get github.com/astaxie/beego go get github.com/beego/bee

安装 beego 包和 bee 工具。 beego 包将在应用程序中使用。 bee 工具用语在开发中再现地重新加载我们的代码。

第三行,

EXPOSE 8080

在开发主机上利用容器为应用程序开放8080端口。

最后一行,

CMD ["bee", "run"]

使用bee命令启动应用程序的在线重新加载。

步骤二 - 构建image

一旦创建了Docker file,运行如下的命令来创建image:

docker build -t ma-image .

执行以上的命令将创建名为ma-image的image。该image现在可以用于使用该应用程序的任何人。这将确保这个团队能够使用一个统一的开发环境。

为了查看系统上的image列表,运行如下的命令:

docker images

这行该命令将输出与以下类似的内容:

REPOSITORY TAG IMAGE ID CREATED SIZE

ma-image latest 8d53aa0dd0cb 31 seconds ago 784.7 MB

golang 1.6 22a6ecf1f7cc 5 days ago 743.9 MB

注意image的确切名字和编号可能不同,但是,应该至少看到列表中有 golang 和 ma-image image。

步骤三 - 运行容器

一旦 ma-image 已经完成,可以使用以下的命令启动一个容器:

docker run -it --rm --name ma-instance -p 8080:8080 \

-v /app/MathApp:/go/src/MathApp -w /go/src/MathApp ma-image

如何部署Golang应用

安装supervisord

# 通过引导程序 ez_setup.py 来安装。这个引导程序会联网下载最新版本setuptools来安装,同时也可以更新本地的setuptools。

wget

sudo python ez_setup.py

# 更新setuptools:

sudo python ez_setup.py -U setuptools

# 安装supervisor

easy_install supervisor

# 生成配置文件

echo_supervisord_conf /etc/supervisord.conf

# 编辑配置文件

vim /etc/supervisord.conf

# 进入vim后找到最后两行,打开注释(取消前面的分号),

# [include]

# files = supervisor.d/*.ini

# 将所有的supervisor配置都放到 /etc/supervisor.d目录

mkdir /etc/supervisor.d

创建 supervisor 对应程序的配置文件

其中的一些路径需要换成自己对应的,这里将 zankbo 这个web 应用放在了对应的用户目录下

通过在生产服务器上设置environment可以在程序里判断是线上还是开发模式,如 zankbo 的 debug判断

当然也可已在启动命令处加入参数,如 command = /home/zankbo/gopath/src/zankbo/zankbo -d 来关闭Debug模式。

if os.Getenv("APP_NAME") == "ZANKBO_PRODUCT" {

beego.RunMode = "prod"

}

vim /etc/supervisor.d/zankbo.ini

# 写入

[program:zankbo]

directory = /home/zankbo/gopath/src/zankbo

environment=APP_NAME="ZANKBO_PRODUCT"

command = /home/zankbo/gopath/src/zankbo/zankbo

autostart = true

startsecs = 5

user = zankbo

redirect_stderr = true

stdout_logfile = /home/zankbo/log/zankbo.log

建立对应的用户

useradd zankbo

# 将www用户加入到zankbo用户组,Nginx以www用户运行

usermod -a -G zankbo www

# 更改用户家目录用户组的权限,使Nginx可以访问

chmod g+rx /home/zankbo

部署Go环境

其中的目录为,go:Go安装目录 gopath:Go工作目录,下面有src、pkg、bin三个目录 log:日志文件夹

[zankbo@MyCloudServer ~]$ pwd

/home/zankbo

[zankbo@MyCloudServer ~]$ vim .bashrc

# 设置Go环境变量,在.bashrc文件末尾写下如下内容

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bi

# 切换到用户家目录

[root@MyCloudServer ~]# su - zankbo

[zankbo@MyCloudServer ~]$ ls

go gopath log

将项目代码放到gopath/src下面,如我的播客项目:

[zankbo@MyCloudServer ~]$ tree -L 2 gopath/src/

gopath/src/

├── github.com

│ ├── astaxie

│ ├── beego

│ ├── go-sql-driver

│ ├── howeyc

│ ├── jacobsa

│ ├── smartystreets

│ └── wendal

└── zankbo

├── admin

├── blog

├── build_pkg.sh

├── common

├── conf

├── controllers

├── dbstruct.mwb

├── main.go

├── models

├── static

├── views

└── zankbo

导入项目sql文件到数据库

在项目文件夹执行build

[zankbo@MyCloudServer zankbo]$ pwd

/home/zankbo/gopath/src/zankbo

[zankbo@MyCloudServer zankbo]$ go build

会在项目下生成与包名对应的可执行文件,这里为:zankbo,build的时候可能会遇到错误,比如mysql的密码之类的,可根据提示排错。

通过supervisor 来启动服务

# supervisorctl start zankbo

配置Nginx

server {

listen 80;

server_name zankbo.com ;

root /home/zankbo/gopath/src/zankbo;

error_log logs/zankbo.com.error.log warn ;

location /static/ {

root /home/zankbo/gopath/src/zankbo;

location ~ .*\.(js|css)$ {

access_log off;

expires 1d;

}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

gzip off;

access_log off;

expires 3d;

}

}

location / {

proxy_pass ;

}

}

使用 Docker 快速部署 Golang 应用

文章使用到的软件:

目标

构建Dockerfile

打包Docker镜像

部署Go程序

我是通过 Portainer 来运行的,可视化的容器镜像的图形管理工具

方式二:

golang应用部署,golang linux应用开发

2022-11-27
golang三大基础,golang语言和go

2022-11-26
golang线上部署编译,golang 编译

2022-11-26
golang&&,golang语言

2022-11-28
golang脚本开发,go语言脚本

2022-11-27
golang常用命令,Golang语法

2022-11-27
golang基础架构,golang开发

2022-11-27
golang使用视频,golang 视频

2022-11-27
golang嵌入式,golang嵌入式开发数据库

本文目录一览: 1、深入理解golang 2、golang可以进行嵌入式linux吗 3、go语言可以做什么 4、嵌入式golang占用内存高 深入理解golang 最近三年,在工作中使用go开发了不

2023-12-08
golang发布项目,golang开发环境

本文目录一览: 1、golang 微服务开发(一) 2、Golang项目部署3,容器部署 3、Golang入门到项目实战 | 第一个golang应用 4、如何部署Golang应用 5、golang适合

2023-12-08
golang发布,golang发布时间

2022-11-27
golang服务器框架,golang 开源协议

2022-11-27
golang开发课,golang 程序设计

2022-11-27
golang领域,golang应用领域

2022-11-26
golang用什么语言写,Golang语法

2022-11-27
golang应用,golang应用框架

本文目录一览: 1、Go语言的应用 2、bpftrace动态追踪golang应用-函数内联问题 3、go语言适合做什么 4、Golang入门到项目实战 | 第一个golang应用 Go语言的应用 Go

2023-12-08
golang学习小组,golang 教程 pdf

2022-11-27
golang题库,Golang语言

2022-11-27
golang开发固件,golang 开源

2022-11-28
使用Golang和Docker构建高效的Web应用程序

2023-05-17