├── .github └── FUNDING.yml ├── .gitignore ├── README.md ├── docker-compose.yml ├── gitlab ├── Dockerfile ├── config │ └── .keep ├── data │ └── .keep ├── keys │ └── .keep ├── logs │ └── .keep └── nginx │ └── gitlab-pages.conf.local ├── imgs ├── 01.png └── 02.png ├── keygen.ps1 ├── keygen.sh ├── license ├── Dockerfile └── license.rb ├── register.ps1 ├── register.sh ├── run.ps1 ├── run.sh ├── runner ├── Dockerfile ├── config │ └── .keep └── gitlab-runner ├── stop.ps1 └── stop.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: exppoc 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: [ 'https://lyy289065406.github.io/sponsor/' ] 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | gitlab/config/** 2 | !gitlab/config/.keep 3 | 4 | gitlab/data/** 5 | !gitlab/data/.keep 6 | 7 | gitlab/logs/** 8 | !gitlab/logs/.keep 9 | 10 | gitlab/keys/** 11 | !gitlab/keys/.keep 12 | 13 | runner/config/** 14 | !runner/config/.keep 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gitlab-Docker 2 | 3 | > docker 一键部署 Gitlab 破解版 4 | 5 | ------ 6 | 7 | ## 0x10 环境说明 8 | 9 | ![](https://img.shields.io/badge/Docker-latest-brightgreen.svg) ![](https://img.shields.io/badge/GitlabEE-13.2.0-brightgreen.svg) ![](https://img.shields.io/badge/Runner-latest-brightgreen.svg) 10 | 11 | 12 | 13 | 14 | ## 0x20 目录结构 15 | 16 | ``` 17 | gitlab-docker 18 | ├── README.md ............... [此 README 说明] 19 | ├── imgs .................... [辅助 README 说明的图片] 20 | ├── gitlab .................. [Gitlab 容器的挂载目录] 21 | │ ├── Dockerfile .......... [Gitlab 的 Docker 构建文件] 22 | │ ├── config .............. [Gitlab 配置挂载目录] 23 | │ ├── data ................ [Gitlab 数据挂载目录] 24 | │ ├── logs ................ [Gitlab 日志挂载目录] 25 | │ ├── keys ................ [Gitlab 破解 License 存储目录] 26 | │ └── nginx ............... [Gitlab 内置 nginx 配置目录(备份配置,勿改)] 27 | ├── runner .................. [Gitlab 容器的挂载目录] 28 | ├── license ................. [破解 License 的容器构建目录] 29 | │ ├── Dockerfile .......... [License 的 Docker 构建文件] 30 | │ └── license.rb .......... [生成破解 License 的 Ruby 脚本] 31 | ├── docker-compose.yml ...... [Docker 的构建配置] 32 | ├── keygen.ps1 .............. [Windows: 一键生成破解 License] 33 | ├── keygen.sh ............... [Linux: 一键生成破解 License] 34 | ├── run.ps1 ................. [Windows: 一键运行 Gitlab 靶场] 35 | ├── run.sh .................. [Linux: 一键运行 Gitlab 靶场] 36 | ├── register.ps1 ............ [Windows: 一键注册 Runner] 37 | ├── register.sh ............. [Linux: 一键注册 Runner] 38 | ├── stop.ps1 ................ [Windows: 一键停止 Gitlab 靶场] 39 | └── stop.sh ................. [Linux: 一键停止 Gitlab 靶场] 40 | ``` 41 | 42 | 43 | 44 | 45 | ## 0x30 部署说明 46 | 47 | ### 0x31 构建 48 | 49 | - 宿主机预装 docker 和 docker-compose 50 | - 下载本仓库: [git clone https://github.com/lyy289065406/gitlab-docker](https://github.com/lyy289065406/gitlab-docker) 51 | - 生成破解密钥对: [`./keygen.sh`](keygen.sh) 或 [`./keygen.ps1`](keygen.ps1) 52 | - 构建并运行 Gitlab (确保 80 端口未占用): [`./run.sh`](run.sh) 或 [`./run.ps1`](run.ps1) 53 | - 约 5 分钟后可从浏览器登录 Gitlab:[http://127.0.0.1](http://127.0.0.1) (首次登录需要重设管理员账号 root 的密码) 54 | 55 | 56 | ### 0x32 破解 57 | 58 | 前面生成破解密钥对的时候,已经把公钥写入 Gitlab 容器后台了,还需要把私钥通过前端上传到 Gitlab 完成破解: 59 | 60 | - 密钥对生成到 [`./gitlab/keys/`](gitlab/keys/) 目录,复制其下 `.gitlab-license` 的内容(私钥) 61 | - 使用 root 用户打开 [http://127.0.0.1/admin/license/new](http://127.0.0.1/admin/license/new) 页面 62 | - 选择 `Enter license key` 并粘贴私钥,点击 `Upload license` 按钮即可完成破解 63 | 64 | 65 | ![](imgs/01.png) 66 | 67 | 68 | ### 0x33 设置 Runner 69 | 70 | - 使用 root 用户打开 [http://127.0.0.1/admin/runners](http://127.0.0.1/admin/runners) 页面 71 | - 找到 registration token 并复制 72 | - 注册 Runner: [`./register.sh $TOKEN`](register.sh) 或 [`./register.ps1 $TOKEN`](register.ps1) 73 | 74 | > 至此所有 Repository 都可以使用此 Runner 执行 CI 脚本(Pipeline Jobs) 75 | 76 | ![](imgs/02.png) 77 | 78 | 79 | ### 0x34 访问 Gitlab Pages 80 | 81 | 假设你的 Gitlab 用户名为 `${username}`,仓库名称为 `${repository_name}`,当仓库已经使用 jekyll 成功构建 SSG 后,只需要访问以下 URL 即可: 82 | 83 | [http://127.0.0.1:8000/${username}/${repository_name}/public/](http://127.0.0.1:8000) 84 | 85 | 86 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | gitlab: 4 | hostname: GITLAB 5 | container_name: docker_gitlab 6 | build: 7 | context: ./gitlab 8 | dockerfile: ./Dockerfile 9 | environment: 10 | # 影响 /etc/gitlab/gitlab.rb 的配置 11 | GITLAB_OMNIBUS_CONFIG: | 12 | # 启用 Gitlab Pages 13 | gitlab_pages['enable'] = true 14 | # 访问 Gitlab Pages 的域名 (nginx 配置文件已经强制修改为 127.0.0.1:8000,故这里任意配置即可,但不能为空) 15 | pages_external_url "http://pages.localhost/" 16 | volumes: 17 | - ./gitlab/config:/etc/gitlab 18 | - ./gitlab/data:/var/opt/gitlab 19 | - ./gitlab/logs:/var/log/gitlab 20 | - ./gitlab/nginx/gitlab-pages.conf.local:/var/opt/gitlab/nginx/conf/gitlab-pages.conf.local 21 | # - ./gitlab/pages:/var/opt/gitlab/gitlab-rails/shared/pages 22 | ports: 23 | # - 443:443 24 | - 80:80 25 | - 8000:8000 26 | networks: 27 | vpn: 28 | ipv4_address: 172.168.31.2 29 | restart: unless-stopped 30 | 31 | runner: 32 | hostname: RUNNER 33 | container_name: docker_runner 34 | build: 35 | context: ./runner 36 | dockerfile: ./Dockerfile 37 | volumes: 38 | - ./runner/config:/etc/gitlab-runner 39 | - ./runner/gitlab-runner:/etc/sudoers.d/gitlab-runner 40 | networks: 41 | vpn: 42 | ipv4_address: 172.168.31.3 43 | restart: unless-stopped 44 | 45 | networks: 46 | vpn: 47 | driver: bridge 48 | ipam: 49 | driver: default 50 | config: 51 | - subnet: 172.168.31.0/24 52 | gateway: 172.168.31.1 53 | 54 | -------------------------------------------------------------------------------- /gitlab/Dockerfile: -------------------------------------------------------------------------------- 1 | # ----------------------------------------------------------------------------- 2 | # CVE Ranger : 3 | # https://gitlab.com/gitlab-org/cves/-/blob/master/2021/CVE-2021-22192.json 4 | # Gitlab Docker : 5 | # https://hub.docker.com/r/gitlab/gitlab-ee/tags 6 | # ----------------------------------------------------------------------------- 7 | 8 | FROM gitlab/gitlab-ee:13.2.0-ee.0 9 | # FROM gitlab/gitlab-ee:13.8.0-ee.0 10 | # FROM gitlab/gitlab-ee:13.9.0-ee.0 11 | 12 | ADD ./keys/license_key.pub /opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub 13 | # RUN sed -i "s@|| STARTER_PLAN@|| ULTIMATE_PLAN@g" /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/license.rb 14 | # RUN gitlab-ctl reconfigure 15 | 16 | EXPOSE 443 17 | EXPOSE 80 18 | EXPOSE 22 19 | -------------------------------------------------------------------------------- /gitlab/config/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EXP-Tools/gitlab-docker/6e31949386dab35acdd4df44a38e503b2ea0ac56/gitlab/config/.keep -------------------------------------------------------------------------------- /gitlab/data/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EXP-Tools/gitlab-docker/6e31949386dab35acdd4df44a38e503b2ea0ac56/gitlab/data/.keep -------------------------------------------------------------------------------- /gitlab/keys/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EXP-Tools/gitlab-docker/6e31949386dab35acdd4df44a38e503b2ea0ac56/gitlab/keys/.keep -------------------------------------------------------------------------------- /gitlab/logs/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EXP-Tools/gitlab-docker/6e31949386dab35acdd4df44a38e503b2ea0ac56/gitlab/logs/.keep -------------------------------------------------------------------------------- /gitlab/nginx/gitlab-pages.conf.local: -------------------------------------------------------------------------------- 1 | # This file is managed by gitlab-ctl. Manual changes will be 2 | # erased! To change the contents below, edit /etc/gitlab/gitlab.rb 3 | # and run `sudo gitlab-ctl reconfigure`. 4 | 5 | ## Lines starting with two hashes (##) are comments with information. 6 | ## Lines starting with one hash (#) are configuration parameters that can be uncommented. 7 | ## 8 | ################################### 9 | ## configuration ## 10 | ################################### 11 | 12 | 13 | server { 14 | listen 8000; 15 | server_name 127.0.0.1; 16 | server_tokens off; ## Don't show the nginx version number, a security best practice 17 | 18 | ## Disable symlink traversal 19 | disable_symlinks on; 20 | 21 | 22 | ## Real IP Module Config 23 | ## http://nginx.org/en/docs/http/ngx_http_realip_module.html 24 | 25 | ## Individual nginx logs for this GitLab vhost 26 | access_log /var/log/gitlab/nginx/gitlab_pages_access.log gitlab_access; 27 | error_log /var/log/gitlab/nginx/gitlab_pages_error.log; 28 | 29 | # Pass everything to pages daemon 30 | location / { 31 | index index.html; 32 | root /var/opt/gitlab/gitlab-rails/shared/pages; 33 | } 34 | 35 | # Define custom error pages 36 | error_page 403 /403.html; 37 | error_page 404 /404.html; 38 | 39 | 40 | } -------------------------------------------------------------------------------- /imgs/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EXP-Tools/gitlab-docker/6e31949386dab35acdd4df44a38e503b2ea0ac56/imgs/01.png -------------------------------------------------------------------------------- /imgs/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EXP-Tools/gitlab-docker/6e31949386dab35acdd4df44a38e503b2ea0ac56/imgs/02.png -------------------------------------------------------------------------------- /keygen.ps1: -------------------------------------------------------------------------------- 1 | # 生成 Gitlab License 2 | 3 | $IMAGE_NAME = "gitlab_license" 4 | $CONTAINER_NAME = "gen_gitlab_license" 5 | 6 | echo "Building image ..." 7 | docker build ./license -t ${IMAGE_NAME} 8 | Sleep 2 9 | 10 | echo "Generate gitlab license ..." 11 | $IMAGE_ID = (docker image ls -aq --filter reference=${IMAGE_NAME}) 12 | docker run --name=${CONTAINER_NAME} ${IMAGE_ID} bash 13 | Sleep 2 14 | 15 | echo "Copy gitlab license to ./gitlab/keys" 16 | $DOCKER_ID = (docker ps -aq --filter name=${CONTAINER_NAME}) 17 | if(![String]::IsNullOrEmpty(${DOCKER_ID})) { 18 | docker cp ${DOCKER_ID}:/opt/license_key ./gitlab/keys/license_key 19 | docker cp ${DOCKER_ID}:/opt/license_key.pub ./gitlab/keys/license_key.pub 20 | docker cp ${DOCKER_ID}:/opt/.gitlab-license ./gitlab/keys/.gitlab-license 21 | docker rm -f ${DOCKER_ID} 22 | } 23 | 24 | echo "Done ." 25 | exit 0 -------------------------------------------------------------------------------- /keygen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 生成 Gitlab License 3 | 4 | IMAGE_NAME="gitlab_license" 5 | CONTAINER_NAME="gen_gitlab_license" 6 | 7 | echo "Building image ..." 8 | docker build ./license -t ${IMAGE_NAME} 9 | sleep 2 10 | 11 | echo "Generate gitlab license ..." 12 | IMAGE_ID=`docker image ls -aq --filter reference=${IMAGE_NAME}` 13 | docker run --name=${CONTAINER_NAME} ${IMAGE_ID} bash 14 | sleep 2 15 | 16 | echo "Copy gitlab license to ./gitlab/keys" 17 | DOCKER_ID=`docker ps -aq --filter name=${CONTAINER_NAME}` 18 | if [ ! -z "${DOCKER_ID}" ]; then 19 | docker cp ${DOCKER_ID}:/opt/license_key ./gitlab/keys/license_key 20 | docker cp ${DOCKER_ID}:/opt/license_key.pub ./gitlab/keys/license_key.pub 21 | docker cp ${DOCKER_ID}:/opt/.gitlab-license ./gitlab/keys/.gitlab-license 22 | docker rm -f ${DOCKER_ID} 23 | fi 24 | 25 | echo "Done ." 26 | exit 0 -------------------------------------------------------------------------------- /license/Dockerfile: -------------------------------------------------------------------------------- 1 | # ----------------------------------------------------------------------------- 2 | # How to Crack Gitlab : 3 | # https://blog.starudream.cn/2020/01/19/6-crack-gitlab/ 4 | # ----------------------------------------------------------------------------- 5 | 6 | FROM ruby 7 | 8 | WORKDIR /opt 9 | 10 | RUN gem install gitlab-license 11 | ADD ./license.rb /opt/license.rb 12 | RUN ruby license.rb 13 | 14 | CMD [ "bash" ] -------------------------------------------------------------------------------- /license/license.rb: -------------------------------------------------------------------------------- 1 | require "openssl" 2 | require "gitlab/license" 3 | 4 | key_pair = OpenSSL::PKey::RSA.generate(2048) 5 | File.open("license_key", "w") { |f| f.write(key_pair.to_pem) } 6 | 7 | public_key = key_pair.public_key 8 | File.open("license_key.pub", "w") { |f| f.write(public_key.to_pem) } 9 | 10 | private_key = OpenSSL::PKey::RSA.new File.read("license_key") 11 | Gitlab::License.encryption_key = private_key 12 | 13 | license = Gitlab::License.new 14 | license.licensee = { 15 | "Name" => "none", 16 | "Company" => "none", 17 | "Email" => "admin@example.com", 18 | } 19 | license.starts_at = Date.new(2020, 1, 1) # 开始时间 20 | license.expires_at = Date.new(2050, 1, 1) # 结束时间 21 | license.notify_admins_at = Date.new(2049, 12, 1) 22 | license.notify_users_at = Date.new(2049, 12, 1) 23 | license.block_changes_at = Date.new(2050, 1, 1) 24 | license.restrictions = { 25 | active_user_count: 10000, 26 | } 27 | 28 | puts "License:" 29 | puts license 30 | 31 | data = license.export 32 | puts "Exported license:" 33 | puts data 34 | File.open(".gitlab-license", "w") { |f| f.write(data) } 35 | 36 | public_key = OpenSSL::PKey::RSA.new File.read("license_key.pub") 37 | Gitlab::License.encryption_key = public_key 38 | 39 | data = File.read(".gitlab-license") 40 | $license = Gitlab::License.import(data) 41 | 42 | puts "Imported license:" 43 | puts $license 44 | 45 | unless $license 46 | raise "The license is invalid." 47 | end 48 | 49 | if $license.restricted?(:active_user_count) 50 | active_user_count = 10000 51 | if active_user_count > $license.restrictions[:active_user_count] 52 | raise "The active user count exceeds the allowed amount!" 53 | end 54 | end 55 | 56 | if $license.notify_admins? 57 | puts "The license is due to expire on #{$license.expires_at}." 58 | end 59 | 60 | if $license.notify_users? 61 | puts "The license is due to expire on #{$license.expires_at}." 62 | end 63 | 64 | module Gitlab 65 | class GitAccess 66 | def check(cmd, changes = nil) 67 | if $license.block_changes? 68 | return build_status_object(false, "License expired") 69 | end 70 | end 71 | end 72 | end 73 | 74 | puts "This instance of GitLab Enterprise Edition is licensed to:" 75 | $license.licensee.each do |key, value| 76 | puts "#{key}: #{value}" 77 | end 78 | 79 | if $license.expired? 80 | puts "The license expired on #{$license.expires_at}" 81 | elsif $license.will_expire? 82 | puts "The license will expire on #{$license.expires_at}" 83 | else 84 | puts "The license will never expire." 85 | end -------------------------------------------------------------------------------- /register.ps1: -------------------------------------------------------------------------------- 1 | # 注册 Runner 到 Gitlab 2 | 3 | param([string]$TOKEN="") 4 | if([String]::IsNullOrEmpty(${TOKEN})) { 5 | echo "Usage: .\register.ps1 TOKEN" 6 | echo "You can get the registration token from http://127.0.0.1/admin/runners" 7 | exit 1 8 | } 9 | 10 | 11 | $CONTAINER_GITLAB_NAME = "docker_gitlab" 12 | $GITLAB_URL = "http://" + (docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${CONTAINER_GITLAB_NAME}) 13 | 14 | $CONTAINER_RUNNER_NAME = "docker_runner" 15 | $DOCKER_ID = (docker ps -aq --filter name=${CONTAINER_RUNNER_NAME}) 16 | if(![String]::IsNullOrEmpty(${DOCKER_ID})) { 17 | docker exec ${DOCKER_ID} /bin/sh -c "/usr/bin/gitlab-runner register --non-interactive --name poc-runner --executor shell --url ${GITLAB_URL} --registration-token ${TOKEN}" 18 | } 19 | 20 | echo "Done ." 21 | exit 0 -------------------------------------------------------------------------------- /register.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 注册 Runner 到 Gitlab 3 | 4 | TOKEN=$1 5 | if [ -z "${TOKEN}" ] ; then 6 | echo "Usage: .\register.sh TOKEN" 7 | echo "You can get the registration token from http://127.0.0.1/admin/runners" 8 | exit 1 9 | fi 10 | 11 | CONTAINER_GITLAB_NAME="docker_gitlab" 12 | GITLAB_URL="http://"`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${CONTAINER_GITLAB_NAME}` 13 | 14 | CONTAINER_RUNNER_NAME="docker_runner" 15 | DOCKER_ID=`docker ps -aq --filter name=${CONTAINER_RUNNER_NAME}` 16 | if [ ! -z "${DOCKER_ID}" ]; then 17 | docker exec ${DOCKER_ID} /bin/sh -c "/usr/bin/gitlab-runner register --non-interactive --name poc-runner --executor shell --url ${GITLAB_URL} --registration-token ${TOKEN}" 18 | fi 19 | 20 | echo "Done ." 21 | exit 0 22 | -------------------------------------------------------------------------------- /run.ps1: -------------------------------------------------------------------------------- 1 | docker-compose up -d 2 | 3 | echo "Gitlab is starting ..." 4 | echo "You can access the site (http://127.0.0.1) after 5 minutes ." 5 | 6 | 7 | # 更改 Gitlab Pages 的 nginx 代理服务为 127.0.0.1:8000 8 | sleep 300 9 | $DOCKER_ID = (docker ps -aq --filter name=docker_gitlab) 10 | if(![String]::IsNullOrEmpty($DOCKER_ID)) { 11 | docker exec -u root ${DOCKER_ID} /bin/bash -c "cp /var/opt/gitlab/nginx/conf/gitlab-pages.conf.local /var/opt/gitlab/nginx/conf/gitlab-pages.conf" 12 | docker exec -u root ${DOCKER_ID} /bin/bash -c "gitlab-ctl restart nginx" 13 | } 14 | 15 | echo "Gitlab is started ." 16 | exit 0 17 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | docker-compose up -d 4 | 5 | echo "Gitlab is starting ..." 6 | echo "You can access the site (http://127.0.0.1) after 5 minutes ." 7 | 8 | 9 | # 更改 Gitlab Pages 的 nginx 代理服务为 127.0.0.1:8000 10 | sleep 300 11 | DOCKER_ID=`docker ps -aq --filter name=docker_gitlab` 12 | if [ ! -z "${DOCKER_ID}" ]; then 13 | docker exec -u root ${DOCKER_ID} /bin/bash -c "cp /var/opt/gitlab/nginx/conf/gitlab-pages.conf.local /var/opt/gitlab/nginx/conf/gitlab-pages.conf" 14 | docker exec -u root ${DOCKER_ID} /bin/bash -c "gitlab-ctl restart nginx" 15 | fi 16 | 17 | 18 | echo "Gitlab is started ." 19 | exit 0 20 | -------------------------------------------------------------------------------- /runner/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gitlab/gitlab-runner:ubuntu-v13.10.0 2 | 3 | RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list 4 | RUN apt-get clean && \ 5 | apt-get update -y && \ 6 | apt-get install -y sudo vim zlib1g-dev ruby-dev gcc libffi-dev make g++ ruby ruby-dev nodejs 7 | 8 | # 替换gem国内源 9 | RUN gem sources --add http://gems.ruby-china.com/ --remove https://rubygems.org/ && \ 10 | gem install bundler 11 | 12 | RUN usermod -a -G sudo gitlab-runner 13 | 14 | -------------------------------------------------------------------------------- /runner/config/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EXP-Tools/gitlab-docker/6e31949386dab35acdd4df44a38e503b2ea0ac56/runner/config/.keep -------------------------------------------------------------------------------- /runner/gitlab-runner: -------------------------------------------------------------------------------- 1 | gitlab-runner ALL=(ALL) NOPASSWD: ALL -------------------------------------------------------------------------------- /stop.ps1: -------------------------------------------------------------------------------- 1 | docker-compose down 2 | exit 0 -------------------------------------------------------------------------------- /stop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | docker-compose down 4 | exit 0 --------------------------------------------------------------------------------