190 lines
3.7 KiB
Markdown
190 lines
3.7 KiB
Markdown
# GreenLens
|
|
|
|
Expo app for plant scanning, care tracking, billing, and profile management, backed by an Express API.
|
|
|
|
## App development
|
|
|
|
```bash
|
|
npm install
|
|
npm run start
|
|
```
|
|
|
|
## Backend development
|
|
|
|
The backend now targets PostgreSQL instead of SQLite.
|
|
|
|
```bash
|
|
cd server
|
|
npm install
|
|
npm run start
|
|
```
|
|
|
|
Required backend environment:
|
|
|
|
- `DATABASE_URL` or `POSTGRES_HOST` + `POSTGRES_PORT` + `POSTGRES_DB` + `POSTGRES_USER` + `POSTGRES_PASSWORD`
|
|
- `JWT_SECRET`
|
|
|
|
Optional integrations:
|
|
|
|
- `OPENAI_API_KEY`
|
|
- `REVENUECAT_WEBHOOK_SECRET`
|
|
- `PLANT_IMPORT_ADMIN_KEY`
|
|
- `MINIO_ENDPOINT`
|
|
- `MINIO_ACCESS_KEY`
|
|
- `MINIO_SECRET_KEY`
|
|
- `MINIO_BUCKET`
|
|
- `MINIO_PUBLIC_URL`
|
|
|
|
## Docker Compose
|
|
|
|
For backend-only local infrastructure use [docker-compose.yml](/abs/path/C:/Users/a931627/Documents/apps/GreenLns/docker-compose.yml).
|
|
|
|
For the production-style self-hosted stack with landing page, API, PostgreSQL, and MinIO behind an external reverse proxy use [greenlns-landing/docker-compose.yml](/abs/path/C:/Users/a931627/Documents/apps/GreenLns/greenlns-landing/docker-compose.yml).
|
|
|
|
## Server deployment
|
|
|
|
Run the commands in this section from the repo root on your server:
|
|
|
|
```bash
|
|
cd /path/to/GreenLns
|
|
```
|
|
|
|
Example:
|
|
|
|
```bash
|
|
cd /var/www/GreenLns
|
|
```
|
|
|
|
### 1. Prepare environment
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Then fill at least:
|
|
|
|
- `SITE_DOMAIN`
|
|
- `SITE_URL`
|
|
- `POSTGRES_PASSWORD`
|
|
- `JWT_SECRET`
|
|
- `MINIO_SECRET_KEY`
|
|
- optional: `OPENAI_API_KEY`, `REVENUECAT_*`
|
|
|
|
### 2. Start the full production stack
|
|
|
|
```bash
|
|
docker compose up --build -d
|
|
```
|
|
|
|
When you run this from the repo root, Docker Compose uses [docker-compose.yml](/abs/path/C:/Users/a931627/Documents/apps/GreenLns/docker-compose.yml).
|
|
|
|
What gets built:
|
|
|
|
- `landing` is built from `./greenlns-landing/Dockerfile`
|
|
- `api` is built from `./server/Dockerfile`
|
|
|
|
What is not built locally, but pulled as ready-made images:
|
|
|
|
- `postgres` uses `postgres:16-alpine`
|
|
- `minio` uses `minio/minio:latest`
|
|
|
|
So yes: `docker compose up --build -d` builds the landing page container and the API container, and it starts PostgreSQL as a container. PostgreSQL is not "built" from your code, it is started from the official Postgres image.
|
|
|
|
This starts:
|
|
|
|
- `landing`
|
|
- `api`
|
|
- `postgres`
|
|
- `minio`
|
|
|
|
Host ports for an external reverse proxy:
|
|
|
|
- `3000` -> `landing`
|
|
- `3003` -> `api`
|
|
- `9000` -> `minio` S3 API
|
|
- `9001` -> `minio` console
|
|
|
|
### 3. Useful server commands
|
|
|
|
Check running containers:
|
|
|
|
```bash
|
|
docker compose ps
|
|
```
|
|
|
|
Follow all logs:
|
|
|
|
```bash
|
|
docker compose logs -f
|
|
```
|
|
|
|
Follow only API logs:
|
|
|
|
```bash
|
|
docker compose logs -f api
|
|
```
|
|
|
|
Follow only landing logs:
|
|
|
|
```bash
|
|
docker compose logs -f landing
|
|
```
|
|
|
|
Restart one service:
|
|
|
|
```bash
|
|
docker compose restart api
|
|
docker compose restart landing
|
|
```
|
|
|
|
Rebuild and restart after code changes:
|
|
|
|
```bash
|
|
docker compose up --build -d
|
|
```
|
|
|
|
Stop the stack:
|
|
|
|
```bash
|
|
docker compose down
|
|
```
|
|
|
|
Stop the stack and remove volumes:
|
|
|
|
```bash
|
|
docker compose down -v
|
|
```
|
|
|
|
### 4. Health checks after deploy
|
|
|
|
```bash
|
|
curl https://greenlenspro.com/health
|
|
curl https://greenlenspro.com/
|
|
curl https://greenlenspro.com/sitemap.xml
|
|
```
|
|
|
|
### 5. Production compose file location
|
|
|
|
If you want to run the same stack from inside the landing directory instead:
|
|
|
|
```bash
|
|
cd greenlns-landing
|
|
docker compose up --build -d
|
|
```
|
|
|
|
In that case Docker Compose uses [greenlns-landing/docker-compose.yml](/abs/path/C:/Users/a931627/Documents/apps/GreenLns/greenlns-landing/docker-compose.yml).
|
|
|
|
There, too:
|
|
|
|
- `landing` is built from `greenlns-landing/Dockerfile`
|
|
- `api` is built from `../server/Dockerfile`
|
|
- `postgres` and `minio` are started from official images
|
|
|
|
## iOS TestFlight
|
|
|
|
```bash
|
|
npx eas-cli build:version:set -p ios
|
|
npx eas-cli build -p ios --profile production
|
|
npx eas-cli submit -p ios --latest
|
|
```
|