5.2 KiB
Stones Database - Deployment Guide
This guide provides step-by-step instructions for deploying the Stones Database application to a VPS with Nginx and PostgreSQL.
Prerequisites
- A VPS server with Ubuntu/Debian
- A domain or subdomain (e.g., contacts.boilerhaus.org)
- SSH access to your server
- PostgreSQL database server
- Node.js and npm installed on the server
- Nginx web server
- Let's Encrypt SSL certificates for your domain
- SSH key set up for Gitea access
Server Setup Checklist
1. Update your server
sudo apt update && sudo apt upgrade -y
2. Install Node.js using NVM
# Install NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc
# Install Node.js v18
nvm install 18
nvm use 18
nvm alias default 18
3. Install and configure PostgreSQL
sudo apt install postgresql postgresql-contrib -y
# Create a database user and database
sudo -u postgres psql -c "CREATE USER stonesadmin WITH PASSWORD 'your-secure-password';"
sudo -u postgres psql -c "CREATE DATABASE stones;"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE stones TO stonesadmin;"
4. Install Nginx
sudo apt install nginx -y
5. Install Let's Encrypt Certbot
sudo apt install certbot python3-certbot-nginx -y
6. Generate SSL certificate
sudo certbot --nginx -d contacts.boilerhaus.org
7. Set up SSH key for Gitea
If you don't already have an SSH key:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Add your public key to your Gitea account at git.boilerhaus.org:
cat ~/.ssh/id_rsa.pub
Copy the output and add it to your Gitea account settings.
Deployment Process
1. Set up your repository on Gitea (git.boilerhaus.org)
Make sure your project is pushed to your Gitea repository at git.boilerhaus.org/boiler/stones. This repository will be used for deployment.
2. Clone the repository to your local machine to prepare for deployment
git clone git@git.boilerhaus.org:boiler/stones.git
cd stones
3. Prepare the deployment files
Copy the Nginx configuration and deployment script to your repository:
contacts-boilerhaus-org.conf: Nginx configuration for your subdomaindeploy.sh: Deployment script to automate the deployment process
The deployment script is already configured to use your Gitea server:
REPO_URL="git@git.boilerhaus.org:boiler/stones.git"
4. Make the deployment script executable
chmod +x deploy.sh backup-db.sh
5. Commit and push these files to your repository
git add contacts-boilerhaus-org.conf deploy.sh backup-db.sh DEPLOYMENT.md
git commit -m "Add deployment files"
git push origin main
6. Upload the repository to your server
You can clone the repository directly to your server:
ssh your-server-user@your-server-ip
git clone git@git.boilerhaus.org:boiler/stones.git
cd stones
Make sure your server has the proper SSH key set up to access your Gitea repository.
7. Run the deployment script
./deploy.sh
The script will:
- Check if SSH key is set up for git user access
- Clone or update the repository
- Install dependencies
- Build the application
- Create a .env.production file if it doesn't exist
- Set up PM2 for process management
- Configure Nginx
8. Update the .env.production file with your actual values
nano .env.production
Make sure to update:
DATABASE_URLwith your PostgreSQL credentialsAUTH_SECRETwith a strong random string- Any other configuration variables
9. Import your database dump (if you have one)
psql -U stonesadmin -d stones -f path/to/your/dump.sql
Updating the Application
When you need to update the application, you can either:
- Run the deployment script again, which will pull the latest changes:
cd /path/to/repository
./deploy.sh
- Or manually update:
cd /var/www/stones-database
git pull origin main
npm ci
npm run build
pm2 restart stones-database
Troubleshooting
Git Access Issues
If you encounter issues with Git access:
# Test SSH connection to Gitea
ssh -T git@git.boilerhaus.org
# Check if SSH agent is running
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Nginx Configuration
If you encounter issues with Nginx:
sudo nginx -t # Test Nginx configuration
sudo systemctl reload nginx # Reload Nginx
sudo systemctl status nginx # Check Nginx status
PM2 Issues
pm2 logs stones-database # View application logs
pm2 list # Check running processes
pm2 restart stones-database # Restart the application
Database Connection
If your application can't connect to the database:
- Check if PostgreSQL is running:
sudo systemctl status postgresql - Verify your
.env.productionfile has the correct DATABASE_URL - Make sure your PostgreSQL configuration allows connections (check pg_hba.conf)
SSL Certificate
If you have issues with SSL:
sudo certbot renew --dry-run # Test certificate renewal
sudo certbot certificates # List certificates
Notes
- The application runs on port 3001 locally and is proxied through Nginx
- PM2 is used to keep the application running and restart it if it crashes
- Make sure to back up your database regularly