<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: 天涯</title>
    <description>The latest articles on Forem by 天涯 (@codetime).</description>
    <link>https://forem.com/codetime</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3882703%2Fb678c9ff-ec87-4fd3-af60-00b836dd40dc.png</url>
      <title>Forem: 天涯</title>
      <link>https://forem.com/codetime</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/codetime"/>
    <language>en</language>
    <item>
      <title>5 Deployment Problems Every Beginner Faces (And How to Fix Them)</title>
      <dc:creator>天涯</dc:creator>
      <pubDate>Wed, 22 Apr 2026 02:56:57 +0000</pubDate>
      <link>https://forem.com/codetime/5-deployment-problems-every-beginner-faces-and-how-to-fix-them-41gb</link>
      <guid>https://forem.com/codetime/5-deployment-problems-every-beginner-faces-and-how-to-fix-them-41gb</guid>
      <description>&lt;h1&gt;
  
  
  5 Deployment Problems Every Beginner Faces (And How to Fix Them)
&lt;/h1&gt;

&lt;p&gt;based on my mentoring, these are the issues I see over and over again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #1: "Works on My Machine"
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why it happens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing environment variables&lt;/li&gt;
&lt;li&gt;Port conflicts&lt;/li&gt;
&lt;li&gt;Node version mismatch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check Node version&lt;/span&gt;
node &lt;span class="nt"&gt;--version&lt;/span&gt;

&lt;span class="c"&gt;# Check port usage&lt;/span&gt;
netstat &lt;span class="nt"&gt;-tulpn&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; :3000

&lt;span class="c"&gt;# Set environment variables&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Problem #2: "Can't Access My App"
&lt;/h2&gt;

&lt;p&gt;Firewall. It's always the firewall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Open necessary ports&lt;/span&gt;
ufw allow 80
ufw allow 443
ufw allow 22

&lt;span class="c"&gt;# Enable firewall&lt;/span&gt;
ufw &lt;span class="nb"&gt;enable&lt;/span&gt;

&lt;span class="c"&gt;# Check status&lt;/span&gt;
ufw status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Problem #3: "App Dies After Server Restart"
&lt;/h2&gt;

&lt;p&gt;You need a process manager.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install PM2&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2

&lt;span class="c"&gt;# Start your app&lt;/span&gt;
pm2 start app.js

&lt;span class="c"&gt;# Enable auto-restart&lt;/span&gt;
pm2 startup
pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Problem #4: "Which Cloud Provider?"
&lt;/h2&gt;

&lt;p&gt;Stop overthinking it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just use DigitalOcean&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplest UI&lt;/li&gt;
&lt;li&gt;Best docs for beginners&lt;/li&gt;
&lt;li&gt;$200 free credit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://m.do.co/c/4e466c7c5171" rel="noopener noreferrer"&gt;Sign up here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #5: "Too Expensive"
&lt;/h2&gt;

&lt;p&gt;It's not. Really.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimum: $6/month&lt;/li&gt;
&lt;li&gt;New users: $200 credit&lt;/li&gt;
&lt;li&gt;That's months of free hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment Checklist
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before deploying:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Code pushed to Git&lt;/li&gt;
&lt;li&gt;[ ] Environment variables documented&lt;/li&gt;
&lt;li&gt;[ ] Tests passing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Server setup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Create droplet&lt;/li&gt;
&lt;li&gt;[ ] Configure SSH key&lt;/li&gt;
&lt;li&gt;[ ] Update system&lt;/li&gt;
&lt;li&gt;[ ] Install Node.js&lt;/li&gt;
&lt;li&gt;[ ] Configure firewall&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;App deployment:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Clone code&lt;/li&gt;
&lt;li&gt;[ ] Install dependencies&lt;/li&gt;
&lt;li&gt;[ ] Set environment variables&lt;/li&gt;
&lt;li&gt;[ ] Start app&lt;/li&gt;
&lt;li&gt;[ ] Configure PM2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Verification:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Test via IP address&lt;/li&gt;
&lt;li&gt;[ ] Check logs&lt;/li&gt;
&lt;li&gt;[ ] Test server restart&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  One-Command Deploy Script
&lt;/h2&gt;

&lt;p&gt;Save this, use it every time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# One-command deployment&lt;/span&gt;

&lt;span class="c"&gt;# Update system&lt;/span&gt;
apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# Install Node.js&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://deb.nodesource.com/setup_20.x | bash -
apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs

&lt;span class="c"&gt;# Install PM2&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2

&lt;span class="c"&gt;# Clone and deploy&lt;/span&gt;
git clone YOUR_REPO
&lt;span class="nb"&gt;cd &lt;/span&gt;YOUR_PROJECT
npm &lt;span class="nb"&gt;install
&lt;/span&gt;pm2 start app.js
pm2 startup
pm2 save

&lt;span class="c"&gt;# Firewall&lt;/span&gt;
ufw allow 80
ufw allow 443
ufw allow 22
ufw &lt;span class="nb"&gt;enable

