# Hướng dẫn cài đặt hệ thống phần mềm Kho tư liệu trên Centos Linux
### 1. Tải phần mềm cài đặt kho tư liệu
```bash=
sudo yum install -y git && git clone -b deploy-kho https://<USERNAME>:<PASSWORD>@gitlab.com/niler/deployer/deploy.git deploy/deploy-kho && cd deploy/deploy-kho && git submodule update --init && git submodule update --remote && git submodule sync && git submodule status
```
Trong đó:
> `<USERNAME>`: Tài khoản ngưởi dùng trên gitlab
> `<PASSWORD>`: Access token người dùng trên gitlab
### 2. Cài đặt các thành phần hệ thống
Di chuyển đến thư mục chứa phần mềm cài đặt vừa tải về:
```bash=
cd deploy/deploy-kho
```
#### a. Cài đặt phần mềm database mongodb
- Di chuyển đến thư mục cài đặt mongodb
```bash=
cd mongodb
```
- Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **MONGO_INITDB_ROOT_USERNAME**: Tài khoản quản trị cao nhất của mongodb. Mặc định là "root" - thường không thay đổi.
**MONGO_INITDB_ROOT_PASSWORD**: Mật khẩu của tài khoản root
**MONGO_PORT**: cổng để kết nối đến mongodb (thay đổi nếu bị trùng cổng).
- Build mongodb docker image và tạo container
```bash=
docker-compose up -d
```
- Kiểm tra container
```bash=
docker ps -a
```
#### b. Cài đặt phần mềm FTP server
- Di chuyển đến thư mục cài đặt FTP server
```bash=
cd ftpserver
```
- Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **VSFTPD_USER_1 -> 9**: Tài khoản FTP server theo định dạng ```<Tài khoản>:<Mật khẩu>:<UserID - Là số duy nhất>:<Đường dẫn thư mục root của user /home/virtual/<Tài khoản>>```
Ví dụ: VSFTPD_USER_1=dinte:dinte:1001:/home/virtual/dinte
>**FTP_PORT**: Cổng để client kết nối đến FTP server
**PASV_ADDRESS**: Địa chỉ IP của máy chủ cài đặt FTP server.
- Build ftpserver docker image và tạo container
```bash=
docker-compose up -d
```
- Kiểm tra container
```bash=
docker ps -a
```
#### c. Cài đặt phần mềm quản lý tài khoản người dùng
- Di chuyển đến thư mục cài đặt OpenLdap
```bash=
cd openldap
```
- Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **LDAP_PORT_NUMBER**: Cổng truy cập Ldap (thay đổi nếu cổng đã tồn tại rồi)
**LDAP_PORT_SSL_NUMBER**: Cổng truy cập Ldap thông qua SSL (thay đổi nếu cổng đã tồn tại rồi)
**LDAP_ADMIN_PASSWORD**: Mật khẩu tài khoản quản trị OpenLdap
**LDAP_CONFIG_PASSWORD**: Mật khẩu tài khoản quản trị cấu hình OpenLdap
- Build ftpserver docker image và tạo container
```bash=
docker-compose up -d
```
- Kiểm tra container
```bash=
docker ps -a
```
#### d. Cài đặt phần mềm xác thực người dùng WSO2IS
- Cài đặt database lưu trữ xác thực người dùng
+ Di chuyển đến thư mục cài đặt postgis
```bash=
cd postgis
```
+ Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **POSTGRES_PASSWORD**: Mật khẩu tài khoản quản trị postgres của postgreSQL
**PG_PORT**: Cổng kết nối đến database - thay đổi khi bị trùng (Mặc định: 5432)
+ Build postgis docker image và tạo container
```bash=
docker-compose up -d
```
+ Kiểm tra container
```bash=
docker ps -a
```
- Cài đặt phần mềm xác thực người dùng wso2is
+ Di chuyển đến thư mục cài đặt wso2
```bash=
cd wso2/wso2is
```
+ Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
```
+ Build wso2is docker image và tạo container nhưng không start:
```bash=
docker-compose up -d --no-start
```
+ Kiểm tra container
```bash=
docker ps -a
```
- Restore database wso2is
+ Di chuyển đến thư mục cài đặt wso2
```bash=
cd wso2/wso2is
```
+ Mở file config-wso2is.sh và cập nhật thông tin cần thiết
```bash
vi config-wso2is.sh
```
> **HOSTNAME_SSO**: Tên miền hệ thống SSO
**URL_SSO**: Đường dẫn đến hệ thống SSO
**POSTGRESQL_PORT**: Cổng kết nối đến database postgreSQL chứa dữ liệu xác thực
**POSTGRESQL_DBNAME**: Tên database kết nối cho hệ thống xác thực
**POSTGRESQL_PASS**: Mật khẩu kết nối đến database chứa dữ liệu xác thực
+ Copy file database backup đến docker postgis
```bash=
cp dbbackups/wso2is.dump.tar.gz /var/lib/docker/volumes/niler_postgis_11-2.5-alpine_backup/_data/
```
+ Chạy script config hệ thống xác thực
```bash=
chmod +x *.sh
./config-wso2is.sh
```
+ Chấp nhận restore database wso2is
> Chú ý: Nhập đường dẫn đến file database backup nếu được yêu cầu.
- Khởi động hệ thống xác thực:
```bash=
docker start <Container WSO2IS>
```
- Kiểm tra:
```bash=
docker ps -a
```
#### e. Cài đặt phần mềm hỗ trợ tra cứu ElasticSearch
- Di chuyển đến thư mục cài đặt elasticsearch
```bash=
cd elasticsearch
```
- Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **ES_PORT**: Cổng truy cập hệ thống search engine. Mặc định là 9200
- Build elasticsearch docker image và tạo container
```bash=
docker-compose up -d
```
- Kiểm tra container
```bash=
docker ps -a
```
- Tạo index cho kho tư liệu:
+ Di chuyển đến thư mục settings
```bash=
cd settings
```
+ Mở file script và sửa nội dung
```bash=
vi index.sh
```
> Sửa link truy cập đến search engine
http://localhost:<ES_PORT>/\<INDEX NAME>
+ Cấp quyền thực thi script
```bash=
chmod +x *.sh
```
+ Thực thi script
```bash=
sh -c './index.sh'
```
- Đồng bộ dữ liệu index từ mongodb sang elasticsearch
+ Cài đặt phần mềm đồng bộ dữ liệu monstache
+ Di chuyển đến thư mục monstache
```bash=
cd monstache
```
+ Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **MONSTACHE_WORKER**: Số lượng worker thực hiện đồng bộ dữ liệu. Mặc định là 3
+ Build monstache docker image và tạo container
```bash=
docker-compose up -d
```
+ Kiểm tra container
```bash=
docker ps -a
```
+ Tạo file cấu hình đồng bộ: Copy file trong thư mục config đến volume data của monstache, mở file config và sửa thông tin cấu hình
```bash=
cp -RL config/mongo-kho-es-*.toml /var/lib/docker/volumes/niler_monstache_data/_data/
cd /var/lib/docker/volumes/niler_monstache_data/_data
vi mongo-kho-es-document.toml
```
> **mongo-url**: Thông tin kết nối đến database mongodb cần đồng bộ dữ liệu. URL có dạng ```mongo-url="mongodb://root:<Mật khẩu tài khoản root của mongodb>@<Địa chỉ IP đến mongodb>:<Cổng truy cập mongodb>/?connect=direct"```
> **index = "dinte_khotulieu_documents"**: index của kho tư liệu. Giá trị giống như trong file script đã thực hiện ở phần trên
+ Chạy đồng bộ dữ liệu sang es để index bởi việc khởi động lại monstache container
```bash=
docker ps -a
docker stop <Monstache container>
docker start <Monstache container>
```
#### f. Cài đặt phần mềm kho tư liệu
- Di chuyển đến thư mục cài đặt apps
```bash=
cd apps
```
- #### Cài đặt base apps:
+ Di chuyển đến thư mục baseimage
```bash=
cd baseimage
```
+ Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **ENV_CONFIG_URL**: Link website đến hệ thống quản lý người dùng.
+ Build base apps docker image
```bash=
docker-compose build --no-cache
```
- #### Cài đặt ứng dụng quản lý tài khoản người dùng:
+ Di chuyển đến thư mục usermanager
```bash=
cd usermanager
```
+ Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **ENV_CONFIG_URL**: Link website đến hệ thống quản lý người dùng.
> **API_GIT_USERNAME**: Tài khoản truy cập đến sourve code trên gitlab.
> **API_GIT_ACCESS_TOKEN**: Token ứng với tài khoản trên để truy cập đến source code trên gitlab.
> **API_PORT**: Cổng truy cập cho api app.
> **FRONTEND_PORT**: Cổng truy cập cho frontend app.
+ Build usermanager app docker image và tạo container
```bash=
docker-compose up -d
```
- #### Cài đặt ứng dụng kho tư liệu:
+ Di chuyển đến thư mục khotulieu
```bash=
cd khotulieu
```
+ Copy file sample.env sang file .env và sửa thông tin cấu hình trong đó
```bash=
cp sample.env .env
vi .env
```
> **ENV_CONFIG_URL**: Link website đến hệ thống quản lý người dùng.
> **API_GIT_USERNAME**: Tài khoản truy cập đến sourve code trên gitlab.
> **API_GIT_ACCESS_TOKEN**: Token ứng với tài khoản trên để truy cập đến source code trên gitlab.
> **API_PORT**: Cổng truy cập cho api app.
> **FRONTEND_PORT**: Cổng truy cập cho frontend app.
+ Build khotulieu app docker image và tạo container
```bash=
docker-compose up -d
```
- #### Cấu hình thông tin các ứng dụng:
+ Di chuyển đến thư mục apps
```bash=
cd apps
```
+ Mở file config-apps.sh và sửa thông tin cấu hình
```bash=
vi config-apps.sh
```
> #### Cấu hình FTP server:
> **FTP_USER**: Tài khoản FTP server dùng để upload file cho phần mềm kho tư liệu.
**FTP_PASS**: Mật khẩu của tài khoản trên.
**FTP_HOST**: Địa chỉ IP, hostname hoặc container name đến FTP server.
**FTP_PORT**: Cổng truy cập đến FTP server.
> #### Thong tin email cho TOTP SSO
> **EMAIL_ADDRESS**: Đia chỉ email
**EMAIL_DISPLAY_NAME**: Tên hiển thị trong email gửi đi.
**EMAIL_PASS**: Mật khẩu của tài khoản email.
**EMAIL_HOST**: Địa chỉ url của smtp server dùng để gửi email. Mặc định là gmail: smtp.gmail.com,
**EMAIL_PORT**: Cổng của smtp server dùng để gửi email. Mặc định là gmail: 587
> **URL_SSO**: Địa chỉ url đầy đủ đến hệ thống xác thực người dùng. Chú ý có dấu / ở cuối. Có dạng http\[s\]://DOMAIN/
**ELASTIC_SEARCH_URL**: Địa chỉ url đầy đủ đến hệ thống tìm kiếm ElasticSearch.
**URL_USERMANAGER_SITE**: Địa chỉ url đầy đủ đến hệ thống quản lý người dùng usermanager
**URL_USERMANAGER_API**: Địa chỉ url đầy đủ đến ứng dụng API của hệ thống quản lý người dùng.
> #### Thông tin AppConfig UserManager
> **USERMANAGER_PassAdminWso2**: Mật khẩu tài khoản admin của hệ thống xác thực người dùng.
**USERMANAGER_LDAP_DOMAINNAME**: Domain chứa người dùng trong LDAP
**USERMANAGER_LDAP_HOST**: Địa chỉ IP, hostname hoặc container name đến OpenLDAP.
**USERMANAGER_LDAP_PORT**: Cổng truy cập đến OpenLDAP. Mặc định là 389, thay đổi nếu bị trùng cổng.
**USERMANAGER_LDAP_ADMIN**: Admin của OpenLdap, có dạng "cn=?, dc=?, dc=?"
**USERMANAGER_LDAP_PASS**: Mật khẩu admin của OpenLdap.
> Thông tin kết nối mongodb
> **MONGODB_HOST**: Địa chỉ IP, hostname hoặc container name đến mongodb.
**MONGODB_PORT**: Cổng truy cập đến mongodb.
> Thông tin kết nối đến database của hệ thống quản lý người dùng usermanager
> **MONGODB_USERMANAGER_DB**: Tên database.
**MONGODB_USERMANAGER_USER**: Tài khoản kết nối đến database.
**MONGODB_USERMANAGER_PASS**: Mật khẩu kết nối đến database.
> Thông tin kết nối đến database của hệ thống kho tư liệu
> **MONGODB_KHOTULIEU_DB**: Tên database.
**MONGODB_KHOTULIEU_USER**: Tài khoản kết nối đến database.
**MONGODB_KHOTULIEU_PASS**: Mật khẩu kết nối đến database.
+ Cấp quyền và chạy script để cấu hình apps
```bash=
chmod \+x *.sh
sh -c './config-apps.sh'
```
- Sau khi cấu hình apps xong thì kiểm tra lại container apps đã chạy.