温馨提示×

Golang在Linux系统中如何部署

小樊
43
2025-08-09 08:51:50
栏目: 编程语言

Golang在Linux系统的部署方式如下:

一、环境准备

  1. 安装Go

    • 手动安装:下载对应系统的压缩包(如go1.x.x.linux-amd64.tar.gz),解压至/usr/local,配置环境变量(GOROOTGOPATHPATH)并验证go version
    • 包管理器安装(Ubuntu/Debian):sudo apt install golang-go,适合快速部署非最新版本。
  2. 配置开发环境(可选)

    • 安装Git:sudo apt install git,用于代码管理。
    • 启用Go Modules(Go 1.18+默认支持):无需额外配置。

二、应用部署方式

1. 直接运行二进制文件

  • 开发机器编译GOOS=linux GOARCH=amd64 go build -o myapp,生成静态二进制文件。
  • 上传服务器:通过scprsync传输至服务器指定目录。
  • 运行chmod +x myapp && ./myapp,后台运行可使用nohup
    nohup ./myapp > app.log 2>&1 &  
    

2. 使用systemd管理(推荐)

  • 创建服务文件/etc/systemd/system/myapp.service
    [Unit]  
    Description=My Go App  
    After=network.target  
    [Service]  
    User=appuser  
    WorkingDirectory=/path/to/app  
    ExecStart=/path/to/app/myapp  
    Restart=always  
    Environment="ENV_VAR=value"  
    [Install]  
    WantedBy=multi-user.target  
    
  • 启用并启动服务:
    sudo systemctl daemon-reload  
    sudo systemctl enable myapp  
    sudo systemctl start myapp  
    

3. 使用Supervisor管理

  • 安装Supervisor:sudo apt install supervisor
  • 创建配置文件/etc/supervisor/conf.d/myapp.conf
    [program:myapp]  
    command=/path/to/app/myapp  
    directory=/path/to/app  
    user=appuser  
    autostart=true  
    autorestart=true  
    stderr_logfile=/var/log/myapp.err.log  
    stdout_logfile=/var/log/myapp.out.log  
    
  • 启动服务:sudo supervisorctl update && sudo supervisorctl start myapp

4. 容器化部署(Docker)

  • 编写Dockerfile
    FROM golang:alpine AS builder  
    WORKDIR /app  
    COPY . .  
    RUN go build -o myapp .  
    FROM alpine  
    WORKDIR /app  
    COPY --from=builder /app/myapp .  
    CMD ["./myapp"]  
    
  • 构建并运行:
    docker build -t myapp .  
    docker run -d -p 8080:8080 --name myapp myapp  
    

三、关键注意事项

  • 权限管理:确保服务运行用户(如appuser)对应用目录有读写权限。
  • 端口配置:若应用需监听端口,需在服务器防火墙(如ufw)中开放对应端口。
  • 日志管理:通过logrotate或集中式日志系统(如ELK)处理应用日志。

根据实际需求选择部署方式,生产环境推荐使用systemdDocker,兼顾稳定性和可维护性。

0