Sign inSign up

michaelirwin244/labspace-sdlc-demo:latest

Manifest digest

sha256:d3d5c4866bf410e4c601d401e32fc0ebb03d61dab50eb43acdc2c09486d41dad

Last pushed

8 months by michaelirwin244

Type

Compose

Manifest digest

sha256:d3d5c4866bf410e4c601d401e32fc0ebb03d61dab50eb43acdc2c09486d41dad

Compose file content

##################################################################################################
# This Compose file is intended to run a Labspace. It can be run with the following:
#
# CONTENT_REPO_URL=https://github.com/username/labspace-content-repo docker compose -f compose.run.yaml up
##################################################################################################

services:
  configurator:
    image: dockersamples/labspace-configurator:v0.20.3
    use_api_socket: true
    volumes:
      - content:/project
      - docker-creds:/docker-creds
      - labspace-support:/etc/labspace-support
    environment:
      PROJECT_CLONE_URL: ${CONTENT_REPO_URL}

  interface:
    image: dockersamples/labspace-interface:v0.20.3
    ports:
      - "3030:3030"
    volumes:
      - content:/project
      - type: volume
        source: labspace-support
        target: /etc/labspace-support/private-key
        volume:
          subpath: private-key
      - type: volume
        source: labspace-support
        target: /etc/labspace-support/socket
        volume:
          subpath: socket
      - type: volume
        source: labspace-support
        target: /etc/labspace-support/metadata
        volume:
          subpath: metadata
    depends_on:
      workspace:
        condition: service_started
      configurator:
        condition: service_completed_successfully
    restart: unless-stopped

  workspace:
    image: dockersamples/labspace-workspace-node:v0.20.3
    depends_on:
      configurator:
        condition: service_completed_successfully
      socket-proxy:
        condition: service_started
    ports:
      - 8085:8085 # For the IDE itself
      - 3000:3000 # For the Node application running in the IDE
    volumes:
      - socket-proxy:/var/run
      - content:/home/coder/project
      - docker-creds:/docker-creds
      - type: volume
        source: labspace-support
        target: /etc/labspace-support/public-key
        volume:
          subpath: public-key
      - type: volume
        source: labspace-support
        target: /etc/labspace-support/socket
        volume:
          subpath: socket


  host-republisher:
    image: dockersamples/labspace-host-port-republisher:v0.20.3
    pull_policy: always
    restart: always
    volumes:
      - socket-proxy:/var/run
    network_mode: service:workspace
    environment:
      LABEL_FILTER: labspace-resource=true
    depends_on:
      - workspace
      - socket-proxy

  workspace-cleaner:
    image: dockersamples/labspace-cleaner:v0.20.3
    pull_policy: always
    volumes:
      - socket-proxy:/var/run
    environment:
      LABEL_FILTER: labspace-resource=true
    depends_on:
      - socket-proxy

  socket-proxy:
    image: mikesir87/docker-socket-proxy:v1.2.2
    volumes:
      - socket-proxy:/tmp/proxy
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      DEBUG_LOGS: "true"
      CONFIG_DATA: |
        mutators:
          # Remap the project directory to the labspace content volume, since the project
          # is running out of a volume.
          - type: mountPath
            from: /home/coder/project
            to: labspace-content

          # If requests to use the Docker Socket are used (such as Testcontainers),
          # use the proxied one to ensure permissions, remappings, etc. are applied
          - type: mountPath
            from: /var/run/docker.sock
            to: labspace-socket-proxy/docker.sock

          # Add labels to all newly created objects
          - type: addLabels
            labels:
              labspace-resource: "true"

          - type: addToNetwork
            networks:
              - labspace
        gates:
          - type: mountSource
            allowedSources:
              - labspace-content
              - labspace-socket-proxy
              - buildx_buildkit_default_state
              - label:labspace-resource=true

        responseFilters:
          # Only return objects with the labels we mutated on
          - type: labelFilter
            objectsToFilter:
              - containers
              - volumes
              - networks
            requiredLabels:
              labspace-resource: "true"
      LISTEN_SOCKET_PATH: /tmp/proxy/docker.sock

volumes:
  socket-proxy:
    name: labspace-socket-proxy
  content:
    name: labspace-content
  docker-creds:
  labspace-support:

networks:
  default:
    name: labspace

