在腾讯云轻量应用服务器(Lighthouse)上使用 Docker 部署 Nginx 是一种轻量、高效且可复现的方式。以下是完整、安全、生产就绪的部署步骤(基于 Ubuntu 22.04/24.04 或 CentOS 7+/AlmaLinux 9,以 Ubuntu 22.04 为例):
✅ 前提条件
- 已购买并登录腾讯云轻量服务器(推荐选择 Ubuntu 22.04 LTS 系统镜像)
- 安全组已放行端口:
80(HTTP)、443(HTTPS,如需)、22(SSH) - 已通过 SSH 登录服务器(如
ssh root@你的公网IP)
🚀 步骤一:更新系统 & 安装 Docker
# 1. 更新系统包
sudo apt update && sudo apt upgrade -y
# 2. 安装必要依赖
sudo apt install -y curl gnupg2 software-properties-common ca-certificates
# 3. 添加 Docker 官方 GPG 密钥和仓库(推荐官方源)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 5. 启动并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 6. 验证安装(非 root 用户可选:将当前用户加入 docker 组)
sudo usermod -aG docker $USER
# ⚠️ 执行后需重新登录 SSH 或运行:newgrp docker
docker --version # 应输出类似 Docker version 24.x.x
docker run hello-world # 测试容器运行(会下载并运行示例)
💡 提示:腾讯云轻量服务器默认为
root用户,无需额外创建用户;若用普通用户,请确保有sudo权限。
🌐 步骤二:部署 Nginx 容器(基础版)
✅ 方式 1:直接运行官方 Nginx(快速验证)
# 拉取最新稳定版 Nginx 镜像(自动从 Docker Hub 拉取)
docker pull nginx:alpine # 推荐轻量版(~7MB),或 nginx:latest(Debian 基础,~140MB)
# 运行容器:映射 80 端口,后台常驻,自动重启
docker run -d
--name my-nginx
-p 80:80
-v /data/nginx/html:/usr/share/nginx/html:ro # 自定义静态文件目录(可选)
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro # 自定义配置(可选)
-v /data/nginx/logs:/var/log/nginx # 日志持久化(可选)
--restart=unless-stopped
nginx:alpine
✅ 验证:打开浏览器访问 http://你的服务器公网IP,应看到 "Welcome to nginx!" 页面。
🔍 查看日志:
docker logs my-nginx
🔁 重启容器:docker restart my-nginx
🧹 停止并删除:docker stop my-nginx && docker rm my-nginx
🛠️ 步骤三:【推荐】生产级部署(含自定义配置 + 静态网站)
1️⃣ 创建项目目录结构
sudo mkdir -p /data/nginx/{html,conf,logs,ssl}
sudo chown -R $USER:$USER /data/nginx
2️⃣ 编写自定义 nginx.conf(支持 gzip、静态缓存、防盗链等)
cat > /data/nginx/conf/nginx.conf << 'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Gzip 压缩(提升前端加载速度)
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 静态资源缓存
expires 1h;
# 防盗链(可选,按需开启)
# valid_referers none blocked server_names *.yourdomain.com;
# if ($invalid_referer) { return 403; }
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 隐藏 Nginx 版本号(安全加固)
server_tokens off;
# 错误页
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
EOF
3️⃣ 放置你的网站文件(示例)
echo "<h1>Hello from Tencent Cloud + Docker Nginx! 🐳</h1><p>Deployed at $(date)</p>" > /data/nginx/html/index.html
4️⃣ 启动带自定义配置的容器
docker run -d
--name my-nginx-prod
-p 80:80
-v /data/nginx/html:/usr/share/nginx/html:ro
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
-v /data/nginx/logs:/var/log/nginx
--restart=unless-stopped
--log-driver json-file
--log-opt max-size=10m --log-opt max-file=3
nginx:alpine
✅ 访问 http://你的公网IP 即可看到自定义页面。
🔐 可选增强:添加 HTTPS(Let’s Encrypt + Certbot)
若你已有域名(如
example.com),建议启用 HTTPS:✅ 使用
nginx-proxy+acme-companion(推荐自动化方案)
✅ 或手动用 Certbot 申请证书后挂载到容器中(需反向X_X或 443 端口映射)
👉 简化方案(单容器 + certbot 手动):
# 1. 先停止 Nginx 容器(临时让出 80/443)
docker stop my-nginx-prod
# 2. 安装 certbot 并申请证书(需域名已解析到该 IP)
sudo apt install -y certbot
sudo certbot certonly --standalone -d your-domain.com --email your@email.com
# 3. 将证书挂载进 Nginx 容器(修改 nginx.conf 启用 SSL)
# (此处略,如需我可提供完整 HTTPS 配置模板)
✨ 提示:腾讯云轻量服务器不提供免费负载均衡器,但可配合 DNS 解析 + Let’s Encrypt 实现 HTTPS。
🧩 补充技巧(运维友好)
| 场景 | 命令 |
|---|---|
| 查看容器实时日志 | docker logs -f my-nginx-prod |
| 进入容器调试(临时) | docker exec -it my-nginx-prod sh |
| 查看容器资源占用 | docker stats my-nginx-prod |
| 备份配置/网站 | tar -czf nginx-backup-$(date +%F).tar.gz /data/nginx |
| 升级 Nginx 镜像 | docker pull nginx:alpine && docker restart my-nginx-prod |
❌ 常见问题排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
访问 IP 显示 Connection refused |
Docker 未运行 / 端口未映射 / 安全组未放行 | systemctl status docker;检查 docker ps;登录腾讯云控制台 → 轻量服务器 → 安全组 |
显示 Welcome to nginx! 但自己的 HTML 不生效 |
html 目录挂载路径错误 / 权限拒绝 / Nginx 配置未 reload |
检查 docker inspect my-nginx-prod 中 Mounts;确认 /data/nginx/html 存在且有 index.html;配置中 root 路径是否匹配 |
| 容器启动后立即退出 | 配置语法错误 / 端口被占用 / 内存不足 | docker logs my-nginx-prod;docker run -it --rm -v ... nginx:alpine nginx -t 测试配置 |
✅ 总结:最佳实践清单
- ✅ 使用
nginx:alpine镜像(更小、更安全) - ✅ 持久化
html、conf、logs到宿主机(避免容器删除丢失数据) - ✅ 设置
--restart=unless-stopped实现故障自愈 - ✅ 关闭
server_tokens,禁用版本暴露 - ✅ 启用 Gzip 和静态缓存提升性能
- ✅ 定期
docker system prune -f清理无用镜像/容器(可加 cron)
需要我为你生成:
- ✅ 完整的
docker-compose.yml(一键部署 + HTTPS 自动续签) - ✅ 支持多站点(vhost)的 Nginx 配置模板
- ✅ 自动化部署脚本(
.sh一键安装 Docker + Nginx + 示例站) - ✅ 配合腾讯云 CDN + 对象存储(COS)的动静分离方案
欢迎随时告诉我 👇 我可立即为你定制!
祝你在腾讯云轻量服务器上玩转 Docker + Nginx!🚀
CLOUD技术博