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

本文以项目 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 即可。


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

4 条评论

  1. pbcqccboba
    pbcqccboba

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

  2. myeggzyyyb
    myeggzyyyb

    怎么收藏这篇文章?

  3. xlhudaopyo
    xlhudaopyo

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

  4. ndxnwsooed
    ndxnwsooed

    博主真是太厉害了!!!

添加新评论