✈ Added plane, removed npm

This commit is contained in:
2025-12-31 00:34:11 -05:00
parent 0de12f8552
commit 6c0c9d2edf
4 changed files with 224 additions and 69 deletions

View File

@@ -7,12 +7,22 @@ Docker Compose stacks for Flook (192.168.1.75) managed via Portainer.
| Stack | Services | Port(s) | Description | | Stack | Services | Port(s) | Description |
|-------|----------|---------|-------------| |-------|----------|---------|-------------|
| portainer | portainer | 9000 | Stack management | | portainer | portainer | 9000 | Stack management |
| proxy | npm | 1880, 18443, 81 | Nginx Proxy Manager (CRITICAL) |
| documents | paperless, paperless-db, paperless-redis, paperless-tika, paperless-gotenberg, onlyoffice | 8777, 8089, 4430 | Document management | | documents | paperless, paperless-db, paperless-redis, paperless-tika, paperless-gotenberg, onlyoffice | 8777, 8089, 4430 | Document management |
| productivity | gitlab, vaultwarden, memos, mortis, freshrss | 8929, 4743, 5230, 5231, 8054 | Personal tools | | productivity | gitlab, vaultwarden, memos, mortis, freshrss | 8929, 4743, 5230, 5231, 8054 | Personal tools |
| backup | borgmatic | - | Borg backup to chook | | backup | borgmatic | - | Borg backup to chook |
| seafile | seafile, seadoc, mysql, redis, notification, md-server, seasearch | 8098, 8888, 8083, 8084, 4080 | File sync (migrated from VM) | | seafile | seafile, seadoc, mysql, redis, notification, md-server, seasearch | 8098, 8888, 8083, 8084, 4080 | File sync |
| outline | outline, postgres, redis | 3000 | Wiki (migrated from VM) | | outline | outline, postgres, redis | 3000 | Wiki |
| plane | plane, postgres, redis, minio, worker, beat-worker | 8082 | Project management |
## External Services (qsrproxy - 192.168.1.72)
| Service | Port(s) | Description |
|---------|---------|-------------|
| npm | 1880, 18443, 81 | Nginx Proxy Manager (CRITICAL) |
| prometheus | 9090 | Metrics collection |
| grafana | 3000 | Dashboards |
| alertmanager | 9093 | Alert routing |
| node-exporter | 9100 | System metrics |
## Deployment Order ## Deployment Order
@@ -20,78 +30,20 @@ Docker Compose stacks for Flook (192.168.1.75) managed via Portainer.
2. `productivity` - GitLab, Vaultwarden, Memos, FreshRSS, Mortis 2. `productivity` - GitLab, Vaultwarden, Memos, FreshRSS, Mortis
3. `documents` - Paperless, OnlyOffice 3. `documents` - Paperless, OnlyOffice
4. `backup` - Borgmatic 4. `backup` - Borgmatic
5. `proxy` - CRITICAL - deploy carefully, brief downtime expected 5. `seafile` - File sync and collaboration
6. `seafile` - After migrating data from VM 6. `outline` - Wiki
7. `outline` - After migrating data from VM 7. `plane` - Project management
## Migration Notes ## Seafile Notes
### Seafile Migration (from VM 192.168.1.112) Seafile uses multiple compose files and cannot be deployed via Portainer git stack. Deploy from command line:
1. **Stop Seafile on VM:**
```bash ```bash
ssh rishi@192.168.1.112 cd /mnt/user/appdata/seafile
cd /opt/seafile && docker compose down docker compose up -d
``` ```
2. **Create directories on Flook:** See `stacks/seafile/README.md` for full details.
```bash
mkdir -p /mnt/user/appdata/seafile/{data,db-data,seadoc-data,seasearch-data}
```
3. **Copy data:**
```bash
rsync -avP rishi@192.168.1.112:~/seafile/data/ /mnt/user/appdata/seafile/data/
rsync -avP rishi@192.168.1.112:~/seafile/db-data/ /mnt/user/appdata/seafile/db-data/
```
4. **Copy seahub_settings.py:**
```bash
cp /mnt/user/data/flook-stacks/stacks/seafile/seahub_settings.py /mnt/user/appdata/seafile/
```
5. **Deploy stack via Portainer**
### Outline Migration (from VM 192.168.1.112)
1. **Create directories on Flook:**
```bash
mkdir -p /mnt/user/appdata/outline/{postgres-data,redis}
```
2. **Export Postgres from VM:**
```bash
ssh rishi@192.168.1.112
docker exec outline-postgres-1 pg_dump -U rishi outline > ~/outline_backup.sql
```
3. **Copy backup to Flook:**
```bash
scp rishi@192.168.1.112:~/outline_backup.sql /mnt/user/appdata/outline/
```
4. **Deploy stack via Portainer** (this creates empty DB)
5. **Stop outline container temporarily:**
```bash
docker stop outline
```
6. **Import data:**
```bash
docker exec -i outline-postgres psql -U rishi outline < /mnt/user/appdata/outline/outline_backup.sql
```
7. **Start outline:**
```bash
docker start outline
```
8. **Stop VM services after verification:**
```bash
ssh rishi@192.168.1.112
cd ~/outline && docker compose down
```
## Repository ## Repository

51
stacks/plane/README.md Normal file
View File

