Skip to content
This repository was archived by the owner on Dec 5, 2022. It is now read-only.

Commit b9c7767

Browse files
Add Vagrantfiles and Dockerfiles (#4)
- Add Linux and Windows Vagrantfiles - Add RabbitMQ 3.6 and 3.7 Dockerfiles - Add AppVeyor and Travis CI scripts
1 parent 1cdbc35 commit b9c7767

File tree

9 files changed

+261
-0
lines changed

9 files changed

+261
-0
lines changed

.travis.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
language: bash
2+
services: docker
3+
env:
4+
- VERSION=3.6 VARIANT=alpine
5+
- VERSION=3.7 VARIANT=alpine
6+
before_script:
7+
- env | sort
8+
- cd "$VERSION"
9+
- dockerImage="easynetq/rabbitmq:$VERSION${VARIANT:+-$VARIANT}"
10+
script:
11+
- travis_retry docker build --pull -t "$dockerImage" "${VARIANT:-.}"
12+
after_script:
13+
- docker image ls --format "table {{.ID}}\t{{.Tag}}\t{{.CreatedSince}}\t{{.Size}}"
14+
- if [[ "${TRAVIS_TAG}" != "" ]]; then docker login -u="$DOCKER_USER" -p="$DOCKER_PASS" >/dev/null 2>&1; docker push "$dockerImage"; fi
15+
notifications:
16+
email: false

3.6/alpine/Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
FROM rabbitmq:3.6-management-alpine
2+
RUN rabbitmq-plugins enable --offline rabbitmq_federation rabbitmq_federation_management rabbitmq_management_visualiser
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
FROM microsoft/windowsservercore:10.0.14393.2007
2+
3+
ENV ERLANG_HOME="c:\erlang" \
4+
ERLANG_VERSION="20.3" \
5+
RABBITMQ_VERSION="3.6.15" \
6+
RABBITMQ_BASE="c:\rabbitmq" \
7+
RABBITMQ_CONFIG_FILE="c:\rabbitmq\rmqsettings"
8+
9+
SHELL ["powershell", "-Command"]
10+
11+
EXPOSE 1883 4369 5671 5672 8883 15671 15672 15674 15675 25672 61613 61614
12+
13+
RUN $erlangInstaller = Join-Path -Path $env:Temp -ChildPath 'otp_win64.exe'; \
14+
Invoke-WebRequest -UseBasicParsing -Uri "http://erlang.org/download/otp_win64_$env:ERLANG_VERSION.exe" -OutFile $erlangInstaller; \
15+
Unblock-File -Path $erlangInstaller; \
16+
Start-Process -NoNewWindow -Wait -FilePath $erlangInstaller -ArgumentList /S, /D=$env:ERLANG_HOME; \
17+
Remove-Item -Force -Path $erlangInstaller; \
18+
$rabbitZip = Join-Path -Path $env:Temp -ChildPath 'rabbitmq.zip'; \
19+
Invoke-WebRequest -UseBasicParsing -Uri "http://dl.bintray.com/rabbitmq/all/rabbitmq-server/$env:RABBITMQ_VERSION/rabbitmq-server-windows-$env:RABBITMQ_VERSION.zip" -OutFile $rabbitZip; \
20+
Unblock-File -Path $rabbitZip; \
21+
Expand-Archive -Path $rabbitZip -DestinationPath 'c:\'; \
22+
Remove-Item -Force -Path $rabbitZip; \
23+
Rename-Item -Path "c:\rabbitmq_server-$env:RABBITMQ_VERSION" -NewName 'c:\rabbitmq'; \
24+
Remove-Item -Force -Path C:\rabbitmq\*.txt; \
25+
$utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False; \
26+
[System.IO.File]::WriteAllText('C:\rabbitmq\rmqsettings.config', '[{rabbit,[{loopback_users, []}]}].', $utf8NoBomEncoding); \
27+
C:\rabbitmq\sbin\rabbitmq-plugins.bat enable --offline rabbitmq_management rabbitmq_federation rabbitmq_federation_management rabbitmq_management_visualiser
28+
29+
CMD c:\rabbitmq\sbin\rabbitmq-server.bat

3.7/alpine/Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
FROM rabbitmq:3.7-management-alpine
2+
RUN rabbitmq-plugins enable --offline rabbitmq_federation rabbitmq_federation_management
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
FROM microsoft/windowsservercore:10.0.14393.2007
2+
3+
ENV ERLANG_HOME="c:\erlang" \
4+
ERLANG_VERSION="20.3" \
5+
RABBITMQ_VERSION="3.7.5" \
6+
RABBITMQ_BASE="c:\rabbitmq" \
7+
RABBITMQ_CONFIG_FILE="c:\rabbitmq\rmqsettings"
8+
9+
SHELL ["powershell", "-Command"]
10+
11+
EXPOSE 1883 4369 5671 5672 8883 15671 15672 15674 15675 25672 61613 61614
12+
13+
RUN $erlangInstaller = Join-Path -Path $env:Temp -ChildPath 'otp_win64.exe'; \
14+
Invoke-WebRequest -UseBasicParsing -Uri "http://erlang.org/download/otp_win64_$env:ERLANG_VERSION.exe" -OutFile $erlangInstaller; \
15+
Unblock-File -Path $erlangInstaller; \
16+
Start-Process -NoNewWindow -Wait -FilePath $erlangInstaller -ArgumentList /S, /D=$env:ERLANG_HOME; \
17+
Remove-Item -Force -Path $erlangInstaller; \
18+
$rabbitZip = Join-Path -Path $env:Temp -ChildPath 'rabbitmq.zip'; \
19+
Invoke-WebRequest -UseBasicParsing -Uri "http://dl.bintray.com/rabbitmq/all/rabbitmq-server/$env:RABBITMQ_VERSION/rabbitmq-server-windows-$env:RABBITMQ_VERSION.zip" -OutFile $rabbitZip; \
20+
Unblock-File -Path $rabbitZip; \
21+
Expand-Archive -Path $rabbitZip -DestinationPath 'c:\'; \
22+
Remove-Item -Force -Path $rabbitZip; \
23+
Rename-Item -Path "c:\rabbitmq_server-$env:RABBITMQ_VERSION" -NewName 'c:\rabbitmq'; \
24+
Remove-Item -Force -Path C:\rabbitmq\*.txt; \
25+
$utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False; \
26+
[System.IO.File]::WriteAllText('C:\rabbitmq\rmqsettings.config', '[{rabbit,[{loopback_users, []}]}].', $utf8NoBomEncoding); \
27+
C:\rabbitmq\sbin\rabbitmq-plugins.bat enable --offline rabbitmq_management rabbitmq_federation rabbitmq_federation_management
28+
29+
CMD c:\rabbitmq\sbin\rabbitmq-server.bat

appveyor.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
version: BUILD {build}
2+
image: Visual Studio 2017
3+
environment:
4+
DOCKER_USER:
5+
secure: x5zDJlkInxtBKEAkE9t2OQ==
6+
DOCKER_PASS:
7+
secure: AgTJdRnxbXBY+YT1i0BHmQ==
8+
matrix:
9+
- version: 3.6
10+
variant: windowsservercore-ltsc2016
11+
- version: 3.7
12+
variant: windowsservercore-ltsc2016
13+
install:
14+
- ps: |
15+
[Environment]::SetEnvironmentVariable('dockerImage', ('easynetq/rabbitmq:{0}-{1}' -f $env:version, $env:variant), [EnvironmentVariableTarget]::Process);
16+
[Environment]::SetEnvironmentVariable('buildDirectory', ('{0}/{1}' -f $env:version, $env:variant), [EnvironmentVariableTarget]::Process);
17+
build_script:
18+
- cmd: appveyor-retry docker build -t %dockerImage% %buildDirectory%
19+
after_build:
20+
- cmd: docker image ls --format "table {{.ID}}\t{{.Tag}}\t{{.CreatedSince}}\t{{.Size}}"
21+
deploy_script:
22+
- ps: if ($env:APPVEYOR_REPO_TAG -eq $true) { docker login -u="$env:DOCKER_USER" -p="$env:DOCKER_PASS"; docker push "$env:dockerImage" }

vagrant/linux/Vagrantfile

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
Vagrant.configure("2") do |config|
2+
config.ssh.host = "127.0.0.1"
3+
config.ssh.username = "vagrant"
4+
config.ssh.password = "vagrant"
5+
config.vm.box = "bento/ubuntu-16.04"
6+
config.vm.box_check_update = false
7+
config.vm.hostname = "docker-linux"
8+
config.vm.network :forwarded_port, id: 'ssh', guest: 22, host: 2200, auto_correct: false
9+
config.vm.network :forwarded_port, id: 'docker-http-api', guest: 4243, host: 4243, auto_correct: false
10+
config.vm.network :forwarded_port, id: 'rmq-epmd', guest: 4369, host: 1234, auto_correct: false
11+
config.vm.network :forwarded_port, id: 'rmq-amqpWithTls', guest: 5671, host: 5671, auto_correct: false
12+
config.vm.network :forwarded_port, id: 'rmq-amqpWithoutTls', guest: 5672, host: 5672, auto_correct: false
13+
config.vm.network :forwarded_port, id: 'rmq-managementWithTls', guest: 15671, host: 15671, auto_correct: false
14+
config.vm.network :forwarded_port, id: 'rmq-managementWithoutTls', guest: 15672, host: 15672, auto_correct: false
15+
config.vm.network :forwarded_port, id: 'rmq-erlangDistribution', guest: 25672, host: 25672, auto_correct: false
16+
config.vm.provider "virtualbox" do |vb|
17+
vb.name = "vm_docker_linux"
18+
vb.cpus = 2
19+
vb.memory = 1024
20+
end
21+
config.vm.provision "shell", inline: <<-SHELL.gsub(/^ +/, '')
22+
echo "****************************** Configuring system settings"
23+
sudo timedatectl set-timezone Europe/Rome
24+
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
25+
echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
26+
echo "****************************** Downloading packages"
27+
sudo apt-get -q -y update
28+
sudo apt-get -q -y upgrade
29+
sudo apt-get -q -y dist-upgrade
30+
sudo apt-get -q -y install sysv-rc-conf sudo linux-kernel-headers git tree whois unzip nginx
31+
echo "****************************** Updating Guest Additions"
32+
sudo wget -q -c http://download.virtualbox.org/virtualbox/LATEST.TXT -O /tmp/vbga-latest-version.txt
33+
vbgaLatestVersion=$(sudo cat /tmp/vbga-latest-version.txt)
34+
sudo rm /tmp/vbga-latest-version.txt
35+
sudo wget -q -c http://download.virtualbox.org/virtualbox/$vbgaLatestVersion/VBoxGuestAdditions_$vbgaLatestVersion.iso -O vbga.iso
36+
sudo mount vbga.iso -o loop /mnt
37+
sudo /mnt/VBoxLinuxAdditions.run
38+
sudo umount /mnt
39+
sudo rm vbga.iso
40+
sudo sysv-rc-conf vboxadd on
41+
echo "****************************** Installing Docker"
42+
echo "***** Installing Docker Engine"
43+
sudo wget -qO- https://get.docker.com/ | sudo bash
44+
sudo usermod -aG docker vagrant
45+
echo "***** Enabling socket and HTTP Docker APIs"
46+
echo "Usage:"
47+
echo "echo -e 'GET /images/json HTTP/1.0\\\\r\\\\n' | netcat -U /var/run/docker.sock"
48+
echo "curl localhost:4243/images/json"
49+
sudo mkdir -p /etc/systemd/system/docker.service.d
50+
sudo echo "[Service]" > /etc/systemd/system/docker.service.d/hosts.conf
51+
sudo echo "ExecStart=" >> /etc/systemd/system/docker.service.d/hosts.conf
52+
sudo echo "ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:4243" >> /etc/systemd/system/docker.service.d/hosts.conf
53+
sudo systemctl daemon-reload
54+
sudo systemctl restart docker
55+
echo "***** Installing Docker Compose"
56+
sudo wget -q https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -O /usr/local/bin/docker-compose
57+
sudo chmod +x /usr/local/bin/docker-compose
58+
echo "****************************** Rebooting"
59+
sudo reboot
60+
SHELL
61+
end

vagrant/windows/Vagrantfile

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
Vagrant.configure("2") do |config|
2+
config.winrm.host = "127.0.0.1"
3+
config.winrm.username = "vagrant"
4+
config.winrm.password = "vagrant"
5+
config.vm.box = "symbols/windows_2016_core"
6+
config.vm.box_check_update = false
7+
config.vm.hostname = "docker-windows"
8+
config.vm.network :forwarded_port, id: 'winrm', guest: 5985, host: 2201, auto_correct: false
9+
config.vm.network :forwarded_port, id: 'rdp', guest: 3389, host: 2202, auto_correct: false
10+
config.vm.network :forwarded_port, id: 'docker-http-api', guest: 4243, host: 4243, auto_correct: false
11+
config.vm.network :forwarded_port, id: 'rmq-mqttWithoutTls', guest: 1883, host: 1883, auto_correct: false
12+
config.vm.network :forwarded_port, id: 'rmq-epmd', guest: 4369, host: 4369, auto_correct: false
13+
config.vm.network :forwarded_port, id: 'rmq-amqpWithTls', guest: 5671, host: 5671, auto_correct: false
14+
config.vm.network :forwarded_port, id: 'rmq-amqpWithoutTls', guest: 5672, host: 5672, auto_correct: false
15+
config.vm.network :forwarded_port, id: 'rmq-mqttWithTls', guest: 8883, host: 8883, auto_correct: false
16+
config.vm.network :forwarded_port, id: 'rmq-managementWithTls', guest: 15671, host: 15671, auto_correct: false
17+
config.vm.network :forwarded_port, id: 'rmq-managementWithoutTls', guest: 15672, host: 15672, auto_correct: false
18+
config.vm.network :forwarded_port, id: 'rmq-stompOverWebsockets', guest: 15674, host: 15674, auto_correct: false
19+
config.vm.network :forwarded_port, id: 'rmq-mqttOverWebsockets', guest: 15675, host: 15675, auto_correct: false
20+
config.vm.network :forwarded_port, id: 'rmq-erlangDistribution', guest: 25672, host: 25672, auto_correct: false
21+
config.vm.network :forwarded_port, id: 'rmq-stompWithoutTls', guest: 61613, host: 61613, auto_correct: false
22+
config.vm.network :forwarded_port, id: 'rmq-stompWithTls', guest: 61614, host: 61614, auto_correct: false
23+
config.vm.provider "virtualbox" do |vb|
24+
vb.name = "vm_docker_windows"
25+
vb.cpus = 2
26+
vb.memory = 1024
27+
vb.gui = false
28+
end
29+
config.vm.provision "shell" do |s|
30+
s.powershell_args = '-NoProfile -Noninteractive -NoLogo -ExecutionPolicy Bypass'
31+
s.inline= <<-SHELL.gsub(/^ +/, '')
32+
Write-Host '****************************** Configuring system settings'
33+
$langList = New-WinUserLanguageList 'en-US'
34+
$langList[0].InputMethodTips.Clear()
35+
$langList[0].InputMethodTips.Add('0410:00000410')
36+
Set-WinUserLanguageList $langList -Force
37+
Write-Host '****************************** Updating PowerShell help'
38+
Update-Help -Force -ErrorAction Ignore
39+
Write-Host '****************************** Updating Guest Additions'
40+
Invoke-WebRequest -Uri 'http://download.virtualbox.org/virtualbox/LATEST.TXT' -OutFile "$env:SYSTEMROOT\\Temp\\vbga-latest-version.txt"
41+
$vbgaLatestVersion = Get-Content "$env:SYSTEMROOT\\Temp\\vbga-latest-version.txt"
42+
Remove-Item "$env:SYSTEMROOT\\Temp\\vbga-latest-version.txt"
43+
Invoke-WebRequest -Uri "http://download.virtualbox.org/virtualbox/$vbgaLatestVersion/VBoxGuestAdditions_$vbgaLatestVersion.iso" -OutFile "$env:SYSTEMROOT\\Temp\\VBoxGuestAdditions.iso"
44+
$mountResult = Mount-DiskImage -ImagePath $env:SYSTEMROOT\\Temp\\VBoxGuestAdditions.iso -PassThru
45+
$mountedIsoDrive = (Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Name -eq ($mountResult | Get-Volume).DriveLetter }).Root
46+
Set-Location (Join-Path -Path $mountedIsoDrive -ChildPath 'cert')
47+
.\\VBoxCertUtil.exe 'remove-trusted-publisher' 'vbox-sha1.cer' | Out-Null
48+
.\\VBoxCertUtil.exe 'remove-trusted-publisher' 'vbox-sha256.cer' | Out-Null
49+
.\\VBoxCertUtil.exe 'remove-trusted-publisher' 'vbox-sha256-r3.cer' | Out-Null
50+
.\\VBoxCertUtil.exe 'add-trusted-publisher' 'vbox*.cer' '--root' 'vbox*.cer' | Out-Null
51+
Set-Location $mountedIsoDrive
52+
Start-Process -NoNewWindow -Wait -FilePath .\\VBoxWindowsAdditions.exe -ArgumentList /S, /with_wddm, /xres=1024, /yres=768
53+
$guestAdditionVersion = & "C:\\Program Files\\Oracle\\VirtualBox Guest Additions\\VBoxControl.exe" -v
54+
Write-Host "***** Updated Guest Additions to version $guestAdditionVersion"
55+
Dismount-DiskImage -ImagePath "$env:SYSTEMROOT\\Temp\\VBoxGuestAdditions.iso"
56+
Remove-Item "$env:SYSTEMROOT\\Temp\\VBoxGuestAdditions.iso"
57+
Write-Host '****************************** Installing Docker'
58+
Write-Host '***** Installing Docker Engine'
59+
Install-PackageProvider NuGet -Force
60+
Install-Module DockerProvider -Force
61+
Install-Package Docker -ProviderName DockerProvider -Force
62+
Write-Host '***** Enabling named pipe and HTTP Docker APIs'
63+
Write-Host "Usage: Invoke-WebRequest -Uri 'http://localhost:4243/images/json' -UseBasicParsing"
64+
New-NetFirewallRule -DisplayName 'winrm' -Direction Inbound -LocalPort 5985 -Protocol TCP -Action Allow -Enabled True
65+
New-NetFirewallRule -DisplayName 'rdp' -Direction Inbound -LocalPort 3389 -Protocol TCP -Action Allow -Enabled True
66+
New-NetFirewallRule -DisplayName 'docker-http-api' -Direction Inbound -LocalPort 4243 -Protocol TCP -Action Allow -Enabled True
67+
New-NetFirewallRule -DisplayName 'rmq-mqttWithoutTls' -Direction Inbound -LocalPort 1883 -Protocol TCP -Action Allow -Enabled True
68+
New-NetFirewallRule -DisplayName 'rmq-epmd' -Direction Inbound -LocalPort 4369 -Protocol TCP -Action Allow -Enabled True
69+
New-NetFirewallRule -DisplayName 'rmq-amqpWithTls' -Direction Inbound -LocalPort 5671 -Protocol TCP -Action Allow -Enabled True
70+
New-NetFirewallRule -DisplayName 'rmq-amqpWithoutTls' -Direction Inbound -LocalPort 5672 -Protocol TCP -Action Allow -Enabled True
71+
New-NetFirewallRule -DisplayName 'rmq-mqttWithTls' -Direction Inbound -LocalPort 8883 -Protocol TCP -Action Allow -Enabled True
72+
New-NetFirewallRule -DisplayName 'rmq-managementWithTls' -Direction Inbound -LocalPort 15671 -Protocol TCP -Action Allow -Enabled True
73+
New-NetFirewallRule -DisplayName 'rmq-managementWithoutTls' -Direction Inbound -LocalPort 15672 -Protocol TCP -Action Allow -Enabled True
74+
New-NetFirewallRule -DisplayName 'rmq-stompOverWebsockets' -Direction Inbound -LocalPort 15674 -Protocol TCP -Action Allow -Enabled True
75+
New-NetFirewallRule -DisplayName 'rmq-mqttOverWebsockets' -Direction Inbound -LocalPort 15675 -Protocol TCP -Action Allow -Enabled True
76+
New-NetFirewallRule -DisplayName 'rmq-erlangDistribution' -Direction Inbound -LocalPort 25672 -Protocol TCP -Action Allow -Enabled True
77+
New-NetFirewallRule -DisplayName 'rmq-stompWithoutTls' -Direction Inbound -LocalPort 61613 -Protocol TCP -Action Allow -Enabled True
78+
New-NetFirewallRule -DisplayName 'rmq-stompWithTls' -Direction Inbound -LocalPort 61614 -Protocol TCP -Action Allow -Enabled True
79+
New-Item -Force -Type File -Path 'C:\\ProgramData\\docker\\config\\daemon.json' -Value '{ "hosts": ["npipe://", "tcp://0.0.0.0:4243"] }'
80+
SHELL
81+
end
82+
config.vm.provision :reload
83+
end

vagrant/windows/remote-connection.ps1

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
$username = 'machinename\vagrant'
2+
$password = ConvertTo-SecureString -AsPlainText -Force -String 'vagrant'
3+
$credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password
4+
5+
Test-WSMan -ComputerName 127.0.0.1 -Port 2201 -Authentication Negotiate -Credential $credentials
6+
Connect-WSMan -ComputerName 127.0.0.1 -Port 2201 -Authentication Negotiate -Credential $credentials
7+
Disconnect-WSMan -ComputerName 127.0.0.1
8+
9+
$session = New-PSSession -ComputerName 127.0.0.1 -Port 2201 -Credential $credentials -Authentication Negotiate
10+
Invoke-Command -ScriptBlock { hostname } -Session $session
11+
Enter-PSSession -Session $session
12+
Exit-PSSession
13+
Remove-PSSession $session
14+
15+
New-Item "C:\SharedWithHostOs" –type Directory
16+
Copy-Item -Path 'C:\hostFile' -Destination 'C:\VmFolderSharedWithHostOs' -ToSession $session
17+
Copy-Item -Path 'C:\VmFolderSharedWithHostOs\guestFile' -Destination 'C:\aFile' -FromSession $session

0 commit comments

Comments
 (0)