services:
  traefik:
    image: traefik:3.6.5
    command:
      - --api.insecure=true
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.ssh.address=:22
    ports:
      - "22:22"
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      default:

        # By adding these aliases, DNS will be MITMed to not resolve locally to each container,
        # but to Traefik, which will route the traffic back to the correct container based on Host rules.
        aliases:
          - git.dockerlab.me

  workspace:
    volumes:
      - gitea-outputs:/gitea-outputs:ro
    configs:
      - source: workspace-git-setup
        target: /entrypoint.d/git-setup.sh
        mode: 0755
    depends_on:
      git:
        condition: service_healthy

  git:
    image: gitea/gitea:1.25.3
    volumes:
      - gitea-data:/data
      - gitea-outputs:/gitea-outputs
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "2222:2222"
    environment:
      GITEA__server__ROOT_URL: http://git.dockerlab.me/
      GITEA__server__SSH_DOMAIN: git.dockerlab.me
      GITEA__server__SSH_LISTEN_PORT: 22
      GITEA__database__DB_TYPE: sqlite3
      GITEA__security__INSTALL_LOCK: "true"
    labels:
      traefik.enable: "true"
      traefik.http.routers.git.rule: Host(`git.dockerlab.me`)
      traefik.http.routers.git.entrypoints: web
      traefik.http.routers.git.service: git
      traefik.http.services.git.loadbalancer.server.port: "3000"
      traefik.tcp.routers.git-ssh.rule: HostSNI(`*`)
      traefik.tcp.routers.git-ssh.entrypoints: ssh
      traefik.tcp.routers.git-ssh.service: git-ssh
      traefik.tcp.services.git-ssh.loadbalancer.server.port: "22"
    configs:
      - source: gitea-bootstrap
        target: /etc/gitea/bootstrap.sh
        mode: 0755
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 5s
    post_start:
      - command: bash /etc/gitea/bootstrap.sh
        user: root

  gitea-runner:
    image: gitea/act_runner:0.2.13
    entrypoint: []
    command: bash -c "GITEA_RUNNER_REGISTRATION_TOKEN=$(cat /gitea-outputs/runner_token.txt) /sbin/tini -- run.sh"
    depends_on:
      git:
        condition: service_healthy
    volumes:
      - socket-proxy:/var/run/
      - gitea-outputs:/gitea-outputs
    environment:
      GITEA_INSTANCE_URL: http://git.dockerlab.me
      GITEA_RUNNER_NAME: labspace-runner
      # CONFIG_FILE: /etc/act-runner/config.yml
      

volumes:
  gitea-data:
  gitea-outputs:

