Question
how to deploy to digital ocean?
Answer
Deploying to DigitalOcean depends on what you are deploying (a static site, a Node.js app, a Python API, Docker containers, etc.) and how much control you want.
Here are the **two most common ways** to deploy: using **App Platform** (easiest, recommended) or using a **Droplet** (full control, traditional server).
---
### Method 1: App Platform (The Easy Way)
App Platform is DigitalOcean's Platform-as-a-Service (PaaS). It is similar to Heroku or Vercel. You connect your GitHub repository, and DigitalOcean builds and runs your code automatically.
**Best for:** Web apps, APIs, static sites, and developers who don't want to manage servers.
**Steps:**
1. **Push your code to GitHub/GitLab** (if it isn't already).
2. **Log in to DigitalOcean** and go to **App Platform** in the left menu.
3. Click **Create App**.
4. Choose **GitHub** (or GitLab/Bitbucket) as your source and authorize DigitalOcean to access your repository.
5. Select the repository and the branch you want to deploy.
6. **Configure your app:**
* DigitalOcean will usually auto-detect your framework (Node.js, Python, Go, Docker, etc.).
* Set your **Run Command** (e.g., `npm start` or `gunicorn app:app`).
* Add **Environment Variables** (like database URLs, API keys, etc.).
7. **Choose a Plan:** You can select the **Basic** plan (starts at $5/mo) or **Starter** (free for static sites).
8. Click **Launch App**.
* DigitalOcean will now build your app and give you a live URL (e.g., `your-app.ondigitalocean.app`).
* *Note:* Every time you push to your main branch, it will automatically redeploy!
---
### Method 2: Droplet (The Traditional Server Way)
A Droplet is a Linux Virtual Private Server (VPS). You get full root access, meaning you have to install everything (Node, Python, Nginx, etc.) yourself.
**Best for:** Complex architectures, custom server configurations, budget-friendly large apps (Droplets start at $4/mo).
**Steps:**
1. **Create a Droplet:**
* Go to **Droplets** in the left menu and click **Create Droplet**.
* Choose an OS (Ubuntu is the most popular).
* Choose a Plan (Basic $4-$6/mo is fine to start).
* **Crucial:** Add your SSH key so you can log in securely. (If you don't, a password will be emailed to you).
* Click **Create Droplet**.
2. **Connect to your Droplet:**
* Open your terminal and SSH into the server using the IP address provided:
```bash
ssh root@your_droplet_ip
```
3. **Update the Server & Install Dependencies:**
* Update packages: `apt update && apt upgrade -y`
* Install what you need (e.g., `apt install nodejs npm nginx -y` or `apt install python3-pip -y`).
4. **Transfer your Code:**
* The easiest way is to clone your GitHub repo:
```bash
git clone https://github.com/your-username/your-repo.git
cd your-repo
```
* Install your app dependencies (e.g., `npm install` or `pip install -r requirements.txt`).
5. **Run your App in the Background:**
* Never run your app directly in the SSH terminal, because it will stop when you close the terminal.
* Use a process manager like **PM2** (for Node) or **Systemd** (for Python/Go).
* *PM2 Example:*
```bash
npm install -g pm2
pm2 start app.js --name "my-app"
pm2 startup
pm2 save
```
6. **Set up a Reverse Proxy (Nginx):**
* Your app is likely running on a port like `3000` or `8000`. You need Nginx to route traffic from Port 80 (standard HTTP) to your app.
* Install Nginx: `apt install nginx -y`
* Edit the Nginx config: `nano /etc/nginx/sites-available/default`
* Add a proxy pass (example for a Node app on port 3000):
```nginx
server {
listen 80;
server_name your_domain_or_ip;
location / {
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;
}
}
```
* Restart Nginx: `systemctl restart nginx`
7. **Add SSL (HTTPS):**
* Install Certbot: `apt install certbot python3-certbot-nginx -y`
* Run Certbot: `certbot --nginx` (Follow the prompts to attach your domain name and get a free SSL certificate).
---
### Which one should you choose?
| Feature | App Platform | Droplet |
| :--- | :--- | :--- |
| **Difficulty** | Easy (No DevOps needed) | Medium/Hard (Requires Linux knowledge) |
| **Cost** | Starts at $5/mo (Free for static) | Starts at $4/mo |
| **Scaling** | Automatic (click a button) | Manual (resize server, configure load balancer) |
| **Customization** | Limited | Unlimited (you have root access) |
| **SSL/HTTPS** | Automatic | Manual (via Certbot) |
**If you want zero headaches:** Use App Platform.
**If you want full control and the cheapest compute:** Use a Droplet.
*If you tell me what language/framework you are using (e.g., React, Node.js, Django, Docker), I can give you the exact deployment steps for that specific stack!*