非程序员也能学会的网站部署指南:从Nginx到Docker实战

发布时间:2026/9/9 8:18:30
非程序员也能学会的网站部署指南:从Nginx到Docker实战 代码跑通的那一刻你觉得“成了”真正让项目有价值的是把它放到网上让任何人打开浏览器都能用。我自己带过不少零基础学AI编程的朋友前端代码写得有模有样一到部署就卡住觉得这是程序员才懂的黑魔法。实际上部署就是把“只在你自己电脑上能跑的项目”搬到“一台24小时开机的电脑”上这个动作完全可以用AI辅助完成而且非程序员完全可以独立做到。这一篇就是《非程序员AI编程指南》的最后一章我带你从零跑通一次真正的上线部署。我一直强调一个观点AI编程解决的是“怎么写代码”部署解决的是“代码怎么被全世界访问”这两个坎都不高无非是顺序问题。这一章我会从最基础的概念讲起带你确认自己的项目类型选择适合的部署方案然后直接跟着两个实操案例走——一个纯前端项目托管一个前后端加数据库的完整应用部署。全程用AI提问的方式帮你排错把你那些“不敢问人”的细节问题全部解决掉。1. 部署不是黑魔法先搞懂这三个概念很多非程序员对部署恐惧是因为脑子里缺一张“地图”。你不必懂计算机网络原理但你要知道三个词服务器、域名、端口。这三个词串起来整个部署就通了。1.1 服务器一台永不关机的电脑你本地跑项目用的电脑关机别人就访问不了。服务器本质也是一台电脑只不过它放在机房、常年通电、有固定公网IP唯一任务是“运行你的项目并响应别人的访问”。你可以把它想象成一家24小时营业的便利店。你的本地电脑是你家厨房做饭自己吃服务器是店里的操作间所有顾客来了都能从窗口拿到餐。想让别人用你的项目你就得有这样一个“店面”。现在云服务商都提供“轻量应用服务器”2核2G内存、3M左右带宽的配置对个人项目来说完全够用新用户活动期一年往往只要一百块上下。我看很多新手一上来就想买高配完全没必要等真有流量了再扩容也不迟。1.2 端口、域名和浏览器之间的协作服务器拿到手后你会得到一个IP地址类似123.45.67.89。别人访问你的项目在浏览器输入这个IP就能访问吗不一定因为服务器上可能跑了多个程序你得告诉它“我要找的是哪一个”。这时候端口就派上用场了。可以把IP想成大楼地址端口是大楼里的房间号。网页服务的默认房间号是80HTTP和443HTTPS所以你访问http://123.45.67.89时浏览器自动帮你敲了80端口这扇门。但让用户记IP地址不现实于是有了域名。域名只是IP地址的“好记的名字”通过DNS解析把两者对应起来。你在域名服务商那里买一个域名然后添加一条解析记录把域名指向你的服务器IP用户在浏览器输入域名就可以访问了。1.3 为什么AI能帮你部署却无法替你理解部署你可能已经发现AI编程工具特别擅长生成部署配置Dockerfile、Nginx配置、部署命令它都能写得头头是道。但AI没法替你理解的是你的项目跑起来依赖哪些环节哪个环节挂了该去哪查这正是非程序员最容易卡住的地方。所以这一章我不会只扔给你一堆配置而是先帮你建立“部署模型”。你把下面这个模型记在脑子里后面所有操作都是在反复验证它你的代码文件放在服务器的某个目录里服务器上跑着一个或多个程序Nginx、Node、Python、数据库等外部请求从80或443端口进来被分配到对应程序出了问题第一件事是看日志第二件事是问AI有了这张地图部署就成了“往地图上填东西”的过程。2. 开始前先回答我的项目到底属于哪一类部署方案和项目类型强相关。你不能拿做一个静态页面的方案去部署一个带数据库的应用也不能杀鸡用牛刀。先把项目分好类后面一切都顺了。2.1 纯静态项目最简单的一类纯静态项目指只有HTML、CSS、JavaScript没有后端接口、没有数据库、没有用户登录的那些网站。典型例子个人主页、产品介绍页、纯前端工具站、用Vue或React打包后生成的静态文件。这类项目的特征是构建之后会生成一个dist或public目录里面全是静态文件。部署时只要把这个目录放到任何能提供静态文件服务的地方就行。云服务器上用Nginx托管或者用对象存储类静态托管服务几分钟就能搞定。判断方法很简单你在本地npm run build或npm run build:prod后如果生成的东西只是纯文件不需要启动什么服务就能打开index.html看到效果那它就是静态项目。2.2 前后端分离项目上Docker更合适现在用AI编程做出来的项目大部分是前后端分离的前端是一个Vue或React应用后端是一套API服务可能还连了MySQL、PostgreSQL或SQLite数据库。这种项目部署时只把前端传上去是不够的因为数据交互、登录验证、业务逻辑都在后端。你需要同时把后端跑起来并保证前端能通过网络请求访问到后端接口。要管好几个进程这个时候用Docker一套编排起来就非常合适这也是后面实操二的重点。2.3 脚本/工具型项目跑起来不算部署还有一类项目是Python脚本、定时任务、数据处理工具、Telegram机器人这类没有界面、只在后台跑的程序。它们的“部署”其实是两件事让它在服务器上稳定运行以及在服务器重启后它还能自动恢复。这类项目用systemd或进程管理器如PM2托管就行。做法是把你本地运行python main.py这个动作变成服务器开机或崩溃后能自己拉起来的服务。具体配置可以直接问AI“帮我把这个Python脚本做成systemd服务要求开机自启、崩溃自动重启”。如果你不确定自己的项目属于哪一类最简单的方式是把项目目录结构发给AI问它这个问题。2.4 用AI帮你做个“部署前体检”这一步我强烈建议你在买服务器、敲命令之前做成本极低但能省掉很多折腾。把项目目录下有哪些文件、有没有package.json、有没有.env、用的是什么数据库这些信息粘贴给AI然后问这是我的项目目录结构...请帮我判断1) 它属于静态项目还是前后端分离项目2) 部署至少需要哪些组件3) 推荐最简单的部署方案是什么请分步骤说明。我实测下来AI给出的判断准确率非常高尤其是对于常见技术栈的项目。它相当于给你配了一个免费的前期架构咨询师把“项目类型确认”这一步省下来后面的部署效率能翻倍。3. 部署方案这样选不折腾和无脑折腾都是需求确认好项目类型后你会面对“到底用什么方式部署”的问题。我见过两种极端有的朋友非要折腾最原始的服务器命令结果三天没搞定有的朋友只想一键发到网上却被迫学习了一堆不必要的东西。正确做法是先看自身需求再选方案。3.1 方案一云服务器Nginx前端项目首选适用场景纯静态项目或者带轻量后端的前端项目。优点控制力强、成本低、部署链路清晰理解了这个方案你对整个网络请求模型就打通了。一台服务器可以同时托管多个站点每个站点通过不同域名或端口区分。缺点需要懂一点Linux基础命令至少知道cd、ls、vim或nano。3.2 方案二云服务器Docker Compose完整项目推荐适用场景前后端分离项目带数据库未来可能要反复移植、升级。优点把“环境配置”这一最烦人的问题彻底解决。你在本地用Docker跑起来的环境和服务器上一模一样升级时改一下配置重新构建即可几乎不会出现“在我电脑上明明是好的”这种问题。缺点概念比Nginx多一点但用AI辅助完全能上手。这是我认为所有学习AI编程的人最终都应该掌握的部署方式不是因为它高级而是因为它能救你于水火。3.3 方案三宝塔面板不想记命令的人适用场景完全不想碰Linux命令喜欢图形化点鼠标的人。优点安装面板后可以通过浏览器网页操作文件、配置Nginx、申请证书、创建数据库所有事都在图形界面里完成对新手最友好。缺点面板本身会占用部分资源很多人对安全配置不熟悉容易暴露一些不必要端口。很多免费教程推荐宝塔我个人建议是如果你只是搭一个个人项目用面板确实省心但如果你想通过这次部署弄明白“服务器上的程序是怎么跑起来的”那还是试一次纯命令行的方式你会收获更多。3.4 一条价值判断标准你愿意每周花多少时间运维说到底部署方案没有绝对的好坏只有适合不适合。我自己判断的标准只有一条你愿意每周花多少时间在这个项目上如果项目只是展示型页面一个月不动一次那就选最简单方案一。如果项目是你日常在用的工具可能每周都会改功能那就用Docker Compose改完重新构建就上线。如果你对这个项目有更长远的想法未来要做成产品那建议从第一天就用Docker Compose因为后面加服务、加环境、换机器都省事。4. 实操一Nginx托管前端项目从买服务器到上线现在开始真正动手。这是几乎所有项目的基础课把一个前端项目放到云服务器上再用Nginx提供访问。整个过程不会超过半小时你会获得第一次“上线”的完整体感。4.1 第一次登录服务器SSH 没那么可怕买好服务器后云服务商一般会给你一个公网IP和初始密码或者让你设置root密码。登录服务器的专业说法叫SSH连接。Windows用户推荐用MobaXterm或直接打开自带的PowerShellMac用户用终端即可。连接命令如下ssh root你的服务器IP输入yes确认指纹再输入密码输密码时屏幕上没有显示是正常的就进入了服务器的命令行界面。你现在做的是远程操作一台位于机房的电脑。我在第一次SSH时也慌过一次总觉得是不是把服务器弄坏了。其实不会你在这个界面里输入的所有命令都只是在操作一台普通Linux电脑搞砸了大不了重装系统所以放心操作。4.2 安装 Nginx 并上传你的前端产物登录后在Debian/Ubuntu系统上安装Nginxapt update apt install -y nginx安装完成后访问http://你的服务器IP如果看到Nginx的欢迎页说明服务已经正常跑起来了。这是第一个里程碑。然后把你本地前端项目构建出来的dist目录传到服务器。我推荐用scp命令简单直接。在本地终端执行scp -r ./dist root你的服务器IP:/var/www/my-site或者你也可以用SFTP工具比如WinSCP把整个dist目录拖上去。传上去之后用命令确认一下文件在不在ls /var/www/my-site你应该能看到index.html、assets目录这些文件这就说明前端代码已经就位了。4.3 最小 Nginx 配置重点Nginx默认的站点配置在/etc/nginx/sites-available/defaultDebian系或/etc/nginx/conf.d/default.confCentOS系。不管路径如何你要完成的目标是让Nginx知道当有人访问这个站点时去/var/www/my-site目录找文件。用编辑器打开默认配置nano /etc/nginx/sites-available/default把它替换成下面这份最小配置。这份配置经过了充分注释建议逐行读一遍再粘贴server { listen 80; server_name _; # 暂时用下划线表示“任意域名/IP都走这里” root /var/www/my-site; # 你的前端文件所在目录 index index.html; # 默认首页文件 location / { try_files $uri $uri/ /index.html; # 前端路由回退删掉这一行单页应用很容易白屏 } location /assets/ { expires 7d; # 静态资源缓存7天加速重复访问 } }保存退出nano里是CtrlO回车保存CtrlX退出然后重载Nginxnginx -t # 检查配置语法出现 syntax is ok 再继续 systemctl reload nginx这里我要特别强调try_files $uri $uri/ /index.html这一行。很多Vue/React项目用的前端路由在浏览器里看起来像/about这样的地址但服务器上并没有about这个目录。如果没有上面这行你一刷新/about页面就404了有了它Nginx在没有匹配文件时会自动回到index.html由前端路由接管显示对应页面。这是非程序员部署时最容易踩的坑。4.4 绑定域名并开启访问IP访问已经可以了但项目正式上线建议绑定一个自己的域名。在域名服务商后台添加一条A记录主机记录填或www记录值填你的服务器IP等待解析生效通常几分钟到几小时。然后在Nginx配置里修改server_nameserver_name yourdomain.com www.yourdomain.com;重载Nginx后用你的域名访问看到自己的页面时那种成就感我太懂了——你的项目正式有了一个能被任何人访问的“门牌号”。4.5 如果遇到白屏让AI帮你读配置白屏是部署中最常见、最让人崩溃的问题。页面打开一片空白控制台刷了一堆报错。非程序员很容易卡在这一步但好消息是AI特别擅长解决这类问题。我的标准做法是打开浏览器F12开发者工具切到Console和Network标签页把红色报错信息原样复制再配合你的Nginx配置一起发给AI我部署一个Vue项目到Nginx访问域名时页面白屏控制台报错...这是我的Nginx配置...请问为什么白屏可能是哪个配置不对根据我的经验白屏80%的原因是前端资源路径不对服务器文件路径不对或者缺少try_files回退。AI很快就能帮你定位出来照它给的方案改一下配置、重新构建上传即可。5. 实操二Docker Compose 部署完整前后端数据库如果你的项目带后端和数据库方案一的简单托管就不够用了。你需要把多个程序同时跑起来而且让它们彼此配合。Docker Compose是解决这个问题最优雅的工具没有之一。5.1 为什么要用Docker一句话概括Docker把“你的程序”和“它依赖的运行环境”打包成一个标准容器。你在自己电脑上跑通过的环境放到服务器上不会因为少装了一个依赖就挂掉。我打个比方方案一像你从家里做好菜端到店里卖环境变了口味就可能不对Docker则是把整个厨房切下来搬到店里灶台、调料、锅铲全部原样带过去做什么菜都是同一个味道。非程序员不需要深入理解容器技术你只需要知道Docker把部署从“反复装环境”变成“一次构建到处运行”。而且用Docker Compose可以把前端、后端、数据库三个服务写在一个文件里一条命令全部启动。5.2 用AI生成Dockerfile假设你的项目是前端Vue 后端Node/Express PostgreSQL数据库。要让AI帮你写Dockerfile我用的提示词是这样的我有一个项目后端是Node.js Express使用npm作为包管理器入口文件是server.js。请帮我写一个生产环境可用的Dockerfile要求使用多阶段构建减小镜像体积设置NODE_ENV为production包含非root用户运行提升安全性端口暴露3000我拿到的典型产物是这样的FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM node:20-alpine ENV NODE_ENVproduction WORKDIR /app COPY package*.json ./ RUN npm ci --omitdev COPY --frombuilder /app/dist ./dist RUN addgroup -S app adduser -S app -G app USER app EXPOSE 3000 CMD [node, server.js]注意几点多阶段构建先用一个容器把项目编译好再把编译结果复制到正式运行环境这样镜像里不装一堆开发依赖非root用户运行是安全问题容器里默认root权限过大一旦被利用是很危险的。5.3 用AI生成docker-compose.ymlDocker Compose文件负责把多个容器编排起来。我一般让AI直接生成提示词如下请帮我写一个docker-compose.yml包含三个服务backend使用我项目目录里的Dockerfile构建端口映射3000环境变量DB_HOSTdb需要等待db服务健康后再启动db使用postgres:16镜像设置数据库名myapp、用户名myuser、密码mypassword使用volume持久化数据不要暴露宿主机端口请加上健康检查。生成的内容大致是version: 3.8 services: backend: build: ./backend ports: - 3000:3000 environment: - NODE_ENVproduction - DB_HOSTdb depends_on: db: condition: service_healthy restart: unless-stopped db: image: postgres:16 environment: - POSTGRES_DBmyapp - POSTGRES_USERmyuser - POSTGRES_PASSWORDmypassword volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: [CMD-SHELL, pg_isready -U myuser -d myapp] interval: 5s timeout: 3s retries: 10 restart: unless-stopped volumes: pgdata:这里最值得关注的是数据库的数据持久化。容器是“用完即走”的如果数据库没挂volume哪天重启服务数据就全没了。pgdata:/var/lib/postgresql/data这行把数据库数据保存在宿主机上容器删了重建数据还在。另外我把数据库端口不暴露到宿主机了后面你就明白为什么——数据库只需要被后端访问没必要把端口暴露到公网上。这是安全习惯我从一开始就在构建。5.4 构建启动和日志排查把Dockerfile放在后端目录里把docker-compose.yml放在整个项目根目录传到服务器后一条命令启动docker compose up -d --build-d是后台运行--build是启动前重新构建镜像。运行后查状态docker compose ps这个命令会列出所有服务及运行状态。如果某个服务状态是“Exited”或“Restarting”说明它启动失败了。看日志是最直接的排查方式docker compose logs backend看日志时如果你不确定某条错误什么意思直接把日志最后20行复制给AI这是AI编程模式在部署阶段的核心用法。我踩过最典型的一个坑是本地能连数据库、服务器上连不上一查日志发现后端连接数据库用的是localhost:5432。在Docker Compose网络里服务之间要使用服务名相互访问db服务不是localhost而应该用db:5432。把数据库连接串改成postgres://myuser:mypassworddb:5432/myapp就解决了。5.5 Nginx反向代理是最后的拼图现在你的前端静态文件可能在某个地方后端跑在3000端口用户访问时不能又带端口又跨域体验很糟糕。解决方式是Nginx反向代理让Nginx监听80端口把前端页面直接返给用户把/api开头的请求转发给后端容器。在服务器上配置一个Nginx站点server { listen 80; server_name yourdomain.com; # 前端静态文件 root /var/www/my-site; index index.html; location / { try_files $uri $uri/ /index.html; } # API请求反向代理到后端容器 location /api/ { proxy_pass http://127.0.0.1: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; } }proxy_pass http://127.0.0.1:3000/;结尾的斜杠比较关键它会去掉/api前缀把请求转发给后端。例如请求/api/users会变成后端容器内的/users。如果你的后端代码里已经写了/api路由前缀就不要带这个斜杠改成proxy_pass http://127.0.0.1:3000;。这一块配置我建议你交给AI判断自己只需要理解流程外部请求进入NginxNginx把静态页面交给前端把API请求转给后端容器后端容器再访问数据库。6. 上线后必做的五件事按优先级排序部署成功只是起点把项目安全、稳定地跑起来才是真正的上线。这一节是我在踩过无数坑后总结的“上线前检查清单”按优先级排列。6.1 开启HTTPS不花一分钱必须做现在浏览器会对没有HTTPS的网站标“不安全”而且很多浏览器功能和第三方接口都要求HTTPS环境才能用。好消息是免费证书方案非常成熟自己用命令行的certbot或者面板的一键证书功能都能轻松签发。我习惯给所有站点都配上证书配置好自动续期基本不需要人工干预。证书有效期通常是90天有些面板能自动续期纯命令行的用一个定时任务每天检查续期即可。这一步做完你的网站地址会从http://变成https://安全感直接拉满。6.2 收敛暴露面能不开的端口别开这是安全里面性价比最高的一步。你需要明白一个原则服务器上对外开放的端口永远只是“必不可少的那几个”大多数情况下就是80和443。数据库端口如3306、5432、27017不暴露到公网。后端程序在服务器内网访问数据库足够了。后端API端口如3000用Nginx反代后也不需要直接对外只让Nginx访问就行。如果你一定要通过端口访问某些服务就用云服务商的防火墙规则限定来源IP只允许你自己的IP。我曾经为了省事把PostgreSQL的5432端口暴露到公网密码又是弱口令结果不到一周数据库就被扫了数据目录被加密勒索。那是我在部署上学到最贵的一课从那以后收敛暴露面就是我的铁律。6.3 建立备份习惯哪怕一天一次数据库是线上项目里最宝贵的东西代码丢了可以重新部署数据库丢了很难找回来。Docker部署时数据存在volume里如果你直接删掉容器就麻烦了。我现在的做法分三层一是在云服务商那边做磁盘快照发生大问题可以整体回滚二是用pg_dump或mysqldump做定期的逻辑备份三是把备份文件同步到另一台机器或对象存储。个人项目至少做到前两层。这个环节AI也能帮忙。你只要告诉AI“我用PostgreSQL想要每天凌晨3点自动备份到/backup目录保留最近7天的备份”它就能给你生成一个定时脚本配合crontab配置好就行。6.4 配置日志和监控出了问题要知道去哪看日志是排错的第一现场。Docker部署的服务用docker compose logs -f 服务名查看实时日志Nginx的访问日志和错误日志通常在/var/log/nginx/目录下。建议刚部署完时主动访问几个页面再去看一眼日志里有没有出错记录。监控不是非要做但至少要有“它死了你要知道”的能力。最简单的方案是用一个免费的Uptime监控服务定时检查你的网址挂了会发邮件或消息通知你。个人项目这个级别就够了。6.5 写一份部署README让AI帮你生成这一步很多人忽略但它对你未来自己或任何接手代码的人都特别重要。项目久了之后你大概率会忘记当初是怎么部署的。你可以把Dockerfile、docker-compose.yml、Nginx配置全部发给AI让它整理成部署文档包括启动命令、环境变量说明、日志位置、回滚办法。放到项目仓库的README.md里以后换机器、换服务商照着文档一步步来就行。7. 高频问题快查表与排错思路最后把非程序员部署中最常遇到的高频问题整理成一张快查表建议直接收藏。遇到问题先对照自查再带着完整信息去问AI。现象大概率原因排查/解决思路访问IP/域名页面白屏前端路由没配try_files静态资源路径不对检查Nginx配置F12看Network里资源是否加载成功刷新子页面404Nginx缺少try_files $uri $uri/ /index.html加上前端路由回退配置后重载Nginx页面能开API请求失败跨域问题反向代理没配好用curl http://127.0.0.1:3000/xxx先测后端检查proxy_pass路径后端容器一直重启环境变量不完整数据库连不上docker compose logs backend看详细报错数据库一直连不上连接串用了localhost而不是服务名密码有特殊字符Docker网络里用服务名密码特殊字符要URL编码或用环境变量部署后还是旧版本浏览器缓存CDN缓存强制刷新静态资源加版本号Nginx设置不缓存index.html502 Bad Gateway后端没起来端口不一致Nginx连不到后端先确认后端容器docker compose ps再检查反代端口服务器被扫描/告警暴露了不必要端口或弱口令立即收敛端口改强密码数据库只允许内网访问排错的总思路永远是一样的“先定位环节再查日志”。前端问题去浏览器F12看Console和NetworkNginx问题去/var/log/nginx/error.log后端问题用docker compose logs数据库问题先确认容器状态和连接方式。定位到环节之后把日志和相关配置丢给AI它往往几秒钟就能给你答案。根据我个人的经验部署这个东西最大的障碍从来不是技术难度而是第一次面对一堆陌生命令时那种“不敢动”的心理。你只要完整走通一遍最简单的Nginx托管就已经胜过很多人了再走通一次Docker Compose你就能从容地把自己所有项目都上线。最后再分享一个小技巧部署完的第一个小时别急着关终端。开一个浏览器窗口反复点你的网站同时开着日志窗口观察有问题当场解决。等第一个小时安然度过你的项目就真的站住了。从今天开始你不再只是“用AI写代码的人”而是“能把代码变成产品的人”。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询