golang发布项目,golang开发环境

本文目录一览:

golang 微服务开发(一)

本项目旨在使用golang 搭建一个微服务应用。

gin做api和rpc的客户端 go-micro作为后台微服务

···

// gin

Frame

– app // 控制器

– conf // 配置文件

– middleward // 中间件

– models // 模型

– routes // 路由

– services // 服务层

– uitl // 工具

– main.go // 入口

// app 目录

app

– api

– v1

– goods.go

– v2

– route.go

– app.go

//conf目录

conf

– config.ini

models

– models.go

services

– xxxService.go

util

– config.go

···

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 容器编排工具一起使用。

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

Golang入门到项目实战 | 第一个golang应用

1.创建一个文件夹,例如:golang入门到项目实战

2.在golang入门到项目实战文件夹中创建一个go文件,例如:test.go

3.在test.go中输入如下内容:

4.编译执行go run test.go

5.可仅选择编译执行go build test.go,则目录下会多出个exe程序

如何部署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 ;

}

}

golang适合做web开发吗

适合。框架足够成熟了 A Survey of 5 Go Web Frameworks

小型项目你甚至不用框架,用net/http http – The Go Programming Language

常用库也成熟了 Top – Go Search

golang的web后端即使不concurrent也比php,ruby,python快很多很多

golang里用concurrent真的非常方便,非常非常快,超大web项目golang scale成本低

如果你想,golang的部署可以比php更方便,使用go get和http.ServeAndListen()可以不用nginx和apache

对于文件改动重新编译其实并不是大问题,看pilu/fresh · GitHub,其实你自己写shell脚本(也可以直接用go写,因为它本身就是系统语言)监控文件系统改动然后自动重新build,即使是C/C++的项目这也不是大问题,人们不用C/C++写web是因为它们不是写web app的最佳选择

golang写的代码编译通过后,要比scripting language鲁棒,因为go compiler强制一些最佳实践

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/153122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-14 03:03
下一篇 2024-11-14 03:03

相关推荐

  • 掌握magic-api item.import,为你的项目注入灵魂

    你是否曾经想要导入一个模块,但却不知道如何实现?又或者,你是否在使用magic-api时遇到了无法导入的问题?那么,你来到了正确的地方。在本文中,我们将详细阐述magic-api的…

    编程 2025-04-29
  • 使用Golang调用Python

    在现代软件开发中,多种编程语言的协作是相当普遍的。其中一种使用场景是Golang调用Python,这使得在使用Python库的同时,可以利用Golang的高性能和强大并发能力。这篇…

    编程 2025-04-29
  • 如何部署一个服务到一个环境

    本文将从多个方面对如何部署一个服务到一个环境进行详细的阐述,包括环境准备、代码编写、打包部署等。 一、环境准备 1、确定部署环境的操作系统版本、运行时环境(如JDK、Node.js…

    编程 2025-04-29
  • Python开发环境包括

    Python作为一门高效、易读易学的语言,已经被越来越多的开发者使用。而Python的开发环境也发展得越来越完善。本文将会从以下几个方面对Python开发环境包括做详细的阐述: 一…

    编程 2025-04-29
  • 内核驱动编译环境代价分析

    内核驱动编译环境是在Linux系统中编译内核模块的过程。本文通过分析内核驱动编译环境的各个方面,包括编译工具的选择、编译速度、编译器选项等,来探讨其代价所在,并提供一些优化的建议。…

    编程 2025-04-29
  • 使用Golang创建黑色背景图片的方法

    本文将从多个方面介绍使用Golang创建黑色背景图片的方法。 一、安装必要的代码库和工具 在开始创建黑色背景图片之前,我们需要先安装必要的代码库和工具: go get -u git…

    编程 2025-04-29
  • 如何将Java项目分成Modules并使用Git进行版本控制

    本文将向您展示如何将Java项目分成模块,并使用Git对它们进行版本控制。分割Java项目可以使其更容易维护和拓展。Git版本控制还可以让您跟踪项目的发展并协作开发。 一、为什么要…

    编程 2025-04-28
  • GitHub好玩的开源项目

    本文旨在介绍GitHub上一些好玩的开源项目,并提供代码示例供读者参考和学习。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各种平台和设备,方便用户在Git…

    编程 2025-04-28
  • Django框架:从简介到项目实战

    本文将从Django的介绍,以及如何搭建Django环境开始,逐步深入到Django模型、视图、模板、表单,最后通过一个小型项目实战,进行综合性的应用,让读者获得更深入的学习。 一…

    编程 2025-04-28
  • 如何使用cmd激活python虚拟环境

    Python虚拟环境是Python用来隔离项目所需包和依赖库的工具,以免不同项目之间的依赖关系冲突。下面将从安装虚拟环境、创建虚拟环境、激活虚拟环境这3个方面来详细讲解如何在cmd…

    编程 2025-04-28

发表回复

登录后才能评论