温馨提示×

Ubuntu下Golang项目如何部署

小樊
57
2025-10-04 01:50:33
栏目: 编程语言

Ubuntu下Golang项目部署全流程

1. 准备工作

  • 安装Golang环境
    更新软件包索引并安装Golang(推荐版本1.16及以上):

    sudo apt update && sudo apt install golang-go
    

    验证安装是否成功:

    go version
    

    若输出类似go version go1.21.0 linux/amd64,则表示安装完成。

  • 配置环境变量(可选但推荐)
    编辑~/.bashrc(或~/.profile)文件,添加以下内容以设置Go环境变量:

    export GOROOT=/usr/lib/go  # Golang安装路径(默认)
    export GOPATH=$HOME/go     # Go项目工作目录
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin  # 将Go命令加入PATH
    

    使配置生效:

    source ~/.bashrc
    

    这一步可方便后续依赖管理和项目构建。

2. 获取项目代码

  • 若项目托管在Git仓库(如GitHub),使用git clone命令拉取代码:
    git clone https://github.com/yourusername/your-golang-project.git
    cd your-golang-project
    
    若项目未托管,可通过SCP、SFTP等工具将本地代码上传至服务器。

3. 编译项目

  • 进入项目目录
    cd /path/to/your-golang-project
    
  • 编译生成可执行文件
    使用go build命令编译项目,生成的可执行文件默认与项目目录同名:
    go build -o your-project-name
    
    优化编译
    为减小可执行文件体积,可添加-ldflags参数移除调试信息:
    go build -ldflags="-s -w" -o your-project-name
    
    其中,-s省略符号表,-w省略DWARF调试信息,可使文件体积减少约30%~50%。

4. 运行项目

  • 直接运行
    在项目目录下执行生成的可执行文件:

    ./your-project-name
    

    若项目为Web服务,需确保监听端口(如8080)未被占用,可通过curl http://localhost:8080测试连通性。

  • 后台运行(nohup)
    若需让项目在后台持续运行(即使终端关闭),可使用nohup命令:

    nohup ./your-project-name > app.log 2>&1 &
    

    其中,> app.log将输出重定向到app.log文件,2>&1将标准错误合并到标准输出,&表示后台运行。

5. 使用systemd管理服务(推荐用于生产环境)

  • 创建systemd服务文件
    /etc/systemd/system/目录下创建服务文件(如your-project.service):
    sudo nano /etc/systemd/system/your-project.service
    
    添加以下内容(根据实际情况修改路径和用户):
    [Unit]
    Description=Your Golang Project
    After=network.target  # 确保网络就绪后再启动
    
    [Service]
    Type=simple
    User=your-username    # 运行服务的用户(建议用非root)
    Group=your-groupname  # 运行服务的组
    WorkingDirectory=/path/to/your-golang-project  # 项目工作目录
    ExecStart=/path/to/your-golang-project/your-project-name  # 可执行文件路径
    Restart=always        # 进程崩溃时自动重启
    RestartSec=5s         # 重启间隔5秒
    
    [Install]
    WantedBy=multi-user.target  # 系统多用户模式启动时加载
    
  • 启动并启用服务
    sudo systemctl start your-project.service  # 启动服务
    sudo systemctl enable your-project.service # 设置开机自启
    
  • 检查服务状态
    sudo systemctl status your-project.service
    
    若输出显示active (running),则表示服务已正常运行。

6. 配置防火墙(可选但重要)

  • 若项目需要对外提供服务(如Web服务),需开放对应的端口(如8080):
    sudo ufw allow 8080/tcp
    sudo ufw enable  # 若未启用防火墙,可选择性开启
    
    验证端口是否开放:
    sudo ufw status
    
    输出中应包含8080/tcp ALLOW

7. 可选:使用Docker容器化部署(跨平台/简化环境依赖)

  • 安装Docker
    若未安装Docker,可通过以下命令安装:
    sudo apt update && sudo apt install docker.io
    sudo systemctl start docker && sudo systemctl enable docker
    
  • 编写Dockerfile
    在项目根目录下创建Dockerfile文件:
    # 使用轻量级Alpine镜像作为基础(减小镜像体积)
    FROM golang:1.21-alpine AS builder
    WORKDIR /app
    COPY . .
    RUN go mod download  # 下载依赖
    RUN CGO_ENABLED=0 GOOS=linux go build -o your-project-name .  # 编译(CGO_ENABLED=0确保静态编译)
    
    # 使用scratch镜像作为最终镜像(无操作系统,进一步减小体积)
    FROM scratch
    COPY --from=builder /app/your-project-name /your-project-name
    ENTRYPOINT ["/your-project-name"]
    
  • 构建并运行Docker镜像
    docker build -t your-golang-project .  # 构建镜像(标签为your-golang-project)
    docker run -d -p 8080:8080 --name your-project-container your-golang-project  # 运行容器(映射8080端口)
    
    验证容器是否运行:
    docker ps
    
    若输出中包含your-project-container,则表示容器已启动。

通过以上步骤,即可在Ubuntu系统上完成Golang项目的部署。根据实际需求选择合适的部署方式(如直接运行、systemd管理、Docker容器化),确保项目稳定、高效运行。

0