加油
努力

新手如何在单台服务器上搭建包含网站、小程序和邮件的完整环境?

在单台服务器上搭建包含网站、小程序后端和邮件服务的完整环境,对于新手来说是一个非常实用的全栈项目。以下是详细的步骤指南,适合使用 Ubuntu 20.04/22.04 LTS 系统,以最小成本实现功能齐全的环境。


🎯 目标功能

  • ✅ 部署一个静态或动态网站(如 WordPress / Node.js)
  • ✅ 提供小程序后端 API 接口(Node.js + Express)
  • ✅ 收发邮件(Postfix + Dovecot + Roundcube Webmail)

🖥️ 前提准备

1. 服务器要求

  • 推荐配置:2核CPU、4GB内存、50GB硬盘(SSD)、公网IP
  • 操作系统:Ubuntu 20.04 或 22.04 LTS
  • 域名:至少一个域名(例如 example.com),用于绑定网站和邮箱

🛠️ 步骤一:基础环境配置

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装常用工具
sudo apt install -y curl wget git vim net-tools ufw

设置防火墙(UFW)

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'     # HTTP (80) 和 HTTPS (443)
sudo ufw allow 25               # SMTP(邮件发送)
sudo ufw allow 587              # SMTP 提交(加密)
sudo ufw allow 993              # IMAP over SSL(收邮件)
sudo ufw allow 995              # POP3 over SSL
sudo ufw enable

🌐 步骤二:部署 Nginx + 网站

安装 Nginx

sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

创建网站目录(示例:example.com)

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo "<h1>欢迎访问我的网站</h1>" | sudo tee /var/www/example.com/html/index.html

配置 Nginx 虚拟主机

sudo nano /etc/nginx/sites-available/example.com

内容如下:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # 小程序APIX_X(假设运行在3000端口)
    location /api/ {
        proxy_pass http://localhost:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

启用站点:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

🔐 步骤三:申请 SSL 证书(Let’s Encrypt)

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

按提示操作,Certbot 会自动配置 HTTPS 并设置自动续期。


⚙️ 步骤四:搭建小程序后端(Node.js + Express)

安装 Node.js

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

创建 API 项目

mkdir /var/www/example.com/api && cd /var/www/example.com/api
npm init -y
npm install express cors dotenv

创建 server.js

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors());
app.use(express.json());

app.get('/test', (req, res) => {
  res.json({ message: "小程序后端正常运行!" });
});

app.post('/user', (req, res) => {
  res.json({ received: req.body });
});

const PORT = 3000;
app.listen(PORT, '127.0.0.1', () => {
  console.log(`API running on http://127.0.0.1:${PORT}`);
});

使用 PM2 启动并守护进程

npm install -g pm2
pm2 start server.js --name "my-api"
pm2 startup
pm2 save

✅ 现在可以通过 https://example.com/api/test 访问你的小程序接口!


📧 步骤五:搭建邮件服务器(简易版)

⚠️ 注意:自建邮件服务器较复杂,容易被标记为垃圾邮件。建议仅用于学习或内部通信。

我们将使用:

  • MTA:Postfix(发信)
  • IMAP/POP3:Dovecot(收信)
  • Webmail:Roundcube(可选)

安装 Postfix 和 Dovecot

sudo apt install -y postfix dovecot-core dovecot-imapd dovecot-pop3d

安装时选择:

  • 配置类型:Internet Site
  • 系统邮件名:example.com

配置 Postfix

编辑 /etc/postfix/main.cf,确保包含:

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_use_tls = yes

重启:

sudo systemctl restart postfix

配置 Dovecot

编辑 /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

编辑 /etc/dovecot/conf.d/10-ssl.conf

ssl = yes
ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem

重启:

sudo systemctl restart dovecot

创建邮件用户

sudo adduser user1
# 设置密码

🌍 可选:安装 Roundcube Webmail(网页收发邮件)

sudo apt install -y roundcube roundcube-mysql roundcube-sqlite3

链接到 Nginx:

sudo ln -s /usr/share/roundcube /var/www/example.com/html/webmail

访问:https://example.com/webmail


🧩 DNS 设置(非常重要)

在你的域名管理平台(如阿里云、Cloudflare)添加以下记录:

类型 名称
A @ 你的服务器IP
A www 你的服务器IP
A mail 你的服务器IP
MX @ mail.example.com (优先级 10)
TXT @ v=spf1 a mx ~all (SPF 防伪造)

可选添加 DKIM、DMARC 提高邮件送达率(进阶)


✅ 最终测试

  1. 网站:浏览器访问 https://example.com
  2. 小程序 API:请求 https://example.com/api/test 应返回 JSON
  3. 邮件发送
    echo "测试邮件" | mail -s "测试" user1@example.com
  4. 邮件接收:通过 Roundcube 或手机邮件客户端(IMAP: mail.example.com, 端口 993, SSL)

🧠 新手建议与优化

问题 建议
邮件被拒收 使用第三方服务如 SendGrid / Alibaba DM 更稳定
数据库需求 安装 MySQL/MariaDB:sudo apt install mariadb-server
备份 使用 rsync 或 Borg 定期备份 /var/www, /home, /etc
安全 定期更新系统,禁用 root 登录,使用 SSH 密钥登录

📚 学习资源推荐

  • Nginx 官方文档
  • Let’s Encrypt 免费证书
  • Node.js 教程
  • The Linux Command Line(中文版)

✅ 总结:你已成功在一台服务器上搭建了:

  • 网站(Nginx + HTTPS)
  • 小程序后端(Node.js + PM2)
  • 邮件服务(Postfix + Dovecot + Webmail)

虽然邮件部分较难维护,但作为学习非常有价值。后续可逐步拆分服务或使用云服务替代邮件模块。

需要我为你生成一键部署脚本吗?

云服务器