在Debian上部署Go应用的第一步是安装Go语言环境,可选择包管理器安装(简单快捷)或手动下载安装(版本可控)。
golang-go:sudo apt update && sudo apt install golang-go -y
https://golang.org/dl/),获取最新Linux版本安装包(如go1.22.0.linux-amd64.tar.gz),执行以下命令:wget https://golang.org/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
~/.profile文件,添加Go路径配置:echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
echo 'export GOPATH=$HOME/go' >> ~/.profile # 可选,用于管理第三方依赖
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.profile # 可选,方便使用go安装的工具
source ~/.profile # 使配置立即生效
go version,若输出类似go version go1.22.0 linux/amd64则表示安装成功。进入项目目录(包含main.go文件),执行go build命令生成可执行文件:
cd /path/to/your/project # 替换为项目实际路径
go build -o myapp # 生成名为"myapp"的可执行文件
若项目使用Go Modules(推荐,管理依赖更方便),需先初始化模块并下载依赖:
go mod init example.com/myapp # 初始化模块(替换为你的模块名)
go mod tidy # 自动下载并整理依赖
编译时会自动处理依赖,生成的可执行文件可直接运行。
为了让应用在后台稳定运行,推荐使用systemd服务(系统级进程管理),也可选择nohup(简单但不够健壮)。
/etc/systemd/system/myapp.service),内容如下:[Unit]
Description=My Go Application # 服务描述
After=network.target # 依赖网络服务启动
[Service]
User=yourusername # 替换为运行应用的用户名(如"ubuntu")
Group=yourgroupname # 替换为用户组名(如"ubuntu")
ExecStart=/path/to/your/myapp # 可执行文件路径
Restart=always # 应用崩溃后自动重启
Environment=PORT=8080 # 可选:设置环境变量(如端口)
[Install]
WantedBy=multi-user.target # 开机自启的目标
执行以下命令激活服务:sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl start myapp # 启动服务
sudo systemctl enable myapp # 设置开机自启
检查服务状态:sudo systemctl status myapp # 查看实时状态
journalctl -u myapp -f # 查看日志(实时输出)
nohup运行:nohup ./myapp & # 后台运行,输出重定向到"nohup.out"
但这种方式无法自动重启,不推荐生产环境使用。若应用需要对外提供服务(如HTTP接口),建议用Nginx作为反向代理,提升安全性(隐藏内部端口)和性能(负载均衡)。
sudo apt update && sudo apt install nginx -y
/etc/nginx/sites-available/default),修改location部分:server {
listen 80;
server_name your_domain_or_ip; # 替换为域名或IP
location / {
proxy_pass http://localhost:8080; # 转发到Go应用的端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo systemctl restart nginx
sudo ufw allow 'Nginx Full' # 允许HTTP/HTTPS流量(若使用ufw防火墙)
此时可通过http://your_domain_or_ip访问Go应用。chmod +x myapp),systemd服务中的用户需有访问项目文件的权限。netstat -tulnp | grep 8080查找占用进程并终止,或修改应用端口。go mod init + go mod tidy),避免手动下载依赖导致的版本不一致问题。