Instalasi Docker

Prasyarat
  • Sudah menginstal Docker dan Docker Compose
  • Pastikan layanan Docker sedang berjalan

1. Buat docker-compose.yml Baru

# Buat folder bernama my-project (bisa nama lain) untuk menyimpan file sistem yang dibuat NocoBase
mkdir my-project && cd my-project

# Buat file docker-compose.yml kosong
vi docker-compose.yml

2. Konfigurasi docker-compose.yml

Pilih versi NocoBase (Perbandingan Versi) dan tipe database, salin konfigurasi yang sesuai ke docker-compose.yml.

Penjelasan Konfigurasi
  • Pemilihan Image: latest latest-full beta beta-full alpha alpha-full 1.7.14 1.7.14-full
    • Untuk lingkungan produksi disarankan menggunakan versi numerik tetap untuk menghindari upgrade otomatis yang tidak disengaja. Lihat semua versi
    • Image Aliyun: registry.cn-shanghai.aliyuncs.com/nocobase/nocobase:latest-full
    • Image Docker Hub: nocobase/nocobase:latest-full
    • Image full mencakup PostgreSQL 16/17 client, MySQL 8.0 client, Oracle 19.25 client yang dibutuhkan Plugin manajemen backup dan migrasi, serta LibreOffice yang dibutuhkan untuk template printing (PDF)
    • Jika ingin membangun image sendiri, dapat merujuk ke Dockerfile (versi ringan) dan Dockerfile-full (versi lengkap) resmi
  • Modifikasi APP_KEY: Ganti your-secret-key dengan string acak, digunakan untuk mengenkripsi Token pengguna dan informasi sensitif lainnya
  • Menggunakan Database yang Sudah Ada: Jika sudah memiliki layanan database, modifikasi DB_HOST ke alamat server database, dan hapus atau komentari konfigurasi layanan database (seperti layanan postgres, mysql, mariadb)
  • Pemetaan Port: Default memetakan port 80 container ke port 13000 host, dapat dimodifikasi sesuai kebutuhan
Versi Latest
Versi Beta
Versi Alpha
PostgreSQL
MySQL
MariaDB
networks:
  nocobase:
    driver: bridge

services:
  app:
    image: registry.cn-shanghai.aliyuncs.com/nocobase/nocobase:latest-full
    restart: always
    networks:
      - nocobase
    depends_on:
      - postgres
    environment:
      # Kunci aplikasi, digunakan untuk menghasilkan Token pengguna, dll.
      # Jika APP_KEY dimodifikasi, Token lama akan menjadi tidak valid
      # Bisa berupa string acak apa saja, dan pastikan tidak bocor ke pihak luar
      - APP_KEY=your-secret-key
      # Tipe database, mendukung postgres, mysql, mariadb
      - DB_DIALECT=postgres
      # Host database, dapat diganti dengan IP server database yang sudah ada
      - DB_HOST=postgres
      # Database port
      - DB_PORT=5432
      # Nama database
      - DB_DATABASE=nocobase
      # Pengguna database
      - DB_USER=nocobase
      # Password database
      - DB_PASSWORD=nocobase
      # Zona waktu
      - TZ=Asia/Shanghai

    volumes:
      - ./storage:/app/nocobase/storage
    ports:
      - '13000:80'
    # init: true

  # Jika menggunakan layanan database yang sudah ada, postgres tidak perlu dijalankan
  postgres:
    image: registry.cn-shanghai.aliyuncs.com/nocobase/postgres:16
    restart: always
    command: postgres -c wal_level=logical
    environment:
      POSTGRES_USER: nocobase
      POSTGRES_DB: nocobase
      POSTGRES_PASSWORD: nocobase
    volumes:
      - ./storage/db/postgres:/var/lib/postgresql/data
    networks:
      - nocobase

3. Instal dan Jalankan NocoBase

# Tarik image terbaru
docker compose pull

# Jalankan di background (saat pertama kali dijalankan, instalasi akan dilakukan otomatis)
docker compose up -d

# Lihat log instalasi dan runtime
docker compose logs -f app

