- Hostinger VPS with Ubuntu 20.04+ or similar
- SSH access to VPS
- Domain name (optional but recommended)
- PM2 installed for process management
ssh root@your-vps-ipcurl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejssudo npm install -g pm2sudo apt-get install -y gitOption A - Clone from GitHub:
cd /var/www
git clone https://github.com/yourusername/ai-image-generator.git
cd ai-image-generatorOption B - Upload via FTP/SFTP:
Upload files to /var/www/ai-image-generator
npm installnano .envAdd these variables:
HUGGINGFACE_API_KEY=your_huggingface_api_key_here
PORT=3000
HOST=0.0.0.0
FRONTEND_URL=http://your-domain.com
NODE_ENV=productionSave (Ctrl+X, Y, Enter)
pm2 start server-production.js --name ai-generator
pm2 save
pm2 startup systemdsudo apt-get install nginx
sudo nano /etc/nginx/sites-available/ai-generatorAdd this configuration:
server {
listen 80;
server_name your-domain.com;
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;
}
location /uploads {
alias /var/www/ai-image-generator/uploads;
expires 1y;
add_header Cache-Control "public, immutable";
}
}Enable the site:
sudo ln -s /etc/nginx/sites-available/ai-generator /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginxsudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.comsudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable- Build the client:
cd client
npm install
npm run build- Serve with Nginx:
sudo mkdir -p /var/www/html/ai-generator
sudo cp -r dist/* /var/www/html/ai-generator/Update Nginx config to serve frontend:
server {
listen 80;
server_name your-domain.com;
# Frontend
location / {
root /var/www/html/ai-generator;
try_files $uri $uri/ /index.html;
}
# API
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Uploads
location /uploads {
alias /var/www/ai-image-generator/uploads;
}
}- Update client environment:
# client/.env.production
VITE_API_URL=https://your-api-domain.com- Build and deploy:
cd client
npm run build
# Upload dist folder to hostingCheck logs:
pm2 logs ai-generatorMonitor processes:
pm2 monitRestart server:
pm2 restart ai-generatorPull updates:
cd /var/www/ai-image-generator
git pull
npm install
pm2 restart ai-generatorsudo lsof -i :3000
sudo kill -9 <PID>sudo chown -R www-data:www-data /var/www/ai-image-generatorsudo nginx -t
sudo systemctl status nginx
sudo tail -f /var/log/nginx/error.logpm2 logs
pm2 flush- Never commit .env file
- Use strong firewall rules
- Keep server and dependencies updated
- Use SSL/HTTPS
- Set up fail2ban for SSH protection
- Regular backups
Hugging Face free tier has rate limits. For production:
- Monitor API usage
- Implement rate limiting if needed
- Consider upgrading to paid tier for higher volume
Backup uploads directory:
sudo tar -czf uploads-backup-$(date +%Y%m%d).tar.gz /var/www/ai-image-generator/uploadsSetup cron job for daily backups:
0 2 * * * tar -czf /backups/uploads-$(date +\%Y\%m\%d).tar.gz /var/www/ai-image-generator/uploads