Initial commit: Add HomeBase application with Docker support, deployment scripts, and health check endpoint
Some checks failed
Deploy to BeePC / deploy (push) Has been cancelled
Some checks failed
Deploy to BeePC / deploy (push) Has been cancelled
This commit is contained in:
236
README.md
Normal file
236
README.md
Normal file
@@ -0,0 +1,236 @@
|
||||
# HomeBase
|
||||
|
||||
Simple self-hosted Node.js Docker application with automated SSH deployment.
|
||||
|
||||
## Features
|
||||
|
||||
- 🚀 Simple Express.js server
|
||||
- 🐳 Docker containerized
|
||||
- 🔄 Automated deployment via SSH
|
||||
- ✅ Health check endpoint
|
||||
- 🔐 SSH key-based authentication
|
||||
|
||||
## Prerequisites
|
||||
|
||||
On your local machine:
|
||||
- Node.js (for local testing)
|
||||
- Docker (for local testing)
|
||||
- SSH access to beepc server
|
||||
|
||||
On the remote server (beepc):
|
||||
- Docker installed
|
||||
- Docker Compose installed
|
||||
- SSH access configured for user `spencer`
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Local Development
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Run locally
|
||||
npm start
|
||||
|
||||
# Visit http://localhost:3001
|
||||
```
|
||||
|
||||
### Deployment
|
||||
|
||||
### Option 1: Manual Deployment (Windows)
|
||||
|
||||
```bash
|
||||
# Run the deployment script from project root
|
||||
.\scripts\deploy.bat
|
||||
```
|
||||
|
||||
### Option 2: Manual Deployment (Linux/Mac)
|
||||
|
||||
```bash
|
||||
# Make script executable
|
||||
chmod +x scripts/deploy.sh
|
||||
|
||||
# Run deployment
|
||||
bash scripts/deploy.sh
|
||||
```
|
||||
|
||||
### Option 3: Manual Deployment (PowerShell)
|
||||
|
||||
```powershell
|
||||
# Run the deployment script from project root
|
||||
.\scripts\deploy.ps1
|
||||
```
|
||||
|
||||
### Option 4: Automated Deployment (GitHub Actions)
|
||||
|
||||
1. Add your SSH private key to GitHub Secrets:
|
||||
- Go to your repository Settings > Secrets and variables > Actions
|
||||
- Add a new secret named `SSH_PRIVATE_KEY`
|
||||
- Paste your SSH private key content
|
||||
|
||||
2. Push to main branch:
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "Initial commit"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
3. The app will automatically deploy to spencer@beepc
|
||||
|
||||
## SSH Setup
|
||||
|
||||
Ensure you have SSH key-based authentication set up:
|
||||
|
||||
```bash
|
||||
# Generate SSH key if you don't have one
|
||||
ssh-keygen -t ed25519 -C "your_email@example.com"
|
||||
|
||||
# Copy key to remote server
|
||||
ssh-copy-id spencer@beepc
|
||||
|
||||
# Test connection
|
||||
ssh spencer@beepc
|
||||
```
|
||||
|
||||
## Remote Server Setup
|
||||
|
||||
On beepc, ensure Docker is installed:
|
||||
|
||||
```bash
|
||||
# Install Docker (Ubuntu/Debian)
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
|
||||
# Add user to docker group
|
||||
sudo usermod -aG docker spencer
|
||||
|
||||
# Install Docker Compose
|
||||
sudo apt-get update
|
||||
sudo apt-get install docker-compose-plugin
|
||||
|
||||
# Logout and login again for group changes to take effect
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
- `GET /` - Main endpoint, returns app status
|
||||
- `GET /health` - Health check endpoint
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
HomeBase/
|
||||
├── scripts/
|
||||
│ ├── deploy.ps1 # PowerShell deployment script
|
||||
│ ├── deploy.sh # Bash deployment script
|
||||
│ └── deploy.bat # Windows batch deployment script
|
||||
├── .github/
|
||||
│ └── workflows/
|
||||
│ └── deploy.yml # GitHub Actions workflow
|
||||
├── .dockerignore # Docker ignore file
|
||||
├── .gitignore # Git ignore file
|
||||
├── Dockerfile # Docker configuration
|
||||
├── docker-compose.yml # Docker Compose configuration
|
||||
├── homebase.service # Systemd service file
|
||||
├── package.json # Node.js dependencies
|
||||
├── server.js # Express server
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## Deployment Process
|
||||
|
||||
The deployment script does the following:
|
||||
|
||||
1. Creates remote directory if it doesn't exist
|
||||
2. Syncs files to remote server via rsync/scp
|
||||
3. Stops existing Docker container
|
||||
4. Builds new Docker image
|
||||
5. Starts new container
|
||||
6. Verifies container is running
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Check logs on remote server
|
||||
|
||||
```bash
|
||||
ssh spencer@beepc
|
||||
cd /home/spencer/homebase
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
### Check container status
|
||||
|
||||
```bash
|
||||
ssh spencer@beepc "docker ps"
|
||||
```
|
||||
|
||||
### Restart container
|
||||
|
||||
```bash
|
||||
ssh spencer@beepc "cd /home/spencer/homebase && docker compose restart"
|
||||
```
|
||||
|
||||
### Remove and rebuild
|
||||
|
||||
```bash
|
||||
ssh spencer@beepc "cd /home/spencer/homebase && docker compose down && docker compose up -d --build"
|
||||
```
|
||||
|
||||
## Accessing the App
|
||||
|
||||
Once deployed, access the app at:
|
||||
- `http://homebase.sketchferret.com` (reverse proxied, no port needed)
|
||||
- `http://beepc:3001` (direct access from local network)
|
||||
- `http://localhost:3001` (direct access on the server)
|
||||
|
||||
**Note:** The app runs on port 3001 internally but is accessed via reverse proxy at the standard HTTP port.
|
||||
|
||||
## Auto-Start on Boot
|
||||
|
||||
The deployment script automatically sets up a systemd service that:
|
||||
- Starts the Docker container on server boot
|
||||
- Restarts the container if it crashes
|
||||
- Runs as the spencer user
|
||||
|
||||
To manually manage the service:
|
||||
|
||||
```bash
|
||||
# Check status
|
||||
ssh spencer@beepc "sudo systemctl status homebase"
|
||||
|
||||
# Stop service
|
||||
ssh spencer@beepc "sudo systemctl stop homebase"
|
||||
|
||||
# Start service
|
||||
ssh spencer@beepc "sudo systemctl start homebase"
|
||||
|
||||
# Restart service
|
||||
ssh spencer@beepc "sudo systemctl restart homebase"
|
||||
|
||||
# Disable auto-start
|
||||
ssh spencer@beepc "sudo systemctl disable homebase"
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
You can customize settings by modifying [docker-compose.yml](docker-compose.yml):
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- PORT=3001 # Internal port (reverse proxy maps to standard HTTP)
|
||||
- DOMAIN=homebase.sketchferret.com # Your domain
|
||||
ports:
|
||||
- "3001:3001" # Port mapping for reverse proxy backend
|
||||
```
|
||||
|
||||
## Security Notes
|
||||
|
||||
- Uses SSH key authentication (no passwords)
|
||||
- Container runs as non-root user
|
||||
- Only production dependencies installed in Docker image
|
||||
- Health check endpoint for monitoring
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user