configs:
  workspace-git-setup:
    content: |
      #!/bin/bash

      sudo mkdir -p /home/coder/.ssh
      sudo cp /gitea-outputs/moby_id_rsa /home/coder/.ssh/id_rsa 
      sudo cp /gitea-outputs/moby_id_rsa.pub /home/coder/.ssh/id_rsa.pub
      sudo chown -R coder:coder /home/coder/.ssh

      ssh-keyscan -H git.dockerlab.me >> /home/coder/.ssh/known_hosts
      git config --global init.defaultBranch main
      git config --global user.name 'Moby'
      git config --global user.email 'moby@local'
      
      cd /home/coder/project
      echo ".labspace" >> .gitignore
      echo "labspace.yaml" >> .gitignore
      rm -rf .git
      git init
      git remote add origin [email protected]:moby/demo-app.git
      git add -A
      git commit -m 'Initial commit'
      git push -u origin main

  gitea-bootstrap:
    content: |
      #!/bin/bash

      echo "Running"
      while ! curl -sL http://localhost:3000/user/login > /dev/null; do
        sleep 2
      done
      echo "Gitea is up - proceeding with bootstrap"

      # Create the 'moby' user if it doesn't exist
      users=$(su-exec git /usr/local/bin/gitea admin user list)
      if echo "$$users" | grep -q '^moby '; then
          echo "User 'moby' already exists. Skipping account creation."
      else
          su-exec git /usr/local/bin/gitea admin user create --username moby --password 'moby1234!' --email admin@local --admin --must-change-password=false

          # Need to wait a bit for the user to be fully created before proceeding
          sleep 5
      fi
      
      # Check if demo-app repo exists. Create it if it doesn't.
      repo_status=$(curl -s -o /dev/null -w "%{http_code}" http://git.dockerlab.me/api/v1/repos/moby/demo-app)
      if [ "$$repo_status" = "404" ]; then
          echo "Repository 'moby/demo-app' not found. Creating it..."
          curl -s -H "Content-type: application/json" -u 'moby:moby1234!' -d '{"name":"demo-app","private":false}' http://git.dockerlab.me/api/v1/user/repos
          echo "Repository 'moby/demo-app' created."
      else
          echo "Repository 'moby/demo-app' already exists. Skipping creation."
      fi

      # Create CI secrets if they don't exist
      SECRETS_JSON=$(curl -s -u 'moby:moby1234!' http://git.dockerlab.me/api/v1/repos/moby/demo-app/actions/secrets)
      if echo "$$keys" | grep -q "DOCKER_USERNAME"; then
        echo "CI secrets already exist. Skipping secret creation."
      else
        curl -s -u 'moby:moby1234!' -X PUT http://git.dockerlab.me/api/v1/repos/moby/demo-app/actions/secrets/DOCKER_USERNAME -H "Content-Type: application/json" -d '{"data":"moby"}'
        curl -s -u 'moby:moby1234!' -X PUT http://git.dockerlab.me/api/v1/repos/moby/demo-app/actions/secrets/DOCKER_PASSWORD -H "Content-Type: application/json" -d '{"data":"moby1234!"}'
        curl -s -u 'moby:moby1234!' -X PUT http://git.dockerlab.me/api/v1/repos/moby/demo-app/actions/secrets/DOCKER_REGISTRY -H "Content-Type: application/json" -d '{"data":"git.dockerlab.me"}'
        echo "CI secrets created."
      fi

      # Get and store registration token for the runner
      TOKEN_JSON=$(curl -s -u 'moby:moby1234!' http://git.dockerlab.me/api/v1/repos/moby/demo-app/actions/runners/registration-token)
      REGISTRATION_TOKEN=$(echo $$TOKEN_JSON | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
      echo -n $$REGISTRATION_TOKEN > /gitea-outputs/runner_token.txt

      # Create SSH key for user 'moby' if it doesn't exist
      if [ ! -f /gitea-outputs/moby_id_rsa ]; then
          ssh-keygen -t rsa -b 4096 -N "" -f /gitea-outputs/moby_id_rsa
          echo "SSH key generated for user 'moby'."
      fi

      # Add the public key to the user's SSH keys via Gitea API if not already added
      keys=$(curl -s -u 'moby:moby1234!' http://git.dockerlab.me/api/v1/user/keys)
      if echo "$$keys" | grep -q "moby-key"; then
          echo "SSH key already added to user 'moby'. Skipping key addition."
      else
        pub_key=$(cat /gitea-outputs/moby_id_rsa.pub)
        curl -s -u 'moby:moby1234!' http://git.dockerlab.me/api/v1/user/keys -H "Content-Type: application/json" -d "{\"title\":\"moby-key\",\"key\":\"$$pub_key\"}"
        echo "SSH key added to user 'moby'."
      fi

services:
  configurator:
    environment:
      PROJECT_CLONE_URL: https://github.com/mikesir87/labspace-sdlc-demo

  # workspace:
  #   # Override the default image if desired
  #   # More details - https://github.com/dockersamples/labspace-infra/blob/main/docs/configuration.md#overriding-the-workspace-image
  #   image: dockersamples/labspace-workspace-java

  #   # Override the default ports to publish additional ports you may need
  #   # More details - https://github.com/dockersamples/labspace-infra/blob/main/docs/configuration.md#overriding-the-workspace-ports
  #   ports: !override
  #     - "6274:6274" # Expose the MCP inspector users will launch from inside the Labspace
  #     - "8080:8080" # The port used by the app

  #   # Add other environment variables as needed
  #   environment:
  #     DANGEROUSLY_OMIT_AUTH: "true" # Skip auth for the MCP Inspector

# Add other models or services your Labspace may need
configs:
  project_source_tar:
    content: |
      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

services:
  configurator:
    configs:
      - source: project_source_tar
        target: /etc/labspace-support/content.tar.base64
    environment:
      PROJECT_TAR_PATH: /etc/labspace-support/content.tar.base64

Docker commands

docker compose -f oci://michaelirwin244/labspace-sdlc-demo:latest up

Use the above command to pull and run the Compose file. Learn more.

Images used

Image + 1 more

Traefik, The Cloud Native Edge Router


Pulls

1B+

Stars

3664

Last Updated

1 day

Image

Gitea: Git with a cup of tea - A painless self-hosted Git service.


Pulls

100M+

Stars

1057

Last Updated

about 1 hour

Image

Deprecated Gitea runner. Moved to gitea/runner


Pulls

5M+

Stars

34

Last Updated

5 months

Image


Pulls

10K+

Stars

0

Last Updated

2 months

Image


Pulls

10K+

Stars

0

Last Updated

2 months

Image


Pulls

10K+

Stars

0

Last Updated

2 months

Image


Pulls

10K+

Stars

0

Last Updated

2 months

Image


Pulls

10K+

Stars

0

Last Updated

2 months

Image


Pulls

10K+

Stars

0

Last Updated

7 months