docker-gitlab/README.md

193 lines
6.0 KiB
Markdown

# Docker GitLab
Dockerfile to build a GitLab container image.
## Installation
```bash
git clone https://github.com/sameersbn/docker-gitlab.git
cd docker-gitlab
sudo docker build -t="gitlabhq/gitlab" .
```
## Quick Start
Run the gitlab image
```bash
GITLAB=$(sudo docker run -d gitlabhq/gitlab)
GITLAB_IP=$(sudo docker inspect $GITLAB | grep IPAddres | awk -F'"' '{print $4}')
```
Access the GitLab application
```bash
xdg-open "http://${GITLAB_IP}"
```
__NOTE__: Please allow a minute or two for the GitLab application to start.
Login using the default username and password:
* username: admin@local.host
* password: 5iveL!fe
You should now have GitLab ready for testing. If you want to use GitLab for more than just testing then please read the **Advanced Options** section.
## Advanced Options
### Mounting volumes
GitLab is a code hosting software and as such you don't want to lose your code when the docker container is stopped/deleted. To avoid losing any data, you should mount volumes at.
* /home/git/repositories
* /home/git/gitlab-satellites
* /home/git/.ssh
Volumes can be mounted in docker by specifying the **'-v'** option in the docker run command.
```bash
mkdir /opt/gitlab/repositories
mkdir /opt/gitlab/gitlab-satellites
mkdir /opt/gitlab/.ssh
docker run -d \
-v /opt/gitlab/repositories:/home/git/repositories \
-v /opt/gitlab/gitlab-satellites:/home/git/gitlab-satellites \
-v /opt/gitlab/.ssh:/home/git/.ssh gitlabhq/gitlab
```
### Configuring MySQL database connection
GitLab uses a database backend to store its data.
#### Using the internal mysql server
This docker image is configured to use a MySQL database backend. The database connection can be configured using environment variables. If not specified, the image will start a mysql server internally and use it. However in this case, the data stored in the mysql database will be lost if the container is stopped/deleted. To avoid this you should mount a volume at /var/lib/mysql.
```bash
mkdir /opt/gitlab/mysql
docker run -d \
-v /opt/gitlab/repositories:/home/git/repositories \
-v /opt/gitlab/gitlab-satellites:/home/git/gitlab-satellites \
-v /opt/gitlab/.ssh:/home/git/.ssh \
-v /opt/gitlab/mysql:/var/lib/mysql gitlabhq/gitlab
```
This will make sure that the data stored in the database is not lost when the image is stopped and started again.
#### Using an external mysql server
The image can be configured to use an external MySQL database instead of starting a MySQL server internally. The database configuration should be specified using environment variables while starting the GitLab image.
Before you start the GitLab image create user and database for gitlab.
```bash
mysql -uroot -p
CREATE USER 'gitlab'@'%.%.%.%' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'%.%.%.%';
```
To make sure the database is initialized start the container with DB_INIT=yes environment variable set.
**NOTE: This should be done only for the first run**.
*Assuming that the mysql server host is 192.168.1.100*
```bash
docker run -d \
-e "DB_HOST=192.168.1.100" -e "DB_NAME=gitlabhq_production" -e "DB_USER=gitlab" -e "DB_PASS=password" -e "DB_INIT=yes" \
-v /opt/gitlab/repositories:/home/git/repositories \
-v /opt/gitlab/gitlab-satellites:/home/git/gitlab-satellites \
-v /opt/gitlab/.ssh:/home/git/.ssh gitlabhq/gitlab
```
This will initialize the gitlab database. Now that the database is initialized, omit the **-e "DB_INIT=yes"** option from the docker command.
```bash
docker run -d \
-e "DB_HOST=192.168.1.100" -e "DB_NAME=gitlabhq_production" -e "DB_USER=gitlab" -e "DB_PASS=password" \
-v /opt/gitlab/repositories:/home/git/repositories \
-v /opt/gitlab/gitlab-satellites:/home/git/gitlab-satellites \
-v /opt/gitlab/.ssh:/home/git/.ssh gitlabhq/gitlab
```
### Other options
Below is the complete list of parameters that can be set using environment variables.
* GITLAB_HOST
The hostname of the GitLab server. Defaults to localhost
* GITLAB_EMAIL
The email address for the GitLab server. Defaults to gitlab@localhost.
* GITLAB_SUPPORT
The support email address for the GitLab server. Defaults to support@localhost.
* REDIS_HOST
The hostname of the redis server. Defaults to localhost
* REDIS_PORT
The connection port of the redis server. Defaults to 6379.
* UNICORN_WORKERS
The number of unicorn workers to start. Defaults to 2.
* SIDEKIQ_CONCURRENCY
The number of concurrent sidekiq jobs to run. Defaults to 5
* DB_HOST
The mysql server hostname. Defaults to localhost.
* DB_NAME
The mysql database name. Defaults to gitlabhq_production
* DB_USER
The mysql database user. Defaults to root
* DB_PASS
The mysql database password. Defaults to no password
* DB_POOL
The mysql database connection pool count. Defaults to 5.
* DB_INIT
Whether to initial the mysql database. Defaults to no
### Putting it all together
```bash
docker run -d -h git.local.host \
-v /opt/gitlab/repositories:/home/git/repositories \
-v /opt/gitlab/gitlab-satellites:/home/git/gitlab-satellites \
-v /opt/gitlab/.ssh:/home/git/.ssh \
-v /opt/gitlab/mysql:/var/lib/mysql \
-e "GITLAB_HOST=git.local.host" -e "GITLAB_EMAIL=gitlab@local.host" -e "GITLAB_SUPPORT=support@local.host" \
gitlabhq/gitlab
```
If you are using an external mysql database
```bash
docker run -d -h git.local.host \
-v /opt/gitlab/repositories:/home/git/repositories \
-v /opt/gitlab/gitlab-satellites:/home/git/gitlab-satellites \
-v /opt/gitlab/.ssh:/home/git/.ssh \
-e "DB_HOST=192.168.1.100" -e "DB_NAME=gitlabhq_production" -e "DB_USER=gitlab" -e "DB_PASS=password" \
-e "GITLAB_HOST=git.local.host" -e "GITLAB_EMAIL=gitlab@local.host" -e "GITLAB_SUPPORT=support@local.host" \
gitlabhq/gitlab
```
## References
https://github.com/gitlabhq/gitlabhq
https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md