Back to articles
Technology Insight

Self-Hosting Appwrite on Oracle Cloud ARM VPS: The Ultimate Lifetime-Free Mobile Backend Solution

May 29, 2026

Introduction: The Mobile Developer's Backend Dilemma

In modern mobile application development, building a robust, scalable backend is often one of the most resource-intensive phases. Developers frequently find themselves torn between the simplicity of Backend-as-a-Service (BaaS) platforms like Firebase and the total control offered by custom cloud infrastructure. While Firebase offers an excellent starting point, scaling can quickly become prohibitively expensive, and vendor lock-in remains a persistent threat.

Enter Appwrite: an open-source, secure, and end-to-end backend server for Web, Mobile, and Flutter developers. By self-hosting Appwrite, you retain absolute ownership of your data and infrastructure. When paired with Oracle Cloud Infrastructure (OCI) Always Free ARM instances, you unlock an enterprise-grade backend capable of handling production-level traffic at exactly zero cost for life. This guide provides a definitive, step-by-step blueprint to provisioning your VPS, deploying Appwrite via Docker, and securing it for production use.

Why Appwrite on Oracle Cloud ARM is a Game-Changer

Before diving into the technical implementation, it is vital to understand why this specific combination represents such an unmatched value proposition for mobile developers.

The Power of Oracle's Always Free ARM Tier

Unlike standard free tiers from other major cloud providers, which typically offer minuscule, single-core x86 virtual machines with 1GB of RAM, Oracle Cloud's Ampere Altra ARM offer is staggeringly generous. The Always Free tier grants developers access to:

  • Up to 4 ARM Ampere Altra CPU cores
  • Up to 24 GB of RAM
  • 4 Gbps network bandwidth
  • 200 GB of block storage

This allocation is more than sufficient to host multiple production microservices, let alone a centralized Appwrite instance handling thousands of concurrent mobile clients.

Appwrite: The Open-Source Firebase Alternative

Appwrite simplifies mobile development by providing pre-built APIs for core functionalities. Instead of writing boilerplate code for databases, authentication, and file storage, Appwrite offers native SDKs for Flutter, iOS, Android, and React Native. Key features include:

  • Authentication: OAuth2, Magic Links, Phone, and Email/Password support.
  • Databases: Real-time, flexible NoSQL-like document databases with advanced permissions.
  • Storage: File upload, download, and image transformation with built-in encryption.
  • Functions: Serverless runtimes supporting multiple languages (Node.js, Python, Dart, etc.) to execute custom backend logic.

Step 1: Provisioning Your Oracle Cloud ARM Instance

To begin, log in to your Oracle Cloud Infrastructure console. If you do not have an account, sign up for the Free Tier (note that a valid credit card is required for identity verification, but you will not be charged).

Creating the Compute Instance

  1. Navigate to the OCI menu and select Compute > Instances, then click Create Instance.
  2. Name your instance something recognizable (e.g., appwrite-backend-vps).
  3. In the Placement and Image and Shape section, click Edit.
  4. Click Change Image and select Ubuntu 22.04 LTS Minimal or Canonical Ubuntu 24.04 (optimized for ARM).
  5. Click Change Shape, select Ampere (ARM-based processor), and configure your desired resources. We recommend allocating 2 to 4 OCPUs and 12 to 24 GB of RAM depending on your project needs.
  6. In the Networking section, ensure a Public IP address is assigned by selecting Create new virtual cloud network (VCN).
  7. In the SSH keys section, download your private and public keys. Crucial: Do not lose these keys, as they are required to access your server.
  8. Click Create and wait for the instance status to turn green (Running).

Step 2: Configuring Network Security and Firewalls

Oracle Cloud instances are heavily protected by default network firewalls (Security Lists) and internal OS firewalls. We must open the necessary ports to allow mobile clients to communicate with Appwrite.

Modifying OCI Security Lists

