对于简单的项目,通常我们只需要将编译后的二进制文件拷贝到服务器上,然后设置为后台守护进程运行即可。

本文以项目 https://github.com/johncxf/go_practice 为例。

编译

编译为 linux 系统可执行的二进制文件,二进制文件为 ./bin/go-api,可自行修改

$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./bin/go-api

可以使用 -ldflags "-s -w"参数去掉符号表和调试信息,可以压缩二进制文件大小

$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ./bin/go-api

大小对比:

$ ll ./bin
total 92168
-rwxr-xr-x  1 chen  staff    27M  1 16 22:03 go-api
-rwxr-xr-x  1 chen  staff    18M  1 16 22:53 go-api-1

上传文件

在服务器新建一个目录,用来存放该项目:

$ mkdir /www/wwwroot/go-project & cd /www/wwwroot/go-project

上传编辑的二进制文件到对应项目目录下,并将静态资源文件、配置文件等项目依赖的文件同时上传

.
├─ bin
| ├─ go-api
├─ config
| └─ env.yml

启动服务

直接启动:
# 在项目根目录下
$ ./bin/go-api config/env.yml

直接启动可以键盘 control + c 直接退出即可

后台启动:

这里使用nohup进行启动,也可以使用其他进程管理工具进行启动(如:supervisor)

$ sudo nohup ./bin/go-api config/env.yml > nohup_go-api.log 2>&1 &

# 执行后控制台会输出进程号
[1] 19935
  • ./bin/go-api config/env.yml:是我们应用程序的启动命令
  • nohup ... &表示在后台不挂断的执行上述应用程序的启动命令
  • > nohup_api-admin.log表示将命令的标准输出重定向到 nohup_api-adminlog 文件
  • 2>&1表示将标准错误输出也重定向到标准输出中,结合上一条就是把执行命令的输出都定向到 nohup_api-admin.log 文件

后台启动找到对应进程,直接 kill 即可

$ ps -ef | grep go-api

[root@VM-0-11-centos go-project]# ps -ef | grep go-api
root     19935 32326  0 22:47 pts/0    00:00:00 sudo nohup ./bin/go-api config/env.yml
root     19936 19935  0 22:47 pts/0    00:00:00 ./bin/go-api config/env.yml
root     28488 32326  0 23:12 pts/0    00:00:00 grep --color=auto go-api

$ kill -9 19936

其他指令:

# 查看所有后台进程
$ jobs -l

端口开放

腾讯云或者阿里云等服务器都需要开放对于的端口,才能进行访问。

以腾讯云为例,在控制台设置对于服务器的安全组规则,在安全组中添加一条对应端口开放的规则即可,实际操作可以参考对应服务器服务商提供的文档。

访问

访问:http://服务器公网ip:端口/uri即可使用

如果需要通过域名访问,则需要搭配 nginx 来使用。

结合Nginx部署

在需要静态文件分离、需要配置多个域名及证书、需要自建负载均衡层等稍复杂的场景下,我们一般需要搭配第三方的web服务器(Nginx、Apache)来部署我们的程序。

首先需要安装 nginx,nginx 安装教程这里不再赘述。

这里简单介绍通过 nginx 做反向代理,实现通过域名访问Go应用的示例。

修改 nginx 配置,配置反向代理即可:

...
http {
    ...
    server {
        # 端口
        listen       80;
        # 域名
        server_name  api.yiqiesuifeng.cn;

        access_log   /var/log/api-access.log;
        error_log    /var/log/api-error.log;

        # 静态文件请求
        location ~ .*\.(gif|jpg|jpeg|png|js|css|eot|ttf|woff|svg|otf)$ {
            access_log off;
            expires    1d;
            root       /www/wwwroot/go-project;
        }

        # index.html页面请求
        location / {
            root /www/wwwroot/go-project;
            index index.html;
            try_files $uri $uri/ /index.html;
        }
        
        # API 请求
        location /api {
            # 代理到go服务
            proxy_pass                 http://127.0.0.1:8088;
            proxy_redirect             off;
            proxy_set_header           Host             $host;
            proxy_set_header           X-Real-IP        $remote_addr;
            proxy_set_header           X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
}

修改 ngxin 配置后重新 nginx 即可。


本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

10 条评论

  1. amqfztanff
    amqfztanff

    自心

  2. qxtmahhuvd
    qxtmahhuvd

    乒乓

  3. kbewabczto
    kbewabczto

    DEAW13泰式单口

  4. dokxwtpxdp
    dokxwtpxdp

    这是一篇佳作,无论是从内容、语言还是结构上,都堪称完美。

  5. gwklkurxnv
    gwklkurxnv

    《PLAYou Level Up:反派的生活世界》日韩综艺高清在线免费观看:https://www.jgz518.com/xingkong/9243.html

  6. hvqdwjoohh
    hvqdwjoohh

    《识骨寻踪 第四季》欧美剧高清在线免费观看:https://www.jgz518.com/xingkong/149062.html

  7. pbcqccboba
    pbcqccboba

    你的文章内容非常精彩,让人回味无穷。 http://www.55baobei.com/y2tTDS1Phy.html

  8. myeggzyyyb
    myeggzyyyb

    怎么收藏这篇文章?

  9. xlhudaopyo
    xlhudaopyo

    不错不错,我喜欢看 https://www.jiwenlaw.com/

  10. ndxnwsooed
    ndxnwsooed

    博主真是太厉害了!!!

添加新评论