Bỏ qua để đến nội dung

Cài đặt

Phần cứng tối thiểu: 2 GB RAM (dev) / 4 GB RAM (production 1-10 users) · 10 GB disk trống · 2 vCPU.

Phần mềm: Docker Engine 24+ và Docker Compose plugin v2.20+ · Git. PostgreSQL không cần cài riêng — chạy trong Docker.

OS hỗ trợ: Ubuntu 22.04 / 24.04 LTS (khuyến nghị cho production) · Debian 12+ · macOS + Windows/WSL2 (chỉ dev).

Chạy local trên laptop để demo / develop.

  1. Clone repo

    Terminal window
    git clone https://github.com/bsdinsight/realtypro.git
    cd realtypro
  2. Tạo file .env + đặt password mạnh

    Terminal window
    cp .env.example .env
    POSTGRES_PASSWORD=<random-string-32-chars>
  3. Boot PostgreSQL trước

    Terminal window
    docker compose up -d db
    docker compose logs -f db
    # Ctrl-C sau khi thấy "database system is ready to accept connections"
  4. Boot Odoo

    Terminal window
    docker compose up -d odoo
    docker compose logs -f odoo
    # Ctrl-C sau khi thấy "HTTP service running"
  5. Truy cập http://localhost:8169/odoo — login mặc định admin / admin.

  6. Cài 6 module — Settings → Apps → Update Apps List → search “Realty” → cài cả 6 (re_loan, rp_estimate, rp_contract, rp_progress, rp_contractor, rp_loan_bridge). Dependencies tự xử lý thứ tự.

Phù hợp cho 5-50 user, nhiều dự án, backup tự động.

Internet
└── domain.com (DNS)
└── Cloudflare Tunnel HOẶC Nginx + Let's Encrypt
└── Docker network → odoo container :8069
├── realtypro-odoo (Odoo 19)
├── realtypro-db (PostgreSQL 16)
└── realtypro-cloudflared (tunnel client, tuỳ chọn)
  1. Pre-flight (VPS Ubuntu 22.04+)

    Terminal window
    curl -fsSL https://get.docker.com | sh
    sudo usermod -aG docker $USER # logout/login lại để group có hiệu lực
    docker --version # >= 24
    docker compose version # >= v2.20
  2. Clone + cấu hình .env

    Terminal window
    cd /opt && git clone https://github.com/bsdinsight/realtypro.git && cd realtypro
    cp .env.example .env && nano .env

    Đặt: POSTGRES_PASSWORD (random 32+ ký tự) · TUNNEL_TOKEN (để trống tạm) · ADMIN_PASSWD (random, KHÔNG dùng “admin”).

  3. Init theo thứ tự (Postgres trước, Odoo sau)

    Terminal window
    docker compose up -d db && docker compose logs -f db # đợi "ready"
    docker compose up -d odoo && docker compose logs -f odoo # đợi "HTTP service running"
  4. Tạo DB + cài modules

    Terminal window
    docker compose exec -T db createdb -U odoo dev
    docker compose exec odoo odoo -d dev -i base --stop-after-init --no-http
    docker compose exec odoo odoo -d dev \
    -i re_loan,rp_estimate,rp_contract,rp_progress,rp_contractor,rp_loan_bridge \
    --stop-after-init --no-http
    docker compose restart odoo

Trên máy nguồn: ./backup.sh → copy backups/ sang VPS qua scp. Trên VPS:

Terminal window
cd /opt/realtypro
# Drop DB cũ + tạo lại
docker compose exec -T db psql -U odoo -d postgres -c \
"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='dev';"
docker compose exec -T db psql -U odoo -d postgres -c "DROP DATABASE IF EXISTS dev;"
docker compose exec -T db createdb -U odoo dev
# Restore dump + filestore
gunzip -c restore/dev.dump.gz | docker compose exec -T db pg_restore -U odoo --no-owner -d dev
mkdir -p data/filestore && tar -xzf restore/filestore.tar.gz -C data/filestore/
# Fix quyền filestore (extract bởi root → Odoo uid 101 không write được)
docker compose exec --user root odoo chown -R odoo:odoo /var/lib/odoo
# Đổi web.base.url cho hostname mới + clear asset cache
docker compose exec -T db psql -U odoo -d dev -c "
UPDATE ir_config_parameter SET value='https://your-domain.com' WHERE key='web.base.url';
UPDATE ir_config_parameter SET value='False' WHERE key='web.base.url.freeze';
DELETE FROM ir_attachment WHERE name LIKE '%web.assets%';"
docker compose restart odoo