app-postgres-app-1  | nginx started
app-postgres-app-1  | yarn run v1.22.15
app-postgres-app-1  | $ cross-env DOTENV_CONFIG_PATH=.env node -r dotenv/config packages/app/server/lib/index.js install -s
app-postgres-app-1  | Done in 2.72s.
app-postgres-app-1  | yarn run v1.22.15
app-postgres-app-1  | $ pm2-runtime start --node-args="-r dotenv/config" packages/app/server/lib/index.js -- start
app-postgres-app-1  | 2022-04-28T15:45:38: PM2 log: Launching in no daemon mode
app-postgres-app-1  | 2022-04-28T15:45:38: PM2 log: App [index:0] starting in -fork mode-
app-postgres-app-1  | 2022-04-28T15:45:38: PM2 log: App [index:0] online
app-postgres-app-1  | 🚀 NocoBase server running at: http://localhost:13000/

4. Login ke NocoBase

Buka http://localhost:13000 di browser, akun dan password awal adalah admin@nocobase.com dan admin123.

Tips Keamanan Akun

Setelah login pertama kali, segera ubah password default untuk memastikan keamanan sistem.

5. Deployment produksi

Jika Anda menggunakan image dengan Nginx bawaan, biasanya lebih baik tidak mengekspos 13000 langsung ke internet publik. Cara yang lebih umum adalah membiarkan port kontainer hanya tersedia di host, lalu menggunakan Nginx di host untuk menangani domain, HTTPS, dan reverse proxy.

Proxy path root dengan Nginx

Konfigurasi berikut mem-proxy permintaan domain ke http://127.0.0.1:13000/:

server {
    listen 80;
    server_name your_domain.com;  # Ganti your_domain.com dengan domain Anda

    location / {
        proxy_pass http://127.0.0.1:13000/;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
        proxy_set_header Host $final_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header User-Agent $http_user_agent;

        add_header Cache-Control "no-cache, no-store" always;
        proxy_cache_bypass $http_upgrade;

        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
        proxy_buffering off;
    }
}

Jika Anda juga ingin mengaktifkan HTTPS, konfigurasikan 443 dan sertifikat di Nginx host. Kontainer NocoBase tidak perlu menangani sertifikat secara terpisah.

Blok location / pada konfigurasi root path ini juga meneruskan /api/, /ws, dan /files/. Jika Anda memisahkan aset statis dari rute aplikasi, pastikan /files/ tetap diteruskan ke NocoBase dan tidak diperlakukan sebagai direktori statis.

Deployment subpath

Jika Anda ingin men-deploy aplikasi di subpath, misalnya https://your_domain.com/nocobase/, konfigurasikan dulu variabel lingkungan APP_PUBLIC_PATH:

services:
  app:
    image: nocobase/nocobase:latest
    environment:
+     - APP_PUBLIC_PATH=/nocobase/

Pertahankan / di awal dan akhir path. Setelah dikonfigurasi, URL aplikasi menjadi http://127.0.0.1:13000/nocobase/.

Lalu konfigurasikan Nginx host dengan proxy subpath yang sama:

server {
    listen 80;
    server_name your_domain.com;  # Ganti your_domain.com dengan domain Anda

    location /nocobase/ {
        proxy_pass http://127.0.0.1:13000/nocobase/;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
        proxy_set_header Host $final_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header User-Agent $http_user_agent;

        add_header Cache-Control "no-cache, no-store" always;
        proxy_cache_bypass $http_upgrade;

        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
        proxy_buffering off;
    }

    # Pertahankan kompatibilitas dengan URL akses file di root.
    location ^~ /files/ {
        proxy_pass http://127.0.0.1:13000;
        proxy_http_version 1.1;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
        proxy_set_header Host $final_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header User-Agent $http_user_agent;

        add_header Cache-Control "no-cache, no-store" always;

        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
    }
}

Perhatikan hal berikut:

  • APP_PUBLIC_PATH dan path di proxy_pass harus konsisten. Jika salah satu sisi tidak menyertakan /nocobase/, aset statis dan routing biasanya tidak akan berjalan dengan benar
  • /nocobase/files/ diteruskan oleh location /nocobase/; rute kompatibilitas /files/ di root harus diteruskan ke NocoBase secara terpisah

Opsi lain

Jika Anda tidak ingin menggunakan Nginx bawaan, Anda juga bisa melihat dua konfigurasi proxy terpisah ini: