use docker container for wings development

This commit is contained in:
Jakob Schrettenbrunner 2021-01-18 00:26:56 +01:00
parent 9664a6a632
commit 5e1eb7d200
7 changed files with 116 additions and 33 deletions

90
Vagrantfile vendored
View File

@ -1,5 +1,6 @@
require 'yaml'
require 'pathname'
require 'pp'
["vagrant-vbguest", "vagrant-hostmanager"].each do |plugin|
unless Vagrant.has_plugin?(plugin)
@ -20,6 +21,15 @@ Vagrant.configure("2") do |config|
config.hostmanager.manage_guest = false
config.hostmanager.ignore_private_ip = false
config.hostmanager.include_offline = true
config.hostmanager.ip_resolver = proc do |vm, resolving_vm|
if vm.provider_name == :docker
id = vm.provider.to_s.split[1][1..-2]
if id != "ne" # aka. we have a valid id
nwInfo = vm.provider.driver.inspect_container(id)["NetworkSettings"]
return nwInfo["IPAddress"]
end
end
end
config.vm.define "app", primary: true do |app|
app.vm.hostname = "pterodactyl.test"
@ -30,6 +40,7 @@ Vagrant.configure("2") do |config|
app.vm.network "forwarded_port", guest: 443, host: 443
app.vm.network "forwarded_port", guest: 8080, host: 8080
app.vm.network "forwarded_port", guest: 8081, host: 8081
app.vm.network :private_network, type: "dhcp"
app.ssh.insert_key = true
app.ssh.username = "vagrant"
@ -39,9 +50,7 @@ Vagrant.configure("2") do |config|
d.image = "ghcr.io/pterodactyl/development/panel"
d.create_args = [
"-it",
"--add-host=host.pterodactyl.test:172.17.0.1",
"--add-host=daemon.pterodactyl.test:192.168.50.4",
"--add-host=wings.pterodactyl.test:192.168.50.3",
"--add-host=host.pterodactyl.test:172.18.0.1",
]
d.ports = ["80:80", "443:443", "8080:8080", "8081:8081"]
d.name = "pterodev_app"
@ -82,23 +91,69 @@ Vagrant.configure("2") do |config|
config.vm.define "wings", autostart: false do |wings|
wings.vm.hostname = "wings.pterodactyl.test"
wings.vm.box = "bento/ubuntu-18.04"
wings.vm.network :private_network, type: "dhcp"
wings.vm.provider "virtualbox" do |v|
v.memory = config("wings.memory", 2048)
v.cpus = config("wings.cpus", 2)
v.customize ["modifyvm", :id, "--cpuexecutioncap", "75"]
end
wings.ssh.insert_key = true
wings.ssh.username = "vagrant"
wings.ssh.password = "vagrant"
wings.vm.provider "docker" do |d|
d.build_dir = "#{vagrant_root}/build"
d.build_args = "-f=build/Dockerfile-wings"
d.create_args = [
"-it",
"--add-host=host.pterodactyl.test:172.18.0.1",
"-e", "DOCKER_CERT_PATH=/certs/client",
"-e", "DOCKER_TLS_VERIFY=true",
"-e", "DOCKER_HOST=wings-docker.pterodactyl.test:2376"
]
wings.vm.synced_folder ".", "/vagrant", disabled: true
wings.vm.synced_folder "#{vagrant_root}/code/wings", "/home/vagrant/wings", owner: "vagrant", group: "vagrant"
wings.vm.synced_folder "#{vagrant_root}/code/sftp-server", "/home/vagrant/sftp-server", owner: "vagrant", group: "vagrant"
wings.vm.synced_folder "#{vagrant_root}/.data/certificates", "/etc/ssl/pterodactyl", owner: "vagrant", group: "vagrant"
d.name = "pterodev_wings"
wings.vm.network :private_network, ip: "192.168.50.3"
d.volumes = [
"#{vagrant_root}/code/wings:/home/vagrant/wings",
"#{vagrant_root}/.data/certificates:/etc/ssl/pterodactyl",
"#{vagrant_root}/.data/wings/etc:/etc/pterodactyl",
"#{vagrant_root}/.data/wings/lib:/var/lib/pterodactyl",
"#{vagrant_root}/.data/wings/tmp:/tmp",
"#{vagrant_root}/.data/wings/docker:/var/lib/docker",
"#{vagrant_root}/.data/wings/docker_certs:/certs"
]
d.remains_running = true
d.has_ssh = true
end
wings.vm.provision "provision", type: "shell", path: "#{vagrant_root}/scripts/provision_wings.sh"
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
wings.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
config.vm.define "wings-docker", autostart: false do |wings_docker|
wings_docker.vm.hostname = "wings-docker.pterodactyl.test"
wings_docker.vm.network :private_network, type: "dhcp"
wings_docker.vm.provider "docker" do |d|
d.image = "docker:dind"
d.create_args = [
"-it",
"--privileged",
"-e", "DOCKER_TLS_CERTDIR=/certs"
]
d.name = "pterodev_wings_docker"
d.volumes = [
"#{vagrant_root}/.data/wings/lib:/var/lib/pterodactyl",
"#{vagrant_root}/.data/wings/tmp:/tmp",
"#{vagrant_root}/.data/wings/docker:/var/lib/docker",
"#{vagrant_root}/.data/wings/docker_certs:/certs"
]
d.remains_running = true
end
# wings.vm.provision "provision", type: "shell", path: "#{vagrant_root}/scripts/provision_wings.sh"
# config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
config.vm.define "daemon", autostart: false do |daemon|
@ -121,6 +176,7 @@ Vagrant.configure("2") do |config|
docs.vm.network "forwarded_port", guest: 80, host: 9090
docs.vm.network "forwarded_port", guest: 9091, host: 9091
docs.vm.network :private_network, type: "dhcp"
docs.ssh.insert_key = true
docs.ssh.username = "vagrant"
@ -150,6 +206,7 @@ Vagrant.configure("2") do |config|
mysql.vm.synced_folder ".", "/vagrant", disabled: true
mysql.vm.network "forwarded_port", guest: 3306, host: 33060
mysql.vm.network :private_network, type: "dhcp"
mysql.vm.provider "docker" do |d|
d.image = "mysql:8"
@ -178,6 +235,7 @@ Vagrant.configure("2") do |config|
chrome.vm.network "forwarded_port", guest: 4444, host: 4444
chrome.vm.network "forwarded_port", guest: 5900, host: 5900
chrome.vm.network :private_network, type: "dhcp"
chrome.vm.provider "docker" do |d|
d.image = "selenium/standalone-chrome-debug:3.12.0-boron"
@ -195,6 +253,7 @@ Vagrant.configure("2") do |config|
mh.vm.network "forwarded_port", guest: 1025, host: 1025
mh.vm.network "forwarded_port", guest: 8025, host: 8025
mh.vm.network :private_network, type: "dhcp"
mh.vm.provider "docker" do |d|
d.image = "mailhog/mailhog"
@ -209,6 +268,7 @@ Vagrant.configure("2") do |config|
redis.vm.synced_folder ".", "/vagrant", disabled: true
redis.vm.network "forwarded_port", guest: 6379, host: 6379
redis.vm.network :private_network, type: "dhcp"
redis.vm.provider "docker" do |d|
d.image = "redis:5-alpine"