echo&lt;/span&gt; &lt;span class="s2"&gt;"Deployment complete!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common Errors
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Permission denied&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Port already in use&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :3000
&lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; PID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;💡 Use the link above for $200 free credit. All my students use DigitalOcean — it just works.&lt;/p&gt;

</description>
      <category>node</category>
      <category>deployment</category>
      <category>tutorial</category>
      <category>digitalocean</category>
    </item>
    <item>
      <title>Deploy a Node.js App to DigitalOcean in 5 Minutes</title>
      <dc:creator>天涯</dc:creator>
      <pubDate>Mon, 20 Apr 2026 06:58:12 +0000</pubDate>
      <link>https://forem.com/codetime/deploy-a-nodejs-app-to-digitalocean-in-5-minutes-1a6f</link>
      <guid>https://forem.com/codetime/deploy-a-nodejs-app-to-digitalocean-in-5-minutes-1a6f</guid>
      <description>&lt;h1&gt;
  
  
  Deploy a Node.js App to DigitalOcean in 5 Minutes
&lt;/h1&gt;

&lt;p&gt;Here's a story: last year around this time I deployed an app, celebrated, went to bed. Next morning? Site was down. Server had restarted overnight.&lt;/p&gt;

&lt;p&gt;Today I'm sharing my complete deployment workflow. No BS, just what works.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Setup
&lt;/h2&gt;

&lt;p&gt;I'm currently running 7 production apps using this exact setup. It's stable, affordable, and low-maintenance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why DigitalOcean?
&lt;/h3&gt;

