小白全栈项目部署指南

发布时间:2026/7/26 9:53:20
小白全栈项目部署指南 引言什么是全栈项目部署全栈项目通常包含前端用户界面、后端业务逻辑、数据库数据存储三部分。部署就是将你开发好的项目放到一台公网服务器上让任何人都能通过互联网访问。对于小白来说这可能听起来很复杂但通过本指南你将一步步学会如何将你的全栈项目从本地电脑搬到云端。为什么需要了解部署作品展示将你的个人项目部署上线作为简历亮点。实际应用让用户真正使用你的产品。学习运维基础了解服务器、网络、安全等知识提升综合能力。本指南以Linux服务器Ubuntu 20.04/22.04 LTS为例技术栈涵盖前端React/Vue、后端Node.js/Express、数据库MySQL/MongoDB。无论你使用何种具体技术核心思路相通。准备工作1. 购买一台云服务器推荐选择主流云服务商阿里云、腾讯云、华为云、AWS、DigitalOcean等。对于初学者建议选择轻量应用服务器或按量付费的云服务器配置如下CPU1核内存2GB如果项目较小1GB也可系统盘40GB SSD操作系统Ubuntu 20.04/22.04 LTS带宽按流量计费或固定带宽1Mbps够用但下载慢建议按流量速度快购买后你会获得一个公网IP地址、root密码或密钥。2. 注册域名可选但推荐如果你希望用户通过www.example.com访问需要购买域名如阿里云万网、GoDaddy。如果只是测试直接用IP访问即可。3. 本地环境准备SSH客户端Windows可使用PowerShell、CMD、Xshell、PuttyMac/Linux直接用终端。文件传输工具WinSCPWindows、scp命令、或使用Git后面会介绍。代码版本控制建议将项目托管在GitHub/Gitee方便在服务器上拉取。4. 思维准备遇到错误不要慌99%的问题可以通过搜索引擎解决。每一步操作前理解其目的而不是复制粘贴。服务器基础配置1. 连接到服务器使用SSH登录以root用户为例bashssh root你的服务器公网IP输入密码购买时设置的如果使用密钥则指定私钥文件bashssh -i ~/.ssh/your-key.pem root你的IP第一次连接会提示确认主机指纹输入yes回车。2. 更新系统软件包bashapt update apt upgrade -yapt update更新软件源列表apt upgrade升级所有已安装软件包。3. 创建新用户安全起见避免一直用rootbashadduser deploy按提示设置密码其他信息可跳过。然后将新用户加入sudo组bashusermod -aG sudo deploy之后切换到新用户bashsu - deploy后续操作都建议在普通用户下进行需要root权限时使用sudo。4. 配置SSH密钥登录可选更安全在本地生成密钥对如果已有则跳过bashssh-keygen -t rsa -b 4096将公钥复制到服务器bashssh-copy-id deploy你的IP之后就可以免密登录并可以禁用root密码登录编辑/etc/ssh/sshd_config设置PermitRootLogin no和PasswordAuthentication no然后sudo systemctl restart sshd。注意先测试新用户能登录成功再禁用root。5. 配置防火墙UFWUbuntu默认使用UFW管理防火墙。bashsudo ufw allow OpenSSH # 开放SSH端口22 sudo ufw allow 80 # HTTP sudo ufw allow 443 # HTTPS sudo ufw enable # 启用防火墙 sudo ufw status # 查看状态如果后续需要其他端口如后端服务端口3000也要开放。但更安全的方式是只开放80和443后端服务通过Nginx反向代理。6. 设置时区与同步时间bashsudo timedatectl set-timezone Asia/Shanghai # 设置为上海时间 sudo apt install ntpdate -y sudo ntpdate ntp.aliyun.com # 同步时间安装运行环境根据你的项目技术栈安装相应的环境。这里以Node.js MySQL为例同时给出Python/Java/MongoDB的参考。1. 安装Node.js后端推荐使用NVMNode Version Manager安装便于切换版本。bashcurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash重启终端或执行source ~/.bashrc然后安装你需要的Node版本例如18.xbashnvm install 18 nvm alias default 18 # 设置默认版本验证安装bashnode -v npm -v2. 安装包管理工具可选安装yarn或pnpm根据项目bashnpm install -g yarn3. 安装数据库安装MySQL关系型数据库bashsudo apt install mysql-server -y安装后运行安全脚本bashsudo mysql_secure_installation按提示设置root密码移除匿名用户禁止远程root登录等。之后登录MySQL创建项目数据库和用户bashsudo mysql -u root -p在MySQL命令行中执行sqlCREATE DATABASE yourdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER youruserlocalhost IDENTIFIED BY yourpassword; GRANT ALL PRIVILEGES ON yourdb.* TO youruserlocalhost; FLUSH PRIVILEGES; EXIT;安装MongoDB非关系型数据库bash# 导入MongoDB公钥 wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - # 创建源列表 echo deb [ archamd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list sudo apt update sudo apt install -y mongodb-org启动MongoDBbashsudo systemctl start mongod sudo systemctl enable mongod # 开机自启默认无密码建议创建管理员用户详见官方文档。安装PostgreSQLbashsudo apt install postgresql postgresql-contrib -y sudo systemctl start postgresql sudo systemctl enable postgresql sudo -u postgres createuser --interactive # 创建用户 sudo -u postgres createdb yourdb # 创建数据库4. 安装NginxWeb服务器/反向代理bashsudo apt install nginx -y启动Nginx并设置开机自启bashsudo systemctl start nginx sudo systemctl enable nginx此时访问服务器IP应看到Nginx欢迎页。5. 安装PM2进程管理用于Node.jsbashnpm install -g pm2PM2可以保持Node应用持续运行自动重启管理日志等。6. 其他工具Git拉取代码bashsudo apt install git -yBuild工具如果有些npm包需要编译bashsudo apt install build-essential -yPython环境如果需要bashsudo apt install python3 python3-pip -y项目打包与上传1. 本地项目准备确保项目可以正常运行并整理好环境变量不要将敏感信息提交到代码仓库。前端打包以ReactVite/CRA或Vue为例运行打包命令bashnpm run build生成一个dist或build文件夹里面是静态文件HTML、CSS、JS。后端准备确保有package.json入口文件如app.js或server.js并考虑环境变量配置使用dotenv等。2. 上传代码到服务器有多种方式方式一使用SCP适合小项目在本地终端或使用WinSCP图形界面bash# 上传整个项目假设项目在本地~/myproject scp -r ~/myproject deploy你的IP:/home/deploy/方式二使用Git推荐在服务器上bashcd /home/deploy git clone https://github.com/你的用户名/你的仓库.git如果仓库私有需要配置SSH密钥或使用personal access token。方式三使用rsync增量传输bashrsync -avz --progress ~/myproject deploy你的IP:/home/deploy/上传后进入项目目录bashcd /home/deploy/你的项目3. 安装项目依赖后端依赖bashnpm install --production # 或者直接 npm install--production 避免安装开发依赖如果有环境变量文件.env需要创建并填写真实值bashvim .env # 填入数据库连接等敏感信息前端依赖如果前端需要构建一般在本地构建好上传或者在服务器上构建但需要安装Node如果前端项目也在服务器上构建例如SSR项目也需要安装依赖并构建。后端部署1. 测试运行后端在项目目录下尝试直接启动bashnode app.js如果没有错误说明环境配置正确。按CtrlC停止。2. 使用PM2启动后端bashpm2 start app.js --name my-backend参数说明app.js是入口文件根据实际情况调整。--name指定进程名称便于管理。其他常用PM2命令pm2 list查看所有进程pm2 logs my-backend查看日志pm2 restart my-backend重启pm2 stop my-backend停止pm2 delete my-backend删除pm2 save保存当前进程列表以便开机重启pm2 startup生成开机自启脚本按提示执行3. 配置环境变量PM2可以读取环境变量可以在启动命令中指定或使用 ecosystem 配置文件。创建ecosystem.config.jsjavascriptmodule.exports { apps: [{ name: my-backend, script: ./app.js, env: { NODE_ENV: production, PORT: 3000, DB_HOST: localhost, DB_USER: youruser, DB_PASSWORD: yourpassword, DB_NAME: yourdb } }] };然后启动bashpm2 start ecosystem.config.js4. 验证后端是否运行bashcurl http://localhost:3000 # 假设后端监听3000端口应返回API响应或HTML。注意不要直接暴露3000端口给公网防火墙已关闭后面通过Nginx反向代理。前端部署前端部署取决于你的项目类型静态单页应用SPA或服务端渲染SSR。1. 静态前端部署将打包后的dist文件夹配置到Nginx。配置Nginx站点在/etc/nginx/sites-available/下创建配置文件例如myappbashsudo vim /etc/nginx/sites-available/myapp内容如下nginxserver { listen 80; server_name 你的域名或IP; root /home/deploy/你的前端项目/dist; # 静态文件路径 index index.html; location / { try_files $uri $uri/ /index.html; # SPA路由支持 } # 反向代理API请求到后端 location /api/ { proxy_pass http://localhost:3000/; # 后端地址 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }注意root路径要正确。try_files确保单页应用路由刷新时返回index.html。location /api/将API请求转发到后端根据你的实际API前缀调整。启用站点创建软链接到sites-enabledbashsudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/测试配置是否正确bashsudo nginx -t如果显示ok重新加载Nginxbashsudo systemctl reload nginx2. SSR前端部署如Next.js、Nuxt.js这类项目需要在服务器上运行一个Node服务处理页面渲染。部署方式类似后端使用PM2启动。假设Next.js项目bashnpm run build # 构建生产版本 pm2 start npm --name my-next -- start然后在Nginx中配置反向代理到该服务端口如3000同时处理静态资源。具体配置需查阅框架文档。3. 多站点部署如果你想在一个服务器上部署多个项目可以创建多个Nginx配置文件监听不同域名或不同端口。域名与HTTPS1. 域名解析在域名管理后台添加A记录将域名指向你的服务器IP。例如主机记录表示根域名记录值服务器IP等待DNS生效通常几分钟到几小时。2. 修改Nginx配置中的server_name将server_name改为你的域名例如server_name example.com www.example.com;然后重新加载Nginx。3. 配置HTTPS使用Lets Encrypt免费SSL推荐使用Certbot工具自动获取和续期证书。安装Certbot和Nginx插件bashsudo apt install certbot python3-certbot-nginx -y运行Certbot它会自动修改Nginx配置启用HTTPSbashsudo certbot --nginx -d example.com -d www.example.com按提示输入邮箱同意条款选择是否将HTTP重定向到HTTPS建议选是。完成后访问https://example.com应看到小锁标志。Certbot会自动续期证书通过定时任务无需手动干预。4. 验证HTTPS配置使用在线SSL检测工具如SSLLabs检查评级确保安全。数据库迁移与初始化1. 导入数据库结构如果你的项目需要数据库表结构可以使用迁移工具如Sequelize、Prisma、TypeORM或手动导入SQL文件。使用SQL文件导入MySQLbashmysql -u youruser -p yourdb /path/to/dump.sql使用ORM迁移命令以Prisma为例bashnpx prisma migrate deploy # 在生产环境运行迁移2. 初始数据填充可选执行种子脚本bashnode seed.js3. 检查数据库连接确保后端能正确连接数据库。可以通过日志查看pm2 logs my-backend。持续集成/持续部署简介对于小白手动部署已经足够。但如果你希望自动化可以了解CI/CD工具如GitHub Actions、GitLab CI、Jenkins等。基本原理当代码推送到仓库时自动触发服务器拉取最新代码、安装依赖、重启服务。以GitHub Actions为例在项目根目录创建.github/workflows/deploy.yml定义部署步骤。需要配置SSH密钥到GitHub Secrets。这里不展开感兴趣可自行查阅。常见问题排查1. 无法连接服务器检查安全组/防火墙是否开放22端口。确认IP正确网络通顺。2. 访问IP显示Nginx欢迎页而不是我的项目检查Nginx配置是否正确站点是否启用sites-enabled下是否有软链接。检查root路径是否正确权限是否足够Nginx用户www-data需有读取权限。3. API请求返回502 Bad Gateway后端服务是否运行pm2 list查看状态。代理地址是否正确后端端口是否监听netstat -tlnp | grep 3000。Nginx错误日志sudo tail -f /var/log/nginx/error.log。4. 数据库连接错误数据库是否启动sudo systemctl status mysql。用户名密码是否正确权限是否授予检查后端环境变量。5. 前端页面空白控制台报404静态文件路径错误检查Nginx root路径。SPA路由问题检查try_files配置。6. 权限问题确保Nginx用户www-data对静态文件有读权限sudo chown -R www-data:www-data /path/to/dist或sudo chmod -R 755 /path/to/dist。确保后端日志目录可写。7. 防火墙导致无法访问检查UFW状态是否开放80/443端口。云服务商的安全组策略是否开放相应端口。8. 域名解析未生效使用ping yourdomain.com或nslookup检查解析情况。等待DNS传播或尝试清除本地DNS缓存。9. 证书申请失败确保域名已解析到服务器且Nginx配置正确Certbot需要能访问到域名。查看Certbot日志/var/log/letsencrypt/letsencrypt.log。结语恭喜你经过以上步骤你的全栈项目已经成功部署上线现在你可以自豪地向朋友、面试官展示你的作品了。部署是一个需要不断实践的过程可能会遇到各种问题但这也是学习的机会。建议你保持探索精神尝试不同的技术组合甚至学习Docker容器化部署让部署更加简单可靠。如果你在部署过程中遇到任何问题欢迎在评论区留言假设这是一个互动平台我们一起解决。希望本指南对你有所帮助祝你部署顺利附录常用命令速查命令作用ssh userip连接服务器scp -r local_path userip:remote_path复制文件到服务器sudo apt install package安装软件包pm2 start app.js --name app启动Node应用pm2 save保存PM2进程列表sudo systemctl reload nginx重新加载Nginx配置sudo certbot --nginx自动配置SSLmysql -u user -p db file.sql导入SQL文件sudo ufw status查看防火墙状态