diff --git a/Dockerfile b/Dockerfile index 2e9631c6a..57b2033b3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,20 @@ -FROM jumpserver/base-env-alpine:latest -MAINTAINER Jumpserver Team <ibuler@qq.com> +FROM jumpserver/alpine-py3:v3.4 +LABEL MAINTAINER Jumpserver Team <ibuler@qq.com> -#RUN apk add --update python gcc python-dev py-pip musl-dev linux-headers \ -# libffi-dev openssl-dev jpeg-dev redis && rm -rf /var/cache/apk/* COPY . /opt/jumpserver +COPY config_docker.py /opt/jumpserver/config.py WORKDIR /opt/jumpserver +RUN rm -r .git +RUN rm -f config.py -RUN cp config_example.py config.py -#RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple -RUN rm -f db.sqlite3 && cd utils && sh make_migrations.sh && sh init_db.sh +VOLUME /opt/jumpserver/data +VOLUME /opt/jumpserver/logs + +RUN ln -s /usr/bin/pip3 /usr/bin/pip +RUN ln -s /usr/bin/python3 /usr/bin/python +RUN cp config_docker.py config.py + +RUN pip install -r requirements/requirements.txt +RUN cd utils && sh make_migrations.sh && sh init_db.sh EXPOSE 8080 -CMD redis-server utils/redis.conf && python run_server.py +CMD python run_server.py diff --git a/Dockerfile-alpine-py3 b/Dockerfile-alpine-py3 new file mode 100644 index 000000000..4d4bbcd94 --- /dev/null +++ b/Dockerfile-alpine-py3 @@ -0,0 +1,5 @@ +FROM alpine:3.4 +LABEL MAINTAINER Jumpserver Team <ibuler@qq.com> + +RUN apk add --update python3 gcc python3-dev musl-dev linux-headers \ + libffi-dev openssl-dev jpeg-dev freetype-dev && rm -rf /var/cache/apk/* diff --git a/Dockerfile-base-env-alpine b/Dockerfile-base-env-alpine deleted file mode 100644 index 7fb4f8a7e..000000000 --- a/Dockerfile-base-env-alpine +++ /dev/null @@ -1,9 +0,0 @@ -FROM alpine:3.4 -MAINTAINER Jumpserver Team <ibuler@qq.com> - -RUN apk add --update python gcc python-dev py-pip musl-dev linux-headers \ - libffi-dev openssl-dev jpeg-dev freetype-dev redis && rm -rf /var/cache/apk/* -COPY ./requirements.txt /tmp -WORKDIR /tmp - -RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple \ No newline at end of file diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index a81ab5ab0..f5016f3e3 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -121,7 +121,7 @@ if CONFIG.DB_ENGINE == 'sqlite': DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': CONFIG.DB_NAME or os.path.join(BASE_DIR, 'db.sqlite3'), + 'NAME': CONFIG.DB_NAME or os.path.join(BASE_DIR, 'data', 'db.sqlite3'), } } else: diff --git a/config_docker.py b/config_docker.py new file mode 100644 index 000000000..2600e595a --- /dev/null +++ b/config_docker.py @@ -0,0 +1,149 @@ +""" + jumpserver.config + ~~~~~~~~~~~~~~~~~ + + Jumpserver project setting file + + :copyright: (c) 2014-2016 by Jumpserver Team. + :license: GPL v2, see LICENSE for more details. +""" +import os + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +LOG_DIR = os.path.join(BASE_DIR, 'logs') + + +class Config: + # Use it to encrypt or decrypt data + # SECURITY WARNING: keep the secret key used in production secret! + SECRET_KEY = os.environ.get('SECRET_KEY') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x' + + # How many line display every page, default 25 + DISPLAY_PER_PAGE = 25 + + # It's used to identify your site, When we send a create mail to user, we only know login url is /login/ + # But we should know the absolute url like: http://jms.jumpserver.org/login/, so SITE_URL is + # HTTP_PROTOCOL://HOST[:PORT] + SITE_URL = 'http://localhost' + + # Domain name, If set app email will set as it + DOMAIN_NAME = 'jumpserver.org' + + # Django security setting, if your disable debug model, you should setting that + ALLOWED_HOSTS = ['*'] + + # Development env open this, when error occur display the full process track, Production disable it + DEBUG = True + + # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/ + LOG_LEVEL = 'DEBUG' + + # Database setting, Support sqlite3, mysql, postgres .... + # See https://docs.djangoproject.com/en/1.10/ref/settings/#databases + + # Sqlite setting: + DB_ENGINE = 'sqlite3' + DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') + + # Mysql or postgres setting like: + # DB_ENGINE = 'mysql' + # DB_HOST = '127.0.0.1' + # DB_PORT = 3306 + # DB_USER = 'root' + # DB_PASSWORD = '' + # DB_NAME = 'jumpserver' + + # When Django start it will bind this host and port + # ./manage.py runserver 127.0.0.1:8080 + # Todo: Gunicorn or uwsgi run may be use it + HTTP_BIND_HOST = '0.0.0.0' + HTTP_LISTEN_PORT = 8080 + + # Use Redis as broker for celery and web socket + REDIS_HOST = '127.0.0.1' + REDIS_PORT = 6379 + REDIS_PASSWORD = '' + BROKER_URL = 'redis://%(password)s%(host)s:%(port)s/3' % { + 'password': REDIS_PASSWORD, + 'host': REDIS_HOST, + 'port': REDIS_PORT, + } + + # Api token expiration when create + TOKEN_EXPIRATION = 3600 + + # Session and csrf domain settings, If you deploy jumpserver,coco,luna standby, + # So than share cookie, and you need use a same top-level domain name + + # SESSION_COOKIE_DOMAIN = '.jms.com' + # CSRF_COOKIE_DOMAIN = '.jms.com' + SESSION_COOKIE_AGE = 3600*24 + + # Email SMTP setting, we only support smtp send mail + # EMAIL_HOST = 'smtp.qq.com' + # EMAIL_PORT = 25 + # EMAIL_HOST_USER = '' + # EMAIL_HOST_PASSWORD = '' + # EMAIL_USE_SSL = False # If port is 465, set True + # EMAIL_USE_TLS = False # If port is 587, set True + # EMAIL_SUBJECT_PREFIX = '[Jumpserver] ' + + CAPTCHA_TEST_MODE = False + + # You can set jumpserver usage url here, that when user submit wizard redirect to + USER_GUIDE_URL = '' + + def __init__(self): + pass + + def __getattr__(self, item): + return None + + +class DevelopmentConfig(Config): + DEBUG = True + DISPLAY_PER_PAGE = 20 + DB_ENGINE = 'sqlite' + DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') + EMAIL_HOST = 'smtp.exmail.qq.com' + EMAIL_PORT = 465 + EMAIL_HOST_USER = 'a@jumpserver.org' + EMAIL_HOST_PASSWORD = 'somepasswrd' + EMAIL_USE_SSL = True + EMAIL_USE_TLS = False + EMAIL_SUBJECT_PREFIX = '[Jumpserver] ' + SITE_URL = 'http://localhost:8080' + + +class ProductionConfig(Config): + DEBUG = False + DB_ENGINE = 'mysql' + DB_HOST = '127.0.0.1' + DB_PORT = 3306 + DB_USER = 'root' + DB_PASSWORD = '' + DB_NAME = 'jumpserver' + + +class DockerConfig(Config): + DB_ENGINE = 'sqlite' + DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') + REDIS_HOST = os.environ.get('REDIS_HOST') or 'redis' + EMAIL_HOST = os.environ.get('EMAIL_HOST') or 'smtp.qq.com' + EMAIL_PORT = int(os.environ.get('EMAIL_PORT', 465)) + EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER') or 'admin' + EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD') or 'somepasswrd' + EMAIL_USE_SSL = True if EMAIL_PORT == 465 else False + EMAIL_USE_TLS = True if EMAIL_PORT == 587 else False + EMAIL_SUBJECT_PREFIX = os.environ.get('EMAIL_SUBJECT_PREFIX') or '[Jumpserver] ' + SITE_URL = os.environ.get('SITE_URL') or 'http://localhost:8080' + + +config = { + 'development': DevelopmentConfig, + 'production': ProductionConfig, + 'default': DevelopmentConfig, + 'docker': DockerConfig, +} + +env = 'docker' diff --git a/config_example.py b/config_example.py index 770762f35..aa3bd5883 100644 --- a/config_example.py +++ b/config_example.py @@ -43,7 +43,7 @@ class Config: # Sqlite setting: DATABASE_ENGINE = 'sqlite3' - DB_NAME = os.path.join(BASE_DIR, 'db.sqlite3') + DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') # Mysql or postgres setting like: # DB_ENGINE = 'mysql' @@ -104,7 +104,7 @@ class DevelopmentConfig(Config): DEBUG = True DISPLAY_PER_PAGE = 20 DB_ENGINE = 'sqlite' - DB_NAME = os.path.join(BASE_DIR, 'db.sqlite3') + DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') EMAIL_HOST = 'smtp.exmail.qq.com' EMAIL_PORT = 465 EMAIL_HOST_USER = 'a@jumpserver.org' diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/requirements/requirements.txt b/requirements/requirements.txt index e6158a949..9f230656c 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -3,7 +3,7 @@ django-bootstrap3>=8.2.2 Pillow>=4.1.0 djangorestframework>=3.6.2 ForgeryPy -openpyxl>=2.4.0 +#openpyxl>=2.4.0 celery>=4.0.2 paramiko>=2.1.2 ansible>=2.2.2.0