返回博客

25 项目上服务器:Linux + Docker 部署实战

25 项目上服务器:Linux + Docker 部署实战

导语:本地做成了只是第一步——让它 7×24 小时在服务器上跑,才是"上线"。这一篇把待办应用部署到云服务器,每一步 AI 帮你生成命令,你负责理解每条在做什么。

23、24 篇,你的待办应用在本地跑通了:有数据库、有接口、有页面。但本地跑的网站,只有你电脑开着才有人能访问。部署 = 把应用搬到服务器上,让它永远在线。

部署的整体思路就四步:装 Docker → 传代码 → 打包启动 → 用域名访问。 每一步都用你前 24 篇学过的东西。

一、整体思路:四步上线

步骤 做什么 用到的旧知识
① 装 Docker 服务器上装好 Docker 14(Linux)、18(Docker)
② 传代码 把项目搬到服务器 11(SSH 工具)、20(Git)
③ 打包启动 Dockerfile + docker-compose 跑起来 18(Docker)
④ 域名访问 绑定域名,让它有"门面" 17(Nginx)、19(DNS)、09(SSL)

经验:先想清楚四步,再动手——部署不是玄学,就是这四件事按顺序做。

二、第一步:服务器准备

  1. SSH 连上服务器(11 篇):用你的 SSH 工具登录。
  2. 装 Docker:让 AI 给你一条命令(或按 18 篇小任务的官方教程),装完验证:
docker --version    # 有版本号 = 装好了

经验:装 Docker 这步卡住,多半是权限(要 sudo)或源(国内服务器用镜像源更快)——把报错贴给 AI,它知道怎么处理。

三、第二步:把代码传到服务器

两个办法,任选:

办法一:scp 直接传(小项目最快)

scp -r 本地项目目录 root@你的IP:/root/

-r 表示传整个目录(14 篇学过 scp)。

办法二:Git clone(更规范,20 篇)

git push origin main    # 本地推到云端仓库
# 服务器上:
git clone 你的仓库地址

经验:二选一即可,新手先用 scp——不用配远程仓库,一条命令搬过去。等以后项目多了,再用 Git 方式(顺便有版本管理)。

四、第三步:Docker 打包启动

到了服务器上,用 18 篇学的东西:Dockerfile(打包说明书)+ docker-compose(全家桶清单)。

让 AI 基于你的项目生成(上下文给全):

"我的待办应用是 Flask + SQLite,项目在服务器的 /root/todo-app。帮我写 Dockerfile 和 docker-compose.yml:应用映射 5000 端口,SQLite 数据要挂载到宿主机目录(不能存容器里,容器删了数据不能没)。写完后告诉我怎么构建和启动。"

启动命令(18 篇的速查):

docker compose up -d --build    # 构建并后台启动
docker ps                        # 看容器在不在运行

验证:浏览器访问 http://你的服务器IP:5000——看到待办应用页面,部署成功!

经验:SQLite 数据必须挂载到宿主机(数据卷 volume)——这是 18 篇最强调的坑:容器删了,数据不能跟着没。让 AI 在 compose 里配好 volume,别偷懒。

五、第四步:用域名访问(让它有门面)

现在网站用 IP:5000 能访问,但"有门面"要两步:

  1. Nginx 反向代理(17 篇):让 http://你的域名 转发到 127.0.0.1:5000——用户不用记端口号。
  2. 绑定域名 + HTTPS(19 + 09 篇):DNS 把域名解析到服务器 IP(19 篇 A 记录),再申请免费 SSL 证书挂上(09 篇 Let's Encrypt)。

让 AI 帮你生成 Nginx 配置,但你要看懂三行(17 篇):

server {
    listen 80;                            # 站 80 端口
    server_name 你的域名.com;              # 接待这个域名
    location / { proxy_pass http://127.0.0.1:5000; }  # 转发给应用
}

改完配置别忘了 17 篇的标准动作:nginx -t 测试 → systemctl reload nginx(或 nginx -s reload)生效。

经验:先 IP:端口通,再域名通,最后 HTTPS——一步步来,每步验证过再进下一步(19 篇:排查按链路)。

六、避坑清单

  • 端口映射别冲突:-p 5000:5000 报端口占用,换宿主端口(如 5001:5000)即可。
  • 数据卷必须配:SQLite 数据挂宿主机目录,容器删了数据还在(18 篇)。
  • 安全组放行:服务器安全组/防火墙要放行 5000 和 80/443(10 篇)——不然容器起来了,外面也访问不到。
  • 改代码要重新 build:代码改完 docker compose up -d --build,不是只 restart(18 篇)。
  • 启动失败看日志:docker logs 容器名——部署排查第一现场(14 篇"看日志"就是干这个的)。
  • 别用 root 跑服务:能用普通用户 + sudo 就用,安全底线(10 篇)。

总结

  • 部署四步:装 Docker → 传代码(scp 或 Git)→ Docker 打包启动 → 域名访问。
  • 传代码:新手用 scp -r,规范用 Git。
  • Docker 启动:docker compose up -d --build + docker ps 验证;SQLite 数据挂卷,容器删了不能没。
  • 域名访问:Nginx 反代(17 篇三行配置)+ DNS 解析(19 篇)+ 免费 HTTPS(09 篇)。
  • 避坑六条:端口冲突换映射、数据挂卷、安全组放行、改代码重新 build、失败看 docker logs、别用 root 跑。

10 分钟小任务:SSH 连上服务器,完成前三步(装 Docker、传代码、Docker 启动),用 http://你的IP:5000 访问到待办应用页面——你的应用第一次"在线"了! 下一篇给它配上域名和 HTTPS,正式上线,并发起第一个里程碑活动。

下一篇:加 Nginx + 域名 + HTTPS:让你的项目有门面。