95 lines
2.5 KiB
Markdown
95 lines
2.5 KiB
Markdown
# Technical Context
|
|
|
|
## Technologies Used
|
|
- Frontend:
|
|
- React
|
|
- TypeScript
|
|
- Tailwind CSS
|
|
- Framer Motion (animations)
|
|
- Infrastructure:
|
|
- Docker
|
|
- Portainer
|
|
- Gitea (version control)
|
|
|
|
## Development Setup
|
|
1. Source code:
|
|
- Repository hosted on Gitea
|
|
- TypeScript for type safety
|
|
- React components in client/src/components/
|
|
|
|
2. Build/Deploy:
|
|
- Docker container
|
|
- Portainer for container management
|
|
- Automatic rebuilds on code changes
|
|
|
|
## Technical Constraints
|
|
1. File Management:
|
|
- PDF files stored in client/public/minutes/
|
|
- Static file serving for documents
|
|
|
|
2. Browser Compatibility:
|
|
- Desktop: PDF viewer in popup
|
|
- Mobile: Direct PDF download
|
|
|
|
3. Dependencies:
|
|
- React for UI components
|
|
- TypeScript for type checking
|
|
- Framer Motion for animations
|
|
- Tailwind for styling
|
|
|
|
## Production Server Configuration (10.4.0.205)
|
|
|
|
### Caddy Reverse Proxy
|
|
- **Location:** `~/docker/caddy/config/Caddyfile`
|
|
- **Container Name:** `caddy`
|
|
- **Admin API:** `0.0.0.0:2019`
|
|
|
|
### DeafMissoula.org Configuration
|
|
- **Docker Container:** `deafmissoulaorg-app-1`
|
|
- **Internal Port:** 801
|
|
- **Docker Network:** Separate from Caddy (different network IDs)
|
|
- **Current IP:** 172.18.0.6 (as of March 4, 2026)
|
|
|
|
**Important:** Because Caddy and deafmissoula containers are on different Docker networks, the Caddyfile must use IP addresses instead of container names for routing.
|
|
|
|
### Caddyfile Entry:
|
|
```
|
|
deafmissoula.org {
|
|
reverse_proxy 172.18.0.6:801
|
|
}
|
|
```
|
|
|
|
### Common Issues & Solutions
|
|
|
|
#### Issue: Website returns 502 after Docker rebuild
|
|
**Cause:** Docker container IP address changed during rebuild
|
|
|
|
**Solution:**
|
|
1. Check current container IP:
|
|
```bash
|
|
ssh chaulmark@10.4.0.205 "docker inspect deafmissoulaorg-app-1 --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'"
|
|
```
|
|
|
|
2. Update Caddyfile:
|
|
```bash
|
|
# Download Caddyfile
|
|
scp chaulmark@10.4.0.205:~/docker/caddy/config/Caddyfile /tmp/Caddyfile
|
|
|
|
# Edit locally to update IP address in deafmissoula.org section
|
|
|
|
# Upload back
|
|
scp /tmp/Caddyfile chaulmark@10.4.0.205:~/docker/caddy/config/Caddyfile
|
|
```
|
|
|
|
3. Reload Caddy:
|
|
```bash
|
|
ssh chaulmark@10.4.0.205 "docker exec caddy caddy reload --config /etc/caddy/Caddyfile"
|
|
```
|
|
|
|
4. Verify:
|
|
```bash
|
|
curl -I https://deafmissoula.org
|
|
```
|
|
|
|
#### Better Long-term Solution
|
|
Connect both Caddy and deafmissoula containers to the same Docker network to use container names instead of IP addresses, which would prevent this issue.
|