Ubuntu下Golang项目部署全流程
在Ubuntu系统上部署Golang项目,其实并没有想象中那么复杂。从环境准备到生产环境管理,再到Docker容器化,每一步都有清晰的脉络。下面我们就来一步步梳理,确保项目稳定、高效地运行起来。

1. 准备工作
首先,安装Golang环境。推荐版本1.16及以上,通过以下命令更新软件包索引并安装:
sudo apt update && sudo apt install golang-go装完后验证一下:
go version如果输出类似
go version go1.21.0 linux/amd64,说明安装成功。环境变量配置虽然不是必须的,但强烈建议做一下,方便后续依赖管理和项目构建。编辑
~/.bashrc(或~/.profile)文件,加入以下内容:export GOROOT=/usr/lib/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin然后执行
source ~/.bashrc使其生效。
2. 获取项目代码
- 如果项目托管在Git仓库(比如GitHub),直接用
git clone拉取代码:
如果项目没有托管,也可以通过SCP、SFTP等工具将本地代码上传到服务器。git clone https://github.com/yourusername/your-golang-project.git cd your-golang-project
3. 编译项目
- 进入项目目录:
然后使用cd /path/to/your-golang-projectgo 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 ./your-project-name > app.log 2>&1 &这里
> 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 Group=your-groupname WorkingDirectory=/path/to/your-golang-project ExecStart=/path/to/your-golang-project/your-project-name Restart=always RestartSec=5s [Install] WantedBy=multi-user.target - 启动并设置开机自启:
sudo systemctl start your-project.service sudo systemctl enable your-project.service - 检查服务状态:
如果输出显示sudo systemctl status your-project.serviceactive (running),说明服务正常运行。
6. 配置防火墙(可选但重要)
- 如果项目需要对外提供服务(比如Web服务),记得开放对应的端口。以8080为例:
确认端口是否开放:sudo ufw allow 8080/tcp sudo ufw enable
输出中应该能看到sudo ufw status8080/tcp ALLOW。
7. 可选:使用Docker容器化部署(跨平台/简化环境依赖)
- 先安装Docker(如果还没安装的话):
sudo apt update && sudo apt install docker.io sudo systemctl start docker && sudo systemctl enable docker - 在项目根目录下创建
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 . # 最终使用scratch镜像,进一步减小体积 FROM scratch COPY --from=builder /app/your-project-name /your-project-name ENTRYPOINT ["/your-project-name"] - 构建并运行Docker镜像:
验证容器是否运行:docker build -t your-golang-project . docker run -d -p 8080:8080 --name your-project-container your-golang-project
如果输出中包含docker psyour-project-container,说明容器已启动。
至此,Ubuntu系统上Golang项目的部署流程就全部走完了。根据实际场景选择直接运行、systemd管理还是Docker容器化,每种方式都有其适用场景,关键是要确保项目稳定、高效。希望这份指南能帮你少走些弯路。