在Linux上部署Go应用前,需先安装Go环境。步骤如下:
gcc、make等编译工具,执行sudo apt-get update && sudo apt-get install build-essential(Ubuntu/Debian)或对应发行版的包管理命令。go1.20.4.linux-amd64.tar.gz),解压至/usr/local目录:sudo tar -C /usr/local -xzf go1.20.4.linux-amd64.tar.gz。~/.bashrc(或/etc/profile)文件,添加以下内容:export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export GOROOT=/usr/local/go
执行source ~/.bashrc使配置生效。go version,若输出Go版本信息则安装成功。myapp),执行go build -o myapp,生成可执行文件myapp(Windows下为myapp.exe)。GOOS=linux GOARCH=amd64 go build -o myapp
其中GOOS为目标系统(如linux、windows),GOARCH为目标架构(如amd64、arm64)。将编译好的myapp文件传输到Linux服务器,常用方法:
scp myapp user@your_server_ip:/path/to/deploy(user为服务器用户名,/path/to/deploy为目标路径)。rsync -avz myapp user@your_server_ip:/path/to/deploy(支持增量同步)。chmod +x /path/to/deploy/myapp赋予执行权限。/path/to/deploy/myapp,应用会在当前终端运行(若关闭终端,应用会终止)。nohup命令让应用在后台持续运行:nohup /path/to/deploy/myapp > app.log 2>&1 &(日志输出到app.log文件)。sudo nano /etc/systemd/system/myapp.service,内容如下:[Unit]
Description=My Go Application
After=network.target
[Service]
Type=simple
User=your_user # 替换为实际用户(如ubuntu)
Group=your_group # 替换为实际组(如ubuntu)
WorkingDirectory=/path/to/deploy # 应用所在目录
ExecStart=/path/to/deploy/myapp # 启动命令
Restart=always # 崩溃后自动重启
RestartSec=5 # 重启间隔5秒
Environment=ENV_VAR_NAME=value # 设置环境变量(可选)
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp # 开机自启
sudo systemctl status myapp(显示active (running)表示运行正常)。若需通过HTTP/HTTPS访问应用(如http://your_domain.com),可使用Nginx作为反向代理,步骤如下:
sudo apt install nginx(Ubuntu/Debian)。/etc/nginx/sites-available/myapp(或/etc/nginx/conf.d/myapp.conf),添加以下内容:server {
listen 80;
server_name your_domain_or_ip; # 替换为域名或IP
location / {
proxy_pass http://localhost:8080; # 转发到Go应用的端口(需与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 ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
此时,访问http://your_domain_or_ip会转发到Go应用的8080端口(需确保Go应用监听0.0.0.0:8080,而非127.0.0.1:8080)。若服务器开启了防火墙(如ufw),需允许应用端口(如8080)的流量:
sudo ufw allow 8080/tcp # 允许TCP协议的8080端口
sudo ufw enable # 启用防火墙(若未启用)
sudo ufw status # 查看防火墙状态
若使用Nginx反向代理,还需允许80(HTTP)或443(HTTPS)端口:sudo ufw allow 80/tcp。
nohup或直接运行,日志会输出到终端或app.log文件;若使用systemd,日志可通过journalctl查看:sudo journalctl -u myapp -f(实时查看)。systemctl status myapp查看进程状态,或用top、htop命令监控系统资源占用。以上步骤覆盖了Linux环境下Go应用部署的全流程,从环境安装到服务化管理,确保应用稳定运行。