Встановлення та розгортання
Цей посібник охоплює варіанти розгортання для власних екземплярів Onetime Secret.
Варіанти розгортання
Section titled “Варіанти розгортання”Розгортання з Docker
Section titled “Розгортання з Docker”Docker забезпечує найбільш надійний і портативний метод розгортання.
Використання Docker Compose
Section titled “Використання Docker Compose”Для повного керування інфраструктурою використовуйте спеціальний репозиторій Docker Compose:
Репозиторій: https://github.com/onetimesecret/docker-compose/
Швидке налаштування:
git clone https://github.com/onetimesecret/docker-compose.gitcd docker-composedocker-compose up -dРучне налаштування Docker Compose:
version: '3.8'
services: onetime: image: onetimesecret/onetimesecret:latest ports: - "3000:3000" environment: - REDIS_URL=redis://redis:6379/0 - SECRET=${SECRET} - HOST=${HOST:-localhost:3000} - SSL=${SSL:-false} - RACK_ENV=production depends_on: - redis volumes: - ./etc:/app/etc - ./logs:/app/logs
redis: image: redis:bookworm volumes: - redis_data:/data command: redis-server --requirepass ${REDIS_PASSWORD}
volumes: redis_data:Файл середовища (.env):
SECRET=your-secure-32-character-hex-keyREDIS_PASSWORD=your-redis-passwordHOST=your-domain.comSSL=trueРучне встановлення
Section titled “Ручне встановлення”Для середовищ, які потребують власних конфігурацій або існуючої інфраструктури.
Встановлення залежностей
Section titled “Встановлення залежностей”Ubuntu 22.04 LTS:
# Оновлення системиsudo apt update && sudo apt upgrade -y
# Встановлення Ruby та інструментів збіркиsudo apt install -y ruby ruby-dev build-essential gitsudo gem install bundler
# Встановлення Redissudo apt install -y redis-serversudo systemctl enable redis-serversudo systemctl start redis-server
# Встановлення Node.js (для розробки та збирання фронтенд-ресурсів)curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -sudo apt install -y nodejssudo npm install -g pnpm@latestCentOS/RHEL 8:
# Увімкнення репозиторію PowerTools/CodeReadysudo dnf install -y dnf-plugins-coresudo dnf config-manager --set-enabled powertools
# Встановлення Ruby та інструментів розробкиsudo dnf groupinstall -y "Development Tools"sudo dnf install -y ruby ruby-devel gitsudo gem install bundler
# Встановлення Redissudo dnf install -y redissudo systemctl enable redissudo systemctl start redisНалаштування додатку
Section titled “Налаштування додатку”# Створення користувача додаткуsudo useradd -r -m -s /bin/bash onetime
# Перехід до користувача додаткуsudo su - onetime
# Клонування репозиторіюgit clone https://github.com/onetimesecret/onetimesecret.gitcd onetimesecret
# Встановлення залежностейbundle install --deployment --without development test
# Копіювання та налаштування середовищаcp .env.example .envcp ./etc/config.example.yaml ./etc/config.yaml
# Створення хешу коміту для відстеження версіїgit rev-parse --short HEAD > .commit_hash.txtКонфігурація зворотного проксі
Section titled “Конфігурація зворотного проксі”Ці приклади конфігурації можуть допомогти вам почати, але ви повинні налаштувати їх відповідно до ваших конкретних потреб.
Базова конфігурація:
server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri;}
server { listen 443 ssl http2; server_name your-domain.com;
# Конфігурація SSL ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
# Заголовки безпеки add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options DENY always; add_header X-Content-Type-Options nosniff always;
# Статичні файли зі зібраного фронтенду location /dist/ { root /app/public; expires 1y; add_header Cache-Control "public, immutable"; try_files $uri $uri/ =404; }
# API-запити до бекенду location /api/ { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
# Всі інші запити до бекенду location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
# Підтримка WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }}Увімкнення сайту:
sudo ln -s /etc/nginx/sites-available/onetime /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginxCaddy забезпечує автоматичний HTTPS та простішу конфігурацію:
your-domain.com { # Обробка статичних файлів зі зібраного фронтенду handle /dist/* { root * /app/public file_server }
# API-запити до бекенду handle /api/* { reverse_proxy 127.0.0.1:3000 }
# Всі інші запити до бекенду (для серверних сторінок) handle { reverse_proxy 127.0.0.1:3000 }}Apache
Section titled “Apache”<VirtualHost *:80> ServerName your-domain.com Redirect permanent / https://your-domain.com/</VirtualHost>
<VirtualHost *:443> ServerName your-domain.com
# Конфігурація SSL SSLEngine on SSLCertificateFile /path/to/your/cert.pem SSLCertificateKeyFile /path/to/your/key.pem
# Заголовки безпеки Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff
# Статичні файли зі зібраного фронтенду Alias /dist /app/public/dist <Directory /app/public/dist> Require all granted ExpiresActive On ExpiresDefault "access plus 1 year" </Directory>
# API та запити додатку до бекенду ProxyPreserveHost On ProxyPass /dist ! ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/</VirtualHost>Конфігурація SSL/TLS
Section titled “Конфігурація SSL/TLS”Let’s Encrypt (Certbot)
Section titled “Let’s Encrypt (Certbot)”Встановлення Certbot:
# Ubuntu/Debiansudo apt install certbot python3-certbot-nginx
# CentOS/RHELsudo dnf install certbot python3-certbot-nginxГенерація сертифіката:
# Для Nginxsudo certbot --nginx -d your-domain.com
# Для Apachesudo certbot --apache -d your-domain.com
# Ручний сертифікат (якщо використовується власна конфігурація проксі)sudo certbot certonly --webroot -w /var/www/html -d your-domain.comАвтоматичне оновлення:
# Додавання до crontabecho "0 12 * * * /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontabВласні SSL-сертифікати
Section titled “Власні SSL-сертифікати”Розмістіть ваші сертифікати та оновіть шляхи в конфігурації проксі:
# Файли сертифікатів/etc/ssl/certs/your-domain.com.crt/etc/ssl/private/your-domain.com.key
# Встановлення правильних дозволівsudo chmod 600 /etc/ssl/private/your-domain.com.keysudo chmod 644 /etc/ssl/certs/your-domain.com.crtКонфігурація Redis
Section titled “Конфігурація Redis”Варіант 1: Тільки пам’ять (ніколи не зберігати на диск для максимальної безпеки):
# Оптимізація пам'ятіmaxmemory 1gbmaxmemory-policy allkeys-lru
# Безпека - секрети ніколи не записуються на дискsave "" # Вимкнути всі автоматичні збереженняappendonly no # Вимкнути логування AOF
# Безпекаrequirepass your_redis_passwordbind 127.0.0.1
# Продуктивністьtcp-keepalive 60timeout 300Варіант 2: Збереження на диск (дозволяє резервне копіювання, але записує секрети на диск):
# Оптимізація пам'ятіmaxmemory 1gbmaxmemory-policy allkeys-lru
# Знімки RDB - створює файли dump.rdbsave 900 1 # Зберегти, якщо змінився хоча б 1 ключ за 900 секундsave 300 10 # Зберегти, якщо змінилось хоча б 10 ключів за 300 секундsave 60 10000 # Зберегти, якщо змінилось хоча б 10000 ключів за 60 секунд
# Логування AOF - створює файли appendonly.aof для відновлення на певний момент часуappendonly yesappendfsync everysec # Синхронізація з диском щосекунди
# Безпекаrequirepass your_redis_passwordbind 127.0.0.1
# Продуктивністьtcp-keepalive 60timeout 300Важливо: При увімкненому збереженні на диск секрети будуть записуватися до:
- файли
dump.rdb(знімки через інтервали) - файли
appendonly.aof(безперервний лог додавання)
Виберіть на основі ваших вимог безпеки проти резервного копіювання.
Перезапуск Redis:
sudo systemctl restart redisРезервні копії Redis
Section titled “Резервні копії Redis”Redis:
#!/bin/bash# Скрипт резервного копіювання RedisBACKUP_DIR="/var/backups/onetime"DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Створення резервної копіїredis-cli -a "$REDIS_PASSWORD" --rdb $BACKUP_DIR/redis_$DATE.rdb
# Очищення старих резервних копійfind $BACKUP_DIR -name "redis_*.rdb" -mtime +7 -deleteНаступні кроки
Section titled “Наступні кроки”Після успішного розгортання:
- Налаштуйте ваш екземпляр з власними налаштуваннями
- Налаштуйте моніторинг та сповіщення для продуктивних операцій
- Перегляньте налаштування безпеки та ввімкніть додаткові захисти
- Налаштуйте автоматизацію резервного копіювання та протестуйте процедури відновлення
- Налаштуйте власні домени для вашої організації
Ваш екземпляр Onetime Secret тепер готовий до виробничого використання!