Last active
May 14, 2020 13:31
-
-
Save zommiommy/e2ef69f2464ead75e51576712e377281 to your computer and use it in GitHub Desktop.
Mongodb laboratory service
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
from mongo:latest | |
ENV DEBIAN_FRONTEND=noninteractive | |
# 32 bit | |
RUN dpkg --add-architecture i386 | |
RUN apt-get update -qyy && apt-get install -qyy apt-utils build-essential software-properties-common | |
########################################################### | |
# Basic devel tools | |
########################################################### | |
RUN apt-get install -qyy \ | |
zsh \ | |
python \ | |
python-pip \ | |
python-all-dev \ | |
virtualenvwrapper \ | |
nano \ | |
tmux \ | |
neovim \ | |
gdb \ | |
gdbserver \ | |
gdb-multiarch \ | |
git \ | |
make \ | |
gcc \ | |
g++ \ | |
flex \ | |
bison \ | |
wget \ | |
curl \ | |
cmake \ | |
unzip \ | |
gzip \ | |
netcat \ | |
pkg-config \ | |
libstdc++6:i386 \ | |
libffi-dev \ | |
binutils \ | |
strace \ | |
socat | |
RUN apt-get update && apt-get install -y openssh-server | |
RUN mkdir /var/run/sshd | |
RUN echo 'root:mongo2020' | chpasswd | |
RUN echo "ListenAddress 0.0.0.0\n" >> /etc/ssh/sshd_config | |
RUN echo "ListenAddress ::\n" >> /etc/ssh/sshd_config | |
RUN echo "PasswordAuthentication yes\n" >> /etc/ssh/sshd_config | |
RUN echo "PermitRootLogin yes\n" >> /etc/ssh/sshd_config | |
# SSH login fix. Otherwise user is kicked off after login | |
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd | |
ENV NOTVISIBLE "in users profile" | |
RUN echo "export VISIBLE=now" >> /etc/profile | |
CMD /usr/sbin/sshd -D -p $PORT -o ListenAddress=0.0.0.0 |
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
<html> | |
<head> | |
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> | |
<script> | |
function bake_cookie(name, value) { | |
var cookie = [name, '=', JSON.stringify(value)].join(''); | |
document.cookie = cookie; | |
} | |
function read_cookie(name) { | |
var result = document.cookie.match(new RegExp(name + '=([^;]+)')); | |
result && (result = JSON.parse(result[1])); | |
return result; | |
} | |
function delete_cookie(name) { | |
document.cookie = [name, '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.', window.location.host.toString()].join(''); | |
} | |
</script> | |
</head> | |
<body class="bg-light vsc-initialized"> | |
<div class="container"> | |
<div class="py-5 text-center"> | |
<h1>Mongodb Container Creation service</h1> | |
<p class="lead"> | |
This service create a container for the mongodb Lab. Once it's created you can access it by ssh.<br> | |
On windows you can use Putty which can be downloaded <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html">Here</a>.<br> | |
On Linux just run the command <code>ssh root@<IP> -p <PORT> </code> | |
</p> | |
</div> | |
<h4 class="mb-3">Ports already used for ssh</h4> | |
<p id="used_ports" class="lead"></p> | |
<script> | |
function used_ports(){ | |
var xmlHttp = new XMLHttpRequest(); | |
xmlHttp.open( "GET", "/list", false ); // false for synchronous request | |
xmlHttp.send( null ); | |
document.getElementById("used_ports").innerHTML = xmlHttp.responseText; | |
} | |
used_ports() | |
window.setInterval(used_ports, 1000); | |
</script> | |
<hr class="mb-4"> | |
<div class="row"> | |
<div class="col-md-6 mb-3"> | |
<h4 class="mb-3">Create new container</h4> | |
<div class="row"> | |
<div class="col-md-6 mb-3"> | |
<label>Password: </label> | |
<input type="text" id="password" placeholder="password" class="form-control"> | |
</div> | |
<div class="col-md-6 mb-3"> | |
<label>Port: </label> | |
<input type="text" id="port" value=""placeholder="port E.g 1337" class="form-control"> | |
</div> | |
</div> | |
<hr class="mb-4"> | |
<button onclick="send()" class="btn btn-primary btn-lg btn-block">create container</button> | |
<div id="result"></div> | |
</div> | |
<div class="col-md-6 mb-3"> | |
<h4 class="mb-3">My ports</h4> | |
<hr class="mb-4"> | |
<ul id="command_list" class="list-group mb-3"> | |
</ul> | |
</div> | |
</div> | |
<script> | |
var my_ports = read_cookie("my_ports"); | |
if (my_ports == null){ | |
my_ports = []; | |
} | |
var my_ports = my_ports.filter(function (el) { | |
return el != null; | |
}); | |
my_ports.forEach(update_my_ports) | |
function update_my_ports(port){ | |
if (port == "") | |
return; | |
var command = document.createElement("li"); | |
command.classList = ["list-group-item d-flex justify-content-between lh-condensed"]; | |
var text = document.createElement("h6"); | |
text.classList = ["my-0"]; | |
text.innerHTML = "<strong>"+port+"</strong>"; | |
command.appendChild(text); | |
document.getElementById("command_list").appendChild(command) | |
} | |
function send(){ | |
var xhr = new XMLHttpRequest(); | |
var url = "/"; | |
xhr.open("POST", url, true); | |
xhr.setRequestHeader("Content-Type", "application/json"); | |
xhr.onreadystatechange = function () { | |
if (xhr.readyState === 4 && xhr.status === 200) { | |
document.getElementById("result").innerHTML = xhr.responseText | |
used_ports() | |
update_my_ports(document.getElementById("port").value) | |
} | |
}; | |
var data = JSON.stringify({ | |
"pw": document.getElementById("password").value, | |
"port": document.getElementById("port").value | |
}); | |
my_ports.push(document.getElementById("port").value); | |
document.cookie = bake_cookie("my_ports", my_ports); | |
console.log(data); | |
xhr.send(data); | |
} | |
</script> | |
</div> | |
</body> | |
</html> |
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
import os | |
import json | |
import docker | |
from time import sleep | |
from flask import Flask, request | |
from pprint import pprint | |
app = Flask(__name__) | |
ROOT_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__))) | |
DOCKER_CLIENT = docker.from_env() | |
PASSWORD = "mongo2020" | |
used_ports = set() | |
print("BUILING ENV") | |
os.makedirs(f"{ROOT_DIR}/data", exist_ok=True) | |
DOCKER_CLIENT.images.build( | |
tag="mongo-env", | |
path=ROOT_DIR, | |
custom_context=False | |
) | |
print("DONE") | |
@app.route('/', methods=["POST"]) | |
def run(): | |
content = request.json | |
port = int(content["port"]) | |
pw = content["pw"] | |
if pw != PASSWORD: | |
return "Error, wrnong password" | |
if port in used_ports: | |
return "Error, Port in use" | |
used_ports.add(port) | |
home_dir = f"{ROOT_DIR}/data/{port}/home" | |
data_dir = f"{ROOT_DIR}/data/{port}/data" | |
os.makedirs(home_dir, exist_ok=True) | |
os.makedirs(data_dir, exist_ok=True) | |
DOCKER_CLIENT.containers.run("mongo-env", | |
detach=True, | |
volumes={ | |
home_dir:{ | |
"bind":"/home", | |
"mode":"rw" | |
}, | |
data_dir:{ | |
"bind":"/data", | |
"mode":"rw" | |
} | |
}, | |
environment=[f"PORT={port}"], | |
network_mode="host" | |
) | |
return "Done!" | |
@app.route('/list', methods=["GET"]) | |
def lista_porte_usate(): | |
return json.dumps(list(used_ports)) | |
@app.route('/', methods=["GET"]) | |
def index(): | |
with open("index.html") as f: | |
return f.read() |
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
#!/bin/bash | |
sudo FLASK_APP=docker_service.py flask run --host=0.0.0.0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment