diff --git a/README.md b/README.md index 48134bc..a3e95a9 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,37 @@ $ cd garage-webui && pnpm install $ cd backend && pnpm install && cd .. ``` +### Development with Docker + +For development with Docker, a `docker-compose.dev.yml` file is provided with 4 Garage instances: + +```sh +# Create necessary directories for Garage data +$ mkdir -p dev.local/data-garage/meta dev.local/data-garage/data +$ mkdir -p dev.local/data-garage2/meta dev.local/data-garage2/data +$ mkdir -p dev.local/data-garage3/meta dev.local/data-garage3/data +$ mkdir -p dev.local/data-garage4/meta dev.local/data-garage4/data + +# Copy the template configuration files and replace CONTAINER_NAME with the actual container name +$ cp garage.toml.template dev.local/garage.toml && sed -i 's/CONTAINER_NAME/garage/g' dev.local/garage.toml +$ cp garage.toml.template dev.local/garage2.toml && sed -i 's/CONTAINER_NAME/garage2/g' dev.local/garage2.toml +$ cp garage.toml.template dev.local/garage3.toml && sed -i 's/CONTAINER_NAME/garage3/g' dev.local/garage3.toml +$ cp garage.toml.template dev.local/garage4.toml && sed -i 's/CONTAINER_NAME/garage4/g' dev.local/garage4.toml + +# Setup environment variables +$ cp .env.example .env +$ cp backend/.env.example backend/.env + +# Start the Garage containers +$ docker-compose -f docker-compose.dev.yml up -d +``` + +You can then run the web UI with the environment variables from your .env files: + +```sh +$ pnpm run dev +``` + ### Running Start both the client and server concurrently: diff --git a/backend/.env.example b/backend/.env.example index f5fa4af..881b174 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,6 +1,9 @@ # BASE_PATH="" -AUTH_USER_PASS='username:$2y$10$DSTi9o0uQPEHSNlf66xMEOgm9KgVNBP3vHxA3SK0Xha2EVMb3mTXm' -API_BASE_URL="http://garage:3903" -S3_ENDPOINT_URL="http://garage:3900" -API_ADMIN_KEY="" +AUTH_USER_PASS='admin:$2y$10$2i1DScIpTap7oB6KEYLP7um9/ms6LBf.TBzuqfSWRdRMvWRe35Y0S' +API_BASE_URL="http://localhost:3903" +S3_ENDPOINT_URL="http://localhost:3900" +S3_REGION=garage +API_ADMIN_KEY="dev-admin-token" +PORT=3909 +CONFIG_PATH="../dev.local/garage.toml" diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 9b71118..89e9e1b 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -2,14 +2,56 @@ services: garage: image: dxflrs/garage:v2.0.0 container_name: garage + hostname: garage volumes: - ./dev.local/garage.toml:/etc/garage.toml - - ./dev.local/meta:/var/lib/garage/meta - - ./dev.local/data:/var/lib/garage/data + - ./dev.local/data-garage/meta:/var/lib/garage/meta + - ./dev.local/data-garage/data:/var/lib/garage/data restart: unless-stopped ports: - - 3900:3900 - - 3901:3901 - - 3902:3902 - - 3903:3903 - + - 3900:3900 + - 3901:3901 + - 3902:3902 + - 3903:3903 + garage2: + image: dxflrs/garage:v2.0.0 + container_name: garage2 + hostname: garage2 + volumes: + - ./dev.local/garage2.toml:/etc/garage.toml + - ./dev.local/data-garage2/meta:/var/lib/garage/meta + - ./dev.local/data-garage2/data:/var/lib/garage/data + restart: unless-stopped + ports: + - 3900 + - 3901 + - 3902 + - 3903 + garage3: + image: dxflrs/garage:v2.0.0 + container_name: garage3 + hostname: garage3 + volumes: + - ./dev.local/garage3.toml:/etc/garage.toml + - ./dev.local/data-garage3/meta:/var/lib/garage/meta + - ./dev.local/data-garage3/data:/var/lib/garage/data + restart: unless-stopped + ports: + - 3900 + - 3901 + - 3902 + - 3903 + garage4: + image: dxflrs/garage:v2.0.0 + container_name: garage4 + hostname: garage4 + volumes: + - ./dev.local/garage4.toml:/etc/garage.toml + - ./dev.local/data-garage4/meta:/var/lib/garage/meta + - ./dev.local/data-garage4/data:/var/lib/garage/data + restart: unless-stopped + ports: + - 3900 + - 3901 + - 3902 + - 3903 diff --git a/garage.toml.template b/garage.toml.template new file mode 100644 index 0000000..c54da6a --- /dev/null +++ b/garage.toml.template @@ -0,0 +1,26 @@ +data_dir = "/var/lib/garage/data" +db_engine = "lmdb" +metadata_auto_snapshot_interval = "6h" +metadata_dir = "/var/lib/garage/meta" + +compression_level = 2 +replication_factor = 3 + +rpc_bind_addr = "[::]:3901" +rpc_public_addr = "CONTAINER_NAME:3901" +rpc_secret = "dev-garage-secret" + +[s3_api] +api_bind_addr = "[::]:3900" +root_domain = ".s3.garage.local" +s3_region = "garage" + +[s3_web] +bind_addr = "[::]:3902" +index = "index.html" +root_domain = ".web.garage.local" + +[admin] +admin_token = "dev-admin-token" +api_bind_addr = "[::]:3903" +metrics_token = "dev-metrics-token"