Merge branch 'update-docker' into 'master'
Update docker guide and add docker-compose.yml /cc @JobV @sytses See merge request !1473
This commit is contained in:
commit
2714d5b814
|
@ -0,0 +1,2 @@
|
||||||
|
app:
|
||||||
|
image: gitlab/gitlab-ce:latest
|
|
@ -1 +0,0 @@
|
||||||
*.md
|
|
|
@ -1,50 +0,0 @@
|
||||||
FROM ubuntu:14.04
|
|
||||||
MAINTAINER Sytse Sijbrandij
|
|
||||||
|
|
||||||
# Install required packages
|
|
||||||
RUN apt-get update -q \
|
|
||||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
|
|
||||||
ca-certificates \
|
|
||||||
openssh-server \
|
|
||||||
wget \
|
|
||||||
apt-transport-https \
|
|
||||||
vim \
|
|
||||||
nano
|
|
||||||
|
|
||||||
# Download & Install GitLab
|
|
||||||
# If you run GitLab Enterprise Edition point it to a location where you have downloaded it.
|
|
||||||
RUN echo "deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/gitlab_gitlab-ce.list
|
|
||||||
RUN wget -q -O - https://packages.gitlab.com/gpg.key | apt-key add -
|
|
||||||
RUN apt-get update && apt-get install -yq --no-install-recommends gitlab-ce
|
|
||||||
|
|
||||||
# Manage SSHD through runit
|
|
||||||
RUN mkdir -p /opt/gitlab/sv/sshd/supervise \
|
|
||||||
&& mkfifo /opt/gitlab/sv/sshd/supervise/ok \
|
|
||||||
&& printf "#!/bin/sh\nexec 2>&1\numask 077\nexec /usr/sbin/sshd -D" > /opt/gitlab/sv/sshd/run \
|
|
||||||
&& chmod a+x /opt/gitlab/sv/sshd/run \
|
|
||||||
&& ln -s /opt/gitlab/sv/sshd /opt/gitlab/service \
|
|
||||||
&& mkdir -p /var/run/sshd
|
|
||||||
|
|
||||||
# Disabling use DNS in ssh since it tends to slow connecting
|
|
||||||
RUN echo "UseDNS no" >> /etc/ssh/sshd_config
|
|
||||||
|
|
||||||
# Prepare default configuration
|
|
||||||
RUN ( \
|
|
||||||
echo "" && \
|
|
||||||
echo "# Docker options" && \
|
|
||||||
echo "# Prevent Postgres from trying to allocate 25% of total memory" && \
|
|
||||||
echo "postgresql['shared_buffers'] = '1MB'" ) >> /etc/gitlab/gitlab.rb && \
|
|
||||||
mkdir -p /assets/ && \
|
|
||||||
cp /etc/gitlab/gitlab.rb /assets/gitlab.rb
|
|
||||||
|
|
||||||
# Expose web & ssh
|
|
||||||
EXPOSE 443 80 22
|
|
||||||
|
|
||||||
# Define data volumes
|
|
||||||
VOLUME ["/etc/gitlab", "/var/opt/gitlab", "/var/log/gitlab"]
|
|
||||||
|
|
||||||
# Copy assets
|
|
||||||
COPY assets/wrapper /usr/local/bin/
|
|
||||||
|
|
||||||
# Wrapper to handle signal, trigger runit and reconfigure GitLab
|
|
||||||
CMD ["/usr/local/bin/wrapper"]
|
|
172
docker/README.md
172
docker/README.md
|
@ -1,169 +1,7 @@
|
||||||
# GitLab Docker images
|
# GitLab Docker images
|
||||||
|
|
||||||
The GitLab docker image is [available on Docker Hub](https://registry.hub.docker.com/u/gitlab/gitlab-ce/).
|
* The official GitLab Community Edition Docker image is [available on Docker Hub](https://registry.hub.docker.com/u/gitlab/gitlab-ce/).
|
||||||
|
* The official GitLab Enterprise Edition Docker image is [available on Docker Hub](https://registry.hub.docker.com/u/gitlab/gitlab-ee/).
|
||||||
## After starting a container
|
* The complete usage guide can be found in [Using GitLab Docker images](http://doc.gitlab.com/omnibus/docker/)
|
||||||
|
* The Dockerfile used for building public images is in [Omnibus Repository](https://gitlab.com/gitlab-org/omnibus-gitlab/tree/master/docker)
|
||||||
After starting a container you can go to [http://localhost:8080/](http://localhost:8080/) or [http://192.168.59.103:8080/](http://192.168.59.103:8080/) if you use boot2docker.
|
* Check the guide for [creating Omnibus-based Docker Image](http://doc.gitlab.com/omnibus/build/README.html#Build-Docker-image)
|
||||||
|
|
||||||
It might take a while before the docker container is responding to queries.
|
|
||||||
|
|
||||||
You can check the status with something like `sudo docker logs -f gitlab`.
|
|
||||||
|
|
||||||
You can login to the web interface with username `root` and password `5iveL!fe`.
|
|
||||||
|
|
||||||
Next time, you can just use docker start and stop to run the container.
|
|
||||||
|
|
||||||
## Run the image
|
|
||||||
|
|
||||||
Run the image:
|
|
||||||
```bash
|
|
||||||
sudo docker run --detach \
|
|
||||||
--publish 8443:443 --publish 8080:80 --publish 2222:22 \
|
|
||||||
--name gitlab \
|
|
||||||
--restart always \
|
|
||||||
--volume /srv/gitlab/config:/etc/gitlab \
|
|
||||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
|
||||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
|
||||||
gitlab/gitlab-ce:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
This will download and start GitLab CE container and publish ports needed to access SSH, HTTP and HTTPS.
|
|
||||||
All GitLab data will be stored as subdirectories of `/srv/gitlab/`.
|
|
||||||
The container will automatically `restart` after system reboot.
|
|
||||||
|
|
||||||
After this you can login to the web interface as explained above in 'After starting a container'.
|
|
||||||
|
|
||||||
## Where is the data stored?
|
|
||||||
|
|
||||||
The GitLab container uses host mounted volumes to store persistent data:
|
|
||||||
- `/srv/gitlab/data` mounted as `/var/opt/gitlab` in the container is used for storing *application data*
|
|
||||||
- `/srv/gitlab/logs` mounted as `/var/log/gitlab` in the container is used for storing *logs*
|
|
||||||
- `/srv/gitlab/config` mounted as `/etc/gitlab` in the container is used for storing *configuration*
|
|
||||||
|
|
||||||
You can fine tune these directories to meet your requirements.
|
|
||||||
|
|
||||||
### Configure GitLab
|
|
||||||
|
|
||||||
This container uses the official Omnibus GitLab distribution, so all configuration is done in the unique configuration file `/etc/gitlab/gitlab.rb`.
|
|
||||||
|
|
||||||
To access GitLab configuration, you can start an bash in a new the context of running container, you will be able to browse all directories and use your favorite text editor:
|
|
||||||
```bash
|
|
||||||
sudo docker exec -it gitlab /bin/bash
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also edit just `/etc/gitlab/gitlab.rb`:
|
|
||||||
```bash
|
|
||||||
sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb
|
|
||||||
```
|
|
||||||
|
|
||||||
**You should set the `external_url` to point to a valid URL.**
|
|
||||||
|
|
||||||
**You may also be interesting in [Enabling HTTPS](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#enable-https).**
|
|
||||||
|
|
||||||
**To receive e-mails from GitLab you have to configure the [SMTP settings](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md),
|
|
||||||
because Docker image doesn't have a SMTP server.**
|
|
||||||
|
|
||||||
**Note** that GitLab will reconfigure itself **at each container start.** You will need to restart the container to reconfigure your GitLab:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo docker restart gitlab
|
|
||||||
```
|
|
||||||
|
|
||||||
For more options for configuring the container please check [Omnibus GitLab documentation](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#configuration).
|
|
||||||
|
|
||||||
## Diagnose potential problems
|
|
||||||
|
|
||||||
Read container logs:
|
|
||||||
```bash
|
|
||||||
sudo docker logs gitlab
|
|
||||||
```
|
|
||||||
|
|
||||||
Enter running container:
|
|
||||||
```bash
|
|
||||||
sudo docker exec -it gitlab /bin/bash
|
|
||||||
```
|
|
||||||
|
|
||||||
From within container you can administrer GitLab container as you would normally administer Omnibus installation: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md.
|
|
||||||
|
|
||||||
### Upgrade GitLab to newer version
|
|
||||||
|
|
||||||
To upgrade GitLab to new version you have to do:
|
|
||||||
1. pull new image,
|
|
||||||
```bash
|
|
||||||
sudo docker stop gitlab
|
|
||||||
```
|
|
||||||
|
|
||||||
1. stop running container,
|
|
||||||
```bash
|
|
||||||
sudo docker rm gitlab
|
|
||||||
```
|
|
||||||
|
|
||||||
1. remove existing container,
|
|
||||||
```bash
|
|
||||||
sudo docker pull gitlab/gitlab-ce:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
1. create the container once again with previously specified options.
|
|
||||||
```bash
|
|
||||||
sudo docker run --detach \
|
|
||||||
--publish 8443:443 --publish 8080:80 --publish 2222:22 \
|
|
||||||
--name gitlab \
|
|
||||||
--restart always \
|
|
||||||
--volume /srv/gitlab/config:/etc/gitlab \
|
|
||||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
|
||||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
|
||||||
gitlab/gitlab-ce:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
On the first run GitLab will reconfigure and update itself.
|
|
||||||
|
|
||||||
### Run GitLab CE on public IP address
|
|
||||||
|
|
||||||
You can make Docker to use your IP address and forward all traffic to the GitLab CE container.
|
|
||||||
You can do that by modifying the `--publish` ([Binding container ports to the host](https://docs.docker.com/articles/networking/#binding-ports)):
|
|
||||||
|
|
||||||
> --publish=[] : Publish a container᾿s port or a range of ports to the host format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
|
|
||||||
|
|
||||||
To expose GitLab CE on IP 1.1.1.1:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo docker run --detach \
|
|
||||||
--publish 1.1.1.1:443:443 --publish 1.1.1.1:80:80 --publish 1.1.1.1:22:22 \
|
|
||||||
--name gitlab \
|
|
||||||
--restart always \
|
|
||||||
--volume /srv/gitlab/config:/etc/gitlab \
|
|
||||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
|
||||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
|
||||||
gitlab/gitlab-ce:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
You can then access GitLab instance at http://1.1.1.1/ and https://1.1.1.1/.
|
|
||||||
|
|
||||||
### Build the image
|
|
||||||
|
|
||||||
This guide will also let you know how to build docker image yourself.
|
|
||||||
Please run the command from the GitLab repo root directory.
|
|
||||||
People using boot2docker should run all the commands without sudo.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo docker build --tag gitlab/gitlab-ce:latest docker/
|
|
||||||
```
|
|
||||||
|
|
||||||
### Publish the image to Dockerhub
|
|
||||||
|
|
||||||
- Ensure the containers are running
|
|
||||||
- Login to Dockerhub with `sudo docker login`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo docker login
|
|
||||||
sudo docker push gitlab/gitlab-ce:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
Please see the [troubleshooting](troubleshooting.md) file in this directory.
|
|
||||||
|
|
||||||
Note: We use `fig.yml` to have compatibility with fig and because docker-compose also supports it.
|
|
||||||
|
|
||||||
Our docker image runs chef at every start to generate GitLab configuration.
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
function sigterm_handler() {
|
|
||||||
echo "SIGTERM signal received, try to gracefully shutdown all services..."
|
|
||||||
gitlab-ctl stop
|
|
||||||
}
|
|
||||||
|
|
||||||
trap "sigterm_handler; exit" TERM
|
|
||||||
|
|
||||||
function entrypoint() {
|
|
||||||
/opt/gitlab/embedded/bin/runsvdir-start &
|
|
||||||
gitlab-ctl reconfigure # will also start everything
|
|
||||||
gitlab-ctl tail # tail all logs
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ ! -e /etc/gitlab/gitlab.rb ]]; then
|
|
||||||
cp /assets/gitlab.rb /etc/gitlab/gitlab.rb
|
|
||||||
chmod 0600 /etc/gitlab/gitlab.rb
|
|
||||||
fi
|
|
||||||
|
|
||||||
entrypoint
|
|
|
@ -1,2 +0,0 @@
|
||||||
app:
|
|
||||||
build: .
|
|
|
@ -1,31 +0,0 @@
|
||||||
{
|
|
||||||
"id": "/gitlab",
|
|
||||||
"ports": [0,0],
|
|
||||||
"cpus": 2,
|
|
||||||
"mem": 2048.0,
|
|
||||||
"disk": 10240.0,
|
|
||||||
"container": {
|
|
||||||
"type": "DOCKER",
|
|
||||||
"docker": {
|
|
||||||
"network": "HOST",
|
|
||||||
"image": "gitlab/gitlab-ce:latest"
|
|
||||||
},
|
|
||||||
"volumes": [
|
|
||||||
{
|
|
||||||
"containerPath": "/etc/gitlab",
|
|
||||||
"hostPath": "/var/data/etc/gitlab",
|
|
||||||
"mode": "RW"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"containerPath": "/var/opt/gitlab",
|
|
||||||
"hostPath": "/var/data/opt/gitlab",
|
|
||||||
"mode": "RW"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"containerPath": "/var/log/gitlab",
|
|
||||||
"hostPath": "/var/data/log/gitlab",
|
|
||||||
"mode": "RW"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,84 +0,0 @@
|
||||||
# Troubleshooting
|
|
||||||
|
|
||||||
This is to troubleshoot https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/245
|
|
||||||
But it might contain useful commands for other cases as well.
|
|
||||||
|
|
||||||
The configuration to add the postgres log in vim is:
|
|
||||||
postgresql['log_directory'] = '/var/log/gitlab/postgresql'
|
|
||||||
|
|
||||||
# Commands
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo docker build --tag gitlab/gitlab-ce:latest docker/
|
|
||||||
|
|
||||||
sudo docker rm -f gitlab
|
|
||||||
|
|
||||||
sudo docker exec -it gitlab vim /etc/gitlab/gitlab.rb
|
|
||||||
|
|
||||||
sudo docker exec gitlab tail -f /var/log/gitlab/reconfigure.log
|
|
||||||
|
|
||||||
sudo docker exec gitlab tail -f /var/log/gitlab/postgresql/current
|
|
||||||
|
|
||||||
sudo docker exec gitlab cat /var/opt/gitlab/postgresql/data/postgresql.conf | grep shared_buffers
|
|
||||||
|
|
||||||
sudo docker exec gitlab cat /etc/gitlab/gitlab.rb
|
|
||||||
```
|
|
||||||
|
|
||||||
# Interactively
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# First start a GitLab container without starting GitLab
|
|
||||||
# This is almost the same as starting the GitLab container except:
|
|
||||||
# - we run interactively (-t -i)
|
|
||||||
# - we define TERM=linux because it allows to use arrow keys in vi (!!!)
|
|
||||||
# - we choose another startup command (bash)
|
|
||||||
sudo docker run --ti \
|
|
||||||
-e TERM=linux
|
|
||||||
--publish 80443:443 --publish 8080:80 --publish 2222:22 \
|
|
||||||
--name gitlab \
|
|
||||||
--restart always \
|
|
||||||
--volume /srv/gitlab/config:/etc/gitlab \
|
|
||||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
|
||||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
|
||||||
gitlab/gitlab-ce:latest \
|
|
||||||
bash
|
|
||||||
|
|
||||||
# Configure GitLab to redirect PostgreSQL logs
|
|
||||||
echo "postgresql['log_directory'] = '/var/log/gitlab/postgresql'" >> /etc/gitlab/gitlab.rb
|
|
||||||
|
|
||||||
# Prevent Postgres from allocating 25% of total memory
|
|
||||||
echo "postgresql['shared_buffers'] = '1MB'" >> /etc/gitlab/gitlab.rb
|
|
||||||
|
|
||||||
# You can now start GitLab manually from Bash (in the background)
|
|
||||||
# Maybe the command below is still missing something to run in the background
|
|
||||||
gitlab-ctl reconfigure > /var/log/gitlab/reconfigure.log & /opt/gitlab/embedded/bin/runsvdir-start &
|
|
||||||
|
|
||||||
# Inspect PostgreSQL config
|
|
||||||
cat /var/opt/gitlab/postgresql/data/postgresql.conf | grep shared_buffers
|
|
||||||
|
|
||||||
# And tail the logs (PostgreSQL log may not exist immediately)
|
|
||||||
tail -f /var/log/gitlab/reconfigure.log /var/log/gitlab/postgresql/current
|
|
||||||
|
|
||||||
# And get the memory
|
|
||||||
cat /proc/meminfo
|
|
||||||
head /proc/sys/kernel/shmmax /proc/sys/kernel/shmall
|
|
||||||
free -m
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
|
|
||||||
Remove ALL docker containers and images (also non GitLab ones).
|
|
||||||
**Be careful, because the `-v` also removes volumes attached to the images.**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Remove all containers with attached volumes
|
|
||||||
docker rm -v $(docker ps -a -q)
|
|
||||||
|
|
||||||
# Remove all images
|
|
||||||
docker rmi $(docker images -q)
|
|
||||||
|
|
||||||
# Remove GitLab persistent data
|
|
||||||
rm -rf /srv/gitlab
|
|
||||||
```
|
|
||||||
|
|
Loading…
Reference in New Issue