# RateMyClient - Docker Setup This guide will help you run the RateMyClient Phoenix application using Docker Compose. ## Prerequisites - Docker Desktop installed and running - Docker Compose (included with Docker Desktop) ## Quick Start 1. **Create your .env file:** ```bash cp .env.example .env ``` Then edit `.env` and update the values for your environment: - For production, generate a new `SECRET_KEY_BASE` - Update `PHX_HOST` to your production domain (e.g., `ratemyclient.sivic.me`) 2. **Build and start the containers:** ```bash docker-compose up --build ``` This will: - Build the Phoenix application Docker image - Start PostgreSQL database - Create the database - Run migrations - Create an admin user - Start the Phoenix server 3. **Access the application:** Open your browser and navigate to: http://localhost:4000 ## Default Admin Credentials - **Username:** `admin` - **Password:** `admin123` - **Admin Login:** http://localhost:4000/admin/login ## Useful Commands ### Start containers (detached mode) ```bash docker-compose up -d ``` ### Stop containers ```bash docker-compose down ``` ### View logs ```bash docker-compose logs -f web ``` ### Rebuild after code changes ```bash docker-compose up --build ``` ### Access the Phoenix console ```bash docker-compose exec web bin/my_first_elixir_vibe_code remote ``` ### Run migrations manually ```bash docker-compose exec web bin/my_first_elixir_vibe_code eval "MyFirstElixirVibeCode.Release.migrate()" ``` ### Access PostgreSQL ```bash docker-compose exec db psql -U postgres -d my_first_elixir_vibe_code_dev ``` ## Volumes The application uses a persistent volume for PostgreSQL data: - `postgres_data`: Stores database data To completely reset the database: ```bash docker-compose down -v docker-compose up --build ``` ## Environment Variables The application uses a `.env` file for configuration. Copy `.env.example` to `.env` and customize: - `POSTGRES_USER`: PostgreSQL username (default: postgres) - `POSTGRES_PASSWORD`: PostgreSQL password (default: postgres) - `POSTGRES_DB`: PostgreSQL database name - `DATABASE_URL`: PostgreSQL connection string - `SECRET_KEY_BASE`: Secret key for Phoenix (**IMPORTANT:** Generate a new one for production!) - `PHX_HOST`: Hostname for the application (localhost for dev, your domain for production) - `PORT`: Port to run the application on (default: 4000) ### Generating a new SECRET_KEY_BASE For production, you must generate a new secret key: ```bash # Using Docker: docker-compose run --rm web bin/my_first_elixir_vibe_code eval "IO.puts(:crypto.strong_rand_bytes(64) |> Base.encode64())" # Or locally if you have Elixir installed: mix phx.gen.secret ``` ## Troubleshooting ### Port already in use If port 4000 is already in use, change the port mapping in `docker-compose.yml`: ```yaml ports: - "8080:4000" # Access via http://localhost:8080 ``` ### Database connection issues Make sure the database container is healthy: ```bash docker-compose ps ``` ### Clean rebuild ```bash docker-compose down -v docker system prune -a docker-compose up --build ``` ## Production Notes This Docker setup is configured for production use. For actual production deployment: 1. Change the `SECRET_KEY_BASE` to a new secure value 2. Update database credentials in `docker-compose.yml` 3. Consider using environment files (.env) instead of hardcoded values 4. Set up SSL/TLS termination (nginx, traefik, etc.) 5. Configure proper backup strategies for the database