在单台服务器上搭建包含网站、小程序后端和邮件服务的完整环境,对于新手来说是一个非常实用的全栈项目。以下是详细的步骤指南,适合使用 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 | 你的服务器IP | |
| MX | @ | mail.example.com (优先级 10) |
| TXT | @ | v=spf1 a mx ~all (SPF 防伪造) |
可选添加 DKIM、DMARC 提高邮件送达率(进阶)
✅ 最终测试
- 网站:浏览器访问
https://example.com - 小程序 API:请求
https://example.com/api/test应返回 JSON - 邮件发送:
echo "测试邮件" | mail -s "测试" user1@example.com - 邮件接收:通过 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)
虽然邮件部分较难维护,但作为学习非常有价值。后续可逐步拆分服务或使用云服务替代邮件模块。
需要我为你生成一键部署脚本吗?
云小栈