Navigate to your Instance Details page, click on the attached Virtual Cloud Network (VCN), and select your Ingress Rules. Add the following rules:

  • Port 80 (HTTP): Source 0.0.0.0/0 - Required for Let's Encrypt SSL verification.
  • Port 443 (HTTPS): Source 0.0.0.0/0 - Required for secure production API traffic.

Updating the OS Firewall

Connect to your VPS via SSH using your terminal or command prompt:

ssh -i /path/to/your/private_key ubuntu@your_vps_public_ip

Once logged in, execute the following commands to open ports within Ubuntu's netfilter/iptables subsystem (Oracle's default Ubuntu image blocks incoming traffic by default):

sudo iptables -I INPUT 6 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
sudo netfilter-persistent reload

Step 3: Installing Docker and Docker Compose on ARM

Appwrite is fully containerized and relies heavily on Docker. Because we are operating on an ARM64 architecture, we must install the official, native version of Docker Engines.

Run the following script to update your system packages and install Docker:

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings
curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.4/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Verify that Docker is active and running correctly on ARM by checking the versions:

sudo docker --version
sudo docker compose version

Step 4: Deploying Appwrite via the Multi-Arch Installer

Appwrite provides an elegant multi-architecture Docker setup script that natively supports linux/arm64 infrastructure out of the box. Run the official installation command:

sudo docker run -it --rm \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --volume "$(pwd)"/appwrite:/usr/src/code/appwrite \
    --workdir /usr/src/code \
    appwrite/appwrite:latest setup

Interactive Setup Configuration

During execution, the installer will prompt you for several inputs. Complete them accurately:

  • Choose your server HTTP port: Default is 80. Keep it as 80.
  • Choose your server HTTPS port: Default is 443. Keep it as 443.
  • Choose your unique API secret key: Press enter to auto-generate or input a secure string.
  • Enter your primary server hostname: Enter your domain or subdomain (e.g., api.yourdomain.com). Note: Point your domain's A Record to your Oracle VPS IP address before completing this step.
  • Enter your custom DNS Canva: Leave blank or use default.

Once configured, Docker will automatically pull the necessary ARM-compatible images (including MariaDB, Redis, InfluxDB, and Appwrite Core services) and initialize the ecosystem. This process may take a few minutes.

Step 5: Accessing the Dashboard and Connecting Mobile SDKs

Open your preferred web browser and navigate to your configured domain (e.g., [https://api.yourdomain.com](https://api.yourdomain.com)). Appwrite will automatically request an SSL certificate via its built-in Let's Encrypt integration, ensuring all communication between your mobile app and the backend is heavily encrypted.

Creating Your Admin Account

The first time you access the panel, you will be prompted to create an administrative account. Once inside, create a new project. This project will generate a unique Project ID.

Integrating with Mobile Client SDKs

To connect your mobile application, simply install the appropriate Appwrite SDK and initialize your client instance. Here is an example of initializing the backend within a Flutter or Dart ecosystem:

import 'package:appwrite/appwrite.dart';

void main() {
  Client client = Client();
  client
    .setEndpoint('[https://api.yourdomain.com/v1](https://api.yourdomain.com/v1)')
    .setProject('YOUR_PROJECT_ID')
    .setSelfSigned(status: false); // Set to true only during local development
}

For native iOS (Swift) or Android (Kotlin) applications, the paradigm remains identical. Appwrite handles connection pooling, persistent sockets for real-time synchronization, and multi-threaded request processing seamlessly within your allocated ARM environment.

Conclusion: Production Ready at No Cost

By hosting Appwrite on an Oracle Cloud ARM VPS, you have successfully deployed a resilient, flexible, enterprise-grade backend infrastructure. This setup eliminates artificial vendor constraints, bypasses the scaling-cost traps of traditional cloud databases, and places absolute ownership of user data back into your control. Whether you are launching an indie mobile app or building an MVP for a budding startup, this lifetime-free setup provides the reliable foundations needed to build and scale with complete confidence.

Self-Hosting Appwrite on Oracle Cloud ARM VPS: The Ultimate Lifetime-Free Mobile Backend Solution | DPTCloud