/lite

A single container version of Appwrite with minimum must have features ⚖️

Primary LanguageShellBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Update (2022-09-15): This repo is still a work in progress - community contribution is encouraged!


Appwrite Logo

A complete backend solution for your [Flutter / Vue / Angular / React / iOS / Android / *ANY OTHER*] app

Discord Docker Pulls Build Status Twitter Account Follow Appwrite on StackShare

Appwrite lite is the stripped down, single container version of Appwrite, with non essential services removed. Optimized for low resource systems.

Table of Contents:

What's different

Appwrite lite is simpler and light weight version. So we have removed few functionalities and made some fundamental changes as follows.

  1. All the services are running inside a single container using supervisord.
  2. Services like ClamAV antivirus and InfluxDB and Telegraf for usage stats have been removed. ClamAV has been removed as it consumes loads of memory and CPU. InfluxDB and Telegraf has been removed because of the complication of integrating these services when targetting deployment systems like Heroku and similar apps platforms.

In case of features, all the features of Appwrite is present except for usage stats and Antivirus.

Who is it good for?

For those of you who wants minimal version of Appwrite that can be run on low res system and those who do not care about usage stats can use Appwrite-lite. Anyone who doesn't allow public to upload files to storage, so are confident that any files downloaded from storage are proper, secure files and doesn't require antivirus to protect their end users can also use this version of Appwrite-lite. Also those who want to deploy Appwrite to platforms like Heroku or Digitalocean Apps platform and other similar platforms can also use Appwrite-lite.

Installation

Appwritelite is simpler version of Appwrite.io. Running your server is as easy as running one command from your terminal.

Create a new folder

Create a new folder, appwrite-lite or whatever you want to call it. And inside that folder continue creating following files.

Create a docker-compose.yml file

version: '3'

services:  
  appwrite-lite:
    image: appwrite/appwrite-lite
    container_name: appwrite-lite
    restart: unless-stopped
    ports: 
      - 80:80
    networks:
      - appwrite-lite
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - appwrite-lite-uploads:/storage/uploads:rw
      - appwrite-lite-cache:/storage/cache:rw
      - appwrite-lite-config:/storage/config:rw
      - appwrite-lite-functions:/storage/functions:rw
      - appwrite-lite-redis:/data:rw
    depends_on:
      - mariadb
    environment:
      - _APP_ENV
      - _APP_SYSTEM_EMAIL_NAME
      - _APP_SYSTEM_EMAIL_ADDRESS
      - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS
      - _APP_OPTIONS_ABUSE
      - _APP_OPTIONS_FORCE_HTTPS
      - _APP_OPENSSL_KEY_V1
      - _APP_DOMAIN
      - _APP_DOMAIN_TARGET
      - _APP_DB_HOST
      - _APP_DB_PORT
      - _APP_DB_SCHEMA
      - _APP_DB_USER
      - _APP_DB_PASS
      - _APP_SMTP_HOST
      - _APP_SMTP_PORT
      - _APP_SMTP_SECURE
      - _APP_SMTP_USERNAME
      - _APP_SMTP_PASSWORD
      - _APP_STORAGE_LIMIT
      - _APP_FUNCTIONS_TIMEOUT
      - _APP_FUNCTIONS_CONTAINERS
      - _APP_FUNCTIONS_CPUS
      - _APP_FUNCTIONS_MEMORY
      - _APP_FUNCTIONS_MEMORY_SWAP

  mariadb:
    image: appwrite/mariadb:1.2.0
    container_name: appwrite-lite-mariadb
    restart: unless-stopped
    networks:
      - appwrite-lite
    volumes:
      - appwrite-lite-mariadb:/var/lib/mysql:rw
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=${_APP_DB_SCHEMA}
      - MYSQL_USER=${_APP_DB_USER}
      - MYSQL_PASSWORD=${_APP_DB_PASS}
    command: 'mysqld --innodb-flush-method=fsync'
  

networks:
  appwrite-lite:

volumes:
  appwrite-lite-mariadb:
  appwrite-lite-redis:
  appwrite-lite-cache:
  appwrite-lite-uploads:
  appwrite-lite-functions:
  appwrite-lite-config:

Then create .env file with the environment settings. Update appropriate configurations

_APP_ENV=development
_APP_SYSTEM_EMAIL_NAME=Appwritelite
_APP_SYSTEM_EMAIL_ADDRESS=team@appwrite.io
_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=security@appwrite.io
_APP_OPTIONS_ABUSE=disabled
_APP_OPTIONS_FORCE_HTTPS=disabled
_APP_OPENSSL_KEY_V1=your-secret-key
_APP_DOMAIN=demo.appwrite.io
_APP_DOMAIN_TARGET=demo.appwrite.io
_APP_DB_HOST=mariadb
_APP_DB_PORT=3306
_APP_DB_SCHEMA=appwrite
_APP_DB_USER=user
_APP_DB_PASS=password
_APP_SMTP_HOST=
_APP_SMTP_PORT=
_APP_SMTP_SECURE=
_APP_SMTP_USERNAME=
_APP_SMTP_PASSWORD=
_APP_STORAGE_LIMIT=10000000
_APP_FUNCTIONS_TIMEOUT=900
_APP_FUNCTIONS_CONTAINERS=10
_APP_FUNCTIONS_CPUS=1
_APP_FUNCTIONS_MEMORY=128
_APP_FUNCTIONS_MEMORY_SWAP=128
_APP_MAINTENANCE_INTERVAL=86400
_APP_SYSTEM_RESPONSE_FORMAT=

Fire up Appwrite lite server

Now you can fire up the server simply by running

docker-compose up -d

Getting Started

Checkout the Getting Started section in Appwrite.

Viewing Logs

To view the list of all the log files available, run the following command.

docker-compose exec appwrite-lite ls /var/log

To view intdividual log files, run the following command

docker-compose exec appwrite-lite cat /var/log/<log-file-name>.log