> ## Documentation Index
> Fetch the complete documentation index at: https://support.locker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Hướng dẫn triển khai

> Hướng dẫn triển khai Locker Secrets Manager bằng Docker và Docker Compose

## Deployments guides

## Docker

### Cài đặt và cấu hình các phụ thuộc

#### MySQL

<Note>
  Nếu bạn dự định sử dụng SQLite, vui lòng bỏ qua bước này.
</Note>

Để cài đặt các tệp máy chủ MySQL, hãy chạy lệnh sau:

```shell theme={null}
sudo apt update && sudo apt install mysql-server
```

Để khởi động dịch vụ MySQL:

```shell theme={null}
sudo systemctl start mysql.service
```

Hãy đặt mật khẩu cho người dùng root của MySQL. Kết nối tới MySQL:

```shell theme={null}
sudo mysql
```

Sử dụng lệnh sau để tạo người dùng và mật khẩu:

```shell theme={null}
mysql> ALTER USER "locker_secrets"@"%" IDENTIFIED WITH mysql_native_password BY "password";
```

Bây giờ hãy tạo cơ sở dữ liệu với cùng tên:

```shell theme={null}
mysql> CREATE DATABASE locker_secrets;
```

Và cấp quyền cho người dùng trên cơ sở dữ liệu đó:

```shell theme={null}
mysql> GRANT ALL PRIVILEGES ON locker_secrets.* TO 'locker_secrets'@'%';
```

#### Nginx

Để tải Nginx, chạy lệnh sau:

```shell theme={null}
sudo apt update && sudo apt install nginx
```

### Running the Locker Secrets API

Tạo một thư mục để triển khai ứng dụng Locker Secrets API:

```shell theme={null}
mkdir locker_api && cd locker_api
```

Viết tệp `.env` với nội dung bên dưới:

```shell theme={null}
PROD_ENV=prod
DJANGO_SECRET_KEY=[YOUR_DJANGO_SECRET_KEY]
```

Nếu bạn chọn SQLite làm cơ sở dữ liệu, bạn cần gắn kết thư mục để tránh mất dữ liệu sau khi khởi động lại container:

```shell theme={null}
mkdir db
```

Chạy lệnh Docker, thay thế `api_port` và `web_socket_port` bằng các giá trị tùy chỉnh:

```shell theme={null}
docker run --env-file .env -p 127.0.0.1:[api_port]:[api_port] --restart always cystack/locker-secrets-api
```

Cấu hình Nginx và HTTPS: Tạo một tệp có tên là `api` trong thư mục `/etc/nginx/sites-enabled` với nội dung sau đây:

```nginx theme={null}
server {
    listen       [nginx_port] ssl;
    server_name  [locker_secrets_api_domain];

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:[api_port];
    }
}
```

Tái khởi động Nginx service:

```shell theme={null}
sudo service nginx restart
```

Bây giờ API Locker Secrets đã hoạt động tại `https://locker_secrets_api_domain:[nginx_port]`.

### Running the Locker Secrets Web

Tạo một thư mục để triển khai ứng dụng Locker Secrets Web:

```shell theme={null}
mkdir locker_web && cd locker_web
```

Viết tệp `.env` với nội dung bên dưới:

```shell theme={null}
REACT_APP_API_URL=https://[locker_secrets_api_domain]:[nginx_port]
```

Chạy lệnh Docker, thay thế `web_port` bằng một giá trị tùy chỉnh:

```shell theme={null}
docker run --env-file .env --restart always -p 127.0.0.1:[web_port]:[web_port] cystack/locker-secrets-web
```

Cấu hình Nginx và HTTPS: Tạo một tệp có tên là `web` trong thư mục `/etc/nginx/sites-enabled` với nội dung sau đây:

```nginx theme={null}
server {
    listen       [nginx_port] ssl;
    server_name  [locker_secrets_web_domain];

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:[web_port];
    }
}
```

Tái khởi động Nginx service:

```shell theme={null}
sudo service nginx restart
```

Bây giờ Locker Secrets Web đã hoạt động tại `https://locker_secrets_web_domain:[nginx_port]`.

***

## docker-compose

### Chạy tất cả các thành phần của Locker Secrets cùng một lúc

Tạo một thư mục để triển khai Locker Secrets:

```shell theme={null}
mkdir locker_secrets && cd locker_secrets
```

Viết một tệp `docker-compose.yml` với nội dung sau. Hãy đảm bảo rằng bạn thay thế các giá trị như Locker Secrets domain, MySQL passwords, Nginx API port và Nginx web port bằng các giá trị thích hợp:

```yaml theme={null}
services:
  web:
    image: cystack/locker-secrets-web
    environment:
      REACT_APP_API_URL: "https://locker_secrets_domain"
      REACT_APP_WS_URL: "wss://locker_secrets_domain/ws/sync"
    depends_on:
      nginx:
        condition: service_started
  api:
    image: cystack/locker-secrets-api
    environment:
      PROD_ENV: "prod"
      DJANGO_SECRET_KEY: "[YOUR_DJANGO_SECRET_KEY]"
```

Tạo một thư mục với tên là `conf` và một tệp `default.conf` trong thư mục đó:

```shell theme={null}
mkdir conf && touch conf/default.conf
```

Nội dung của `default.conf`:

```nginx theme={null}
server {
    listen       [nginx_port] ssl;
    server_name  [locker_secrets_domain];

    ssl_certificate     /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://web:[web_port];
    }

    location /api {
        proxy_pass http://api:[api_port];
    }
}
```

Hãy tạo một thư mục có tên là `ssl`, di chuyển tệp chứa chứng chỉ (cert file) và khóa (key file) của bạn vào đó. Sau đó, bắt đầu tất cả các dịch vụ cùng một lúc:

```shell theme={null}
docker-compose up -d
```

Bây giờ bạn có thể truy cập vào `https://your_domain_or_ip:web_port` để xem giao diện người dùng đồ họa của Locker Secrets Web.