&lt;p&gt;I've tried AWS, Heroku, Vercel, Render, and a dozen others. DigitalOcean became my go-to. Not because it's the cheapest (it's not), but because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simple UI&lt;/strong&gt;&lt;br&gt;
Took me 5 minutes to figure out on day one. Compare that to AWS's maze of services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Solid docs&lt;/strong&gt;&lt;br&gt;
When something breaks, their docs actually help. Novel concept, I know.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transparent pricing&lt;/strong&gt;&lt;br&gt;
$6/month means $6/month. No surprise bills.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://m.do.co/c/4e466c7c5171" rel="noopener noreferrer"&gt;Sign up for DigitalOcean&lt;/a&gt; — new users get $200 credit, which lasts months.&lt;/p&gt;

&lt;h3&gt;
  
  
  Complete Deployment Steps
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Create a Droplet
&lt;/h4&gt;

&lt;p&gt;Click "Create" → "Droplets". My standard config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Image: Ubuntu 22.04 LTS
Plan: Basic $6/month (1GB RAM)
Datacenter: Pick closest to your users
SSH Key: Set this up (way more secure than passwords)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hit create. Takes about 60 seconds.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. SSH Into Your Server
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@your_server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Install Node.js
&lt;/h4&gt;

&lt;p&gt;I use this script every time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update system&lt;/span&gt;
apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# Install Node.js 20.x&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://deb.nodesource.com/setup_20.x | bash -
apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs

&lt;span class="c"&gt;# Install PM2 (process manager)&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2

&lt;span class="c"&gt;# Verify&lt;/span&gt;
node &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Deploy Your App
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone your repo&lt;/span&gt;
git clone your-repo-url
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Start with PM2&lt;/span&gt;
pm2 start app.js &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"my-app"&lt;/span&gt;

&lt;span class="c"&gt;# Enable auto-restart on reboot&lt;/span&gt;
pm2 startup
pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Configure Firewall
&lt;/h4&gt;

&lt;p&gt;Don't skip this. I spent 2 hours debugging once because I forgot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ufw allow 80
ufw allow 443
ufw allow 22
ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mistakes I Made (So You Don't Have To)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mistake #1: Choosing the cheapest plan&lt;/strong&gt;&lt;br&gt;
I tried the $2.5/month droplet to save money. It was painfully slow. The $6 plan is worth every penny.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake #2: No backups&lt;/strong&gt;&lt;br&gt;
Accidentally dropped my database once. Luckily had auto-backups enabled. Now I backup daily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake #3: No monitoring&lt;/strong&gt;&lt;br&gt;
Server went down for 6 hours before I noticed. Now I use UptimeRobot (free) to get alerts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost Breakdown
&lt;/h2&gt;

&lt;p&gt;My current setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DigitalOcean: $6/month&lt;/li&gt;
&lt;li&gt;Domain: $12/year (~$1/month)&lt;/li&gt;
&lt;li&gt;SSL: Free (Let's Encrypt)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Total: $7/month&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Way cheaper than managed platforms, and you have full control.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Once deployed, you can add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom domain + SSL&lt;/li&gt;
&lt;li&gt;Nginx reverse proxy&lt;/li&gt;
&lt;li&gt;CI/CD pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'll cover these in future posts.&lt;/p&gt;




&lt;p&gt;💡 Use the link above to get $200 in free credits. I use DO for all my projects — it's been rock solid.&lt;/p&gt;

&lt;p&gt;Questions? Drop them in the comments 👇&lt;/p&gt;

</description>
      <category>node</category>
      <category>deployment</category>
      <category>tutorial</category>
      <category>digitalocean</category>
    </item>
    <item>
      <title>在VPS上部署MySQL数据库：性能优化指南</title>
      <dc:creator>天涯</dc:creator>
      <pubDate>Sun, 19 Apr 2026 10:00:02 +0000</pubDate>
      <link>https://forem.com/codetime/zai-vpsshang-bu-shu-mysqlshu-ju-ku-xing-neng-you-hua-zhi-nan-5kn</link>
      <guid>https://forem.com/codetime/zai-vpsshang-bu-shu-mysqlshu-ju-ku-xing-neng-you-hua-zhi-nan-5kn</guid>
      <description>&lt;h1&gt;
  
  
  在VPS上部署MySQL数据库：性能优化指南
&lt;/h1&gt;

&lt;p&gt;第一次部署项目的时候，我在服务器上折腾了8个小时。现在回想起来，如果当时有人告诉我这些坑，20分钟就能搞定。&lt;/p&gt;

&lt;p&gt;今天我把完整的部署流程整理出来，保证你看完就能上手，不走弯路。&lt;/p&gt;

&lt;h2&gt;
  
  
  为什么部署总是这么难？
&lt;/h2&gt;

&lt;p&gt;说实话，部署这事儿最坑的不是技术难度，而是：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;教程都过时了&lt;/strong&gt;：去年的教程，今年的系统版本已经变了&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;漏了关键步骤&lt;/strong&gt;：防火墙、权限、环境变量，少一个都不行&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;本地能跑，服务器就挂&lt;/strong&gt;：端口占用、路径不对、依赖缺失&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;我踩过的坑：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;忘了开防火墙端口，调试了2小时才发现&lt;/li&gt;
&lt;li&gt;用 root 用户跑应用，被黑客攻击了&lt;/li&gt;
&lt;li&gt;没配置进程守护，服务器重启后应用就挂了&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  我的部署清单（照着做不会错）
&lt;/h2&gt;

&lt;p&gt;这是我总结的部署 checklist，每次部署都过一遍：&lt;/p&gt;

&lt;h2&gt;
  
  
  准备工作
&lt;/h2&gt;

&lt;p&gt;你需要：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;一个 DigitalOcean 账号（&lt;a href="https://m.do.co/c/4e466c7c5171" rel="noopener noreferrer"&gt;点击注册获取 $200 免费额度&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;一个 Node.js 项目&lt;/li&gt;
&lt;li&gt;基本的命令行知识&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  步骤1：创建云服务器
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;登录 DigitalOcean 控制台&lt;/li&gt;
&lt;li&gt;点击 "Create" → "Droplets"&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择配置：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;镜像：Ubuntu 22.04 LTS&lt;/li&gt;
&lt;li&gt;套餐：Basic $4/月（足够小项目使用）&lt;/li&gt;
&lt;li&gt;数据中心：选择离你最近的&lt;/li&gt;
&lt;li&gt;SSH Key：添加你的公钥（推荐）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;点击 "Create Droplet"，等待1分钟&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  步骤2：连接服务器
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@your_server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  步骤3：安装 Node.js
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 更新系统&lt;/span&gt;
apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# 安装 Node.js 20.x&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://deb.nodesource.com/setup_20.x | bash -
apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs

&lt;span class="c"&gt;# 验证安装&lt;/span&gt;
node &lt;span class="nt"&gt;--version&lt;/span&gt;
npm &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  步骤4：部署应用
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 克隆你的项目&lt;/span&gt;
git clone https://github.com/your-username/your-project.git
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project

&lt;span class="c"&gt;# 安装依赖&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# 启动应用&lt;/span&gt;
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  步骤5：使用 PM2 保持运行
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 安装 PM2&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; pm2

&lt;span class="c"&gt;# 启动应用&lt;/span&gt;
pm2 start app.js &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"my-app"&lt;/span&gt;

&lt;span class="c"&gt;# 设置开机自启&lt;/span&gt;
pm2 startup
pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  步骤6：配置防火墙
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 允许 HTTP 和 HTTPS&lt;/span&gt;
ufw allow 80
ufw allow 443
ufw allow 22
ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  完成！
&lt;/h2&gt;

&lt;p&gt;现在访问 &lt;code&gt;http://your_server_ip&lt;/code&gt;，你的应用已经在线了！&lt;/p&gt;

&lt;h2&gt;
  
  
  下一步
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;配置域名&lt;/li&gt;
&lt;li&gt;安装 Nginx 反向代理&lt;/li&gt;
&lt;li&gt;配置 SSL 证书（Let's Encrypt）&lt;/li&gt;
&lt;li&gt;设置 CI/CD 自动部署&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  成本分析
&lt;/h2&gt;

&lt;p&gt;使用 DigitalOcean 的 $4/月套餐：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1GB 内存&lt;/li&gt;
&lt;li&gt;25GB SSD&lt;/li&gt;
&lt;li&gt;1TB 流量&lt;/li&gt;
&lt;li&gt;足够运行多个小型应用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://m.do.co/c/4e466c7c5171" rel="noopener noreferrer"&gt;立即注册，获取 $200 免费额度&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;有问题欢迎评论！&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>database</category>
      <category>tutorial</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
