温馨提示×

Debian Golang如何部署项目

小樊
44
2025-12-19 01:12:40
栏目: 编程语言

Debian 上部署 Golang 项目的实用流程


一 准备与安装

  • 更新系统并安装基础工具:
    • sudo apt update && sudo apt install -y git curl wget
  • 安装 Go(两种常用方式,二选一)
    • 使用发行版仓库安装:sudo apt install -y golang-go(简单,版本可能偏旧)
    • 使用官方二进制包安装(推荐,版本可控):
      • 查看架构:dpkg --print-architecture(常见为 amd64
      • 下载并解压:
        • wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
        • sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
      • 配置环境变量(写入 ~/.bashrc 或 /etc/profile):
        • export PATH=$PATH:/usr/local/go/bin
        • source ~/.bashrc
      • 验证:go version(应输出版本号,如 go1.22 linux/amd64)

二 两种部署路径

  • 方式 A 服务器编译运行
    • 拉取代码:git clone https://github.com/yourname/yourproject.git && cd yourproject
    • 安装依赖:go mod tidy
    • 编译:go build -o myapp main.go
    • 运行:./myapp(调试阶段可直接前台运行)
  • 方式 B 本地交叉编译后上传(推荐,镜像更干净、CI/CD 友好)
    • 本地交叉编译(目标为 Linux amd64):
      • GOOS=linux GOARCH=amd64 go build -o myapp main.go
    • 上传到服务器:scp myapp user@your_server:/var/www/myapp/
    • 服务器赋权:chmod +x /var/www/myapp/myapp
    • 试运行:/var/www/myapp/myapp
  • 说明
    • Go 是静态编译,通常无需在服务器安装额外运行时依赖;二进制可直接运行。

三 以 systemd 托管服务

  • 建议创建专用用户与目录(更安全):
    • sudo useradd -m -s /bin/bash deploy
    • sudo mkdir -p /var/www/myapp && sudo chown deploy:deploy /var/www/myapp
  • 创建服务文件:sudo nano /etc/systemd/system/myapp.service
    • 示例(按需修改路径、用户、端口):
      • [Unit]
        • Description=My Go Application
        • After=network.target
      • [Service]
        • Type=simple
        • User=deploy
        • Group=deploy
        • WorkingDirectory=/var/www/myapp
        • ExecStart=/var/www/myapp/myapp
        • Environment=PORT=8080
        • Restart=on-failure
        • StandardOutput=journal
        • StandardError=journal
      • [Install]
        • WantedBy=multi-user.target
  • 常用命令:
    • 重载并启停:
      • sudo systemctl daemon-reload
      • sudo systemctl start myapp
      • sudo systemctl enable myapp
      • sudo systemctl status myapp
    • 查看日志:
      • sudo journalctl -u myapp -f
  • 提示
    • 若程序监听 80/443,可直接以 root 或具备相应能力的用户运行;否则建议监听高位端口(如 8080)并用反向代理对外暴露。

四 对外访问与反向代理

  • 防火墙放行(示例为 8080 端口)
    • sudo ufw allow 8080/tcp
  • 安装并配置 Nginx 反向代理
    • 安装:sudo apt install -y nginx
    • 配置(/etc/nginx/sites-available/myapp 或 /etc/nginx/conf.d/myapp.conf):
      • server {
        • listen 80;
        • server_name yourdomain.com;
        • location / {
          • proxy_pass http://127.0.0.1:8080;
          • 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 reload nginx
  • 可选:申请并配置 HTTPS/TLS(可使用 certbot 自动签发)。

五 依赖管理与常见问题

  • 依赖管理(Go Modules)
    • 初始化:go mod init
    • 拉取与整理:go get ./… 或 go mod tidy
    • 常用:go list -m all(查看依赖)、go get -u(升级)、go mod vendor(可选,将依赖打入 vendor)
  • 常见问题速查
    • 端口未放行:应用启动成功但外部访问失败,检查云安全组与 ufw/iptables 规则
    • 权限不足:确保运行用户对二进制与日志目录具备读写权限
    • 监听地址错误:服务仅绑定 127.0.0.1 时外部不可达,改为 0.0.0.0
    • 日志查看:优先使用 journalctl -u myapp;若用文件日志,确保目录可写并配置 logrotate
    • 构建失败:确认 GOOS/GOARCH 与服务器架构一致(常见为 linux/amd64)。

0