Размещение Reactive‑Resume: приватный конструктор резюме
Узнайте, как установить и настроить Reactive‑Resume в собственном homelab: пошаговая инструкция, оптимизация и полная приватность данных.
Установка через Docker (рекомендуемый способ)
Использование Docker изолирует приложение и его зависимости, что упрощает установку и управление.
Шаг 1: Установка Docker
Установка Docker для Ubuntu, macOS или Windows
Для Ubuntu:
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-composeШаг 2: Клонирование репозитория
Клонируем официальный репозиторий Reactive-Resume
git clone https://github.com/AmruthPillai/Reactive-Resume.git
cd Reactive-ResumeШаг 3: Настройка Docker Compose
Создаем файл docker-compose.yml с конфигурацией сервиса
version: '3.8'
services:
app:
image: amruthpillai/reactive-resume:latest
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- MONGODB_URI=mongodb://mongo:27017/reactive-resume?authSource=admin
- REDIS_URL=redis://redis:6379
depends_on:
- mongo
- redis
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
mongo:
image: mongo:6.0
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=securepassword
volumes:
- mongo-data:/data/db
restart: unless-stopped
redis:
image: redis:7.0-alpine
volumes:
- redis-data:/data
restart: unless-stopped
volumes:
mongo-data:
redis-data:Шаг 4: Настройка переменных окружения
Создаем файл .env с необходимыми переменными
MONGO_USERNAME=admin
MONGO_PASSWORD=securepassword
JWT_SECRET=your-super-secret-jwt-key-that-is-long-and-randomШаг 5: Запуск контейнеров
Запускаем приложение в фоновом режиме
docker-compose up -d
docker-compose psУстановка из исходного кода
Этот метод подходит для продвинутых пользователей, которым нужна более глубокая кастомизация приложения.
Шаг 1: Установка зависимостей
Установка Node.js и npm для Ubuntu
sudo apt update
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v # Должна быть 18.x или выше
npm -v # Должна быть 8.x или вышеШаг 2: Установка и настройка MongoDB
Установка MongoDB и создание пользователей
sudo apt update
sudo apt install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod
mongosh --eval "
use admin
db.createUser({
user: 'admin',
pwd: 'securepassword',
roles: ['userAdminAnyDatabase', 'dbAdminAnyDatabase', 'readWriteAnyDatabase']
})
use reactive-resume
db.createUser({
user: 'resume_user',
pwd: 'resume_password',
roles: ['readWrite']
})
"Шаг 3: Установка и настройка Redis
Установка и запуск Redis
sudo apt install -y redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server
redis-cli pingШаг 4: Настройка переменных окружения
Создаем .env файл с конфигурацией
NODE_ENV=production
PORT=3000
MONGODB_URI=mongodb://admin:securepassword@localhost:27017/reactive-resume?authSource=admin
REDIS_URL=redis://localhost:6379
JWT_SECRET=your-super-secret-jwt-key-that-is-long-and-randomШаг 5: Сборка и запуск
Собираем приложение и запускаем его через PM2
npm run build
sudo npm install -g pm2
pm2 start ecosystem.config.js --name "reactive-resume"
pm2 startup
pm2 saveНастройка после установки
Дополнительные шаги для полноценного развертывания
Настройка домена и HTTPS
Настройка Nginx как reverse proxy и установка SSL-сертификата
sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# Настройка Nginx как reverse proxy
# Создать файл /etc/nginx/sites-available/reactive-resume с соответствующими настройками
# Установка Let's Encrypt SSL-сертификата
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
# Добавить в cron для автоматического обновления:
0 12 * * * /usr/bin/certbot renew --quietОбновление экземпляра
Инструкция по обновлению Reactive-Resume
Через Docker:
docker-compose down
git pull origin main
docker-compose pull
docker-compose up -d
docker-compose ps
Из исходного кода:
pm2 stop reactive-resume
git pull origin main
npm install
npm run build
pm2 start ecosystem.config.js --name "reactive-resume"
pm2 statusРуководство: Как самостоятельно разместить Reactive-Resume
Reactive-Resume — это конструктор резюме с открытым исходным кодом, позволяющий создавать профессиональные резюме с полным контролем над вашими данными. Это руководство поможет вам развернуть собственный экземпляр Reactive-Resume двумя способами: через Docker (рекомендуемый) и из исходного кода.
Требования системы
- Операционная система: Linux (Ubuntu 20.04/22.04), macOS или Windows (для локальной разработки)
- Node.js версии 18.x или выше
- npm версии 8.x или выше
- MongoDB (версия 5.0+)
- Redis (версия 6.0+)
- Не менее 2 ГБ оперативной памяти
- 5+ ГБ свободного дискового пространства
Установка через Docker (рекомендуемый способ)
Использование Docker изолирует приложение и его зависимости, что упрощает установку и управление.
Шаг 1: Установка Docker
Для Ubuntu:
# Обновление пакетов
sudo apt update
# Установка зависимостей
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Добавление официального GPG ключа Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Установка стабильного репозитория Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Установка Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# Добавление текущего пользователя в группу docker
sudo usermod -aG docker $USER
# Установка Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
echo "Пожалуйста, выйдите из системы и войдите снова, чтобы применить изменения в группе docker"
Для macOS: Скачайте Docker Desktop с официального сайта: https://www.docker.com/products/docker-desktop
Для Windows: Скачайте Docker Desktop с официального сайта: https://www.docker.com/products/docker-desktop
Шаг 2: Клонирование репозитория
git clone https://github.com/AmruthPillai/Reactive-Resume.git
cd Reactive-Resume
Шаг 3: Настройка Docker Compose
Создайте файл docker-compose.yml:
version: '3.8'
services:
app:
image: amruthpillai/reactive-resume:latest
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- MONGODB_URI=mongodb://mongo:27017/reactive-resume?authSource=admin
- REDIS_URL=redis://redis:6379
depends_on:
- mongo
- redis
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
mongo:
image: mongo:6.0
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=securepassword
volumes:
- mongo-data:/data/db
restart: unless-stopped
redis:
image: redis:7.0-alpine
volumes:
- redis-data:/data
restart: unless-stopped
volumes:
mongo-data:
redis-data:
Шаг 4: Настройка переменных окружения
Создайте файл .env:
MONGO_USERNAME=admin
MONGO_PASSWORD=securepassword
JWT_SECRET=your-super-secret-jwt-key-that-is-long-and-random
Шаг 5: Запуск контейнеров
docker-compose up -d
docker-compose ps
Приложение будет доступно по адресу http://localhost:3000
Установка из исходного кода
Этот метод подходит для продвинутых пользователей, которым нужна более глубокая кастомизация приложения.
Шаг 1: Установка зависимостей
Установка Node.js и npm (для Ubuntu):
# Обновление пакетов
sudo apt update
# Установка Node.js и npm
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Проверка версий
node -v # Должна быть 18.x или выше
npm -v # Должна быть 8.x или выше
Для macOS (через Homebrew):
brew install node
Для Windows: Скачайте установщик с официального сайта: https://nodejs.org/
git clone https://github.com/AmruthPillai/Reactive-Resume.git
cd Reactive-Resume
npm install
Шаг 2: Установка и настройка MongoDB
Установка MongoDB (для Ubuntu):
# Импорт публичного ключа MongoDB
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
# Добавление репозитория MongoDB
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
# Установка MongoDB
sudo apt update
sudo apt install -y mongodb-org
# Запуск и включение MongoDB
sudo systemctl start mongod
sudo systemctl enable mongod
Для macOS (через Homebrew):
brew install mongodb-community
brew services start mongodb-community
Настройка MongoDB:
mongosh --eval "
use admin
db.createUser({
user: 'admin',
pwd: 'securepassword',
roles: ['userAdminAnyDatabase', 'dbAdminAnyDatabase', 'readWriteAnyDatabase']
})
use reactive-resume
db.createUser({
user: 'resume_user',
pwd: 'resume_password',
roles: ['readWrite']
})
"
Шаг 3: Установка и настройка Redis
Установка Redis (для Ubuntu):
sudo apt install -y redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server
redis-cli ping
Для macOS (через Homebrew):
brew install redis
brew services start redis
Шаг 4: Настройка переменных окружения
Создайте файл .env в корневой директории проекта:
NODE_ENV=production
PORT=3000
MONGODB_URI=mongodb://admin:securepassword@localhost:27017/reactive-resume?authSource=admin
REDIS_URL=redis://localhost:6379
JWT_SECRET=your-super-secret-jwt-key-that-is-long-and-random
Важные замечания по безопасности:
- Замените
your-super-secret-jwt-key-that-is-long-and-randomна реальный секретный ключ - Используйте сложные пароли для MongoDB и Redis
Шаг 5: Сборка и запуск
npm run build
sudo npm install -g pm2
pm2 start ecosystem.config.js --name "reactive-resume"
pm2 startup
pm2 save
Приложение будет доступно по адресу http://localhost:3000
Настройка после установки
1. Настройка домена и HTTPS
Установка Nginx:
sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
Настройка Nginx как reverse proxy:
Создайте файл /etc/nginx/sites-available/reactive-resume:
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
client_max_body_size 10M;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
Включение конфигурации Nginx:
sudo ln -s /etc/nginx/sites-available/reactive-resume /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Установка Let's Encrypt SSL-сертификата:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
sudo crontab -e
Добавьте строку для автоматического обновления сертификата:
0 12 * * * /usr/bin/certbot renew --quiet
2. Настройка резервного копирования
Создание скрипта резервного копирования MongoDB:
Создайте файл /usr/local/bin/backup-mongodb.sh:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/reactive-resume"
MONGO_HOST="localhost"
MONGO_PORT="27017"
MONGO_USER="admin"
MONGO_PASSWORD="securepassword"
MONGO_DB="reactive-resume"
MAX_BACKUPS=7
mkdir -p $BACKUP_DIR
mongodump --host $MONGO_HOST --port $MONGO_PORT \
--username $MONGO_USER --password $MONGO_PASSWORD \
--db $MONGO_DB \
--out $BACKUP_DIR/mongo_$DATE
tar -czf $BACKUP_DIR/mongo_$DATE.tar.gz -C $BACKUP_DIR mongo_$DATE
rm -rf $BACKUP_DIR/mongo_$DATE
cd $BACKUP_DIR
ls -t mongo_*.tar.gz | tail -n +$((MAX_BACKUPS+1)) | xargs -r rm
Создание скрипта резервного копирования Redis:
Создайте файл /usr/local/bin/backup-redis.sh:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/reactive-resume"
REDIS_HOST="localhost"
REDIS_PORT="6379"
MAX_BACKUPS=7
mkdir -p $BACKUP_DIR
redis-cli -h $REDIS_HOST -p $REDIS_PORT BGSAVE
sleep 10
cp /var/lib/redis/dump.rdb $BACKUP_DIR/redis_$DATE.rdb
cd $BACKUP_DIR
ls -t redis_*.rdb | tail -n +$((MAX_BACKUPS+1)) | xargs -r rm
Настройка cron для автоматического резервного копирования:
sudo crontab -e
Добавьте строки:
0 2 * * * /usr/local/bin/backup-mongodb.sh
0 3 * * * /usr/local/bin/backup-redis.sh
3. Настройка безопасности
Настройка файрвола:
sudo apt install -y ufw
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw allow from 127.0.0.1 to any port 3000
sudo ufw enable
Настройка Fail2ban:
sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local
Добавьте в файл:
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
findtime = 60
bantime = 3600
Перезапуск Fail2ban:
sudo systemctl restart fail2ban
Обновление экземпляра
Через Docker
docker-compose down
git pull origin main
docker-compose pull
docker-compose up -d
docker-compose ps
Из исходного кода
pm2 stop reactive-resume
git pull origin main
npm install
npm run build
pm2 start ecosystem.config.js --name "reactive-resume"
pm2 status
Миграция данных при обновлении
mongodump --db reactive-resume --out /path/to/backup
# Выполните шаги обновления
mongorestore --db reactive-resume /path/to/backup/reactive-resume
Масштабирование
Горизонтальное масштабирование с Docker
Создайте файл docker-compose.scale.yml:
version: '3.8'
services:
app:
image: amruthpillai/reactive-resume:latest
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- MONGODB_URI=mongodb://mongo:27017/reactive-resume?authSource=admin
- REDIS_URL=redis://redis:6379
depends_on:
- mongo
- redis
restart: unless-stopped
deploy:
replicas: 3
mongo:
image: mongo:6.0
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=securepassword
volumes:
- mongo-data:/data/db
restart: unless-stopped
redis:
image: redis:7.0-alpine
volumes:
- redis-data:/data
restart: unless-stopped
volumes:
mongo-data:
redis-data:
Масштабирование MongoDB
Для высоконагруженных экземпляров настройте репликацию:
openssl rand -base64 756 > /etc/mongodb-keyfile
chmod 400 /etc/mongodb-keyfile
echo "replication:
replSet: rs0
keyFile: /etc/mongodb-keyfile" | sudo tee -a /etc/mongod.conf
sudo systemctl restart mongod
mongosh --eval "rs.initiate()"
Заключение
Теперь у вас полностью автономный экземпонал Reactive-Resume с контролем над вашими данными. Регулярно обновляйте систему, делайте резервные копии и следите за безопасностью. При масштабировании используйте описанные методы для обеспечения высокой доступности и производительности.
Для получения дополнительной информации посетите официальный репозиторий: github.com/AmruthPillai/Reactive-Resume