feat(Docker, encryption): add mandatory ENCRYPTION_KEY environment variable for IPSec password encryption; update documentation and Docker configurations to reflect changes
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m18s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m18s
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
docker run -d \
|
||||
--name s3-lists-manager \
|
||||
-p 3001:3001 \
|
||||
-e ENCRYPTION_KEY=your-64-hex-character-key-here \
|
||||
git.shts.su/[repository]:latest
|
||||
```
|
||||
|
||||
@@ -27,6 +28,7 @@ docker run -d \
|
||||
docker run -d \
|
||||
--name s3-lists-manager-tabler \
|
||||
-p 3001:3001 \
|
||||
-e ENCRYPTION_KEY=your-64-hex-character-key-here \
|
||||
git.shts.su/[repository]:tabler
|
||||
```
|
||||
|
||||
@@ -40,6 +42,7 @@ docker rm s3-lists-manager
|
||||
docker run -d \
|
||||
--name s3-lists-manager \
|
||||
-p 3001:3001 \
|
||||
-e ENCRYPTION_KEY=your-64-hex-character-key-here \
|
||||
git.shts.su/[repository]:latest
|
||||
```
|
||||
|
||||
@@ -51,6 +54,7 @@ docker rm s3-lists-manager-tabler
|
||||
docker run -d \
|
||||
--name s3-lists-manager-tabler \
|
||||
-p 3001:3001 \
|
||||
-e ENCRYPTION_KEY=your-64-hex-character-key-here \
|
||||
git.shts.su/[repository]:tabler
|
||||
```
|
||||
|
||||
@@ -70,6 +74,7 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- ENCRYPTION_KEY=${ENCRYPTION_KEY} # Обязательно! Используйте .env файл или secrets
|
||||
|
||||
s3-lists-manager-tabler:
|
||||
image: git.shts.su/[repository]:tabler
|
||||
@@ -79,6 +84,12 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- ENCRYPTION_KEY=${ENCRYPTION_KEY} # Обязательно! Используйте .env файл или secrets
|
||||
```
|
||||
|
||||
**Создайте файл `.env` в той же директории:**
|
||||
```bash
|
||||
ENCRYPTION_KEY=your-64-hex-character-key-here
|
||||
```
|
||||
|
||||
Запуск:
|
||||
@@ -88,10 +99,31 @@ docker-compose up -d
|
||||
|
||||
## 🔧 Переменные окружения
|
||||
|
||||
| Переменная | Описание | По умолчанию |
|
||||
|------------|----------|--------------|
|
||||
| `NODE_ENV` | Окружение Node.js | `production` |
|
||||
| `PORT` | Порт для запуска сервера | `3001` |
|
||||
| Переменная | Описание | По умолчанию | Обязательная |
|
||||
|------------|----------|--------------|--------------|
|
||||
| `NODE_ENV` | Окружение Node.js | `production` | Нет |
|
||||
| `PORT` | Порт для запуска сервера | `3001` | Нет |
|
||||
| `ENCRYPTION_KEY` | Ключ шифрования для IPSec паролей (64 hex символа) | - | **Да** |
|
||||
|
||||
### ENCRYPTION_KEY
|
||||
|
||||
**Важно**: `ENCRYPTION_KEY` является обязательным параметром для работы с IPSec паролями. Этот ключ используется для шифрования/дешифрования паролей, хранящихся в S3.
|
||||
|
||||
**Генерация ключа:**
|
||||
```bash
|
||||
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
||||
```
|
||||
|
||||
**Пример запуска с ENCRYPTION_KEY:**
|
||||
```bash
|
||||
docker run -d \
|
||||
--name s3-lists-manager \
|
||||
-p 3001:3001 \
|
||||
-e ENCRYPTION_KEY=your-64-hex-character-key-here \
|
||||
git.shts.su/[repository]:latest
|
||||
```
|
||||
|
||||
**⚠️ Внимание**: Используйте один и тот же `ENCRYPTION_KEY` для всех запусков контейнера. При изменении ключа старые зашифрованные пароли не смогут быть расшифрованы.
|
||||
|
||||
## 📊 Мониторинг
|
||||
|
||||
|
||||
@@ -50,6 +50,11 @@ COPY backend/services ./services
|
||||
COPY backend/utils ./utils
|
||||
COPY --from=frontend-builder /app/frontend/dist ./public
|
||||
|
||||
# ENCRYPTION_KEY должен быть установлен через переменные окружения при запуске контейнера
|
||||
# Это обязательный параметр для работы с IPSec паролями
|
||||
# Пример: docker run -e ENCRYPTION_KEY=your-64-hex-character-key ...
|
||||
# Для генерации ключа: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
||||
|
||||
EXPOSE 3001
|
||||
USER nonroot
|
||||
CMD ["server.js"]
|
||||
@@ -5,21 +5,38 @@
|
||||
|
||||
const crypto = require('crypto');
|
||||
|
||||
// Ключ шифрования из переменной окружения
|
||||
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY || crypto.randomBytes(32).toString('hex');
|
||||
// Ключ шифрования из переменной окружения (обязателен для работы с IPSec паролями)
|
||||
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY;
|
||||
|
||||
if (!ENCRYPTION_KEY) {
|
||||
console.warn('WARNING: ENCRYPTION_KEY is not set. IPSec password encryption/decryption will fail.');
|
||||
console.warn('Please set ENCRYPTION_KEY environment variable (64 hex characters for AES-256).');
|
||||
console.warn('You can generate a key with: node -e "console.log(require(\'crypto\').randomBytes(32).toString(\'hex\'))"');
|
||||
}
|
||||
|
||||
const ALGORITHM = 'aes-256-gcm';
|
||||
|
||||
/**
|
||||
* Получить ключ шифрования (32 байта)
|
||||
*/
|
||||
function getEncryptionKey() {
|
||||
// Если ENCRYPTION_KEY - hex строка, конвертируем в Buffer
|
||||
if (ENCRYPTION_KEY.length === 64) {
|
||||
return Buffer.from(ENCRYPTION_KEY, 'hex');
|
||||
if (!ENCRYPTION_KEY) {
|
||||
throw new Error('ENCRYPTION_KEY environment variable is not set. Cannot encrypt/decrypt IPSec passwords.');
|
||||
}
|
||||
// Иначе используем как есть и дополняем/обрезаем до 32 байт
|
||||
|
||||
// Если ENCRYPTION_KEY - hex строка (64 символа для 32 байт), конвертируем в Buffer
|
||||
if (ENCRYPTION_KEY.length === 64) {
|
||||
try {
|
||||
return Buffer.from(ENCRYPTION_KEY, 'hex');
|
||||
} catch (error) {
|
||||
throw new Error(`Invalid ENCRYPTION_KEY format: not a valid hex string. ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
// Иначе используем как UTF-8 строку и дополняем/обрезаем до 32 байт
|
||||
const key = Buffer.from(ENCRYPTION_KEY, 'utf8');
|
||||
if (key.length === 32) return key;
|
||||
|
||||
// Дополняем или обрезаем до 32 байт
|
||||
const result = Buffer.alloc(32);
|
||||
key.copy(result, 0, 0, Math.min(key.length, 32));
|
||||
|
||||
Reference in New Issue
Block a user