Phương án A — Cloudflare Tunnel (khuyến nghị)

Phần tiêu đề “Phương án A — Cloudflare Tunnel (khuyến nghị)”

Không cần mở port public, không cần SSL cert riêng, miễn phí.

  1. Cloudflare Zero Trust → Networks → Tunnels → Create tunnel → Connector Docker → copy token eyJ....
  2. Dán chỉ token vào /opt/realtypro/.env: TUNNEL_TOKEN=eyJ... (không paste full lệnh docker run).
  3. Cloudflare Public Hostname: Subdomain realtypro · Domain your-domain.com · Path để trống · Service HTTPodoo:8069.
  4. Start: docker compose --profile tunnel up -d cloudflared — đợi “Connection registered”.

Cần port 80/443 public.

nginx/sites-available/realtypro.conf.example
sudo apt install nginx certbot python3-certbot-nginx
sudo cp nginx/sites-available/realtypro.conf.example /etc/nginx/sites-available/realtypro.conf
sudo ln -s /etc/nginx/sites-available/realtypro.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d realtypro.your-domain.com

Nginx proxy realtypro.your-domain.comlocalhost:8169.

Realty Project Enterprise có thêm: Bryntum Gantt (Critical Path, Resource Leveling), không giới hạn quy mô, multi-company, hỗ trợ cao cấp. License OPL-1 — cần key từ BSD Insight: liên hệ qua trang Liên hệ.

Sau khi được cấp truy cập repo private:

Terminal window
cd /opt && git clone https://github.com/bsdinsight/realtypro-enterprise.git

Mount thêm enterprise addons trong docker-compose.yml + cập nhật addons_path trong odoo.conf, rồi:

Terminal window
docker compose restart odoo
docker compose exec odoo odoo -d dev -u all --stop-after-init --no-http

Apply license: Settings → General → License key.

Terminal window
docker compose exec -T db psql -U odoo -d dev -c \
"SELECT name, latest_version FROM ir_module_module
WHERE state='installed' AND (name LIKE 're_%' OR name LIKE 'rp_%') ORDER BY name;"

Phải thấy 6 module Realty Project + dependencies. Trên browser: menu Realty Project xuất hiện với Quản lý Vay, HĐ nhà thầu, Đấu thầu

  • POSTGRES_PASSWORD đổi từ mặc định
  • Password admin + master password (admin_passwd) đổi từ “admin”
  • Daily backup cron + ship off-VPS (S3, B2, rsync sang host khác)
  • Firewall: chỉ mở port cần (chỉ outbound nếu dùng Cloudflare Tunnel)
  • .env + compose.override.yml trong .gitignore
  • 2FA cho Cloudflare account (nếu dùng Tunnel)
  • SSH key + tắt password auth trên VPS
  • Uptime monitor (UptimeRobot, healthchecks.io)
Terminal window
./backup.sh /opt/backups/realtypro
# Cron daily 02:30:
30 2 * * * root cd /opt/realtypro && ./backup.sh /opt/backups/realtypro >> /var/log/realtypro-backup.log 2>&1
LỗiNguyên nhânFix
lookup odoo ... no such hostcloudflared trên default bridgeDùng docker compose --profile tunnel up -d cloudflared
500 PermissionError /var/lib/odoo/sessionsFilestore extract bởi rootdocker compose exec --user root odoo chown -R odoo:odoo /var/lib/odoo
Login redirect về localhost:8169web.base.url cũ trong DB từ backupUpdate ir_config_parameter + web.base.url.freeze=False
Postgres password mới không applyPostgres chỉ apply lúc init data-dirĐặt đúng trước docker compose up -d db lần đầu, hoặc ALTER USER
Browser load JS cũAsset bundle cacheDELETE FROM ir_attachment WHERE name LIKE '%web.assets%'; + Cmd+Shift+R
StackRAM
Odoo (workers=2)600 MB – 1 GB
PostgreSQL200 – 400 MB
Cloudflared50 MB
OS + Docker daemon400 – 500 MB
Tối thiểu1.5 – 2 GB

Khuyến nghị: VPS 4 GB cho 1-10 users · 8 GB cho 10-50 users · trên 50 users → multi-host.


Tiếp theo: Cấu hình ban đầu →

Chia sẻ: