Ubuntu下Golang项目部署全流程
安装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
这一步可方便后续依赖管理和项目构建。
git clone
命令拉取代码:git clone https://github.com/yourusername/your-golang-project.git
cd your-golang-project
若项目未托管,可通过SCP、SFTP等工具将本地代码上传至服务器。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%。直接运行:
在项目目录下执行生成的可执行文件:
./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
将标准错误合并到标准输出,&
表示后台运行。
/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)
,则表示服务已正常运行。8080
):sudo ufw allow 8080/tcp
sudo ufw enable # 若未启用防火墙,可选择性开启
验证端口是否开放:sudo ufw status
输出中应包含8080/tcp ALLOW
。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 . # 编译(CGO_ENABLED=0确保静态编译)
# 使用scratch镜像作为最终镜像(无操作系统,进一步减小体积)
FROM scratch
COPY --from=builder /app/your-project-name /your-project-name
ENTRYPOINT ["/your-project-name"]
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容器化),确保项目稳定、高效运行。