View File

@ -12,7 +12,7 @@ ENV DEBIAN_FRONTEND=noninteractive \
RUN apt -y update \
&& apt -y upgrade \
&& apt -y --no-install-recommends install software-properties-common gpg-agent sudo openssh-server locales curl iproute2 lsb-release git \
&& apt -y --no-install-recommends install software-properties-common gpg-agent sudo openssh-server locales curl iproute2 lsb-release git nano \
&& sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& locale-gen \
&& useradd -m -s /bin/bash -p $(echo "vagrant" | openssl passwd -1 -stdin) vagrant \

View File

@ -9,8 +9,7 @@ RUN curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list \
&& sudo add-apt-repository -y ppa:ondrej/php \
&& sudo apt -y update \
&& sudo apt -y upgrade \
&& sudo apt -y --no-install-recommends install software-properties-common \
&& sudo apt -y --no-install-recommends install \
php7.4 \
php7.4-cli \
php7.4-gd \
@ -27,7 +26,6 @@ RUN curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - \
nginx \
tar \
unzip \
git \
supervisor \
cron \
nodejs \

15
build/Dockerfile-wings Normal file
View File

@ -0,0 +1,15 @@
FROM ghcr.io/pterodactyl/development/base
ENV DEBIAN_FRONTEND=noninteractive \
NOTVISIBLE="in users profile"
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \
&& sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
&& sudo add-apt-repository ppa:longsleep/golang-backports \
&& sudo apt -y update \
&& sudo apt -y --no-install-recommends install golang-go tar zip unzip make gcc g++ docker-ce-cli \
&& sudo rm -rf /var/lib/apt/lists/*
EXPOSE 22
ENTRYPOINT sudo su -c "service ssh start && /bin/bash"

4
scripts/build_images.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
docker build -f build/Dockerfile-base -t ghcr.io/pterodactyl/development/base build
docker build -f build/Dockerfile-panel -t ghcr.io/pterodactyl/development/panel build
docker build -f build/Dockerfile-wings -t ghcr.io/pterodactyl/development/wings build

View File

@ -1,22 +1,22 @@
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
# Add Docker's GPG key and configure the repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# # Add Docker's GPG key and configure the repository
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Add support for easily fetching the latest version of Go
add-apt-repository ppa:longsleep/golang-backports
# # Add support for easily fetching the latest version of Go
# add-apt-repository ppa:longsleep/golang-backports
# Perform the installation of the required software.
apt -y update
apt -y --no-install-recommends install tar zip unzip make gcc g++ python docker-ce docker-ce-cli containerd.io golang-go
# # Perform the installation of the required software.
# apt -y update
# apt -y --no-install-recommends install tar zip unzip make gcc g++ python docker-ce docker-ce-cli containerd.io golang-go
# Configure the vagrant user to have permission to use Docker.
usermod -aG docker vagrant
# # Configure the vagrant user to have permission to use Docker.
# usermod -aG docker vagrant
# Ensure docker is started and will continue to start up.
systemctl enable docker --now
# # Ensure docker is started and will continue to start up.
# systemctl enable docker --now
# Install ctop for easy container metrics visualization.
curl -fsSL https://github.com/bcicen/ctop/releases/download/v0.7.1/ctop-0.7.1-linux-amd64 -o /usr/local/bin/ctop
@ -29,12 +29,16 @@ cp /etc/ssl/pterodactyl/pterodactyl.test.pem /etc/letsencrypt/live/wings.pteroda
cp /etc/ssl/pterodactyl/pterodactyl.test-key.pem /etc/letsencrypt/live/wings.pterodactyl.test/privkey.pem
# create config directory
mkdir /etc/pterodactyl /var/log/pterodactyl
mkdir /etc/pterodactyl /var/log/pterodactyl /var/lib/pterodactyl
# ensure permissions are set correctly
chown -R vagrant:vagrant /home/vagrant /etc/pterodactyl /var/log/pterodactyl
chown -R vagrant:vagrant /home/vagrant /etc/pterodactyl /var/log/pterodactyl /var/lib/pterodactyl
# map pterodactyl.test to the host system
echo "$(ip route | grep default | cut -d' ' -f3,3) pterodactyl.test" >> /etc/hosts
echo DOCKER_CERT_PATH=/certs/client >> /etc/environment
echo DOCKER_TLS_VERIFY=true >> /etc/environment
echo DOCKER_HOST=tcp://wings-docker.pterodactyl.test:2376 >> /etc/environment
echo "done."

View File

@ -23,5 +23,7 @@ mv *pterodactyl.test*-key.pem .data/certificates/pterodactyl.test-key.pem
mv *pterodactyl.test*.pem .data/certificates/pterodactyl.test.pem
cp $(mkcert -CAROOT)/rootCA.pem .data/certificates/
mkdir -p .data/wings/{etc,tmp,lib}
# sudo gem install docker-sync
# docker-sync start