Migrating to Physics Stores Guide ================================= This guide provides step-by-step instructions for migrating the LUStores application to a new "Physics Stores" deployment under your own GitHub account and Docker Hub registry. Overview -------- The migration involves: - Forking the repository to your GitHub account - Setting up your own Docker Hub registry - Updating GitHub Actions workflows - Modifying deployment scripts and Docker Compose files - Configuring environment variables Prerequisites ------------- - GitHub account with repository creation permissions - Docker Hub account - Basic knowledge of Git, Docker, and environment variables Step 1: Fork the Repository =========================== Fork the Original Repository ---------------------------- 1. Navigate to the original LUStores repository: https://github.com/st7ma784/LUStores 2. Click the **"Fork"** button in the top-right corner 3. Select your GitHub account as the destination 4. Name the repository ``PhysicsStores`` or your preferred name 5. Ensure **"Copy the main branch only"** is unchecked to copy all branches 6. Click **"Create fork"** Clone Your Fork ^^^^^^^^^^^^^^^ .. code-block:: bash # Clone your forked repository git clone https://github.com/YOUR_USERNAME/PhysicsStores.git cd PhysicsStores # Set up the original repository as upstream for future updates git remote add upstream https://github.com/st7ma784/LUStores.git Verify the Fork ^^^^^^^^^^^^^^^ .. code-block:: bash # Check remotes git remote -v # Should show: # origin https://github.com/YOUR_USERNAME/PhysicsStores.git (fetch) # origin https://github.com/YOUR_USERNAME/PhysicsStores.git (push) # upstream https://github.com/st7ma784/LUStores.git (fetch) # upstream https://github.com/st7ma784/LUStores.git (push) Step 2: Set Up Docker Hub Registry ================================== Create Docker Hub Repository ---------------------------- 1. Log in to `Docker Hub `_ 2. Click **"Create Repository"** 3. Set repository name to ``physicsstores`` (or your preferred name) 4. Make it **Public** (recommended for easier deployment) 5. Click **"Create"** Create Docker Hub Access Token ------------------------------ 1. Go to Docker Hub → Account Settings → Security 2. Click **"New Access Token"** 3. Name it ``PhysicsStores-GitHub-Actions`` 4. Select **Read, Write, Delete** permissions 5. Click **"Generate"** 6. **Copy the token immediately** (you won't see it again) Step 3: Configure GitHub Repository Secrets =========================================== Set Up Repository Secrets ------------------------- 1. Go to your forked repository: https://github.com/YOUR_USERNAME/PhysicsStores 2. Navigate to **Settings** → **Secrets and variables** → **Actions** 3. Click **"New repository secret"** 4. Add the following secrets: Required Secrets ^^^^^^^^^^^^^^^^ .. list-table:: Required GitHub Repository Secrets :header-rows: 1 :widths: 20 30 50 * - Secret Name - Value - Description * - ``DOCKERHUB_USERNAME`` - Your Docker Hub username - Used for Docker Hub authentication * - ``DOCKERHUB_TOKEN`` - The access token from Step 2.2 - Docker Hub API access token Verify Secrets ^^^^^^^^^^^^^^ After adding secrets, they should appear in the **Repository secrets** section. The values will be masked for security. Step 4: Update GitHub Actions Workflows ======================================= Update Docker Build & Push Workflow ----------------------------------- Edit ``.github/workflows/docker-build-push.yml``: .. code-block:: yaml env: REGISTRY: docker.io IMAGE_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/physicsstores # Changed from lustores REPLIT_AUTH_IMAGE_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/physicsstores-auth # Changed from replitauth Update Main CI/CD Workflow (if needed) ------------------------------------- Check ``.github/workflows/main.yml`` and update any hardcoded image references if present. Test the Workflow ----------------- 1. Make a small change to trigger the workflow (add a comment to README.md) 2. Push the change to trigger GitHub Actions 3. Verify that: - Docker images build successfully - Images are pushed to your Docker Hub repository - The workflow completes without errors Step 5: Update Docker Compose Files =================================== Update Production Docker Compose -------------------------------- Edit ``docker-compose.prod.yml``: .. code-block:: yaml # Change these image references: app: image: YOUR_DOCKERHUB_USERNAME/physicsstores:latest # Changed from st7ma784/lustores:latest replit-auth: image: YOUR_DOCKERHUB_USERNAME/physicsstores-auth:latest # Changed from st7ma784/replitauth:latest Update AWS Docker Compose (if used) ----------------------------------- Edit ``docker-compose.aws.yml``: .. code-block:: yaml # Change these image references: app: image: YOUR_DOCKERHUB_USERNAME/physicsstores:latest replit-auth: image: YOUR_DOCKERHUB_USERNAME/physicsstores-auth:latest Update Kubernetes Deployment (if used) -------------------------------------- Edit ``kube.yml``: .. code-block:: yaml # Find and replace image references: image: YOUR_DOCKERHUB_USERNAME/physicsstores:latest image: YOUR_DOCKERHUB_USERNAME/physicsstores-auth:latest Step 6: Update Deployment Scripts ================================= Update Deploy Scripts --------------------- The deployment scripts (``deploy-simple.sh``, ``deploy-simple.ps1``) should automatically use the images specified in ``docker-compose.prod.yml``, so they may not need changes. However, verify they reference the correct compose files. Update Watchtower Configuration ------------------------------- Watchtower will automatically update containers when new images are available. Ensure your Docker Hub repository is public or that Watchtower has proper authentication. Step 7: Configure Environment Variables ======================================== Create Environment File ----------------------- Copy the environment template and configure it: .. code-block:: bash # Copy template (if it exists) cp .env.prod.template .env.prod # Or create .env.prod manually with required variables Required Environment Variables ------------------------------ Based on ``docker-compose.prod.yml``, set these variables in ``.env.prod``: Database Configuration ^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash DB_PASSWORD=your_secure_database_password DATABASE_URL=postgresql://postgres:your_secure_database_password@db:5432/university_inventory Security Secrets ^^^^^^^^^^^^^^^^ .. code-block:: bash SESSION_SECRET=your_random_session_secret_32_chars_min JWT_SECRET=your_random_jwt_secret_32_chars_min JWT_EXPIRES_IN=24h Domain Configuration ^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash DOMAIN=your-domain.com EMAIL=your-email@your-domain.com SSL Configuration ^^^^^^^^^^^^^^^^^ .. code-block:: bash HTTPS=true FORCE_HTTPS=true CERTBOT_STAGING=1 # Set to 0 for production certificates USE_SELF_SIGNED=false # Set to true for internal domains GitHub Integration (Optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash GITHUB_APP_ID=your_github_app_id GITHUB_APP_PRIVATE_KEY=your_github_app_private_key REPO_OWNER=YOUR_USERNAME REPO_NAME=PhysicsStores RUNNER_NAME=physicsstores-prod-runner Watchtower Notifications (Optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash WATCHTOWER_NOTIFICATION_WEBHOOK_URL=https://your-domain.com/api/webhook/watchtower Generate Secure Secrets ----------------------- Use these commands to generate secure random secrets: .. code-block:: bash # Generate SESSION_SECRET (32+ characters) openssl rand -base64 32 # Generate JWT_SECRET (32+ characters) openssl rand -hex 32 # Generate DB_PASSWORD (16+ characters) openssl rand -base64 16 Step 8: Test the Migration ========================== Local Testing ------------- .. code-block:: bash # Test Docker Compose locally docker compose --env-file .env.prod -f docker-compose.yml -f docker-compose.prod.yml up -d # Check logs docker compose --env-file .env.prod logs -f app # Test the application curl http://localhost:5000/health Production Deployment --------------------- .. code-block:: bash # Run the deployment script chmod +x deploy-simple.sh ./deploy-simple.sh Verify Deployment ----------------- 1. Check that containers are running: ``docker ps`` 2. Verify images are from your registry: ``docker images`` 3. Test the application at ``https://your-domain.com`` 4. Check GitHub Actions workflow runs successfully Step 9: Post-Migration Tasks ============================ Update Documentation -------------------- - Update README.md with your repository URLs - Update any hardcoded links to point to your fork - Update Docker Hub links in documentation Set Up GitHub Pages ------------------- Configure GitHub Pages for your migrated documentation: 1. Go to your repository: https://github.com/YOUR_USERNAME/PhysicsStores 2. Navigate to **Settings** → **Pages** 3. Under **Source**, select **"GitHub Actions"** 4. The documentation will be built and deployed automatically via the existing ``docs.yml`` workflow 5. Your documentation will be available at: https://YOUR_USERNAME.github.io/PhysicsStores/ The ``docs.yml`` workflow will: - Build the Sphinx documentation automatically - Generate TypeScript API documentation - Deploy everything to GitHub Pages when you push to the main branch - Handle documentation updates whenever you modify files in the ``docs/`` directory Update Documentation Links ^^^^^^^^^^^^^^^^^^^^^^^^^^ After setting up GitHub Pages, update any documentation links: - Update ``README.md`` to point to your GitHub Pages URL - Update internal documentation links to use your repository's documentation - Verify that the documentation builds correctly with your repository name Set Up Monitoring ----------------- - Configure Watchtower notifications - Set up health monitoring - Configure backup procedures Security Considerations ----------------------- - Ensure Docker Hub repository visibility is appropriate - Rotate Docker Hub tokens periodically - Keep GitHub repository secrets secure Troubleshooting =============== Common Issues ------------- Docker Hub Authentication Errors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Verify ``DOCKERHUB_USERNAME`` and ``DOCKERHUB_TOKEN`` are correct - Ensure the token has Read/Write/Delete permissions - Check that the repository exists and is accessible Image Pull Errors ~~~~~~~~~~~~~~~~~ - Verify image names in Docker Compose files - Check Docker Hub repository permissions - Ensure images were successfully built and pushed Environment Variable Errors ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Check ``.env.prod`` file exists and has correct values - Verify variable names match those in ``docker-compose.prod.yml`` - Ensure no extra spaces or special characters GitHub Actions Failures ~~~~~~~~~~~~~~~~~~~~~~~ - Check repository secrets are properly configured - Verify workflow YAML syntax - Check build logs for specific error messages Getting Help ~~~~~~~~~~~~ - Check the `original documentation `_ - Review GitHub Actions logs for detailed error messages - Test locally before deploying to production Maintenance =========== Keeping Your Fork Updated ------------------------- .. code-block:: bash # Fetch updates from upstream git fetch upstream # Merge updates into your main branch git checkout main git merge upstream/main # Push updates to your fork git push origin main Updating Docker Images ---------------------- Images will be automatically updated via Watchtower, or you can manually trigger rebuilds through GitHub Actions. --- **Note**: This guide assumes you're migrating from the original LUStores setup. Adjust paths and configurations as needed for your specific environment.