当前位置: 首页 > ds >正文

Linux上安装Golang及服务服务指南

一、准备工作

1.1 安装 Golang 环境

首先,我们需要下载最新版的 Go。请根据实际情况替换为最新版本号。

wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz

接着,将下载的文件解压到 /usr/local 目录:

sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz

然后,设置环境变量,将以下两行代码添加到 ~/.bashrc 文件中:

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc

使环境变量生效:

source ~/.bashrc

最后,验证 Go 是否安装成功:

go version

1.2 安装必要工具

更新系统软件包列表,并安装 gitmakegcc

sudo apt update
sudo apt install -y git make gcc

二、部署 Golang 服务

2.1 直接部署方式

克隆你的项目到本地:

git clone https://github.com/yourusername/yourproject.git
cd yourproject

构建项目,假设 main.go 是入口文件:

go build -o yourservice main.go

可以选择前台运行服务:

./yourservice

或者使用 nohup 命令让服务在后台运行,并将日志输出到 service.log 文件:

ohup ./yourservice > service.log 2>&1 &

2.2 使用 systemd 管理服务

创建服务配置文件 /etc/systemd/system/yourservice.service,内容如下:

[Unit]
Description=Your Go Application
After=network.target[Service]
User=youruser
Group=yourgroup
WorkingDirectory=/path/to/yourproject
ExecStart=/path/to/yourproject/yourservice
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=yourservice
Environment=GIN_MODE=release[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable yourservice
sudo systemctl start yourservice

查看服务状态:

sudo systemctl status yourservice

三、高级部署选项

3.1 使用 Supervisor 管理

安装 supervisor

sudo apt install supervisor

创建配置文件 /etc/supervisor/conf.d/yourservice.conf,内容如下:

[program:yourservice]
command=/path/to/yourproject/yourservice
directory=/path/to/yourproject
autostart=true
autorestart=true
stderr_logfile=/var/log/yourservice.err.log
stdout_logfile=/var/log/yourservice.out.log
user=youruser
environment=GIN_MODE=release

启动服务:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start yourservice

3.2 使用 Docker 部署

创建 Dockerfile,内容如下:

FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux go build -o yourservice .FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/yourservice .
EXPOSE 8080
CMD ["./yourservice"]

构建并运行 Docker 容器:

docker build -t yourservice .
docker run -d -p 8080:8080 --name yourservice-container yourservice

四、性能优化建议

4.1 构建优化

在构建项目时,禁用调试信息以减小二进制文件的大小:

go build -ldflags="-s -w" -o yourservice main.go

可以使用 upx 进一步压缩二进制文件:

upx yourservice

4.2 环境变量设置

在生产环境中,设置 GIN_MODE=release(如果使用 Gin 框架),并调整垃圾回收频率:

export GIN_MODE=release
export GOGC=50

4.3 反向代理

使用 Nginx 或 Caddy 作为反向代理,配置负载均衡和 HTTPS。

五、监控与维护

5.1 日志管理

使用 logrotate 管理日志,创建 /etc/logrotate.d/yourservice 文件,内容如下:

/var/log/yourservice.log {dailyrotate 7compressmissingoknotifemptycopytruncate
}

5.2 性能监控

安装 Prometheus node exporter:

wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64
./node_exporter

六、常见问题解决

6.1 端口冲突

查看占用端口的进程:

netstat -tulnp | grep :8080

杀死占用端口的进程:

kill -9 <PID>

6.2 依赖问题

使用 go mod tidy 命令整理项目依赖:

go mod tidy

6.3 权限问题

修改项目目录的所有者和所属组:

sudo chown -R youruser:yourgroup /path/to/yourproject

6.4 内存泄漏检查

使用 go tool pprof 检查内存泄漏:

go tool pprof http://localhost:6060/debug/pprof/heap

按照这些步骤,你应该能够在 Linux 系统上成功部署并维护你的 Golang 服务。根据你的具体需求选择最适合的部署方式。

http://www.xdnf.cn/news/14348.html

相关文章:

  • 【学习笔记】Langchain基础(二)
  • 【unitrix】 1.7 规范化常量类型结构(standardization.rs)
  • List的简单模拟实现
  • 软件测试质量的“防”与“治”
  • LeetCode - 69. x 的平方根
  • 万物皆数:构建数字信号处理的数学基石
  • 前端构建工具(Webpack\Vite\esbuild\Rspack)拆包能力深度解析
  • Unity Demo-3DRaceCar详解
  • 如何只导出python项目的依赖包和版本信息
  • 用bilibili一个讲座视频,生成一本科普书籍
  • 简历模板3——数据挖掘工程师5年经验
  • 走线宽度对高频插入损耗的影响
  • YOLOv8模型剪枝实战:DepGraph(依赖图)方法详解
  • 在 CentOS中安装Docker并安装青龙脚本——笔记
  • 【环境配置】解决linux每次打开终端都需要source .bashrc文件的问题
  • [技巧] 接口优化技巧合集
  • 为什么Sigmoind适用于输出层而不是输入层隐藏层
  • 一起来入门深度学习知识体系
  • RabbitMQ 知识详解(Java版)
  • 【无标题[特殊字符]2025华为行程解锁
  • LeetCode - 852. 山脉数组的峰顶索引
  • Salesforce 推出Marketing Cloud Next营销云
  • 【Tip】工具网站
  • comfyui插件和comfyui mac安装
  • 解决文明6 内存相关内容报错EXCEPTION_ACCESS_VIOLATION
  • uni-app项目实战笔记13--全屏页面的absolute定位布局和fit-content自适应内容宽度
  • volka烹饪常用英语
  • 基于stm32和多种传感器采集心脏数据监测系统
  • 2025年渗透测试面试题总结-浙江东岸检测[实习]安全工程师(题目+回答)
  • Qt下载比较慢