Initial commit with BSL
This commit is contained in:
1
docker/.dockerignore
Normal file
1
docker/.dockerignore
Normal file
@@ -0,0 +1 @@
|
||||
*.swp
|
||||
23
docker/Dockerfile
Normal file
23
docker/Dockerfile
Normal file
@@ -0,0 +1,23 @@
|
||||
FROM ottertune-base
|
||||
|
||||
ENV DJANGO_SETTINGS_MODULE=website.settings
|
||||
ENV C_FORCE_ROOT=true
|
||||
|
||||
RUN mkdir -p /app
|
||||
|
||||
COPY . /app
|
||||
|
||||
WORKDIR /app/server/website
|
||||
|
||||
COPY ./docker/credentials.py ./website/settings
|
||||
COPY ./docker/start.sh .
|
||||
COPY ./docker/createadmin.py .
|
||||
COPY ./docker/wait-for-it.sh .
|
||||
|
||||
RUN chmod +x ./*.sh
|
||||
|
||||
RUN sed s/'@localhost'/'@rabbitmq'/g ./website/settings/common.py > tmp \
|
||||
&& mv tmp ./website/settings/common.py
|
||||
|
||||
ENTRYPOINT ["./start.sh"]
|
||||
|
||||
31
docker/Dockerfile.base-centos-7
Normal file
31
docker/Dockerfile.base-centos-7
Normal file
@@ -0,0 +1,31 @@
|
||||
FROM centos:7
|
||||
|
||||
ARG GRADLE_VERSION=gradle-5.5.1
|
||||
|
||||
ENV GRADLE_HOME=/opt/${GRADLE_VERSION}
|
||||
ENV PATH=${GRADLE_HOME}/bin:${PATH}
|
||||
|
||||
COPY ./server/website/requirements.txt /
|
||||
|
||||
RUN yum update -y \
|
||||
&& yum install -y mariadb mariadb-devel \
|
||||
https://centos7.iuscommunity.org/ius-release.rpm \
|
||||
&& yum install -y gcc git MySQL-python openldap-devel \
|
||||
parallel python36u python36u-devel python36u-libs \
|
||||
python36u-pip python36u-tkinter rabbitmq-server \
|
||||
java-11-openjdk-devel wget which unzip curl \
|
||||
&& yum -y autoremove \
|
||||
&& yum clean metadata \
|
||||
&& yum clean all \
|
||||
&& ln -s `which python3.6` /usr/bin/python3 \
|
||||
&& ln -s `which pip3.6` /usr/bin/pip3 \
|
||||
&& wget https://services.gradle.org/distributions/${GRADLE_VERSION}-bin.zip \
|
||||
&& unzip ${GRADLE_VERSION}-bin.zip -d /opt \
|
||||
&& rm ${GRADLE_VERSION}-bin.zip \
|
||||
&& python3 --version \
|
||||
&& pip3 --version \
|
||||
&& javac --version \
|
||||
&& gradle --version \
|
||||
&& pip3 install -r /requirements.txt \
|
||||
&& rm /requirements.txt
|
||||
|
||||
24
docker/Dockerfile.base-ubuntu-18.04
Normal file
24
docker/Dockerfile.base-ubuntu-18.04
Normal file
@@ -0,0 +1,24 @@
|
||||
FROM ubuntu:18.04
|
||||
|
||||
ARG GRADLE_VERSION=gradle-5.5.1
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV GRADLE_HOME=/opt/${GRADLE_VERSION}
|
||||
ENV PATH=${GRADLE_HOME}/bin:${PATH}
|
||||
|
||||
COPY ./server/website/requirements.txt /
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y python3.6 python3-pip python3-tk \
|
||||
mysql-client libmysqlclient-dev python-mysqldb \
|
||||
openjdk-11-jdk git unzip wget curl \
|
||||
&& wget https://services.gradle.org/distributions/${GRADLE_VERSION}-bin.zip \
|
||||
&& unzip ${GRADLE_VERSION}-bin.zip -d /opt \
|
||||
&& rm ${GRADLE_VERSION}-bin.zip \
|
||||
&& python3 --version \
|
||||
&& pip3 --version \
|
||||
&& javac --version \
|
||||
&& gradle --version \
|
||||
&& pip3 install -r /requirements.txt \
|
||||
&& rm /requirements.txt
|
||||
|
||||
21
docker/Dockerfile.test
Normal file
21
docker/Dockerfile.test
Normal file
@@ -0,0 +1,21 @@
|
||||
FROM ottertune-base
|
||||
|
||||
ENV DJANGO_SETTINGS_MODULE=website.settings
|
||||
ENV C_FORCE_ROOT=true
|
||||
|
||||
RUN mkdir -p /app
|
||||
|
||||
COPY . /app
|
||||
|
||||
WORKDIR /app/server/website
|
||||
|
||||
RUN pip3 install codecov
|
||||
|
||||
COPY ./docker/credentials.py ./website/settings
|
||||
COPY ./docker/wait-for-it.sh .
|
||||
|
||||
RUN chmod +x ./*.sh
|
||||
|
||||
RUN sed s/'@localhost'/'@rabbitmq'/g ./website/settings/common.py > tmp \
|
||||
&& mv tmp ./website/settings/common.py
|
||||
|
||||
26
docker/createadmin.py
Normal file
26
docker/createadmin.py
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import django
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "website.settings")
|
||||
django.setup()
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
username = os.environ.get('ADMIN_USER', 'admin')
|
||||
password = os.environ.get('ADMIN_PASSWORD')
|
||||
email = os.environ.get('ADMIN_EMAIL', 'admin@example.com')
|
||||
|
||||
if password:
|
||||
if not User.objects.filter(username=username).exists():
|
||||
print(f"Creating '{username}' user...")
|
||||
User.objects.create_superuser(username=username,
|
||||
password=password,
|
||||
email=email)
|
||||
print(f"'{username}' user created!")
|
||||
else:
|
||||
print(f"'{username}' user already exists! Setting '{username}' password")
|
||||
u = User.objects.get(username=username)
|
||||
u.set_password(password)
|
||||
u.save()
|
||||
24
docker/credentials.py
Normal file
24
docker/credentials.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import secrets
|
||||
from os import environ as env
|
||||
|
||||
db_user = env.get('MYSQL_USER')
|
||||
db_pwd = env.get('MYSQL_PASSWORD')
|
||||
db_host = env.get('MYSQL_HOST')
|
||||
db_port = env.get('MYSQL_PORT', '3306')
|
||||
debug = env.get('DEBUG')
|
||||
|
||||
SECRET_KEY = secrets.token_hex(16)
|
||||
DATABASES = {
|
||||
'default': {'ENGINE': 'django.db.backends.mysql',
|
||||
'NAME': 'ottertune',
|
||||
'USER': db_user,
|
||||
'PASSWORD': db_pwd,
|
||||
'HOST': db_host,
|
||||
'PORT': db_port,
|
||||
'OPTIONS': {'init_command': 'SET sql_mode=\'STRICT_TRANS_TABLES\',innodb_strict_mode=1',}
|
||||
}
|
||||
}
|
||||
DEBUG = True
|
||||
ADMINS = ()
|
||||
MANAGERS = ADMINS
|
||||
ALLOWED_HOSTS = []
|
||||
85
docker/docker-compose.test.yml
Normal file
85
docker/docker-compose.test.yml
Normal file
@@ -0,0 +1,85 @@
|
||||
version: "3"
|
||||
services:
|
||||
base:
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: ./docker/Dockerfile.base-ubuntu-18.04
|
||||
image: ottertune-base
|
||||
container_name: ottertune-base
|
||||
labels:
|
||||
NAME: "ottertune-base"
|
||||
|
||||
test:
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: ./docker/Dockerfile.test
|
||||
image: ottertune-test
|
||||
container_name: ottertune-test
|
||||
expose:
|
||||
- "8000"
|
||||
ports:
|
||||
- "8000:8000"
|
||||
links:
|
||||
- mysql
|
||||
- rabbitmq
|
||||
depends_on:
|
||||
- mysql
|
||||
- rabbitmq
|
||||
environment:
|
||||
DEBUG: 'True'
|
||||
MYSQL_USER: 'root'
|
||||
MYSQL_PASSWORD: 'ottertune'
|
||||
MYSQL_HOST: 'mysql'
|
||||
MAX_DB_CONN_ATTEMPTS: 15
|
||||
labels:
|
||||
NAME: "ottertune-test"
|
||||
volumes:
|
||||
- media_data:/app/server/website/media
|
||||
networks:
|
||||
- ottertune-net
|
||||
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
container_name: mysql
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: 'ottertune'
|
||||
MYSQL_PASSWORD: 'ottertune'
|
||||
MYSQL_DATABASE: 'ottertune'
|
||||
expose:
|
||||
- "3306"
|
||||
ports:
|
||||
- "3306:3306"
|
||||
labels:
|
||||
NAME: "mysql"
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
networks:
|
||||
- ottertune-net
|
||||
|
||||
rabbitmq:
|
||||
image: "rabbitmq:3-management"
|
||||
container_name: rabbitmq
|
||||
restart: always
|
||||
hostname: "rabbitmq"
|
||||
environment:
|
||||
RABBITMQ_DEFAULT_USER: "guest"
|
||||
RABBITMQ_DEFAULT_PASS: "guest"
|
||||
RABBITMQ_DEFAULT_VHOST: "/"
|
||||
expose:
|
||||
- "15672"
|
||||
- "5672"
|
||||
ports:
|
||||
- "15672:15672"
|
||||
- "5672:5672"
|
||||
labels:
|
||||
NAME: "rabbitmq"
|
||||
networks:
|
||||
- ottertune-net
|
||||
volumes:
|
||||
mysql_data:
|
||||
media_data:
|
||||
networks:
|
||||
ottertune-net:
|
||||
driver: bridge
|
||||
|
||||
88
docker/docker-compose.yml
Normal file
88
docker/docker-compose.yml
Normal file
@@ -0,0 +1,88 @@
|
||||
version: "3"
|
||||
services:
|
||||
base:
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: ./docker/Dockerfile.base-ubuntu-18.04
|
||||
image: ottertune-base
|
||||
container_name: ottertune-base
|
||||
labels:
|
||||
NAME: "ottertune-base"
|
||||
|
||||
web:
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: ./docker/Dockerfile
|
||||
image: ottertune
|
||||
container_name: ottertune
|
||||
expose:
|
||||
- "8000"
|
||||
ports:
|
||||
- "8000:8000"
|
||||
links:
|
||||
- mysql
|
||||
- rabbitmq
|
||||
depends_on:
|
||||
- base
|
||||
- mysql
|
||||
- rabbitmq
|
||||
environment:
|
||||
DEBUG: 'True'
|
||||
ADMIN_PASSWORD: 'changeme'
|
||||
ADMIN_EMAIL: 'admin@example.com'
|
||||
MYSQL_USER: 'root'
|
||||
MYSQL_PASSWORD: 'ottertune'
|
||||
MYSQL_HOST: 'mysql'
|
||||
MAX_DB_CONN_ATTEMPTS: 15
|
||||
labels:
|
||||
NAME: "ottertune"
|
||||
volumes:
|
||||
- media_data:/app/server/website/media
|
||||
networks:
|
||||
- ottertune-net
|
||||
|
||||
mysql:
|
||||
image: mysql:5.7
|
||||
container_name: mysql
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: 'ottertune'
|
||||
MYSQL_PASSWORD: 'ottertune'
|
||||
MYSQL_DATABASE: 'ottertune'
|
||||
expose:
|
||||
- "3306"
|
||||
ports:
|
||||
- "3306:3306"
|
||||
labels:
|
||||
NAME: "mysql"
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
networks:
|
||||
- ottertune-net
|
||||
|
||||
rabbitmq:
|
||||
image: "rabbitmq:3-management"
|
||||
container_name: rabbitmq
|
||||
restart: always
|
||||
hostname: "rabbitmq"
|
||||
environment:
|
||||
RABBITMQ_DEFAULT_USER: "guest"
|
||||
RABBITMQ_DEFAULT_PASS: "guest"
|
||||
RABBITMQ_DEFAULT_VHOST: "/"
|
||||
expose:
|
||||
- "15672"
|
||||
- "5672"
|
||||
ports:
|
||||
- "15672:15672"
|
||||
- "5672:5672"
|
||||
labels:
|
||||
NAME: "rabbitmq"
|
||||
networks:
|
||||
- ottertune-net
|
||||
volumes:
|
||||
mysql_data:
|
||||
media_data:
|
||||
networks:
|
||||
ottertune-net:
|
||||
driver: bridge
|
||||
|
||||
14
docker/start.sh
Executable file
14
docker/start.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Wait for MySQL connection
|
||||
/bin/bash wait-for-it.sh
|
||||
|
||||
## Needs a connection to a DB so migrations go here
|
||||
python3 manage.py makemigrations website
|
||||
python3 manage.py migrate
|
||||
python3 createadmin.py
|
||||
|
||||
python3 manage.py celery worker --loglevel=info --pool=threads &
|
||||
python3 manage.py celerybeat --verbosity=2 --loglevel=info &
|
||||
python3 manage.py runserver 0.0.0.0:8000
|
||||
|
||||
19
docker/wait-for-it.sh
Executable file
19
docker/wait-for-it.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
# wait until MySQL is really available
|
||||
maxcounter=${MAX_DB_CONN_ATTEMPTS:-45}
|
||||
echo "Trying to connect to mysql, max attempts="$maxcounter
|
||||
|
||||
counter=1
|
||||
while ! mysql --host="$MYSQL_HOST" --protocol TCP -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "show databases;" > /dev/null 2>&1; do
|
||||
sleep 1
|
||||
counter=`expr $counter + 1`
|
||||
if [ $counter -gt $maxcounter ]; then
|
||||
>&2 echo "We have been waiting for MySQL too long already; failing."
|
||||
exit 1
|
||||
fi;
|
||||
done
|
||||
echo "-=------------------------------------------------------"
|
||||
echo "-=------------------------------------------------------"
|
||||
echo "Connected to MySQL!"
|
||||
echo "-=------------------------------------------------------"
|
||||
echo "-=------------------------------------------------------"
|
||||
Reference in New Issue
Block a user