在Linux环境中部署Golang应用通常涉及以下几个步骤:
下载并解压Go安装包:
从Go官方下载页面下载适合Linux系统的Go安装包,例如 go1.21.0.linux-amd64.tar.gz
。
使用以下命令下载并解压:
wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
设置环境变量:
编辑你的shell配置文件(如 .bashrc
或 .zshrc
),添加以下内容:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export GOROOT=/usr/local/go
保存文件并运行以下命令使更改生效:
source ~/.bashrc
验证安装: 运行以下命令验证Go是否安装成功:
go version
如果输出了Go的版本信息,说明安装成功。
go build
这将生成一个名为 main
的二进制文件,你可以在文件所在的目录中运行它:./main
克隆你的项目到本地:
git clone https://github.com/yourusername/yourproject.git
cd yourproject
构建项目,假设 main.go
是入口文件:
go build -o yourservice main.go
可以选择前台运行服务:
./yourservice
或者使用 nohup
命令让服务在后台运行,并将日志输出到 service.log
文件:
nohup ./yourservice > service.log 2>&1 &
创建服务配置文件 /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
安装 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
创建 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 build -t yourservice .
docker run -d -p 8080:8080 --name yourservice-container yourservice