init
This commit is contained in:
86
.env.example
Normal file
86
.env.example
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
# Service name
|
||||||
|
#
|
||||||
|
SERVICE_NAME=gitlab
|
||||||
|
|
||||||
|
# Container names
|
||||||
|
# Summary container name in docker-compose.yml will be "${SERVICE_NAME}_${CONTAINER_NAME-*}"
|
||||||
|
#
|
||||||
|
CONTAINER_NAME_GITLAB=server
|
||||||
|
CONTAINER_NAME_PGSQL=pgsql
|
||||||
|
CONTAINER_NAME_REDIS=redis
|
||||||
|
CONTAINER_NAME_REGISTRY=registry
|
||||||
|
CONTAINER_NAME_RUNNER=runner
|
||||||
|
|
||||||
|
# Docker images
|
||||||
|
#
|
||||||
|
DOCKER_IMAGE_GITLAB=sameersbn/gitlab:latest
|
||||||
|
DOCKER_IMAGE_PGSQL=sameersbn/postgresql:latest
|
||||||
|
DOCKER_IMAGE_REDIS=sameersbn/redis:latest
|
||||||
|
DOCKER_IMAGE_REGISTRY=registry:latest
|
||||||
|
DOCKER_IMAGE_RUNNER=vasyakrg/gitlab-runner
|
||||||
|
|
||||||
|
# SMTP settings
|
||||||
|
SMTP_ENABLED=true
|
||||||
|
SMTP_DOMAIN=<you_domain>
|
||||||
|
|
||||||
|
SMTP_HOST=smtp.mailgun.org
|
||||||
|
SMTP_PORT=587
|
||||||
|
SMTP_USER=
|
||||||
|
SMTP_PASS=
|
||||||
|
SMTP_STARTTLS=true
|
||||||
|
SMTP_AUTHENTICATION=login
|
||||||
|
|
||||||
|
GITLAB_EMAIL=noreply@<you_domain>
|
||||||
|
GITLAB_EMAIL_REPLY_TO=noreply@<you_domain>
|
||||||
|
GITLAB_INCOMING_EMAIL_ADDRESS=noreply@<you_domain>
|
||||||
|
|
||||||
|
# Gitlab domain name
|
||||||
|
#
|
||||||
|
GITLAB_HOST=gitlab.<you_domain>
|
||||||
|
|
||||||
|
# Gitlab ssh public port
|
||||||
|
#
|
||||||
|
GITLAB_SSH_PORT=10022
|
||||||
|
|
||||||
|
# Gitlab root user password
|
||||||
|
# Use only when clear install
|
||||||
|
#
|
||||||
|
GITLAB_ROOT_EMAIL=<your_email>
|
||||||
|
GITLAB_ROOT_PASSWORD=<any_pass>
|
||||||
|
|
||||||
|
# Docker registry domain name
|
||||||
|
#
|
||||||
|
REGISTRY_HOST=docker.<you_domain>
|
||||||
|
# DB credentials
|
||||||
|
#
|
||||||
|
DB_USER=gitlab
|
||||||
|
DB_PASS=<any_pass>
|
||||||
|
DB_NAME=gitlab_production
|
||||||
|
|
||||||
|
# Container data path on the host
|
||||||
|
# Summary container data path will be "${SERVICE_DATA}/${SERVICE_NAME}"
|
||||||
|
#
|
||||||
|
SERVICE_DATA=/srv/services/data
|
||||||
|
|
||||||
|
# Email for letsencrypt
|
||||||
|
#
|
||||||
|
LETSENCRYPT_EMAIL=<you_email>
|
||||||
|
|
||||||
|
# Gitlab runner token
|
||||||
|
#
|
||||||
|
RUNNER_TOKEN=
|
||||||
|
|
||||||
|
GITLAB_TIMEZONE=Asia/Novosibirsk
|
||||||
|
|
||||||
|
# Runner on the same host with gitlab
|
||||||
|
#
|
||||||
|
CI_SERVER_WITH_RUNNER=true
|
||||||
|
|
||||||
|
# Network names
|
||||||
|
#
|
||||||
|
#SERVICE_NETWORK=gitlab
|
||||||
|
WEBPROXY_NETWORK=webproxy
|
||||||
|
|
||||||
|
GITLAB_SECRETS_DB_KEY_BASE=<any_pass>
|
||||||
|
GITLAB_SECRETS_SECRET_KEY_BASE=<any_pass>
|
||||||
|
GITLAB_SECRETS_OTP_KEY_BASE=<any_pass>
|
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.env
|
||||||
|
*.pem
|
||||||
|
*.crt
|
||||||
|
*.key
|
||||||
|
*.csr
|
26
README.md
Normal file
26
README.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
## Gitlab in docker
|
||||||
|
|
||||||
|
Полноценная сборка сервера Gitlab, его базы на psql, 4х раннеров и своего docker-registry, разворачеваемая на докер-хосте
|
||||||
|
|
||||||
|
1. переименовываем `.env.example` в `.env`
|
||||||
|
2. заполняем по максимому внимательно все переменные (кроме `RUNNER_TOKEN=`)
|
||||||
|
3. распаковываем в папке ssl-certs сертификаты и кладем там же (сертификаты noname и нужны лишь для внутреннего взаимодействия между gitlab и registry компонентами)
|
||||||
|
4. запускаем сборку `docker-compose up -d`
|
||||||
|
5. когда сервер запустится, вы войдете в систему под рутом, надо сходить в раздел раннеров (/admin/runners) и подсмотреть там токен, который и нужно будет заполнить в переменной `RUNNER_TOKEN=` и снова запустить `docker-compose up -d`, после чего раннеры перезапустятся и зарегистрируються в системе.
|
||||||
|
|
||||||
|
Подразумевается, что у вас есть `домен` и вы уже создали два поддомена `docker` и `gitlab`
|
||||||
|
Подразумевается, что и гитлаб и регистри будут работать через один порт 443
|
||||||
|
Подразумевается, что у вас уже есть webproxy или traefik, которые возьмут на себя ингрессы контейнеров и выдачу (обновление) им сертификатов
|
||||||
|
(сеть webpоxy как раз комментирована по этому - ее надо будет раскоментировать по свои условия)
|
||||||
|
|
||||||
|
`labels` у контейнеров подготовлены, если у вас traefik, раскомментите эти поля
|
||||||
|
|
||||||
|
`runner` - костомизирован только тем, что в нем встроена система авторегистрации на сервере.
|
||||||
|
|
||||||
|
## Автор \ Author
|
||||||
|
|
||||||
|
- **Vassiliy Yegorov** [vasyakrg](https://github.com/vasyakrg)
|
||||||
|
- [youtube](https://youtube.com/realmanual)
|
||||||
|
- [site](https://vk.com/realmanual)
|
||||||
|
- [telegram](https://t.me/realmanual)
|
||||||
|
- [any qiestions for me](https://t.me/realmanual_group)
|
234
docker-compose.yml
Normal file
234
docker-compose.yml
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
version: '3.7'
|
||||||
|
|
||||||
|
services:
|
||||||
|
gitlab:
|
||||||
|
image: ${DOCKER_IMAGE_GITLAB}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_GITLAB}
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- postgresql
|
||||||
|
- redis
|
||||||
|
ports:
|
||||||
|
- "${GITLAB_SSH_PORT}:22"
|
||||||
|
expose:
|
||||||
|
- 80
|
||||||
|
# labels:
|
||||||
|
# - "traefik.enable=true"
|
||||||
|
# - "traefik.http.routers.gitlab-server.entrypoints=https"
|
||||||
|
# - "traefik.http.routers.gitlab-server.rule=Host(`${GITLAB_HOST}`)"
|
||||||
|
# - "traefik.http.routers.gitlab-server.tls=true"
|
||||||
|
# - "traefik.http.routers.gitlab-server.tls.certresolver=letsEncrypt"
|
||||||
|
# - "traefik.http.services.gitlab-server-service.loadbalancer.server.port=80"
|
||||||
|
# - "traefik.docker.network=webproxy"
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab:/home/git/data:Z
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/certs:/certs
|
||||||
|
environment:
|
||||||
|
- DEBUG=false
|
||||||
|
|
||||||
|
- DB_ADAPTER=postgresql
|
||||||
|
- DB_HOST=${SERVICE_NAME}_${CONTAINER_NAME_PGSQL}
|
||||||
|
- DB_PORT=5432
|
||||||
|
- DB_USER=${DB_USER}
|
||||||
|
- DB_PASS=${DB_PASS}
|
||||||
|
- DB_NAME=${DB_NAME}
|
||||||
|
|
||||||
|
- REDIS_HOST=${SERVICE_NAME}_${CONTAINER_NAME_REDIS}
|
||||||
|
- REDIS_PORT=6379
|
||||||
|
|
||||||
|
- TZ=UTC
|
||||||
|
- GITLAB_TIMEZONE=${GITLAB_TIMEZONE}
|
||||||
|
|
||||||
|
- GITLAB_HTTPS=false
|
||||||
|
- SSL_SELF_SIGNED=false
|
||||||
|
|
||||||
|
- GITLAB_HOST=${GITLAB_HOST}
|
||||||
|
- GITLAB_PORT=80
|
||||||
|
- GITLAB_SSH_PORT=${GITLAB_SSH_PORT}
|
||||||
|
- GITLAB_SECRETS_DB_KEY_BASE=${GITLAB_SECRETS_DB_KEY_BASE}
|
||||||
|
- GITLAB_SECRETS_SECRET_KEY_BASE=${GITLAB_SECRETS_SECRET_KEY_BASE}
|
||||||
|
- GITLAB_SECRETS_OTP_KEY_BASE=${GITLAB_SECRETS_OTP_KEY_BASE}
|
||||||
|
|
||||||
|
- GITLAB_ROOT_PASSWORD=${GITLAB_ROOT_PASSWORD}
|
||||||
|
- GITLAB_ROOT_EMAIL=${GITLAB_ROOT_EMAIL}
|
||||||
|
|
||||||
|
- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
|
||||||
|
- GITLAB_NOTIFY_PUSHER=false
|
||||||
|
|
||||||
|
- GITLAB_EMAIL=${GITLAB_EMAIL}
|
||||||
|
- GITLAB_EMAIL_REPLY_TO=${GITLAB_EMAIL_REPLY_TO}
|
||||||
|
- GITLAB_INCOMING_EMAIL_ADDRESS=${GITLAB_INCOMING_EMAIL_ADDRESS}
|
||||||
|
|
||||||
|
- GITLAB_PAGES_ENABLED=false
|
||||||
|
|
||||||
|
- SMTP_ENABLED=true
|
||||||
|
- SMTP_DOMAIN=${SMTP_DOMAIN}
|
||||||
|
- SMTP_HOST=${SMTP_HOST}
|
||||||
|
- SMTP_PORT=${SMTP_PORT}
|
||||||
|
- SMTP_USER=${SMTP_USER}
|
||||||
|
- SMTP_PASS=${SMTP_PASS}
|
||||||
|
- SMTP_STARTTLS=${SMTP_STARTTLS}
|
||||||
|
- SMTP_AUTHENTICATION=${SMTP_AUTHENTICATION}
|
||||||
|
|
||||||
|
- IMAP_ENABLED=false
|
||||||
|
- LDAP_ENABLED=false
|
||||||
|
|
||||||
|
- GITLAB_REGISTRY_ENABLED=true
|
||||||
|
- GITLAB_REGISTRY_HOST=${REGISTRY_HOST}
|
||||||
|
- GITLAB_REGISTRY_API_URL=http://registry:5000/
|
||||||
|
- GITLAB_REGISTRY_KEY_PATH=/certs/registry.key
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "/usr/local/sbin/healthcheck"]
|
||||||
|
interval: 1m
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 2m
|
||||||
|
networks:
|
||||||
|
# - webproxy
|
||||||
|
- service
|
||||||
|
|
||||||
|
registry:
|
||||||
|
image: ${DOCKER_IMAGE_REGISTRY}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_REGISTRY}
|
||||||
|
restart: always
|
||||||
|
expose:
|
||||||
|
- 5000
|
||||||
|
# labels:
|
||||||
|
# - "traefik.enable=true"
|
||||||
|
# - "traefik.http.routers.gitlab-registry.entrypoints=https"
|
||||||
|
# - "traefik.http.routers.gitlab-registry.rule=Host(`${REGISTRY_HOST}`)"
|
||||||
|
# - "traefik.http.routers.gitlab-registry.tls=true"
|
||||||
|
# - "traefik.http.routers.gitlab-registry.tls.certresolver=letsEncrypt"
|
||||||
|
# - "traefik.http.services.gitlab-registry-service.loadbalancer.server.port=5000"
|
||||||
|
# - "traefik.docker.network=webproxy"
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab/shared/registry:/registry
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/certs:/certs
|
||||||
|
environment:
|
||||||
|
- REGISTRY_AUTH_TOKEN_AUTOREDIRECT=false
|
||||||
|
- REGISTRY_LOG_LEVEL=debug
|
||||||
|
- REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry
|
||||||
|
- REGISTRY_AUTH_TOKEN_REALM=https://${GITLAB_HOST}/jwt/auth
|
||||||
|
- REGISTRY_AUTH_TOKEN_SERVICE=container_registry
|
||||||
|
- REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer
|
||||||
|
- REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry.crt
|
||||||
|
- REGISTRY_STORAGE_DELETE_ENABLED=true
|
||||||
|
networks:
|
||||||
|
# - webproxy
|
||||||
|
- service
|
||||||
|
|
||||||
|
postgresql:
|
||||||
|
image: ${DOCKER_IMAGE_PGSQL}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_PGSQL}
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- DB_USER=${DB_USER}
|
||||||
|
- DB_PASS=${DB_PASS}
|
||||||
|
- DB_NAME=${DB_NAME}
|
||||||
|
- DB_EXTENSION=pg_trgm
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/postgresql:/var/lib/postgresql:Z
|
||||||
|
networks:
|
||||||
|
- service
|
||||||
|
|
||||||
|
redis:
|
||||||
|
restart: always
|
||||||
|
image: ${DOCKER_IMAGE_REDIS}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_REDIS}
|
||||||
|
command:
|
||||||
|
- --loglevel warning
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/redis:/var/lib/redis:Z
|
||||||
|
networks:
|
||||||
|
- service
|
||||||
|
|
||||||
|
runner_1:
|
||||||
|
image: ${DOCKER_IMAGE_RUNNER}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_1
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- gitlab
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_1:/etc/gitlab-runner
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
|
||||||
|
environment:
|
||||||
|
- CI_SERVER_URL=https://${GITLAB_HOST}
|
||||||
|
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
|
||||||
|
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
|
||||||
|
- RUNNER_TOKEN=${RUNNER_TOKEN}
|
||||||
|
- RUNNER_DESCRIPTION=gitab-runner_1
|
||||||
|
- RUNNER_EXECUTOR=docker
|
||||||
|
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
|
||||||
|
networks:
|
||||||
|
- service
|
||||||
|
|
||||||
|
runner_2:
|
||||||
|
image: ${DOCKER_IMAGE_RUNNER}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_2
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- gitlab
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_2:/etc/gitlab-runner
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
|
||||||
|
environment:
|
||||||
|
- CI_SERVER_URL=https://${GITLAB_HOST}
|
||||||
|
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
|
||||||
|
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
|
||||||
|
- RUNNER_TOKEN=${RUNNER_TOKEN}
|
||||||
|
- RUNNER_DESCRIPTION=gitab-runner_2
|
||||||
|
- RUNNER_EXECUTOR=docker
|
||||||
|
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
|
||||||
|
networks:
|
||||||
|
- service
|
||||||
|
|
||||||
|
runner_3:
|
||||||
|
image: ${DOCKER_IMAGE_RUNNER}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_3
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- gitlab
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_3:/etc/gitlab-runner
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
|
||||||
|
environment:
|
||||||
|
- CI_SERVER_URL=https://${GITLAB_HOST}
|
||||||
|
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
|
||||||
|
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
|
||||||
|
- RUNNER_TOKEN=${RUNNER_TOKEN}
|
||||||
|
- RUNNER_DESCRIPTION=gitab-runner_3
|
||||||
|
- RUNNER_EXECUTOR=docker
|
||||||
|
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
|
||||||
|
networks:
|
||||||
|
- service
|
||||||
|
|
||||||
|
runner_4:
|
||||||
|
image: ${DOCKER_IMAGE_RUNNER}
|
||||||
|
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_4
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- gitlab
|
||||||
|
volumes:
|
||||||
|
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_4:/etc/gitlab-runner
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
|
||||||
|
environment:
|
||||||
|
- CI_SERVER_URL=https://${GITLAB_HOST}
|
||||||
|
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
|
||||||
|
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
|
||||||
|
- RUNNER_TOKEN=${RUNNER_TOKEN}
|
||||||
|
- RUNNER_DESCRIPTION=gitab-runner_4
|
||||||
|
- RUNNER_EXECUTOR=docker
|
||||||
|
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
|
||||||
|
networks:
|
||||||
|
- service
|
||||||
|
|
||||||
|
networks:
|
||||||
|
service:
|
||||||
|
name: ${SERVICE_NAME}
|
||||||
|
# webproxy:
|
||||||
|
# external:
|
||||||
|
# name: ${WEBPROXY_NETWORK}
|
4
fix-unicorn.sh
Executable file
4
fix-unicorn.sh
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "fix gitlab_server unicorn error"
|
||||||
|
docker exec -it gitlab_server rm /home/git/gitlab/tmp/pids/unicorn.pid && docker restart gitlab_server
|
BIN
ssl-certs/ssl-certs.zip
Normal file
BIN
ssl-certs/ssl-certs.zip
Normal file
Binary file not shown.
Reference in New Issue
Block a user