deployment files
This commit is contained in:
parent
d7c2ad8ea0
commit
22d502b090
3 changed files with 193 additions and 0 deletions
106
DEPLOYMENT.md
Normal file
106
DEPLOYMENT.md
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
# Deployment Guide for Hetzner VPS
|
||||||
|
|
||||||
|
This guide will help you deploy your SvelteKit application on your Hetzner VPS.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Node.js installed on your VPS
|
||||||
|
- PM2 installed globally (`npm install -g pm2`)
|
||||||
|
- Nginx installed and running
|
||||||
|
|
||||||
|
## Deployment Steps
|
||||||
|
|
||||||
|
### 1. Build the Application
|
||||||
|
|
||||||
|
On your VPS, navigate to your project directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /floter-design
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Create Logs Directory (for PM2)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /floter-design/logs
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Start the Application with PM2
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /floter-design
|
||||||
|
pm2 start ecosystem.config.cjs
|
||||||
|
pm2 save
|
||||||
|
pm2 startup
|
||||||
|
```
|
||||||
|
|
||||||
|
The last command (`pm2 startup`) will give you a command to run with sudo to enable PM2 to start on system boot.
|
||||||
|
|
||||||
|
### 4. Configure Nginx
|
||||||
|
|
||||||
|
1. Copy the nginx configuration:
|
||||||
|
```bash
|
||||||
|
sudo cp nginx.conf.example /etc/nginx/sites-available/floter-design
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Edit the configuration with your domain:
|
||||||
|
```bash
|
||||||
|
sudo nano /etc/nginx/sites-available/floter-design
|
||||||
|
```
|
||||||
|
Replace `your-domain.com` with your actual domain name.
|
||||||
|
|
||||||
|
3. Enable the site:
|
||||||
|
```bash
|
||||||
|
sudo ln -s /etc/nginx/sites-available/floter-design /etc/nginx/sites-enabled/
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Test nginx configuration:
|
||||||
|
```bash
|
||||||
|
sudo nginx -t
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Reload nginx:
|
||||||
|
```bash
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Set Up SSL (Optional but Recommended)
|
||||||
|
|
||||||
|
If you want HTTPS, use Let's Encrypt:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install certbot python3-certbot-nginx
|
||||||
|
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Then uncomment the HTTPS server block in your nginx config and reload.
|
||||||
|
|
||||||
|
## Useful Commands
|
||||||
|
|
||||||
|
### PM2 Commands
|
||||||
|
|
||||||
|
- View running apps: `pm2 list`
|
||||||
|
- View logs: `pm2 logs floter-design`
|
||||||
|
- Restart app: `pm2 restart floter-design`
|
||||||
|
- Stop app: `pm2 stop floter-design`
|
||||||
|
- Monitor: `pm2 monit`
|
||||||
|
|
||||||
|
### Nginx Commands
|
||||||
|
|
||||||
|
- Test config: `sudo nginx -t`
|
||||||
|
- Reload: `sudo systemctl reload nginx`
|
||||||
|
- Restart: `sudo systemctl restart nginx`
|
||||||
|
- Status: `sudo systemctl status nginx`
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
- **Port already in use**: Change the PORT in `ecosystem.config.cjs` (default is 3001) or stop the process using that port
|
||||||
|
- **Port 3001 conflicts**: You can use any available port (3002, 3003, etc.) - just update both `ecosystem.config.cjs` and your nginx config
|
||||||
|
- **502 Bad Gateway**: Check if the Node.js server is running (`pm2 list`) and check logs (`pm2 logs`)
|
||||||
|
- **Permission errors**: Make sure the user running PM2 has proper permissions to the `/floter-design` directory
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
If you need to set environment variables, edit the `env` section in `ecosystem.config.cjs` or create a `.env` file in `/floter-design`.
|
||||||
|
|
||||||
22
ecosystem.config.cjs
Normal file
22
ecosystem.config.cjs
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
module.exports = {
|
||||||
|
apps: [{
|
||||||
|
name: 'floter-design',
|
||||||
|
script: './build/index.js',
|
||||||
|
cwd: '/floter-design',
|
||||||
|
instances: 1,
|
||||||
|
exec_mode: 'fork',
|
||||||
|
env: {
|
||||||
|
NODE_ENV: 'production',
|
||||||
|
PORT: 3001,
|
||||||
|
HOST: '0.0.0.0'
|
||||||
|
},
|
||||||
|
error_file: './logs/err.log',
|
||||||
|
out_file: './logs/out.log',
|
||||||
|
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
|
||||||
|
merge_logs: true,
|
||||||
|
autorestart: true,
|
||||||
|
watch: false,
|
||||||
|
max_memory_restart: '1G'
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
|
||||||
65
nginx.conf.example
Normal file
65
nginx.conf.example
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Example nginx configuration for SvelteKit Node.js app
|
||||||
|
# Place this in: /etc/nginx/sites-available/floter-design
|
||||||
|
# Then create symlink: sudo ln -s /etc/nginx/sites-available/floter-design /etc/nginx/sites-enabled/
|
||||||
|
# Test config: sudo nginx -t
|
||||||
|
# Reload: sudo systemctl reload nginx
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name your-domain.com www.your-domain.com; # Replace with your domain
|
||||||
|
|
||||||
|
# Redirect HTTP to HTTPS (uncomment after setting up SSL)
|
||||||
|
# return 301 https://$server_name$request_uri;
|
||||||
|
|
||||||
|
# For now, proxy directly to Node.js (remove this block after SSL setup)
|
||||||
|
location / {
|
||||||
|
proxy_pass http://localhost:3001;
|
||||||
|
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;
|
||||||
|
|
||||||
|
# Increase timeouts for long-running requests
|
||||||
|
proxy_connect_timeout 60s;
|
||||||
|
proxy_send_timeout 60s;
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# HTTPS configuration (uncomment and configure after SSL certificate setup)
|
||||||
|
# server {
|
||||||
|
# listen 443 ssl http2;
|
||||||
|
# listen [::]:443 ssl http2;
|
||||||
|
# server_name your-domain.com www.your-domain.com;
|
||||||
|
#
|
||||||
|
# # SSL certificate paths (use Let's Encrypt or your certificate)
|
||||||
|
# ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
||||||
|
# ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
||||||
|
#
|
||||||
|
# # SSL configuration
|
||||||
|
# ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
# ssl_ciphers HIGH:!aNULL:!MD5;
|
||||||
|
# ssl_prefer_server_ciphers on;
|
||||||
|
#
|
||||||
|
# location / {
|
||||||
|
# proxy_pass http://localhost:3001;
|
||||||
|
# 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;
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue