Skip to content

Commit ea3a47f

Browse files
committed
init
0 parents commit ea3a47f

File tree

6 files changed

+355
-0
lines changed

6 files changed

+355
-0
lines changed

.env.example

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Service name
2+
#
3+
SERVICE_NAME=gitlab
4+
5+
# Container names
6+
# Summary container name in docker-compose.yml will be "${SERVICE_NAME}_${CONTAINER_NAME-*}"
7+
#
8+
CONTAINER_NAME_GITLAB=server
9+
CONTAINER_NAME_PGSQL=pgsql
10+
CONTAINER_NAME_REDIS=redis
11+
CONTAINER_NAME_REGISTRY=registry
12+
CONTAINER_NAME_RUNNER=runner
13+
14+
# Docker images
15+
#
16+
DOCKER_IMAGE_GITLAB=sameersbn/gitlab:latest
17+
DOCKER_IMAGE_PGSQL=sameersbn/postgresql:latest
18+
DOCKER_IMAGE_REDIS=sameersbn/redis:latest
19+
DOCKER_IMAGE_REGISTRY=registry:latest
20+
DOCKER_IMAGE_RUNNER=vasyakrg/gitlab-runner
21+
22+
# SMTP settings
23+
SMTP_ENABLED=true
24+
SMTP_DOMAIN=<you_domain>
25+
26+
SMTP_HOST=smtp.mailgun.org
27+
SMTP_PORT=587
28+
SMTP_USER=
29+
SMTP_PASS=
30+
SMTP_STARTTLS=true
31+
SMTP_AUTHENTICATION=login
32+
33+
GITLAB_EMAIL=noreply@<you_domain>
34+
GITLAB_EMAIL_REPLY_TO=noreply@<you_domain>
35+
GITLAB_INCOMING_EMAIL_ADDRESS=noreply@<you_domain>
36+
37+
# Gitlab domain name
38+
#
39+
GITLAB_HOST=gitlab.<you_domain>
40+
41+
# Gitlab ssh public port
42+
#
43+
GITLAB_SSH_PORT=10022
44+
45+
# Gitlab root user password
46+
# Use only when clear install
47+
#
48+
GITLAB_ROOT_EMAIL=<your_email>
49+
GITLAB_ROOT_PASSWORD=<any_pass>
50+
51+
# Docker registry domain name
52+
#
53+
REGISTRY_HOST=docker.<you_domain>
54+
# DB credentials
55+
#
56+
DB_USER=gitlab
57+
DB_PASS=<any_pass>
58+
DB_NAME=gitlab_production
59+
60+
# Container data path on the host
61+
# Summary container data path will be "${SERVICE_DATA}/${SERVICE_NAME}"
62+
#
63+
SERVICE_DATA=/srv/services/data
64+
65+
# Email for letsencrypt
66+
#
67+
LETSENCRYPT_EMAIL=<you_email>
68+
69+
# Gitlab runner token
70+
#
71+
RUNNER_TOKEN=
72+
73+
GITLAB_TIMEZONE=Asia/Novosibirsk
74+
75+
# Runner on the same host with gitlab
76+
#
77+
CI_SERVER_WITH_RUNNER=true
78+
79+
# Network names
80+
#
81+
#SERVICE_NETWORK=gitlab
82+
WEBPROXY_NETWORK=webproxy
83+
84+
GITLAB_SECRETS_DB_KEY_BASE=<any_pass>
85+
GITLAB_SECRETS_SECRET_KEY_BASE=<any_pass>
86+
GITLAB_SECRETS_OTP_KEY_BASE=<any_pass>

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.env
2+
*.pem
3+
*.crt
4+
*.key
5+
*.csr

README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## Gitlab in docker
2+
3+
Полноценная сборка сервера Gitlab, его базы на psql, 4х раннеров и своего docker-registry, разворачеваемая на докер-хосте
4+
5+
1. переименовываем `.env.example` в `.env`
6+
2. заполняем по максимому внимательно все переменные (кроме `RUNNER_TOKEN=`)
7+
3. распаковываем в папке ssl-certs сертификаты и кладем там же (сертификаты noname и нужны лишь для внутреннего взаимодействия между gitlab и registry компонентами)
8+
4. запускаем сборку `docker-compose up -d`
9+
5. когда сервер запустится, вы войдете в систему под рутом, надо сходить в раздел раннеров (/admin/runners) и подсмотреть там токен, который и нужно будет заполнить в переменной `RUNNER_TOKEN=` и снова запустить `docker-compose up -d`, после чего раннеры перезапустятся и зарегистрируються в системе.
10+
11+
Подразумевается, что у вас есть `домен` и вы уже создали два поддомена `docker` и `gitlab`
12+
Подразумевается, что и гитлаб и регистри будут работать через один порт 443
13+
Подразумевается, что у вас уже есть webproxy или traefik, которые возьмут на себя ингрессы контейнеров и выдачу (обновление) им сертификатов
14+
(сеть webpоxy как раз комментирована по этому - ее надо будет раскоментировать по свои условия)
15+
16+
`labels` у контейнеров подготовлены, если у вас traefik, раскомментите эти поля
17+
18+
`runner` - костомизирован только тем, что в нем встроена система авторегистрации на сервере.
19+
20+
## Автор \ Author
21+
22+
- **Vassiliy Yegorov** [vasyakrg](https://github.com/vasyakrg)
23+
- [youtube](https://youtube.com/realmanual)
24+
- [site](https://vk.com/realmanual)
25+
- [telegram](https://t.me/realmanual)
26+
- [any qiestions for me](https://t.me/realmanual_group)

docker-compose.yml

Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
version: '3.7'
2+
3+
services:
4+
gitlab:
5+
image: ${DOCKER_IMAGE_GITLAB}
6+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_GITLAB}
7+
restart: always
8+
depends_on:
9+
- postgresql
10+
- redis
11+
ports:
12+
- "${GITLAB_SSH_PORT}:22"
13+
expose:
14+
- 80
15+
# labels:
16+
# - "traefik.enable=true"
17+
# - "traefik.http.routers.gitlab-server.entrypoints=https"
18+
# - "traefik.http.routers.gitlab-server.rule=Host(`${GITLAB_HOST}`)"
19+
# - "traefik.http.routers.gitlab-server.tls=true"
20+
# - "traefik.http.routers.gitlab-server.tls.certresolver=letsEncrypt"
21+
# - "traefik.http.services.gitlab-server-service.loadbalancer.server.port=80"
22+
# - "traefik.docker.network=webproxy"
23+
volumes:
24+
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab:/home/git/data:Z
25+
- ${SERVICE_DATA}/${SERVICE_NAME}/certs:/certs
26+
environment:
27+
- DEBUG=false
28+
29+
- DB_ADAPTER=postgresql
30+
- DB_HOST=${SERVICE_NAME}_${CONTAINER_NAME_PGSQL}
31+
- DB_PORT=5432
32+
- DB_USER=${DB_USER}
33+
- DB_PASS=${DB_PASS}
34+
- DB_NAME=${DB_NAME}
35+
36+
- REDIS_HOST=${SERVICE_NAME}_${CONTAINER_NAME_REDIS}
37+
- REDIS_PORT=6379
38+
39+
- TZ=UTC
40+
- GITLAB_TIMEZONE=${GITLAB_TIMEZONE}
41+
42+
- GITLAB_HTTPS=false
43+
- SSL_SELF_SIGNED=false
44+
45+
- GITLAB_HOST=${GITLAB_HOST}
46+
- GITLAB_PORT=80
47+
- GITLAB_SSH_PORT=${GITLAB_SSH_PORT}
48+
- GITLAB_SECRETS_DB_KEY_BASE=${GITLAB_SECRETS_DB_KEY_BASE}
49+
- GITLAB_SECRETS_SECRET_KEY_BASE=${GITLAB_SECRETS_SECRET_KEY_BASE}
50+
- GITLAB_SECRETS_OTP_KEY_BASE=${GITLAB_SECRETS_OTP_KEY_BASE}
51+
52+
- GITLAB_ROOT_PASSWORD=${GITLAB_ROOT_PASSWORD}
53+
- GITLAB_ROOT_EMAIL=${GITLAB_ROOT_EMAIL}
54+
55+
- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
56+
- GITLAB_NOTIFY_PUSHER=false
57+
58+
- GITLAB_EMAIL=${GITLAB_EMAIL}
59+
- GITLAB_EMAIL_REPLY_TO=${GITLAB_EMAIL_REPLY_TO}
60+
- GITLAB_INCOMING_EMAIL_ADDRESS=${GITLAB_INCOMING_EMAIL_ADDRESS}
61+
62+
- GITLAB_PAGES_ENABLED=false
63+
64+
- SMTP_ENABLED=true
65+
- SMTP_DOMAIN=${SMTP_DOMAIN}
66+
- SMTP_HOST=${SMTP_HOST}
67+
- SMTP_PORT=${SMTP_PORT}
68+
- SMTP_USER=${SMTP_USER}
69+
- SMTP_PASS=${SMTP_PASS}
70+
- SMTP_STARTTLS=${SMTP_STARTTLS}
71+
- SMTP_AUTHENTICATION=${SMTP_AUTHENTICATION}
72+
73+
- IMAP_ENABLED=false
74+
- LDAP_ENABLED=false
75+
76+
- GITLAB_REGISTRY_ENABLED=true
77+
- GITLAB_REGISTRY_HOST=${REGISTRY_HOST}
78+
- GITLAB_REGISTRY_API_URL=http://registry:5000/
79+
- GITLAB_REGISTRY_KEY_PATH=/certs/registry.key
80+
healthcheck:
81+
test: ["CMD", "/usr/local/sbin/healthcheck"]
82+
interval: 1m
83+
timeout: 5s
84+
retries: 5
85+
start_period: 2m
86+
networks:
87+
# - webproxy
88+
- service
89+
90+
registry:
91+
image: ${DOCKER_IMAGE_REGISTRY}
92+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_REGISTRY}
93+
restart: always
94+
expose:
95+
- 5000
96+
# labels:
97+
# - "traefik.enable=true"
98+
# - "traefik.http.routers.gitlab-registry.entrypoints=https"
99+
# - "traefik.http.routers.gitlab-registry.rule=Host(`${REGISTRY_HOST}`)"
100+
# - "traefik.http.routers.gitlab-registry.tls=true"
101+
# - "traefik.http.routers.gitlab-registry.tls.certresolver=letsEncrypt"
102+
# - "traefik.http.services.gitlab-registry-service.loadbalancer.server.port=5000"
103+
# - "traefik.docker.network=webproxy"
104+
volumes:
105+
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab/shared/registry:/registry
106+
- ${SERVICE_DATA}/${SERVICE_NAME}/certs:/certs
107+
environment:
108+
- REGISTRY_AUTH_TOKEN_AUTOREDIRECT=false
109+
- REGISTRY_LOG_LEVEL=debug
110+
- REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry
111+
- REGISTRY_AUTH_TOKEN_REALM=https://${GITLAB_HOST}/jwt/auth
112+
- REGISTRY_AUTH_TOKEN_SERVICE=container_registry
113+
- REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer
114+
- REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry.crt
115+
- REGISTRY_STORAGE_DELETE_ENABLED=true
116+
networks:
117+
# - webproxy
118+
- service
119+
120+
postgresql:
121+
image: ${DOCKER_IMAGE_PGSQL}
122+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_PGSQL}
123+
restart: always
124+
environment:
125+
- DB_USER=${DB_USER}
126+
- DB_PASS=${DB_PASS}
127+
- DB_NAME=${DB_NAME}
128+
- DB_EXTENSION=pg_trgm
129+
volumes:
130+
- ${SERVICE_DATA}/${SERVICE_NAME}/postgresql:/var/lib/postgresql:Z
131+
networks:
132+
- service
133+
134+
redis:
135+
restart: always
136+
image: ${DOCKER_IMAGE_REDIS}
137+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_REDIS}
138+
command:
139+
- --loglevel warning
140+
volumes:
141+
- ${SERVICE_DATA}/${SERVICE_NAME}/redis:/var/lib/redis:Z
142+
networks:
143+
- service
144+
145+
runner_1:
146+
image: ${DOCKER_IMAGE_RUNNER}
147+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_1
148+
restart: always
149+
depends_on:
150+
- gitlab
151+
volumes:
152+
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_1:/etc/gitlab-runner
153+
- /var/run/docker.sock:/var/run/docker.sock
154+
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
155+
environment:
156+
- CI_SERVER_URL=https://${GITLAB_HOST}
157+
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
158+
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
159+
- RUNNER_TOKEN=${RUNNER_TOKEN}
160+
- RUNNER_DESCRIPTION=gitab-runner_1
161+
- RUNNER_EXECUTOR=docker
162+
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
163+
networks:
164+
- service
165+
166+
runner_2:
167+
image: ${DOCKER_IMAGE_RUNNER}
168+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_2
169+
restart: always
170+
depends_on:
171+
- gitlab
172+
volumes:
173+
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_2:/etc/gitlab-runner
174+
- /var/run/docker.sock:/var/run/docker.sock
175+
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
176+
environment:
177+
- CI_SERVER_URL=https://${GITLAB_HOST}
178+
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
179+
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
180+
- RUNNER_TOKEN=${RUNNER_TOKEN}
181+
- RUNNER_DESCRIPTION=gitab-runner_2
182+
- RUNNER_EXECUTOR=docker
183+
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
184+
networks:
185+
- service
186+
187+
runner_3:
188+
image: ${DOCKER_IMAGE_RUNNER}
189+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_3
190+
restart: always
191+
depends_on:
192+
- gitlab
193+
volumes:
194+
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_3:/etc/gitlab-runner
195+
- /var/run/docker.sock:/var/run/docker.sock
196+
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
197+
environment:
198+
- CI_SERVER_URL=https://${GITLAB_HOST}
199+
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
200+
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
201+
- RUNNER_TOKEN=${RUNNER_TOKEN}
202+
- RUNNER_DESCRIPTION=gitab-runner_3
203+
- RUNNER_EXECUTOR=docker
204+
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
205+
networks:
206+
- service
207+
208+
runner_4:
209+
image: ${DOCKER_IMAGE_RUNNER}
210+
container_name: ${SERVICE_NAME}_${CONTAINER_NAME_RUNNER}_4
211+
restart: always
212+
depends_on:
213+
- gitlab
214+
volumes:
215+
- ${SERVICE_DATA}/${SERVICE_NAME}/gitlab-runner_4:/etc/gitlab-runner
216+
- /var/run/docker.sock:/var/run/docker.sock
217+
command: --debug run --user=gitlab-runner --working-directory=/home/gitlab-runner
218+
environment:
219+
- CI_SERVER_URL=https://${GITLAB_HOST}
220+
- CI_SERVER_WITH_RUNNER=${CI_SERVER_WITH_RUNNER}
221+
- CI_SERVER_LOCAL_IP=${CI_SERVER_LOCAL_IP}
222+
- RUNNER_TOKEN=${RUNNER_TOKEN}
223+
- RUNNER_DESCRIPTION=gitab-runner_4
224+
- RUNNER_EXECUTOR=docker
225+
- DOCKER_IMAGE=gitlab/gitlab-runner-helper:x86_64-latest
226+
networks:
227+
- service
228+
229+
networks:
230+
service:
231+
name: ${SERVICE_NAME}
232+
# webproxy:
233+
# external:
234+
# name: ${WEBPROXY_NETWORK}

fix-unicorn.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/bash
2+
3+
echo "fix gitlab_server unicorn error"
4+
docker exec -it gitlab_server rm /home/git/gitlab/tmp/pids/unicorn.pid && docker restart gitlab_server

ssl-certs/ssl-certs.zip

8.48 KB
Binary file not shown.

0 commit comments

Comments
 (0)