-
Notifications
You must be signed in to change notification settings - Fork 38
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Daniel Eagle
committed
Jan 15, 2017
0 parents
commit bced4c7
Showing
10 changed files
with
318 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
# Docker Volume Folder | ||
volume_data | ||
|
||
# Git Ignore File | ||
.gitignore | ||
|
||
# Git Folder | ||
.git |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
# Created by https://www.gitignore.io/api/windows,linux,macos | ||
|
||
### Windows ### | ||
# Windows image file caches | ||
Thumbs.db | ||
ehthumbs.db | ||
|
||
# Folder config file | ||
Desktop.ini | ||
|
||
# Recycle Bin used on file shares | ||
$RECYCLE.BIN/ | ||
|
||
# Windows Installer files | ||
*.cab | ||
*.msi | ||
*.msm | ||
*.msp | ||
|
||
# Windows shortcuts | ||
*.lnk | ||
|
||
|
||
### Linux ### | ||
*~ | ||
|
||
# temporary files which can be created if a process still has a handle open of a deleted file | ||
.fuse_hidden* | ||
|
||
# KDE directory preferences | ||
.directory | ||
|
||
# Linux trash folder which might appear on any partition or disk | ||
.Trash-* | ||
|
||
# .nfs files are created when an open file is removed but is still being accessed | ||
.nfs* | ||
|
||
|
||
### macOS ### | ||
*.DS_Store | ||
.AppleDouble | ||
.LSOverride | ||
|
||
# Icon must end with two \r | ||
Icon | ||
# Thumbnails | ||
._* | ||
# Files that might appear in the root of a volume | ||
.DocumentRevisions-V100 | ||
.fseventsd | ||
.Spotlight-V100 | ||
.TemporaryItems | ||
.Trashes | ||
.VolumeIcon.icns | ||
.com.apple.timemachine.donotpresent | ||
# Directories potentially created on remote AFP share | ||
.AppleDB | ||
.AppleDesktop | ||
Network Trash Folder | ||
Temporary Items | ||
.apdisk | ||
|
||
# Docker Volume Folder | ||
volume_data | ||
|
||
# SSL Folder | ||
config\ssl |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# v1.0.1 | ||
|
||
- Updated relevant documentation. | ||
|
||
# v1.0.0 | ||
|
||
- Initial release |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
GitLab CE HTTPS Docker Container Contributors (sorted alphabetically) | ||
==================================================== | ||
|
||
* Daniel Eagle ([GetchaDEAGLE](http://danieleagle.com)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
FROM gitlab/gitlab-ce:8.15.4-ce.1 | ||
MAINTAINER Daniel Eagle | ||
|
||
VOLUME /etc/gitlab/ssl | ||
|
||
# Copy SSL files | ||
COPY config/ssl/server.crt /etc/gitlab/ssl/server.crt | ||
COPY config/ssl/server.key /etc/gitlab/ssl/server.key | ||
|
||
# Remove write access from SSL files to protect from accidental damage | ||
RUN chmod -v 0444 /etc/gitlab/ssl/server.crt \ | ||
&& chmod -v 0444 /etc/gitlab/ssl/server.key |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
The MIT License (MIT) | ||
|
||
Copyright (c) 2017 Daniel Eagle | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
# GitLab CE HTTPS Docker Container | ||
|
||
This repository contains custom Docker files for [GitLab CE](https://gitlab.com/gitlab-org/gitlab-ce). Everything is setup to run on HTTPS using a self-signed certificate ([this needs to be created](./README.md#generating-self-signed-certificate)) and includes commonly used features specified as environment variables in the included Docker Compose file. | ||
|
||
Be sure to see the [change log](./CHANGELOG.md) if interested in tracking changes leading to the current release. | ||
|
||
## Getting Started | ||
|
||
1. Ensure [Docker Compose](https://docs.docker.com/compose/) is installed along with [Docker Engine](https://docs.docker.com/engine/installation/). | ||
|
||
2. Clone this repository into a the desired location. | ||
|
||
3. Modify the GitLab CE settings to meet the needs of the particular context. These settings are found in the [docker-compose.yml](./docker-compose.yml) file. Information on these settings are found below. | ||
|
||
4. [Generate a self-signed certificate](./README.md#generating-a-self-signed-certificate) to use with the GitLab CE instance. | ||
|
||
5. Run the following command (geared toward Linux): | ||
|
||
`sudo docker-compose up -d` | ||
|
||
Please read the rest of the content found within in order to understand additional configuration options. | ||
|
||
## Settings Specified in Docker Compose File | ||
|
||
Below is a list of the settings that are specified in [docker-compose.yml](./docker-compose.yml). Some of these settings will need to be changed in order to meet specific goals. Additional settings can be added here or existing settings removed. For more information on available configuration options, go [here](https://docs.gitlab.com/omnibus/settings/configuration.html). In addition, for more information on the logrotate settings, go [here](http://www.linuxcommand.org/man_pages/logrotate8.html). | ||
|
||
1. **external_url** - This is the URL used to access the GitLab CE instance externally. Links in emails will use this URL along with certain uploaded assets (e.g. images specified for groups, etc.). Be sure to specify the port used externally to access the GitLab CE instance from Docker (e.g. port 9150 which maps to the internal Docker port of 443). | ||
|
||
2. **gitlab_rails['time_zone']** - Specifies the desired timezone in order for the correct time to show up in the logs, amongst other things. | ||
|
||
3. **gitlab_rails['smtp_enable']** - Enables SMTP so emails can be sent out on certain events (e.g. new user registrations, etc.). | ||
|
||
4. **gitlab_rails['smtp_address']** - The SMTP server address used for sending emails. | ||
|
||
5. **gitlab_rails['smtp_port']** - The port used for SMTP (e.g. port 587 for TLS to ensure emails are sent securely). | ||
|
||
6. **gitlab_rails['smtp_user_name']** - The username used for sending emails via SMTP (e.g. [email protected]). | ||
|
||
7. **gitlab_rails['smtp_password']** - The password used for the SMTP email account. | ||
|
||
8. **gitlab_rails['smtp_domain']** - The domain used for sending emails via SMTP (e.g. example.com). | ||
|
||
9. **gitlab_rails['smtp_authentication']** - Specifies the SMTP authentication mode. | ||
|
||
10. **gitlab_rails['smtp_enable_starttls_auto']** - Enables TLS to ensure the transfer of secure email messages. | ||
|
||
11. **gitlab_rails['gitlab_email_from']** - Specifies the *from* email address shown in the sent email. | ||
|
||
12. **gitlab_rails['backup_keep_time']** - Specifies how long in seconds to keep each backup (e.g. 14515200 for roughly 6 months). | ||
|
||
13. **logging['logrotate_frequency']** and **nginx['logrotate_frequency']** - Specifies how often logs should be rotated for GitLab CE or NGINX (e.g. daily, weekly, etc.). | ||
|
||
14. **logging['logrotate_rotate']** and **nginx['logrotate_rotate']** - Specifies the the value used by the frequency setting above (e.g. if frequency is weekly and rotate interval is set to 7, logs will rotate every 7 weeks) for GitLab CE or NGINX. | ||
|
||
15. **logging['logrotate_compress']** and **nginx['logrotate_compress']** - Specifies whether logs should be compressed when rotated for GitLab CE or NGINX. | ||
|
||
16. **logging['logrotate_method']** and **nginx['logrotate_method']** - Specifies the method used when logs are rotated (e.g. copytruncate) for GitLab CE or NGINX. | ||
|
||
17. **logging['logrotate_delaycompress']** and **nginx['logrotate_delaycompress']** - Specifies whether compression should be delayed when rotating logs for GitLab CE or NGINX. | ||
|
||
18. **nginx['listen_port']** - Specifies the port (e.g. port 443 used internally by container) used to force NGINX to listen on. This should be specified if supplying a port to the *external_url* setting. This is because if a port is detected in the external URL, GitLab CE will instruct NGINX to listen on that port unless specifying this setting which acts as an override. | ||
|
||
19. **nginx['redirect_http_to_https']** - Redirects HTTP requests to HTTPS, preventing the use of insecure communications. | ||
|
||
20. **nginx['ssl_certificate']** - Specifies which SSL certificate to use via a file path. This is an internal container path. | ||
|
||
21. **nginx['ssl_certificate_key']** - Specifies which SSL certificate key to use via a file path. This is an internal container path. | ||
|
||
## Generating a Self-Signed Certificate | ||
|
||
In order to generate a self-signed certificate (using OpenSSL) to secure all HTTP traffic, follow these instructions (geared toward Linux). | ||
|
||
1. Run the command `sudo openssl genrsa -out server.key 4096` which will generate a secure server key. | ||
|
||
2. Run the command `sudo openssl req -new -key server.key -out server.csr` which will generate the certificate signing request. | ||
|
||
3. The above command will request input in the following areas shown below. | ||
|
||
``` bash | ||
Country Name (2 letter code) [AU]: | ||
State or Province Name (full name) [Some-State]: | ||
Locality Name (eg, city) []: | ||
Organization Name (eg, company) [Internet Widgits Pty Ltd]: | ||
Organizational Unit Name (eg, section) []: | ||
Common Name (e.g. server FQDN or YOUR name) []: | ||
Email Address []: | ||
|
||
Please enter the following 'extra' attributes | ||
to be sent with your certificate request | ||
A challenge password []: | ||
An optional company name []: | ||
``` | ||
|
||
It's important that for *Common Name (e.g. server FQDN or YOUR name)* to enter the URL that GitLab CE will use (e.g. the value specified for external URL in *docker-compose.yml* without the port). | ||
4. Run the command `sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt` to create the signed certificate. The certificate will be valid for one year unless the value used for days is different. | ||
5. Copy both server.crt and server.key into `./config/ssl` (part of this repository) and overwrite the dummy files. These files will be copied into the container and used to secure the GitLab CE instance. | ||
6. Delete the leftover certificate signing request file: `sudo rm server.csr`. | ||
## Container Network | ||
The network specified (can be changed to the desired value) by this Docker container is named `development`. It is assumed that this network has already been created prior to using the included Docker Compose file. The reason for this is to avoid generating a default network so that other Docker containers can access the GitLab CE instance (e.g. Jenkins for CICD, etc.) using the [Docker embedded DNS server](https://docs.docker.com/engine/userguide/networking/#/docker-embedded-dns-server). | ||
If no network has been created, run the following Docker command (geared toward Linux): `sudo docker network create network-name`. Be sure to replace *network-name* with the name of the desired network. For more information on this command, go [here](https://docs.docker.com/engine/reference/commandline/network_create/). | ||
## Port Mapping | ||
The external ports used to map to the internal ports that GitLab CE uses are 9150 (maps to 443 for HTTPS) and 9151 (maps to 22 for SSH). These ports can certainly be changed but please be mindful of the effects. Changing the port mapped to HTTPS will require changing it on the *external_url* setting found in the Docker Compose file. | ||
However, if the external port for HTTPS is set to the same port used internally (e.g. 443), then the port can be omitted from the *external_url* setting and the *nginx['listen_port']* setting can be omitted as it will no longer be required. | ||
## Data Volumes | ||
It is possible to change the data volume folders mapped to the container to something other than `volume_data/x` if desired. It is recommended to choose a naming scheme that is easy to recognize. | ||
## Configuring Git to Work with a Self-Signed Certificate | ||
For Git to work with a self-signed certificate, a few configuration options need to be specified. There are two ways to do this explained here and one may be better suited to the given situation than the other. Read through the options and pick the best one for the given circumstances. | ||
### Option 1 - Modify the Global Git Configuration | ||
To configure Git to always use the self-signed certificate for all HTTPS transactions, modify the Git configuration (global .gitconfig file) and add the following (geared toward Windows). This file is usually found at `C:\Users\jsmith\.gitconfig` and be sure to replace the user folder `jsmith` with the correct one suited to the given context. | ||
``` bash | ||
[http] | ||
sslCAinfo = C:\\Users\\jsmith\\certificates\\gitlab\\server.crt | ||
``` | ||
This assumes the certificate has been copied into a different directory (e.g. c:\Users\jsmith\certificates) and then referenced in the global Git configuration file. This directory can be changed to something else if desired. | ||
### Option 2 - Specify the Self-Signed Certificate Upon Git Clone Operation | ||
This option, while being more manual in nature, specifies the self-signed certificate to use when performing a Git Clone operation. Once the repository has been cloned, additional transactions made against it will use this certificate. One benefit to this approach is having the ability to interact with other repositories that do not use a self-signed certificate (e.g. public GitHub repos). For most people, this will be the best option. | ||
Run the following command to clone a repository and specify the self-signed certificate to use for it (geared toward Windows): | ||
`git clone -c http.sslCAPath="C:\\Users\\jsmith\\certificates\\gitlab" -c http.sslCAInfo="C:\\Users\\jsmith\\certificates\\gitlab\\server.crt" -c http.sslVerify=1 https://git.example.com/jsmith/gitlab-ce.git` | ||
Please see **Option 1** above for more details on the path used with this command. This path will be different depending upon the context. | ||
### Further Reading | ||
For information making this change on platforms other than Windows or for extra details, please go [here](http://stackoverflow.com/questions/11621768/how-can-i-make-git-accept-a-self-signed-certificate). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
-----BEGIN CERTIFICATE----- | ||
// This is a dummy cert. | ||
-----END CERTIFICATE----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
-----BEGIN RSA PRIVATE KEY----- | ||
// This is a dummy key. | ||
-----END RSA PRIVATE KEY----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
version: '2' | ||
services: | ||
gitlab: | ||
build: . | ||
image: danieleagle/gitlab-ce:8.15.4-ce.1 | ||
container_name: GitLab | ||
restart: always | ||
environment: | ||
GITLAB_OMNIBUS_CONFIG: | | ||
external_url 'https://example.com:9150' | ||
gitlab_rails['time_zone'] = 'America/Chicago' | ||
gitlab_rails['smtp_enable'] = true | ||
gitlab_rails['smtp_address'] = "smtp.example.com" | ||
gitlab_rails['smtp_port'] = 587 | ||
gitlab_rails['smtp_user_name'] = "[email protected]" | ||
gitlab_rails['smtp_password'] = "changeMe" | ||
gitlab_rails['smtp_domain'] = "example.com" | ||
gitlab_rails['smtp_authentication'] = "login" | ||
gitlab_rails['smtp_enable_starttls_auto'] = true | ||
gitlab_rails['gitlab_email_from'] = '[email protected]' | ||
gitlab_rails['backup_keep_time'] = 14515200 | ||
logging['logrotate_frequency'] = "weekly" | ||
logging['logrotate_rotate'] = 52 | ||
logging['logrotate_compress'] = "compress" | ||
logging['logrotate_method'] = "copytruncate" | ||
logging['logrotate_delaycompress'] = "delaycompress" | ||
nginx['listen_port'] = 443 | ||
nginx['redirect_http_to_https'] = true | ||
nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt" | ||
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key" | ||
nginx['logrotate_frequency'] = "weekly" | ||
nginx['logrotate_rotate'] = 52 | ||
nginx['logrotate_compress'] = "compress" | ||
nginx['logrotate_method'] = "copytruncate" | ||
nginx['logrotate_delaycompress'] = "delaycompress" | ||
# Add any other gitlab.rb configuration options | ||
ports: | ||
- '9150:443' | ||
- '9151:22' | ||
volumes: | ||
- './volume_data/conf:/etc/gitlab' | ||
- './volume_data/logs:/var/log/gitlab' | ||
- './volume_data/main:/var/opt/gitlab' | ||
networks: | ||
default: | ||
external: | ||
name: development |