175 lines
5.4 KiB
Markdown
175 lines
5.4 KiB
Markdown
# BTCPay Server Deployment Instructions
|
|
|
|
## Infrastructure Status
|
|
- **Target Server**: portainer-01 (10.0.0.51)
|
|
- **Domain**: https://pay.silverlabs.uk
|
|
- **HAProxy Router**: VyOS (10.0.0.1)
|
|
|
|
## Prerequisites
|
|
1. Access to portainer-01 server (10.0.0.51) with sysadmin/Phenom12# credentials
|
|
2. Access to VyOS router (10.0.0.1) for HAProxy configuration
|
|
3. Docker and Docker Compose installed on portainer-01
|
|
|
|
## Step 1: Deploy BTCPay Server to Portainer
|
|
|
|
### Option A: Via Portainer Web UI
|
|
1. Access Portainer at https://10.0.0.51:9443
|
|
2. Login with admin credentials (may need to reset if infrastructure was reset)
|
|
3. Navigate to "Stacks" → "Add Stack"
|
|
4. Name: `btcpay-server`
|
|
5. Copy the contents of `btcpay-server-compose.yml` into the web editor
|
|
6. Upload the environment file `btcpay.env` or add environment variables manually
|
|
7. Deploy the stack
|
|
|
|
### Option B: Via SSH/Command Line (if SSH access is available)
|
|
```bash
|
|
# Copy deployment files to server
|
|
scp btcpay-server-compose.yml sysadmin@10.0.0.51:/tmp/
|
|
scp btcpay.env sysadmin@10.0.0.51:/tmp/
|
|
|
|
# SSH to server
|
|
ssh sysadmin@10.0.0.51
|
|
|
|
# Create deployment directory
|
|
sudo mkdir -p /opt/btcpay
|
|
sudo cp /tmp/btcpay-server-compose.yml /opt/btcpay/docker-compose.yml
|
|
sudo cp /tmp/btcpay.env /opt/btcpay/.env
|
|
|
|
# Deploy BTCPay Server
|
|
cd /opt/btcpay
|
|
sudo docker-compose up -d
|
|
```
|
|
|
|
### Option C: Via Docker API (if accessible)
|
|
```bash
|
|
# Copy files and use docker-compose remotely
|
|
export DOCKER_HOST=tcp://10.0.0.51:2376
|
|
docker-compose -f btcpay-server-compose.yml --env-file btcpay.env up -d
|
|
```
|
|
|
|
## Step 2: Configure HAProxy on VyOS Router
|
|
|
|
SSH to VyOS router (10.0.0.1) and configure routing:
|
|
|
|
```bash
|
|
ssh sysadmin@10.0.0.1
|
|
|
|
# Enter configuration mode
|
|
configure
|
|
|
|
# Configure backend for BTCPay Server
|
|
set load-balancing reverse-proxy service btcpay-backend backend btcpay-server address 10.0.0.51
|
|
set load-balancing reverse-proxy service btcpay-backend backend btcpay-server port 49392
|
|
set load-balancing reverse-proxy service btcpay-backend backend btcpay-server check
|
|
|
|
# Configure frontend rule for pay.silverlabs.uk
|
|
set load-balancing reverse-proxy service btcpay-frontend bind 0.0.0.0 port 443
|
|
set load-balancing reverse-proxy service btcpay-frontend rule pay-silverlabs domain-name pay.silverlabs.uk
|
|
set load-balancing reverse-proxy service btcpay-frontend rule pay-silverlabs set backend btcpay-backend
|
|
set load-balancing reverse-proxy service btcpay-frontend ssl certificate selfsigned
|
|
|
|
# Also configure HTTP redirect to HTTPS
|
|
set load-balancing reverse-proxy service btcpay-frontend-http bind 0.0.0.0 port 80
|
|
set load-balancing reverse-proxy service btcpay-frontend-http rule pay-silverlabs-redirect domain-name pay.silverlabs.uk
|
|
set load-balancing reverse-proxy service btcpay-frontend-http rule pay-silverlabs-redirect redirect location https://pay.silverlabs.uk
|
|
|
|
# Commit and save
|
|
commit
|
|
save
|
|
```
|
|
|
|
## Step 3: Verify Deployment
|
|
|
|
1. **Check container status**:
|
|
```bash
|
|
ssh sysadmin@10.0.0.51
|
|
sudo docker ps | grep btcpay
|
|
```
|
|
|
|
2. **Check logs**:
|
|
```bash
|
|
sudo docker logs btcpayserver
|
|
sudo docker logs btcpay-postgres
|
|
sudo docker logs btcpay-nbxplorer
|
|
```
|
|
|
|
3. **Test local access**:
|
|
```bash
|
|
curl -k http://10.0.0.51:49392/api/v1/health
|
|
```
|
|
|
|
4. **Test domain access**:
|
|
```bash
|
|
curl -k https://pay.silverlabs.uk/api/v1/health
|
|
```
|
|
|
|
## Step 4: Complete BTCPay Server Setup
|
|
|
|
1. Access https://pay.silverlabs.uk
|
|
2. Create admin account (suggest using jamie@silverlabs.uk as before)
|
|
3. Complete initial setup wizard:
|
|
- Set up Bitcoin wallet (hot wallet for development)
|
|
- Configure store settings
|
|
- Generate API keys for LittleShop integration
|
|
4. Configure webhooks pointing to LittleShop instance
|
|
|
|
## Step 5: Update LittleShop Configuration
|
|
|
|
Update LittleShop's `appsettings.json`:
|
|
```json
|
|
{
|
|
"BTCPayServer": {
|
|
"BaseUrl": "https://pay.silverlabs.uk",
|
|
"ApiKey": "GENERATED_API_KEY_FROM_BTCPAY",
|
|
"StoreId": "STORE_ID_FROM_BTCPAY",
|
|
"WebhookSecret": "WEBHOOK_SECRET_FROM_BTCPAY"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### If Portainer access is needed:
|
|
- Reset Portainer admin password via Docker:
|
|
```bash
|
|
sudo docker exec -it portainer /portainer --admin-password='$2y$10$HASH_OF_NEW_PASSWORD'
|
|
```
|
|
|
|
### If deployment fails:
|
|
- Check Docker logs: `sudo docker logs btcpayserver`
|
|
- Verify network connectivity between containers
|
|
- Check if ports are already in use: `sudo netstat -tulpn | grep 49392`
|
|
|
|
### If domain routing doesn't work:
|
|
- Verify HAProxy configuration: `show configuration` in VyOS
|
|
- Check if SSL certificate is valid
|
|
- Test direct IP access first: http://10.0.0.51:49392
|
|
|
|
## Security Considerations
|
|
|
|
- Change all default passwords in btcpay.env
|
|
- Use proper SSL certificates (Let's Encrypt recommended)
|
|
- Ensure Bitcoin node is properly secured
|
|
- Monitor logs for any suspicious activity
|
|
- Regular backups of BTCPay data and Bitcoin blockchain data
|
|
|
|
## Post-Deployment
|
|
|
|
After successful deployment:
|
|
1. Test payment flow end-to-end
|
|
2. Configure additional cryptocurrencies if needed
|
|
3. Set up monitoring and alerting
|
|
4. Schedule regular backups
|
|
5. Update DNS records if necessary
|
|
|
|
## Container Services Overview
|
|
|
|
| Service | Port | Purpose |
|
|
|---------|------|---------|
|
|
| btcpayserver | 49392 | Main BTCPay Server application |
|
|
| postgres | 5432 | Database for BTCPay data |
|
|
| nbxplorer | 32838 | Bitcoin blockchain explorer |
|
|
| bitcoind | 8332/8333 | Bitcoin node (RPC/P2P) |
|
|
| tor | 9050 | Tor proxy for privacy |
|
|
|
|
All services are connected via Docker network `btcpaynetwork`. |