@@ -0,0 +1,51 @@
# Plane
Project management and issue tracking with kanban boards.
## Deployment
1. Create directories:
```bash
mkdir -p /mnt/user/appdata/plane/{db-data,redis-data,minio-data}
```
2. Deploy via Portainer git stack or:
```bash
cd /mnt/user/data/flook-stacks/stacks/plane
docker compose up -d
```
3. Wait for all services to start (may take a few minutes on first run)
4. Access at `http://192.168.1.75:8082` or via NPM proxy
## Services
| Container | Description |
|-----------|-------------|
| plane-web | Frontend |
| plane-api | Backend API |
| plane-worker | Background jobs |
| plane-beat-worker | Scheduled tasks |
| plane-space | Public pages |
| plane-proxy | Nginx proxy |
| plane-db | PostgreSQL |
| plane-redis | Redis |
| plane-minio | S3-compatible storage |
## NPM Proxy
Add proxy host:
- Domain: `plane.rishighan.com`
- Forward: `192.168.1.75:8082`
- Enable SSL, force SSL, HTTP/2
## Volumes
- `/mnt/user/appdata/plane/db-data` - PostgreSQL data
- `/mnt/user/appdata/plane/redis-data` - Redis data
- `/mnt/user/appdata/plane/minio-data` - File uploads
## Default Login
On first access, you'll create an admin account.

View File

@@ -0,0 +1,147 @@
networks:
plane-net:
name: plane-net
driver: bridge
services:
plane-web:
image: makeplane/plane-frontend:stable
container_name: plane-web
restart: unless-stopped
environment:
- NEXT_PUBLIC_API_BASE_URL=http://plane-api:8000
- NEXT_PUBLIC_DEPLOY_URL=https://plane.rishighan.com
depends_on:
- plane-api
networks:
- plane-net
plane-api:
image: makeplane/plane-backend:stable
container_name: plane-api
restart: unless-stopped
environment:
- DEBUG=0
- DJANGO_SETTINGS_MODULE=plane.settings.production
- DATABASE_URL=postgresql://plane:plane@plane-db:5432/plane
- REDIS_URL=redis://plane-redis:6379/
- SECRET_KEY=${SECRET_KEY}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_S3_BUCKET_NAME=plane-uploads
- AWS_S3_ENDPOINT_URL=http://plane-minio:9000
- USE_MINIO=1
- MINIO_ROOT_USER=${MINIO_ROOT_USER}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
- WEB_URL=https://plane.rishighan.com
- CORS_ALLOWED_ORIGINS=https://plane.rishighan.com
depends_on:
- plane-db
- plane-redis
networks:
- plane-net
plane-worker:
image: makeplane/plane-backend:stable
container_name: plane-worker
restart: unless-stopped
command: ./bin/worker
environment:
- DEBUG=0
- DJANGO_SETTINGS_MODULE=plane.settings.production
- DATABASE_URL=postgresql://plane:plane@plane-db:5432/plane
- REDIS_URL=redis://plane-redis:6379/
- SECRET_KEY=${SECRET_KEY}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_S3_BUCKET_NAME=plane-uploads
- AWS_S3_ENDPOINT_URL=http://plane-minio:9000
- USE_MINIO=1
depends_on:
- plane-db
- plane-redis
- plane-api
networks:
- plane-net
plane-beat-worker:
image: makeplane/plane-backend:stable
container_name: plane-beat-worker
restart: unless-stopped
command: ./bin/beat
environment:
- DEBUG=0
- DJANGO_SETTINGS_MODULE=plane.settings.production
- DATABASE_URL=postgresql://plane:plane@plane-db:5432/plane
- REDIS_URL=redis://plane-redis:6379/
- SECRET_KEY=${SECRET_KEY}
depends_on:
- plane-db
- plane-redis
- plane-api
networks:
- plane-net
plane-space:
image: makeplane/plane-space:stable
container_name: plane-space
restart: unless-stopped
environment:
- NEXT_PUBLIC_API_BASE_URL=http://plane-api:8000
depends_on:
- plane-api
networks:
- plane-net
plane-proxy:
image: makeplane/plane-proxy:stable
container_name: plane-proxy
restart: unless-stopped
ports:
- "8082:80"
environment:
- FILE_SIZE_LIMIT=5242880
- BUCKET_NAME=plane-uploads
- MINIO_ROOT_USER=${MINIO_ROOT_USER}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
depends_on:
- plane-web
- plane-api
- plane-space
networks:
- plane-net
plane-db:
image: postgres:15
container_name: plane-db
restart: unless-stopped
environment:
- POSTGRES_USER=plane
- POSTGRES_PASSWORD=plane
- POSTGRES_DB=plane
volumes:
- /mnt/user/appdata/plane/db-data:/var/lib/postgresql/data
networks:
- plane-net
plane-redis:
image: redis:7
container_name: plane-redis
restart: unless-stopped
volumes:
- /mnt/user/appdata/plane/redis-data:/data
networks:
- plane-net
plane-minio:
image: minio/minio
container_name: plane-minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=${MINIO_ROOT_USER}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
volumes:
- /mnt/user/appdata/plane/minio-data:/data
networks:
- plane-net

5
stacks/plane/stack.env Normal file
View File

@@ -0,0 +1,5 @@
SECRET_KEY=supersecretkey123456789abcdefghijklmnop
AWS_ACCESS_KEY_ID=plane
AWS_SECRET_ACCESS_KEY=planesecret123
MINIO_ROOT_USER=plane
MINIO_ROOT_PASSWORD=planesecret123