Deploy Paperclip on Oracle Cloud Free Tier
Oracle Cloud's Always Free tier offers an Ampere A1 VM with up to 4 vCPUs and 24 GB RAM — at no cost, forever. It's the best free infrastructure available for running Paperclip.
Deploy on Railway instead →What you get for free
Oracle Cloud Always Free includes:
- Up to 4 Ampere A1 (ARM) vCPUs
- Up to 24 GB RAM
- 200 GB block storage
- 10 TB/month outbound data transfer
This is more than most teams pay $30–50/month for. The catch: Oracle Cloud's UI is complex and provisioning can be slow during peak demand.
Step 1: Create an Oracle Cloud account
- Go to cloud.oracle.com and sign up for a free account
- You'll need a valid credit card for identity verification — you won't be charged
- Choose a home region carefully — you can't change it later. US East (Ashburn), US West (Phoenix), and Frankfurt are reliable choices.
- Complete the setup wizard
Step 2: Provision an Ampere A1 instance
- In the Oracle Cloud console, go to Compute → Instances → Create Instance
- Configure:
- Name:
paperclip - Compartment: Root compartment (default)
- Image: Ubuntu 22.04 Minimal
- Shape: Click Change Shape
- Select Ampere as the shape series
- Choose VM.Standard.A1.Flex
- Set OCPUs: 2 (or 4 for maximum free allocation)
- Set Memory: 12 GB (or 24 GB)
- Name:
- Add SSH key: Upload your public key or generate a new one
- Click Create
Note: If you get "Out of capacity" errors, try a different availability domain within the same region, or retry at a different time of day. Free tier A1 instances are in high demand.
Step 3: Configure networking
After the instance is created, you need to open ports 80 and 443 in Oracle Cloud's firewall:
- Go to Networking → Virtual Cloud Networks
- Click your VCN → Security Lists → Default Security List
- Add Ingress Rules:
- Source: 0.0.0.0/0, Protocol: TCP, Port: 80
- Source: 0.0.0.0/0, Protocol: TCP, Port: 443
Also configure the instance's firewall:
# Connect to the instance
ssh -i your-key.pem ubuntu@YOUR_INSTANCE_IP
# Open ports in iptables (Oracle instances use iptables, not ufw by default)
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
Step 4: Install Node.js and Paperclip
sudo apt update && apt upgrade -y
sudo apt install -y curl git nginx
# Install Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# Install Paperclip
sudo npm install -g paperclipai
# Create data directory
sudo mkdir -p /opt/paperclip/data
sudo chown -R ubuntu:ubuntu /opt/paperclip
Step 5: Configure and start Paperclip
cat > /opt/paperclip/.env << 'EOF'
NODE_ENV=production
PAPERCLIP_DATA_DIR=/opt/paperclip/data
BETTER_AUTH_SECRET=REPLACE_WITH_RANDOM_SECRET
PAPERCLIP_LISTEN_PORT=3100
PAPERCLIP_LISTEN_HOST=127.0.0.1
PAPERCLIP_MIGRATION_AUTO_APPLY=true
PAPERCLIP_MIGRATION_PROMPT=never
EOF
chmod 600 /opt/paperclip/.env
Generate secret: openssl rand -hex 32
Create systemd service:
sudo tee /etc/systemd/system/paperclip.service << 'EOF'
[Unit]
Description=Paperclip AI
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/opt/paperclip
EnvironmentFile=/opt/paperclip/.env
ExecStart=/usr/bin/npx paperclipai server start
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now paperclip
Step 6: nginx and SSL
sudo tee /etc/nginx/sites-available/paperclip << 'EOF'
server {
listen 80;
server_name paperclip.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3100;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/paperclip /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d paperclip.yourdomain.com
Step 7: DNS
Add an A record pointing paperclip.yourdomain.com to your instance's public IP.
Find your instance's IP in the Oracle Cloud console: Compute → Instances → Instance Details → Public IP Address.
ARM compatibility note
Oracle Ampere A1 instances use ARM64 architecture. Paperclip (Node.js) runs natively on ARM64 with no changes needed. All npm install and npx commands work identically.
Common issues
Capacity not available: Oracle has limited free A1 capacity. Try at different times of day (off-peak hours) or try different availability domains.
Port 80 blocked: Oracle Cloud uses both VCN Security Lists and OS-level iptables. You need to open ports in both.
Instance hibernated: Oracle may reclaim Always Free instances that appear idle. Add a health check cron to prevent hibernation:
crontab -e
# Add: */5 * * * * curl -s http://localhost:3100/api/health > /dev/null
Cost
$0/month, forever — as long as you stay within the Always Free tier limits.
Railway gives you $20 free credit with much simpler setup if you'd prefer not to navigate Oracle's complex console.
Ready to deploy?
Affiliate disclosure: this link may earn us a commission at no extra cost to you.
This is an independent guide. Paperclip Hosting is not affiliated with the official Paperclip project. Guide steps are based on real deployments and are subject to change as the software evolves.
Related articles
Deploy Paperclip on Fly.io
Run Paperclip on Fly.io with persistent storage, zero-downtime deploys, and global edge distribution — full setup guide.
Deploy Paperclip on Render
Host Paperclip on Render with a persistent disk, free SSL, and auto-deploys from GitHub — step-by-step setup guide.
Deploy Paperclip on Hetzner Cloud
Host Paperclip on Hetzner for as little as €4.51/month — one of the cheapest VPS options in Europe with great performance.
