<?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>DEV Community: 天涯</title>
    <description>The latest articles on DEV Community by 天涯 (@codetime).</description>
    <link>https://dev.to/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>DEV Community: 天涯</title>
      <link>https://dev.to/codetime</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codetime"/>
    <language>en</language>
    <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://dev.to/codetime/deploy-a-nodejs-app-to-digitalocean-in-5-minutes-1a6f</link>
      <guid>https://dev.to/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://dev.to/codetime/zai-vpsshang-bu-shu-mysqlshu-ju-ku-xing-neng-you-hua-zhi-nan-5kn</link>
      <guid>https://dev.to/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>
