在VPS上部署Go应用:分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

简介:为何在VPS上部署Go应用如此简单高效

Go(Golang)以其卓越的性能和简洁性著称。该语言的主要优势之一是能编译成单个静态二进制文件,无需在服务器上安装额外的运行时环境。这使得在VPS上部署Go应用变得异常快速且可靠。本文将详解完整的部署流程:从服务器准备到反向代理设置和HTTPS配置。您将获得一份可直接用于任何Go项目的现成清单。



1. VPS准备与必要软件安装

在上传代码之前,需要先准备服务器。假设您已拥有一台运行Ubuntu 22.04或24.04的VPS。通过SSH连接并执行系统更新。

sudo apt update && sudo apt upgrade -y

在服务器上安装Go

尽管Go会编译成二进制文件,但服务器上仍可能需要编译器来进行构建。让我们安装最新版本:

wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gzexport PATH=$PATH:/usr/local/go/binecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

验证安装:go version。



安装Git和Nginx

Git用于克隆代码仓库,Nginx用于反向代理和静态文件服务。

sudo apt install git nginx -y


2. 构建并运行Go应用

让我们以一个简单的HTTP服务器为例来演示流程。创建文件 main.go:

package main

import (\t"fmt"\t"net/http")

func handler(w http.ResponseWriter, r *http.Request) {\tfmt.Fprintf(w, "Hello from Go on VPS!")}

func main() {\thttp.HandleFunc("/", handler)\tfmt.Println("Server started on :8080")\thttp.ListenAndServe(":8080", nil)}

为Linux系统构建二进制文件(即使您当前在Windows/Mac上工作):

GOOS=linux GOARCH=amd64 go build -o myapp main.go

现在将二进制文件上传至服务器。使用SCP或Rsync:

scp myapp user@your-server-ip:~/

在服务器上,赋予文件执行权限并运行:

chmod +x ~/myapp./myapp &

检查是否运行正常:curl http://localhost:8080。如果看到"Hello from Go on VPS!" — 说明一切正常。



3. 配置systemd实现自动启动

手动启动并非最佳实践。让我们使用systemd,使应用能在系统启动时自动运行,并在崩溃后自动重启。

创建服务文件:

sudo nano /etc/systemd/system/myapp.service

粘贴以下配置:

[Unit]Description=Go Application ServiceAfter=network.target

[Service]Type=simpleUser=www-dataWorkingDirectory=/home/userExecStart=/home/user/myappRestart=alwaysRestartSec=5

[Install]WantedBy=multi-user.target

将 /home/user 替换为您的实际路径。激活并启动服务:

sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myapp

现在您的Go应用将作为守护进程运行。



4. 配置Nginx作为反向代理并启用HTTPS

为了让应用能通过域名和443端口访问,我们来配置Nginx。

反向代理配置

删除默认配置并创建您自己的配置:

sudo rm /etc/nginx/sites-enabled/defaultsudo nano /etc/nginx/sites-available/myapp

添加以下内容:

server {    listen 80;    server_name yourdomain.com www.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_h

博客

书籍推荐