diff --git a/clean.sh b/clean.sh index c990a5c..5e7ecd2 100755 --- a/clean.sh +++ b/clean.sh @@ -1,6 +1,8 @@ #!/bin/bash DOMAIN=$(sed -n '1p' config/main) + +echo Cleaning docker compose containers docker compose -f watchtower.yaml down docker compose -f competitors.yaml down docker compose -f mysql.yaml down @@ -13,11 +15,10 @@ rm -rf ./data # go through all competitors and remove all images tail -n +5 config/main | while read -r user pass sub; do - echo $user - docker images | grep $user | awk '{print $3}' | xargs docker rmi -f + echo Cleaning $user images + docker images | grep $user | awk '{print $3}' | xargs --no-run-if-empty docker rmi -f done +echo Cleaning framework folders +rm -rf /tmp/skill17 -rm -rf laravel -rm -rf vuejs -rm -rf react -rm -rf vanillajs \ No newline at end of file +echo 'Everything has been cleaned successfully' diff --git a/config/verdaccio/config.yaml b/config/verdaccio/config.yaml new file mode 100644 index 0000000..b6508ad --- /dev/null +++ b/config/verdaccio/config.yaml @@ -0,0 +1,16 @@ +storage: /verdaccio/storage +auth: + htpasswd: + file: ./htpasswd +uplinks: + npmjs: + url: https://registry.npmjs.org/ +packages: + '@*/*': + access: $all + publish: $authenticated + proxy: npmjs + '**': + access: $all + proxy: npmjs +log: { type: stdout, format: pretty, level: http } diff --git a/generate-runners.sh b/generate-runners.sh new file mode 100755 index 0000000..2e6d1fa --- /dev/null +++ b/generate-runners.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# ============================ +# generate-runners.sh +# Dynamically generate Gitea runners in a docker-compose.yml file +# Usage: ./generate-runners.sh +# Example: ./generate-runners.sh 6 +# ============================ + +set -e + +NUM_RUNNERS=$1 + +if [[ -z "$NUM_RUNNERS" || "$NUM_RUNNERS" -lt 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +OUTPUT_FILE="gitea-runner.yaml" + +cat > "$OUTPUT_FILE" <> "$OUTPUT_FILE" <> "$OUTPUT_FILE" < /dev/null 2>&1 docker login -u $USERNAME -p $PASSWORD git.$DOMAIN > /dev/null 2>&1 @@ -94,6 +114,8 @@ cat < config/mysql/competitors.sql EOF # initialize the basic modules +user_num=1 + tail -n +6 config/main | while read -r user pass sub; do docker exec gitea su -c '/app/gitea/gitea admin user create --username '$user' --password '$pass' --email '$user@example.com' --must-change-password=false' git @@ -101,7 +123,6 @@ tail -n +6 config/main | while read -r user pass sub; do # Create user-level secrets for this user echo "Creating user-level secrets for $user..." - # Create USER secret curl -s -k -X PUT \ -u "$user:$pass" \ @@ -123,7 +144,7 @@ tail -n +6 config/main | while read -r user pass sub; do ${user}_${module}: image: git.${DOMAIN}/${user}/${module}:latest container_name: ${user}_${module} - restart: always + restart: on-failure:2 networks: - gitea labels: @@ -132,6 +153,8 @@ tail -n +6 config/main | while read -r user pass sub; do - "traefik.http.routers.${user}_${module}.entrypoints=${ENTRYPOINT}" - "traefik.http.routers.${user}_${module}.tls=${ENABLE_HTTPS}" - "traefik.http.services.${user}_${module}.loadbalancer.server.port=80" + - "traefik.http.middlewares.${user}_${module}-ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 10.48.17.1${user_num}/32, 10.48.17.64/26, 10.48.17.128/25" + - "traefik.http.routers.${user}_${module}.middlewares=${user}_${module}-ipallowlist" - "com.centurylinklabs.watchtower.enable=true" EOF @@ -146,8 +169,26 @@ EOF EOF done + user_num=$((user_num+1)) done + # Create user-level secrets for root + echo "Creating user-level secrets for root..." + # Create USER secret + curl -s -k -X PUT \ + -u "$USERNAME:$PASSWORD" \ + -H "Content-Type: application/json" \ + -d "{\"data\": \"$USERNAME\"}" \ + "$GITEA_URL/api/v1/user/actions/secrets/USER" + + # Create PASS secret + curl -s -k -X PUT \ + -u "$USERNAME:$PASSWORD" \ + -H "Content-Type: application/json" \ + -d "{\"data\": \"$PASSWORD\"}" \ + "$GITEA_URL/api/v1/user/actions/secrets/PASS" + + cat <> competitors.yaml networks: @@ -170,6 +211,8 @@ chmod 777 -R ./data/verdaccio # Start competitors work docker compose -f competitors.yaml up -d +# Start system containers +docker compose -f system.yaml up -d # Write out environment variables to .env cat < .env DOMAIN="$DOMAIN" @@ -183,6 +226,7 @@ ENTRYPOINT="$ENTRYPOINT" GITEA_PROTOCOL="$GITEA_PROTOCOL" REGISTRY_PORT="$REGISTRY_PORT" REGISTRATION_TOKEN="$REGISTRATION_TOKEN" +GITEA_TOKEN="$GITEA_TOKEN" EOF echo "..all done!" diff --git a/system.yaml b/system.yaml new file mode 100644 index 0000000..a36959b --- /dev/null +++ b/system.yaml @@ -0,0 +1,48 @@ +services: + cdn: + image: git.server.skill17/root/cdn + container_name: cdn + restart: on-failure:2 + networks: + - gitea + labels: + - "traefik.enable=true" + - "traefik.http.routers.cdn.rule=Host(`cdn.server.skill17`)" + - "traefik.http.routers.cdn.entrypoints=websecure" + - "traefik.http.routers.cdn.tls=true" + - "traefik.http.services.cdn.loadbalancer.server.port=80" + - "traefik.http.routers.cdn.middlewares=corsall" + - "traefik.http.middlewares.corsall.headers.accesscontrolallowmethods=GET,OPTIONS,PUT,POST,DELETE" + - "traefik.http.middlewares.corsall.headers.accesscontrolallowheaders=*" + - "traefik.http.middlewares.corsall.headers.accesscontrolalloworiginlist=*" + - "traefik.http.middlewares.corsall.headers.accesscontrolmaxage=100" + - "traefik.http.middlewares.corsall.headers.addvaryheader=true" + +# - "traefik.http.routers.cdn.middlewares=cdn_auth" +# - "traefik.http.routers.cdn.middlewares=cdn_ipallowlist" +# - "traefik.http.middlewares.cdn_auth.basicauth.users=root:$$2y$$05$$X5YxScZkW9geqHY631Mx1.jdbiCLOFSOyLk61c/753RDjCJKuCLvu" +# - "traefik.http.middlewares.cdn_ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 10.48.17.64/26, 10.48.17.128/25" + - "com.centurylinklabs.watchtower.enable=true" + api: + image: git.server.skill17/root/api + container_name: api + restart: on-failure:2 + networks: + - gitea + labels: + - "traefik.enable=true" + - "traefik.http.routers.api.rule=Host(`api.server.skill17`)" + - "traefik.http.routers.api.entrypoints=websecure" + - "traefik.http.routers.api.tls=true" + - "traefik.http.services.api.loadbalancer.server.port=80" +# - "traefik.http.routers.api.middlewares=api_auth" +# - "traefik.http.routers.api.middlewares=api_ipallowlist" +# - "traefik.http.middlewares.api_auth.basicauth.users=root:$$2y$$05$$X5YxScZkW9geqHY631Mx1.jdbiCLOFSOyLk61c/753RDjCJKuCLvu" +# - "traefik.http.middlewares.api_ipallowlist.ipallowlist.sourcerange=127.0.0.1/32, 10.48.17.64/26, 10.48.17.128/25" + - "com.centurylinklabs.watchtower.enable=true" +volumes: + composer_cache: + +networks: + gitea: + external: true