Commit 7ac9d6ff authored by Philippe Valfok's avatar Philippe Valfok

Adicionando pipenv para controle de dependencias, adicionando e configurando...

Adicionando pipenv para controle de dependencias, adicionando e configurando django-rq para tarefas em background, iniciando feature para criação dos domínios
parent 33902d64
*.ini
\ No newline at end of file
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /config
ADD /config/requirements/production.pip /config/
RUN pip install -r /config/production.pip
RUN mkdir /src;
# -- Install Pipenv:
RUN set -ex && pip install pipenv --upgrade
# -- Install Application into container:
RUN set -ex && mkdir /src
# -- Adding Compose Folder
ADD /compose/*.sh /
RUN chmod +x /*.sh
WORKDIR /src
# -- Adding Pipfiles
ADD Pipfile /
ADD Pipfile.lock /
# -- Install dependencies:
RUN set -ex && pipenv install --deploy --system
\ No newline at end of file
[[source]]
verify_ssl = true
name = "pypi"
url = "https://pypi.python.org/simple"
[dev-packages]
django-extensions = "*"
bpython = "*"
[packages]
django = "*"
dj-database-url = "*"
django-rq = "*"
django-solo = "*"
"psycopg2" = "*"
python-decouple = "*"
unipath = "*"
python-digitalocean = "*"
gunicorn = "*"
[requires]
python_version = "3.6"
{
"_meta": {
"hash": {
"sha256": "3cf09d52c00bece1036b2af1412bb627954f172bb539df46b3e46eca2d615507"
},
"host-environment-markers": {
"implementation_name": "cpython",
"implementation_version": "3.6.3",
"os_name": "posix",
"platform_machine": "x86_64",
"platform_python_implementation": "CPython",
"platform_release": "4.13.0-31-generic",
"platform_system": "Linux",
"platform_version": "#34~16.04.1-Ubuntu SMP Fri Jan 19 17:11:01 UTC 2018",
"python_full_version": "3.6.3",
"python_version": "3.6",
"sys_platform": "linux"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
]
},
"default": {
"certifi": {
"hashes": [
"sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296",
"sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d"
],
"version": "==2018.1.18"
},
"chardet": {
"hashes": [
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691",
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
],
"version": "==3.0.4"
},
"click": {
"hashes": [
"sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d",
"sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
],
"version": "==6.7"
},
"dj-database-url": {
"hashes": [
"sha256:e16d94c382ea0564c48038fa7fe8d9c890ef1ab1a8ec4cb48e732c124b9482fd",
"sha256:a6832d8445ee9d788c5baa48aef8130bf61fdc442f7d9a548424d25cd85c9f08"
],
"version": "==0.4.2"
},
"django": {
"hashes": [
"sha256:52475f607c92035d4ac8fee284f56213065a4a6b25ed43f7e39df0e576e69e9f",
"sha256:d96b804be412a5125a594023ec524a2010a6ffa4d408e5482ab6ff3cb97ec12f"
],
"version": "==2.0.1"
},
"django-rq": {
"hashes": [
"sha256:88d590adc528256a90db2456164288d7fd1e3aa337b96766fb5e94d2a448a1c4",
"sha256:628216d036004418d3adea589f7e971134d554995f7692ebb28501dabb7fb31e"
],
"version": "==1.0.1"
},
"django-solo": {
"hashes": [
"sha256:b1206b9a9411b19a4354f7d7d245909a9ea7e9cd566b594363b5adce7dc13e5d"
],
"version": "==1.1.3"
},
"gunicorn": {
"hashes": [
"sha256:75af03c99389535f218cc596c7de74df4763803f7b63eb09d77e92b3956b36c6",
"sha256:eee1169f0ca667be05db3351a0960765620dad53f53434262ff8901b68a1b622"
],
"version": "==19.7.1"
},
"idna": {
"hashes": [
"sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4",
"sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"
],
"version": "==2.6"
},
"jsonpickle": {
"hashes": [
"sha256:cc25dc79571d4ad7db59d05ddb7de0d76a8d598cf6136e1dbeaa9361ebcfe749"
],
"version": "==0.9.5"
},
"psycopg2": {
"hashes": [
"sha256:594aa9a095de16614f703d759e10c018bdffeafce2921b8e80a0e8a0ebbc12e5",
"sha256:1cf5d84290c771eeecb734abe2c6c3120e9837eb12f99474141a862b9061ac51",
"sha256:0344b181e1aea37a58c218ccb0f0f771295de9aa25a625ed076e6996c6530f9e",
"sha256:25250867a4cd1510fb755ef9cb38da3065def999d8e92c44e49a39b9b76bc893",
"sha256:317612d5d0ca4a9f7e42afb2add69b10be360784d21ce4ecfbca19f1f5eadf43",
"sha256:9d6266348b15b4a48623bf4d3e50445d8e581da413644f365805b321703d0fac",
"sha256:ddca39cc55877653b5fcf59976d073e3d58c7c406ef54ae8e61ddf8782867182",
"sha256:988d2ec7560d42ef0ac34b3b97aad14c4f068792f00e1524fa1d3749fe4e4b64",
"sha256:7a9c6c62e6e05df5406e9b5235c31c376a22620ef26715a663cee57083b3c2ea",
"sha256:7a75565181e75ba0b9fb174b58172bf6ea9b4331631cfe7bafff03f3641f5d73",
"sha256:94e4128ba1ea56f02522fffac65520091a9de3f5c00da31539e085e13db4771b",
"sha256:92179bd68c2efe72924a99b6745a9172471931fc296f9bfdf9645b75eebd6344",
"sha256:b9358e203168fef7bfe9f430afaed3a2a624717a1d19c7afa7dfcbd76e3cd95c",
"sha256:009e0bc09a57dbef4b601cb8b46a2abad51f5274c8be4bba276ff2884cd4cc53",
"sha256:d3ac07240e2304181ffdb13c099840b5eb555efc7be9344503c0c03aa681de79",
"sha256:40fa5630cd7d237cd93c4d4b64b9e5ed9273d1cfce55241c7f9066f5db70629d",
"sha256:6c2f1a76a9ebd9ecf7825b9e20860139ca502c2bf1beabf6accf6c9e66a7e0c3",
"sha256:37f54452c7787dbdc0a634ca9773362b91709917f0b365ed14b831f03cbd34ba",
"sha256:8f5942a4daf1ffac42109dc4a72f786af4baa4fa702ede1d7c57b4b696c2e7d6",
"sha256:bf708455cd1e9fa96c05126e89a0c59b200d086c7df7bbafc7d9be769e4149a3",
"sha256:82c40ea3ac1555e0462803380609fbe8b26f52620f3d4f8eb480cfd8ceed8a14",
"sha256:207ba4f9125a0a4200691e82d5eee7ea1485708eabe99a07fc7f08696fae62f4",
"sha256:0cd4c848f0e9d805d531e44973c8f48962e20eb7fc0edac3db4f9dbf9ed5ab82",
"sha256:57baf63aeb2965ca4b52613ce78e968b6d2bde700c97f6a7e8c6c236b51ab83e",
"sha256:2954557393cfc9a5c11a5199c7a78cd9c0c793a047552d27b1636da50d013916",
"sha256:7c31dade89634807196a6b20ced831fbd5bec8a21c4e458ea950c9102c3aa96f",
"sha256:1286dd16d0e46d59fa54582725986704a7a3f3d9aca6c5902a7eceb10c60cb7e",
"sha256:697ff63bc5451e0b0db48ad205151123d25683b3754198be7ab5fcb44334e519",
"sha256:fc993c9331d91766d54757bbc70231e29d5ceb2d1ac08b1570feaa0c38ab9582",
"sha256:9d64fed2681552ed642e9c0cc831a9e95ab91de72b47d0cb68b5bf506ba88647",
"sha256:5c3213be557d0468f9df8fe2487eaf2990d9799202c5ff5cb8d394d09fad9b2a"
],
"version": "==2.7.3.2"
},
"python-decouple": {
"hashes": [
"sha256:1317df14b43efee4337a4aa02914bf004f010cd56d6c4bd894e6474ec8c4fe2d"
],
"version": "==3.1"
},
"python-digitalocean": {
"hashes": [
"sha256:06391cf0b253c8b4a5a10b3a4b7b7808b890a1d1e3b43d5ce3b5293a9c77af6b",
"sha256:7c8ac24e3e9570d6fa99adc520b9067c8819c267069bb7691e0bccaadbcd8d40"
],
"version": "==1.13.2"
},
"pytz": {
"hashes": [
"sha256:80af0f3008046b9975242012a985f04c5df1f01eed4ec1633d56cc47a75a6a48",
"sha256:feb2365914948b8620347784b6b6da356f31c9d03560259070b2f30cff3d469d",
"sha256:59707844a9825589878236ff2f4e0dc9958511b7ffaae94dc615da07d4a68d33",
"sha256:d0ef5ef55ed3d37854320d4926b04a4cb42a2e88f71da9ddfdacfde8e364f027",
"sha256:c41c62827ce9cafacd6f2f7018e4f83a6f1986e87bfd000b8cfbd4ab5da95f1a",
"sha256:8cc90340159b5d7ced6f2ba77694d946fc975b09f1a51d93f3ce3bb399396f94",
"sha256:dd2e4ca6ce3785c8dd342d1853dd9052b19290d5bf66060846e5dc6b8d6667f7",
"sha256:699d18a2a56f19ee5698ab1123bbcc1d269d061996aeb1eda6d89248d3542b82",
"sha256:fae4cffc040921b8a2d60c6cf0b5d662c1190fe54d718271db4eb17d44a185b7"
],
"version": "==2017.3"
},
"redis": {
"hashes": [
"sha256:8a1900a9f2a0a44ecf6e8b5eb3e967a9909dfed219ad66df094f27f7d6f330fb",
"sha256:a22ca993cea2962dbb588f9f30d0015ac4afcc45bee27d3978c0dbe9e97c6c0f"
],
"version": "==2.10.6"
},
"requests": {
"hashes": [
"sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b",
"sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
],
"version": "==2.18.4"
},
"rq": {
"hashes": [
"sha256:c1711bc43f298061166805763e6fa2353f03142e057e83f338d6e197a1be3157",
"sha256:31a5f04d1410111617ae78756b86fc6b0cf300fe7445843ea3758b86d9f67bc5"
],
"version": "==0.10.0"
},
"unipath": {
"hashes": [
"sha256:e6257e508d8abbfb6ddd8ec357e33589f1f48b1599127f23b017124d90b0fff7",
"sha256:09839adcc72e8a24d4f76d63656f30b5a1f721fc40c9bcd79d8c67bdd8b47dae"
],
"version": "==1.1"
},
"urllib3": {
"hashes": [
"sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
"sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
],
"version": "==1.22"
}
},
"develop": {
"blessings": {
"hashes": [
"sha256:26dbaf2f89c3e6dee11c10f7c0b85756ed75cf602b1bb7935b4efd8ed67a000f",
"sha256:466e43ff45723b272311de0437649df464b33b4daba7a54c69493212958e19c7",
"sha256:74919575885552e14bc24a68f8b539690bd1b5629180faa830b1a25b8c7fb6ea"
],
"version": "==1.6.1"
},
"bpython": {
"hashes": [
"sha256:e0e22c7f857967183f40ef08207dc54dd33492cbfdd962fa8a0a8d24eecac5b6",
"sha256:342d8577e0a8d75b657e5cc2075cdceeb852e2e5ee04a59c5ea7418980806ad5"
],
"version": "==0.17"
},
"certifi": {
"hashes": [
"sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296",
"sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d"
],
"version": "==2018.1.18"
},
"chardet": {
"hashes": [
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691",
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
],
"version": "==3.0.4"
},
"curtsies": {
"hashes": [
"sha256:8af7b0df83270a8d53c972b3436b7ac7813ffca27e6301c53b788372e3d862c2",
"sha256:ec4639df654357944c201abd0d791d9dfd3ac27ce4f90ba1c2991aaf07af92ee"
],
"version": "==0.2.11"
},
"django-extensions": {
"hashes": [
"sha256:f642e79990f365e82a7c906c91b0dabea533cdcdf2df7059a732e1e8648f2fa3",
"sha256:6fb35133b61e7295d43c1f7added952e5dfe689ae65662d2fb5fe7ea1a397eba"
],
"version": "==1.9.9"
},
"greenlet": {
"hashes": [
"sha256:96888e47898a471073b394ea641b7d675c1d054c580dd4a04a382bd34e67d89e",
"sha256:d2d5103f6cba131e1be660230018e21f276911d2b68b629ead1c5cb5e5472ac7",
"sha256:bc339de0e0969de5118d0b62a080a7611e2ba729a90f4a3ad78559c51bc5576d",
"sha256:b8ab98f8ae25938326dc4c21e3689a933531500ae4f3bfcefe36e3e25fda4dbf",
"sha256:416a3328d7e0a19aa1df3ec09524a109061fd7b80e010ef0dff9f695b4ac5e20",
"sha256:21232907c8c26838b16915bd8fbbf82fc70c996073464cc70981dd4a96bc841c",
"sha256:6803d8c6b235c861c50afddf00c7467ffbcd5ab960d137ff0f9c36f2cb11ee4b",
"sha256:76dab055476dd4dabb00a967b4df1990b25542d17eaa40a18f66971d10193e0b",
"sha256:70b9ff28921f5a3c03df4896ec8c55f5f94c593d7a79abd98b4c5c4a692ba873",
"sha256:7114b757b4146f4c87a0f00f1e58abd4c4729836679af0fc37266910a4a72eb0",
"sha256:0d90c709355ed13f16676f84e5a9cd67826a9f5c5143381c21e8fc3100ade1f1",
"sha256:ebae83b6247f83b1e8d887733dfa8046ce6e29d8b3e2a7380256e9de5c6ae55d",
"sha256:e841e3ece633acae5e2bf6102140a605ffee7d5d4921dca1625c5fdc0f0b3248",
"sha256:3e5e9be157ece49e4f97f3225460caf758ccb00f934fcbc5db34367cc1ff0aee",
"sha256:e77b708c37b652c7501b9f8f6056b23633c567aaa0d29edfef1c11673c64b949",
"sha256:0da1fc809c3bdb93fbacd0f921f461aacd53e554a7b7d4e9953ba09131c4206e",
"sha256:66fa5b101fcf4521138c1a29668074268d938bbb7de739c8faa9f92ea1f05e1f",
"sha256:e5451e1ce06b74a4861576c2db74405a4398c4809a105774550a9e52cfc8c4da",
"sha256:9c407aa6adfd4eea1232e81aa9f3cb3d9b955a9891c4819bf9b498c77efba14b",
"sha256:b56ac981f07b77e72ad5154278b93396d706572ea52c2fce79fee2abfcc8bfa6",
"sha256:e4c99c6010a5d153d481fdaf63b8a0782825c0721506d880403a3b9b82ae347e"
],
"version": "==0.4.12"
},
"idna": {
"hashes": [
"sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4",
"sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"
],
"version": "==2.6"
},
"pygments": {
"hashes": [
"sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d",
"sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc"
],
"version": "==2.2.0"
},
"requests": {
"hashes": [
"sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b",
"sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
],
"version": "==2.18.4"
},
"six": {
"hashes": [
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb",
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"
],
"version": "==1.11.0"
},
"typing": {
"hashes": [
"sha256:349b1f9c109c84b53ac79ac1d822eaa68fc91d63b321bd9392df15098f746f53",
"sha256:63a8255fe7c6269916baa440eb9b6a67139b0b97a01af632e7bd2842e1e02f15",
"sha256:d514bd84b284dd3e844f0305ac07511f097e325171f6cc4a20878d11ad771849"
],
"version": "==3.6.2"
},
"urllib3": {
"hashes": [
"sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
"sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
],
"version": "==1.22"
},
"wcwidth": {
"hashes": [
"sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c",
"sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e"
],
"version": "==0.1.7"
}
}
}
#!/bin/sh
python manage.py migrate
python manage.py collectstatic --no-input
gunicorn backend.wsgi:application -b 0.0.0.0:8000 --workers 3 --log-level=debug
\ No newline at end of file
#!/bin/sh
python manage.py rqworker default
\ No newline at end of file
amqp==2.2.2
billiard==3.5.0.3
blessings==1.6.1
bpython==0.17
certifi==2018.1.18
chardet==3.0.4
click==6.7
curtsies==0.2.11
dj-database-url==0.4.2
Django==2.0.1
django-rq==1.0.1
django-solo==1.1.3
greenlet==0.4.12
idna==2.6
jsonpickle==0.9.5
psycopg2==2.7.3.2
Pygments==2.2.0
python-decouple==3.1
python-digitalocean==1.13.2
python-dotenv==0.7.1
pytz==2017.3
redis==2.10.6
requests==2.18.4
rq==0.10.0
six==1.11.0
Unipath==1.1
urllib3==1.22
vine==1.1.4
wcwidth==0.1.7
amqp==2.2.2
billiard==3.5.0.3
blessings==1.6.1
bpython==0.17
certifi==2018.1.18
chardet==3.0.4
click==6.7
curtsies==0.2.11
dj-database-url==0.4.2
Django==2.0.1
django-rq==1.0.1
django-solo==1.1.3
greenlet==0.4.12
idna==2.6
jsonpickle==0.9.5
psycopg2==2.7.3.2
Pygments==2.2.0
python-decouple==3.1
python-digitalocean==1.13.2
python-dotenv==0.7.1
pytz==2017.3
redis==2.10.6
requests==2.18.4
rq==0.10.0
six==1.11.0
Unipath==1.1
urllib3==1.22
vine==1.1.4
wcwidth==0.1.7
version: '2'
services:
nginx:
image: nginx:latest
container_name: nginx_diario_manager
ports:
- "80:8000"
- "8000:8000"
volumes:
- ./src:/src
- ./config/nginx:/etc/nginx/conf.d
......@@ -13,22 +14,40 @@ services:
depends_on:
- web
restart: always
web:
build: .
container_name: django_diario_manager
command: bash -c "python manage.py migrate && python manage.py collectstatic --no-input && gunicorn backend.wsgi:application -b 0.0.0.0:8000 --workers 3 --log-level=debug"
command: /run_django.sh
volumes:
- ./src:/src
- static-data:/src/frontend/staticfiles
- media-data:/src/media
expose:
- "8000"
environment:
environment: &environment
DEBUG: "False"
DATABASE_URL: "postgres://postgres:infatecbdadmin@165.227.205.36/diario_manager"
SECRET_KEY: "=b+8s@l*rnqjd*=1rrsp!op82-qcgubm6oysex+thbu1+myen-"
restart: always
links:
- redis
rq:
build: .
command: /run_django_rq.sh
volumes:
- ./src:/src
environment: *environment
links:
- redis
depends_on:
- web
redis:
image: 'redis'
volumes:
static-data:
media-data:
redis:
\ No newline at end of file
python-3.6.2
\ No newline at end of file
# Generated by Django 2.0.1 on 2018-01-24 08:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0007_auto_20180123_1123'),
]
operations = [
migrations.AddField(
model_name='cliente',
name='droplet_ip',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='IP do droplet'),
),
migrations.AddField(
model_name='cliente',
name='droplet_status',
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AlterField(
model_name='cliente',
name='droplet_id',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='ID do droplet'),
),
]
# Generated by Django 2.0.1 on 2018-01-24 10:52
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('core', '0008_auto_20180124_0839'),
]
operations = [
migrations.RenameField(
model_name='configuracao',
old_name='user_data',
new_name='droplets_user_data',
),
]
......@@ -2,7 +2,9 @@ from django.db import models
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from backend.core.tasks import create_droplet_pipeline
from backend.core.tasks import configuracao_cliente_pipeline
import django_rq
class Cliente(models.Model):
......@@ -16,7 +18,9 @@ class Cliente(models.Model):
password = models.CharField(max_length=50)
# Informações do droplet
droplet_id = models.CharField(_('id do droplet'), max_length=50, blank=True, null=True)
droplet_id = models.CharField(_('ID do droplet'), max_length=50, blank=True, null=True)
droplet_ip = models.CharField(_('IP do droplet'), max_length=50, blank=True, null=True)
droplet_status = models.CharField(max_length=255, blank=True, null=True)
class Meta:
"""Meta definition for Cliente."""
......@@ -32,8 +36,22 @@ class Cliente(models.Model):
)
def save(self, *args, **kwargs):
"""
Sobrescrevendo método save para, logo após
da criação do Model, executar a task de
criação do droplet.
"""
adding = self._state.adding
super().save(*args, **kwargs)
if adding:
create_droplet_pipeline(self)
self.set_status("Iniciando configuração do cliente.")
django_rq.enqueue(configuracao_cliente_pipeline, self)
def set_status(self, text):
"""
Método para alterar status rapidamente enquanto
estiver executando tarefas em background
"""
self.droplet_status = text
self.save()
......@@ -9,12 +9,15 @@ from .chave_ssh import ChaveSSH
class Configuracao(SingletonModel):
"""Model definition for COnfigurations"""
token = models.CharField(max_length=255)
chave_ssh = models.TextField(blank=True)
droplets_region = models.CharField(_('Região dos Droplets'), max_length=50, default="nyc1")
droplets_image = models.CharField(_('Imagem/SO dos Droplets'), max_length=50, default="ubuntu-16-04-x64")
droplets_size = models.CharField(_('Tamanho dos Droplets'), max_length=50, default="s-1vcpu-1gb")
droplets_backups = models.BooleanField(default=False)
droplets_ipv6 = models.BooleanField(default=False)
user_data = models.TextField(blank=True)
droplets_user_data = models.TextField(blank=True)
def __str__(self):
"""String representations for configuration"""
......
import digitalocean
import os
import psycopg2
from decouple import config
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
from backend.core.models.configuracao import Configuracao
from urllib import parse
def criar_droplet(cliente):
"""
Função inicial para criação de droplets na digitalocean
:param cliente: Cliente que foi adicionado.
:type cliente: model.Cliente.
:returns: Retorna nada
:raises: Exception
"""
if cliente.droplet_id or cliente.droplet_ip:
raise Exception('Cleinte já possui um droplet.')
try:
cliente.set_status("Coletando informações para criação do droplet.")
configuracoes = Configuracao.get_solo()
droplet = digitalocean.Droplet(
token=configuracoes.token,
name="{}".format(cliente),
region=configuracoes.droplets_region,
image=configuracoes.droplets_image,
size_slug=configuracoes.droplets_size,
backups=configuracoes.droplets_backups,
ipv6=configuracoes.droplets_ipv6,
user_data=configuracoes.droplets_user_data,
ssh_keys=configuracoes.ssh_keys
)
cliente.set_status("Criando droplet.")
droplet.create()
except Exception as err:
msg = "Erro na criação do droplet. ({})".format(err)
cliente.set_status(msg)
raise Exception(msg)
actions = droplet.get_actions()
if actions:
for action in actions:
if action.type == 'create':
cliente.set_status("Aguardando disponibilização do droplet.")
action.wait()
continue
else:
error = "Erro. Nenhuma action encontrada."
cliente.set_status(error)
raise Exception(error)
def criar_banco(cliente):
"""
Função para criação do banco de dados do clinente
no mesmo servidor de bd em que esta aplicação está.
:param cliente: Cliente que foi adicionado.
:type cliente: model.Cliente.
:returns: Retorna nada
:raises: Exception
"""
cliente.set_status("Iniciando criação do banco de dados.")
try:
database_url = config('DATABASE_URL')
database_data = parse.urlparse(database_url)
con = psycopg2.connect(
dbname='postgres',
user=database_data.username,
host=database_data.hostname,
password=database_data.password
)
con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cur = con.cursor()
cur.execute(f"CREATE DATABASE {cliente.domain_name} ;")
except Exception as err:
msg = "Erro ao criar banco de dados. ({})".format(err)
cliente.set_status(msg)
raise Exception(msg)
def configuracao_cliente_pipeline(cliente):
"""
Pipeline para configuração do servidor do cliente.
:param cliente: Cliente que foi adicionado.
:type cliente: model.Cliente.
:returns: Retorna nada
:raises: Exception
"""
try:
criar_droplet(cliente)
criar_banco(cliente)
except Exception as err:
cliente.set_status(err)
......@@ -37,6 +37,9 @@ INSTALLED_APPS = [
'backend.core',
]
if DEBUG:
INSTALLED_APPS.insert(0, 'django_extensions')
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
......@@ -56,14 +59,28 @@ ROOT_URLCONF = 'backend.urls'
SITE_ID = 1
WSGI_APPLICATION = 'backend.wsgi.application'
# RQ_QUEUES = {
# 'default': {
# 'HOST': 'localhost',
# 'PORT': 6379,
# 'DB': 0
# }
# }
# RQ (Redis Queue)
# http://python-rq.org/
RQ_QUEUES = {
'default': {
'HOST': 'localhost',
'PORT': 6379,
'DB': 0
'URL': config('REDIS_URL', default='redis://redis/0'),
}
}
RQ = {
'host': 'redis',
'db': 0,
}
# Database
DATABASES = {
'default': config(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment