chuyển qua dùng postgrest

This commit is contained in:
2026-05-20 15:29:44 +07:00
parent 7749e18f4c
commit e023c2bbf2
7 changed files with 210 additions and 2 deletions
+2
View File
@@ -19,3 +19,5 @@ docs/*
#macos
.DS_Store
*.db
+32 -1
View File
@@ -1,4 +1,3 @@
version: '3'
services:
teedy:
image: ghcr.io/victorphan03/teedy-custom:v1.0.5
@@ -11,9 +10,41 @@ services:
- DOCS_BASE_URL=http://localhost:8080
# Tùy chỉnh bộ nhớ Java nếu cần
- JAVA_OPTIONS=-Dfile.encoding=UTF-8 -Xmx1g
# Cấu hình kết nối cơ sở dữ liệu PostgreSQL
- DATABASE_URL=jdbc:postgresql://teedy-db:5432/teedy
- DATABASE_USER=teedy_db_user
- DATABASE_PASSWORD=teedy_db_password
- DATABASE_POOL_SIZE=10
volumes:
# Lưu trữ cơ sở dữ liệu và các file PDF tại đây
- ./teedy-data:/data
networks:
- docker-internal
- internet
depends_on:
- teedy-db
teedy-db:
image: postgres:13.1-alpine
container_name: teedy-db-postgres
restart: always
expose:
- 5432
environment:
- POSTGRES_USER=teedy_db_user
- POSTGRES_PASSWORD=teedy_db_password
- POSTGRES_DB=teedy
volumes:
- ./teedy-data/postgres:/var/lib/postgresql/data
networks:
- docker-internal
networks:
docker-internal:
driver: bridge
internal: true
internet:
driver: bridge
# Hướng dẫn chạy:
# 1. Thay YOUR_GITHUB_USERNAME bằng tên GitHub của bạn.
+34 -1
View File
@@ -1,4 +1,3 @@
version: '3'
services:
# Teedy Application
teedy-server:
@@ -14,6 +13,40 @@ services:
DOCS_ADMIN_EMAIL_INIT: "admin@example.com"
# Set the admin password (in this example: "superSecure")
DOCS_ADMIN_PASSWORD_INIT: "$$2a$$05$$PcMNUbJvsk7QHFSfEIDaIOjk1VI9/E7IPjTKx.jkjPxkx2EOKSoPS"
# Setup the database connection
DATABASE_URL: "jdbc:postgresql://teedy-db:5432/teedy"
DATABASE_USER: "teedy_db_user"
DATABASE_PASSWORD: "teedy_db_password"
DATABASE_POOL_SIZE: "10"
volumes:
- ./docs/data:/data
- ./docs-web/target/docs-web-1.12-SNAPSHOT.war:/app/webapps/docs.war
networks:
- docker-internal
- internet
depends_on:
- teedy-db
# DB for Teedy
teedy-db:
image: postgres:13.1-alpine
restart: unless-stopped
expose:
- 5432
environment:
POSTGRES_USER: "teedy_db_user"
POSTGRES_PASSWORD: "teedy_db_password"
POSTGRES_DB: "teedy"
volumes:
- ./teedy-data/postgres:/var/lib/postgresql/data
networks:
- docker-internal
networks:
# Network without internet access. The db does not need
# access to the host network.
docker-internal:
driver: bridge
internal: true
internet:
driver: bridge
+51
View File
@@ -0,0 +1,51 @@
# Chuyển đổi Cơ sở Dữ liệu từ H2 (SQLite-like) sang PostgreSQL
Ứng dụng Teedy DMS hiện tại đang sử dụng cơ sở dữ liệu nhúng H2 theo mặc định (lưu trữ dưới dạng file `./teedy-data/db/docs.mv.db`, có hành vi tương tự SQLite). Để chuyển đổi sang PostgreSQL cho môi trường sản xuất (production) nhằm đảm bảo hiệu năng và độ tin cậy cao, chúng ta cần bổ sung dịch vụ PostgreSQL vào các file cấu hình Docker Compose và cấu hình các biến môi trường kết nối tương ứng cho Teedy.
## User Review Required
> [!IMPORTANT]
> **Lưu ý về H2 và SQLite:**
> Dự án Teedy hiện tại không dùng SQLite mà dùng **H2** làm cơ sở dữ liệu nhúng mặc định (tạo ra file `docs.mv.db` trong thư mục `teedy-data/db`). Việc cấu hình PostgreSQL sẽ thay thế hoàn toàn cơ sở dữ liệu nhúng H2 này.
> [!WARNING]
> **Không thể tự động di chuyển dữ liệu cũ:**
> Khi chuyển đổi từ cơ sở dữ liệu H2 sang PostgreSQL, các tài liệu và tài khoản đã tạo trước đó trong cơ sở dữ liệu nhúng cũ sẽ không tự động đồng bộ sang database PostgreSQL mới. Bạn sẽ cần cấu hình lại tài khoản admin ban đầu.
## Open Questions
> [!IMPORTANT]
> **Xác nhận về PostgREST / PostgreSQL:**
> Bạn đã yêu cầu dùng **"postgrest"**.
> - **PostgREST** là một công cụ tạo REST API tự động từ PostgreSQL database.
> - **PostgreSQL** là hệ quản trị cơ sở dữ liệu quan hệ mà Teedy hỗ trợ chính thức.
>
> Teedy DMS là ứng dụng Java JPA/Hibernate cần kết nối trực tiếp đến một cơ sở dữ liệu SQL qua JDBC (PostgreSQL). Do đó, phương án đề xuất dưới đây là cấu hình **PostgreSQL** làm cơ sở dữ liệu lưu trữ cho Teedy. Xin vui lòng xác nhận xem đây có phải là mong muốn của bạn không?
## Proposed Changes
Chúng ta sẽ sửa đổi 2 file cấu hình Docker Compose chính trong dự án để tích hợp PostgreSQL:
---
### Docker Compose
#### [MODIFY] [docker-compose.yml](file:///wsl.localhost/Ubuntu-22.04/home/x79/TeedyDMS_editpage/docker-compose.yml)
- Bổ sung service `teedy-db` sử dụng image `postgres:13-alpine`.
- Thêm mạng nội bộ `docker-internal` và mạng kết nối bên ngoài `internet`.
- Khai báo các biến môi trường kết nối database cho `teedy-server`:
- `DATABASE_URL: "jdbc:postgresql://teedy-db:5432/teedy"`
- `DATABASE_USER: "teedy_db_user"`
- `DATABASE_PASSWORD: "teedy_db_password"` (hoặc sử dụng mật khẩu bảo mật hơn)
- `DATABASE_POOL_SIZE: "10"`
- Thiết lập dependency `depends_on: - teedy-db`.
#### [MODIFY] [docker-compose-ghcr.yml](file:///wsl.localhost/Ubuntu-22.04/home/x79/TeedyDMS_editpage/docker-compose-ghcr.yml)
- Áp dụng các thay đổi tương tự như trên cho file sử dụng Custom Image chạy trực tiếp trên server sản xuất.
## Verification Plan
### Manual Verification
- Khởi động thử hệ thống bằng lệnh `docker-compose -f docker-compose.yml up -d` (hoặc phiên bản ghcr).
- Kiểm tra logs của container bằng lệnh `docker-compose logs -f` để xác nhận Teedy đã kết nối thành công đến PostgreSQL và thực thi các script khởi tạo bảng.
- Truy cập vào giao diện web Teedy (port `8080`) để kiểm tra tính năng đăng nhập và tạo tài liệu mới.
Binary file not shown.
+91
View File
@@ -194,3 +194,94 @@
24 Apr 2026 02:44:41,477 INFO com.sismics.docs.core.service.FileSizeService.lambda$runOneIteration$0(FileSizeService.java:50) No more file to process, stopping the service
24 Apr 2026 02:44:41,479 INFO com.sismics.docs.core.service.FileSizeService.shutDown(FileSizeService.java:35) File size service shutting down
24 Apr 2026 06:18:50,414 INFO com.sismics.util.ClasspathScanner.findClasses(ClasspathScanner.java:48) Found 2 classes for AuthenticationHandler
26 Apr 2026 07:33:54,315 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
26 Apr 2026 07:33:54,327 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
26 Apr 2026 07:33:55,300 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:57) Opening database and executing incremental updates
26 Apr 2026 07:33:55,304 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:106) Found database version 31, new version is 31, executing database incremental update scripts
26 Apr 2026 07:33:55,305 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:108) Database upgrade complete
26 Apr 2026 07:33:55,305 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
26 Apr 2026 07:33:55,305 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
26 Apr 2026 07:33:57,703 INFO com.sismics.util.ClasspathScanner.findClasses(ClasspathScanner.java:48) Found 1 classes for IndexingHandler
26 Apr 2026 07:33:57,755 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:132) Using file Lucene storage: /data/lucene
26 Apr 2026 07:33:57,879 INFO com.sismics.docs.core.service.FileService.startUp(FileService.java:39) File service starting up
26 Apr 2026 07:33:57,886 INFO com.sismics.docs.core.service.InboxService.startUp(InboxService.java:52) Inbox service starting up
26 Apr 2026 07:33:57,888 INFO com.sismics.docs.core.service.FileSizeService.startUp(FileSizeService.java:30) File size service starting up
26 Apr 2026 07:33:58,155 INFO com.sismics.docs.core.service.FileSizeService.lambda$runOneIteration$0(FileSizeService.java:50) No more file to process, stopping the service
26 Apr 2026 07:33:58,157 INFO com.sismics.docs.core.service.FileSizeService.shutDown(FileSizeService.java:35) File size service shutting down
26 Apr 2026 12:00:12,162 INFO com.sismics.docs.core.service.InboxService.shutDown(InboxService.java:57) Inbox service shutting down
26 Apr 2026 12:00:12,186 INFO com.sismics.docs.core.service.FileService.shutDown(FileService.java:44) File service shutting down
28 Apr 2026 14:01:07,313 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
28 Apr 2026 14:01:07,373 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
28 Apr 2026 14:01:08,933 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:57) Opening database and executing incremental updates
28 Apr 2026 14:01:08,939 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:106) Found database version 31, new version is 31, executing database incremental update scripts
28 Apr 2026 14:01:08,939 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:108) Database upgrade complete
28 Apr 2026 14:01:08,939 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
28 Apr 2026 14:01:08,940 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
28 Apr 2026 14:01:12,277 INFO com.sismics.util.ClasspathScanner.findClasses(ClasspathScanner.java:48) Found 1 classes for IndexingHandler
28 Apr 2026 14:01:12,377 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:132) Using file Lucene storage: /data/lucene
28 Apr 2026 14:01:12,589 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:144) Checking index health and version
28 Apr 2026 14:01:12,677 INFO com.sismics.docs.core.service.FileService.startUp(FileService.java:39) File service starting up
28 Apr 2026 14:01:12,684 INFO com.sismics.docs.core.service.InboxService.startUp(InboxService.java:52) Inbox service starting up
28 Apr 2026 14:01:12,686 INFO com.sismics.docs.core.service.FileSizeService.startUp(FileSizeService.java:30) File size service starting up
28 Apr 2026 14:01:12,993 INFO com.sismics.docs.core.service.FileSizeService.lambda$runOneIteration$0(FileSizeService.java:50) No more file to process, stopping the service
28 Apr 2026 14:01:12,994 INFO com.sismics.docs.core.service.FileSizeService.shutDown(FileSizeService.java:35) File size service shutting down
08 May 2026 11:19:31,365 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
08 May 2026 11:19:31,411 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
08 May 2026 11:19:33,043 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:57) Opening database and executing incremental updates
08 May 2026 11:19:33,071 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:106) Found database version 31, new version is 31, executing database incremental update scripts
08 May 2026 11:19:33,071 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:108) Database upgrade complete
08 May 2026 11:19:33,072 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
08 May 2026 11:19:33,072 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
08 May 2026 11:19:36,518 INFO com.sismics.util.ClasspathScanner.findClasses(ClasspathScanner.java:48) Found 1 classes for IndexingHandler
08 May 2026 11:19:36,588 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:132) Using file Lucene storage: /data/lucene
08 May 2026 11:19:36,734 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:144) Checking index health and version
08 May 2026 11:19:36,788 INFO com.sismics.docs.core.service.FileService.startUp(FileService.java:39) File service starting up
08 May 2026 11:19:36,796 INFO com.sismics.docs.core.service.InboxService.startUp(InboxService.java:52) Inbox service starting up
08 May 2026 11:19:36,798 INFO com.sismics.docs.core.service.FileSizeService.startUp(FileSizeService.java:30) File size service starting up
08 May 2026 11:19:37,226 INFO com.sismics.docs.core.service.FileSizeService.lambda$runOneIteration$0(FileSizeService.java:50) No more file to process, stopping the service
08 May 2026 11:19:37,229 INFO com.sismics.docs.core.service.FileSizeService.shutDown(FileSizeService.java:35) File size service shutting down
17 May 2026 22:40:48,367 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
17 May 2026 22:40:48,391 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
17 May 2026 22:40:49,754 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:57) Opening database and executing incremental updates
17 May 2026 22:40:49,782 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:106) Found database version 31, new version is 31, executing database incremental update scripts
17 May 2026 22:40:49,782 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:108) Database upgrade complete
17 May 2026 22:40:49,783 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
17 May 2026 22:40:49,783 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
17 May 2026 22:40:53,069 INFO com.sismics.util.ClasspathScanner.findClasses(ClasspathScanner.java:48) Found 1 classes for IndexingHandler
17 May 2026 22:40:53,165 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:132) Using file Lucene storage: /data/lucene
17 May 2026 22:40:53,310 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:144) Checking index health and version
17 May 2026 22:40:53,347 INFO com.sismics.docs.core.service.FileService.startUp(FileService.java:39) File service starting up
17 May 2026 22:40:53,355 INFO com.sismics.docs.core.service.InboxService.startUp(InboxService.java:52) Inbox service starting up
17 May 2026 22:40:53,357 INFO com.sismics.docs.core.service.FileSizeService.startUp(FileSizeService.java:30) File size service starting up
17 May 2026 22:40:53,652 INFO com.sismics.docs.core.service.FileSizeService.lambda$runOneIteration$0(FileSizeService.java:50) No more file to process, stopping the service
17 May 2026 22:40:53,653 INFO com.sismics.docs.core.service.FileSizeService.shutDown(FileSizeService.java:35) File size service shutting down
18 May 2026 02:50:53,791 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
18 May 2026 02:50:53,815 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
18 May 2026 02:50:57,610 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:57) Opening database and executing incremental updates
18 May 2026 02:50:57,620 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:106) Found database version 31, new version is 31, executing database incremental update scripts
18 May 2026 02:50:57,620 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:108) Database upgrade complete
18 May 2026 02:50:57,621 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
18 May 2026 02:50:57,621 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
18 May 2026 02:51:00,844 INFO com.sismics.util.ClasspathScanner.findClasses(ClasspathScanner.java:48) Found 1 classes for IndexingHandler
18 May 2026 02:51:00,957 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:132) Using file Lucene storage: /data/lucene
18 May 2026 02:51:01,124 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:144) Checking index health and version
18 May 2026 02:51:01,177 INFO com.sismics.docs.core.service.FileService.startUp(FileService.java:39) File service starting up
18 May 2026 02:51:01,184 INFO com.sismics.docs.core.service.InboxService.startUp(InboxService.java:52) Inbox service starting up
18 May 2026 02:51:01,186 INFO com.sismics.docs.core.service.FileSizeService.startUp(FileSizeService.java:30) File size service starting up
18 May 2026 02:51:01,554 INFO com.sismics.docs.core.service.FileSizeService.lambda$runOneIteration$0(FileSizeService.java:50) No more file to process, stopping the service
18 May 2026 02:51:01,555 INFO com.sismics.docs.core.service.FileSizeService.shutDown(FileSizeService.java:35) File size service shutting down
20 May 2026 06:19:10,121 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
20 May 2026 06:19:10,154 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
20 May 2026 06:19:12,152 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:57) Opening database and executing incremental updates
20 May 2026 06:19:12,169 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:106) Found database version 31, new version is 31, executing database incremental update scripts
20 May 2026 06:19:12,169 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:108) Database upgrade complete
20 May 2026 06:19:12,170 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:87) Configuring EntityManager from environment parameters
20 May 2026 06:19:12,170 WARN com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:92) Using an embedded H2 database. Only suitable for testing purpose, not for production!
20 May 2026 06:19:15,334 INFO com.sismics.util.ClasspathScanner.findClasses(ClasspathScanner.java:48) Found 1 classes for IndexingHandler
20 May 2026 06:19:15,414 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:132) Using file Lucene storage: /data/lucene
20 May 2026 06:19:15,557 INFO com.sismics.docs.core.util.indexing.LuceneIndexingHandler.initLucene(LuceneIndexingHandler.java:144) Checking index health and version
20 May 2026 06:19:15,701 INFO com.sismics.docs.core.service.FileService.startUp(FileService.java:39) File service starting up
20 May 2026 06:19:15,707 INFO com.sismics.docs.core.service.InboxService.startUp(InboxService.java:52) Inbox service starting up
20 May 2026 06:19:15,709 INFO com.sismics.docs.core.service.FileSizeService.startUp(FileSizeService.java:30) File size service starting up
20 May 2026 06:19:15,991 INFO com.sismics.docs.core.service.FileSizeService.lambda$runOneIteration$0(FileSizeService.java:50) No more file to process, stopping the service
20 May 2026 06:19:15,993 INFO com.sismics.docs.core.service.FileSizeService.shutDown(FileSizeService.java:35) File size service shutting down
Binary file not shown.