Add docker support
This commit is contained in:
parent
b77c06257f
commit
4317b0ba5d
6
.gitignore
vendored
6
.gitignore
vendored
@ -3,14 +3,16 @@
|
|||||||
*.pot
|
*.pot
|
||||||
*.pyc
|
*.pyc
|
||||||
__pycache__/
|
__pycache__/
|
||||||
personalsite/settings.py
|
django/personalsite/settings.py
|
||||||
db.sqlite3
|
db.sqlite3
|
||||||
media
|
media
|
||||||
static
|
static
|
||||||
venv/
|
venv/
|
||||||
core/static/admin/
|
django/core/static/admin/
|
||||||
### Sass ###
|
### Sass ###
|
||||||
.sass-cache/
|
.sass-cache/
|
||||||
*.css.map
|
*.css.map
|
||||||
*.sass.map
|
*.sass.map
|
||||||
*.scss.map
|
*.scss.map
|
||||||
|
### Docker ###
|
||||||
|
config.env
|
||||||
|
@ -112,6 +112,12 @@ DATABASES = {
|
|||||||
$ python manage.py check --deploy
|
$ python manage.py check --deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- Make migrations
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ python manage.py makemigrations
|
||||||
|
```
|
||||||
|
|
||||||
- Migrate changes.
|
- Migrate changes.
|
||||||
|
|
||||||
```console
|
```console
|
||||||
|
35
config.env.example
Normal file
35
config.env.example
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#
|
||||||
|
# yt-local options
|
||||||
|
#
|
||||||
|
|
||||||
|
WEB_SITE_URL='http://example.org'
|
||||||
|
APP_DEBUG=True
|
||||||
|
SECRET_KEY=
|
||||||
|
|
||||||
|
#
|
||||||
|
# DataBase
|
||||||
|
#
|
||||||
|
|
||||||
|
NAME_DB=personalsite
|
||||||
|
USER_DB=postgres
|
||||||
|
PASS_DB=postgres
|
||||||
|
HOST_DB=172.23.0.6
|
||||||
|
PORT_DB=5432
|
||||||
|
|
||||||
|
#
|
||||||
|
# E-mail options
|
||||||
|
#
|
||||||
|
|
||||||
|
EMAIL_HOST=smtp.example.com
|
||||||
|
EMAIL_HOST_USER=username
|
||||||
|
EMAIL_HOST_PASSWORD=password
|
||||||
|
EMAIL_HOST_PORT=587
|
||||||
|
EMAIL_USE_TLS=True
|
||||||
|
|
||||||
|
#
|
||||||
|
# Gunicorn options
|
||||||
|
#
|
||||||
|
|
||||||
|
GUNICORN_PORT_NUMBER=8080
|
||||||
|
GUNICORN_NUM_WORKERS=4
|
||||||
|
GUNICORN_TIMEOUT=120
|
@ -1,21 +0,0 @@
|
|||||||
## Hacking
|
|
||||||
|
|
||||||
## SASS to CSS
|
|
||||||
|
|
||||||
1. Requeriments:
|
|
||||||
|
|
||||||
```
|
|
||||||
gem install sass
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Generate CSS from SASS:
|
|
||||||
|
|
||||||
```
|
|
||||||
sass -t compressed --sourcemap=none sass/estilos.sass:css/estilos.min.css
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Show CSS to SASS live
|
|
||||||
|
|
||||||
```
|
|
||||||
sass --watch -t compressed --sourcemap=none sass/estilos.sass:css/estilos.min.css
|
|
||||||
```
|
|
1
core/static/core/css/estilos.min.css
vendored
1
core/static/core/css/estilos.min.css
vendored
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 46 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 19 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
@licstart The following is the entire license notice for the
|
|
||||||
JavaScript code in this page.
|
|
||||||
|
|
||||||
Copyleft 2021 | Heckyel
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
@licend The above is the entire license notice
|
|
||||||
for the JavaScript code in this page.
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function main() {
|
|
||||||
'use strict';
|
|
||||||
document.addEventListener('DOMContentLoaded', (event) => {
|
|
||||||
// buttons
|
|
||||||
const $aboutUs = document.getElementById('btn-acerca-de');
|
|
||||||
const $project = document.getElementById('btn-trabajos');
|
|
||||||
const $contact = document.getElementById('btn-contacto');
|
|
||||||
|
|
||||||
// sections
|
|
||||||
const $acercaDe = document.getElementById('acerca-de');
|
|
||||||
const $trabajos = document.getElementById('trabajos');
|
|
||||||
const $contacto = document.getElementById('contacto');
|
|
||||||
|
|
||||||
$aboutUs.addEventListener('click', (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
window.scroll({top: 240, behavior: 'smooth'});
|
|
||||||
location.hash = $aboutUs.hash;
|
|
||||||
});
|
|
||||||
|
|
||||||
$project.addEventListener('click', (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
$trabajos.scrollIntoView({
|
|
||||||
behavior: "smooth",
|
|
||||||
block: "start",
|
|
||||||
inline: "nearest"
|
|
||||||
});
|
|
||||||
location.hash = $project.hash;
|
|
||||||
});
|
|
||||||
|
|
||||||
$contact.addEventListener('click', (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
$contacto.scrollIntoView({
|
|
||||||
behavior: "smooth",
|
|
||||||
block: "start",
|
|
||||||
inline: "nearest"
|
|
||||||
});
|
|
||||||
location.hash = $contact.hash;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}());
|
|
@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
@licstart The following is the entire license notice for the
|
|
||||||
JavaScript code in this page.
|
|
||||||
|
|
||||||
Copyleft 2021 | Heckyel
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
@licend The above is the entire license notice
|
|
||||||
for the JavaScript code in this page.
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function main(){
|
|
||||||
'use strict';
|
|
||||||
var formulario = document.getElementById('formulario'),
|
|
||||||
nombre = formulario.name,
|
|
||||||
correo = formulario.email,
|
|
||||||
mensaje = formulario.content,
|
|
||||||
error = document.getElementById('error');
|
|
||||||
|
|
||||||
function validarNombre(e){
|
|
||||||
if(nombre.value == '' || nombre.value == null){
|
|
||||||
console.info('Por favor completa el nombre');
|
|
||||||
error.style.display = 'block';
|
|
||||||
error.innerHTML = error.innerHTML + '<li>Por favor completa el nombre</li>';
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function validarCorreo(e){
|
|
||||||
if(correo.value == '' || correo.value == null){
|
|
||||||
console.info('Por favor completa el correo');
|
|
||||||
error.style.display = 'block';
|
|
||||||
error.innerHTML = error.innerHTML + '<li>Por favor completa el correo</li>';
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function validarMensaje(e){
|
|
||||||
if(mensaje.value == '' || mensaje.value == null){
|
|
||||||
console.info('Por favor completa el mensaje');
|
|
||||||
error.style.display = 'block';
|
|
||||||
error.innerHTML = error.innerHTML + '<li>Por favor completa el mensaje</li>';
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function validarFormulario(e){
|
|
||||||
error.innerHTML = '';
|
|
||||||
error.style.display = 'none';
|
|
||||||
validarNombre(e);
|
|
||||||
validarCorreo(e);
|
|
||||||
validarMensaje(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
formulario.addEventListener('submit', validarFormulario);
|
|
||||||
}());
|
|
@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "normalize-css",
|
|
||||||
"description": "A modern alternative to CSS resets",
|
|
||||||
"main": "normalize.css",
|
|
||||||
"license": "MIT",
|
|
||||||
"ignore": [
|
|
||||||
"CHANGELOG.md",
|
|
||||||
"CONTRIBUTING.md",
|
|
||||||
"package.json",
|
|
||||||
"README.md",
|
|
||||||
"test.html"
|
|
||||||
],
|
|
||||||
"homepage": "https://github.com/necolas/normalize.css",
|
|
||||||
"version": "7.0.0",
|
|
||||||
"_release": "7.0.0",
|
|
||||||
"_resolution": {
|
|
||||||
"type": "version",
|
|
||||||
"tag": "7.0.0",
|
|
||||||
"commit": "cd79468238394513cf481338c9dcb9aa8bd9b59c"
|
|
||||||
},
|
|
||||||
"_source": "https://github.com/necolas/normalize.css.git",
|
|
||||||
"_target": "~7.0.0",
|
|
||||||
"_originalSource": "normalize-css"
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
normalize.css linguist-vendored=false
|
|
||||||
test.html linguist-vendored
|
|
@ -1 +0,0 @@
|
|||||||
node_modules
|
|
@ -1,3 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- stable
|
|
@ -1,21 +0,0 @@
|
|||||||
# The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright © Nicolas Gallagher and Jonathan Neal
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "normalize-css",
|
|
||||||
"description": "A modern alternative to CSS resets",
|
|
||||||
"main": "normalize.css",
|
|
||||||
"license": "MIT",
|
|
||||||
"ignore": [
|
|
||||||
"CHANGELOG.md",
|
|
||||||
"CONTRIBUTING.md",
|
|
||||||
"package.json",
|
|
||||||
"README.md",
|
|
||||||
"test.html"
|
|
||||||
]
|
|
||||||
}
|
|
447
core/static/core/lib/normalize-css/normalize.css
vendored
447
core/static/core/lib/normalize-css/normalize.css
vendored
@ -1,447 +0,0 @@
|
|||||||
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
|
|
||||||
|
|
||||||
/* Document
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct the line height in all browsers.
|
|
||||||
* 2. Prevent adjustments of font size after orientation changes in
|
|
||||||
* IE on Windows Phone and in iOS.
|
|
||||||
*/
|
|
||||||
|
|
||||||
html {
|
|
||||||
line-height: 1.15; /* 1 */
|
|
||||||
-ms-text-size-adjust: 100%; /* 2 */
|
|
||||||
-webkit-text-size-adjust: 100%; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sections
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the margin in all browsers (opinionated).
|
|
||||||
*/
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct display in IE 9-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
article,
|
|
||||||
aside,
|
|
||||||
footer,
|
|
||||||
header,
|
|
||||||
nav,
|
|
||||||
section {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Correct the font size and margin on `h1` elements within `section` and
|
|
||||||
* `article` contexts in Chrome, Firefox, and Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 2em;
|
|
||||||
margin: 0.67em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Grouping content
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct display in IE 9-.
|
|
||||||
* 1. Add the correct display in IE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
figcaption,
|
|
||||||
figure,
|
|
||||||
main { /* 1 */
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct margin in IE 8.
|
|
||||||
*/
|
|
||||||
|
|
||||||
figure {
|
|
||||||
margin: 1em 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Add the correct box sizing in Firefox.
|
|
||||||
* 2. Show the overflow in Edge and IE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
hr {
|
|
||||||
box-sizing: content-box; /* 1 */
|
|
||||||
height: 0; /* 1 */
|
|
||||||
overflow: visible; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
|
||||||
* 2. Correct the odd `em` font sizing in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
pre {
|
|
||||||
font-family: monospace, monospace; /* 1 */
|
|
||||||
font-size: 1em; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Text-level semantics
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Remove the gray background on active links in IE 10.
|
|
||||||
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
|
|
||||||
*/
|
|
||||||
|
|
||||||
a {
|
|
||||||
background-color: transparent; /* 1 */
|
|
||||||
-webkit-text-decoration-skip: objects; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Remove the bottom border in Chrome 57- and Firefox 39-.
|
|
||||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
abbr[title] {
|
|
||||||
border-bottom: none; /* 1 */
|
|
||||||
text-decoration: underline; /* 2 */
|
|
||||||
text-decoration: underline dotted; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
|
|
||||||
*/
|
|
||||||
|
|
||||||
b,
|
|
||||||
strong {
|
|
||||||
font-weight: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct font weight in Chrome, Edge, and Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
b,
|
|
||||||
strong {
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
|
||||||
* 2. Correct the odd `em` font sizing in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
code,
|
|
||||||
kbd,
|
|
||||||
samp {
|
|
||||||
font-family: monospace, monospace; /* 1 */
|
|
||||||
font-size: 1em; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct font style in Android 4.3-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
dfn {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct background and color in IE 9-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
mark {
|
|
||||||
background-color: #ff0;
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct font size in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
small {
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prevent `sub` and `sup` elements from affecting the line height in
|
|
||||||
* all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
sub,
|
|
||||||
sup {
|
|
||||||
font-size: 75%;
|
|
||||||
line-height: 0;
|
|
||||||
position: relative;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub {
|
|
||||||
bottom: -0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
sup {
|
|
||||||
top: -0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Embedded content
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct display in IE 9-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
audio,
|
|
||||||
video {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct display in iOS 4-7.
|
|
||||||
*/
|
|
||||||
|
|
||||||
audio:not([controls]) {
|
|
||||||
display: none;
|
|
||||||
height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the border on images inside links in IE 10-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
img {
|
|
||||||
border-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hide the overflow in IE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
svg:not(:root) {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Forms
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Change the font styles in all browsers (opinionated).
|
|
||||||
* 2. Remove the margin in Firefox and Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button,
|
|
||||||
input,
|
|
||||||
optgroup,
|
|
||||||
select,
|
|
||||||
textarea {
|
|
||||||
font-family: sans-serif; /* 1 */
|
|
||||||
font-size: 100%; /* 1 */
|
|
||||||
line-height: 1.15; /* 1 */
|
|
||||||
margin: 0; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the overflow in IE.
|
|
||||||
* 1. Show the overflow in Edge.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button,
|
|
||||||
input { /* 1 */
|
|
||||||
overflow: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
|
||||||
* 1. Remove the inheritance of text transform in Firefox.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button,
|
|
||||||
select { /* 1 */
|
|
||||||
text-transform: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
|
|
||||||
* controls in Android 4.
|
|
||||||
* 2. Correct the inability to style clickable types in iOS and Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button,
|
|
||||||
html [type="button"], /* 1 */
|
|
||||||
[type="reset"],
|
|
||||||
[type="submit"] {
|
|
||||||
-webkit-appearance: button; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the inner border and padding in Firefox.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button::-moz-focus-inner,
|
|
||||||
[type="button"]::-moz-focus-inner,
|
|
||||||
[type="reset"]::-moz-focus-inner,
|
|
||||||
[type="submit"]::-moz-focus-inner {
|
|
||||||
border-style: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restore the focus styles unset by the previous rule.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button:-moz-focusring,
|
|
||||||
[type="button"]:-moz-focusring,
|
|
||||||
[type="reset"]:-moz-focusring,
|
|
||||||
[type="submit"]:-moz-focusring {
|
|
||||||
outline: 1px dotted ButtonText;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Correct the padding in Firefox.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
padding: 0.35em 0.75em 0.625em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct the text wrapping in Edge and IE.
|
|
||||||
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
|
||||||
* 3. Remove the padding so developers are not caught out when they zero out
|
|
||||||
* `fieldset` elements in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
legend {
|
|
||||||
box-sizing: border-box; /* 1 */
|
|
||||||
color: inherit; /* 2 */
|
|
||||||
display: table; /* 1 */
|
|
||||||
max-width: 100%; /* 1 */
|
|
||||||
padding: 0; /* 3 */
|
|
||||||
white-space: normal; /* 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Add the correct display in IE 9-.
|
|
||||||
* 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
|
||||||
*/
|
|
||||||
|
|
||||||
progress {
|
|
||||||
display: inline-block; /* 1 */
|
|
||||||
vertical-align: baseline; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the default vertical scrollbar in IE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
textarea {
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Add the correct box sizing in IE 10-.
|
|
||||||
* 2. Remove the padding in IE 10-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
[type="checkbox"],
|
|
||||||
[type="radio"] {
|
|
||||||
box-sizing: border-box; /* 1 */
|
|
||||||
padding: 0; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Correct the cursor style of increment and decrement buttons in Chrome.
|
|
||||||
*/
|
|
||||||
|
|
||||||
[type="number"]::-webkit-inner-spin-button,
|
|
||||||
[type="number"]::-webkit-outer-spin-button {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct the odd appearance in Chrome and Safari.
|
|
||||||
* 2. Correct the outline style in Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
[type="search"] {
|
|
||||||
-webkit-appearance: textfield; /* 1 */
|
|
||||||
outline-offset: -2px; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
|
|
||||||
*/
|
|
||||||
|
|
||||||
[type="search"]::-webkit-search-cancel-button,
|
|
||||||
[type="search"]::-webkit-search-decoration {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct the inability to style clickable types in iOS and Safari.
|
|
||||||
* 2. Change font properties to `inherit` in Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
::-webkit-file-upload-button {
|
|
||||||
-webkit-appearance: button; /* 1 */
|
|
||||||
font: inherit; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Interactive
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add the correct display in IE 9-.
|
|
||||||
* 1. Add the correct display in Edge, IE, and Firefox.
|
|
||||||
*/
|
|
||||||
|
|
||||||
details, /* 1 */
|
|
||||||
menu {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add the correct display in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
summary {
|
|
||||||
display: list-item;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scripting
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct display in IE 9-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
canvas {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct display in IE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
template {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Hidden
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add the correct display in IE 10-.
|
|
||||||
*/
|
|
||||||
|
|
||||||
[hidden] {
|
|
||||||
display: none;
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>JavaScript license information</title>
|
|
||||||
<link rel="icon" href="./images/favicon.png" sizes="192x192" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<table id="jslicense-labels1">
|
|
||||||
<tr>
|
|
||||||
<td><a href="./js/formulario.js">formulario.js</a></td>
|
|
||||||
<td><a href="http://www.gnu.org/licenses/gpl-3.0.html">GNU-GPL-3.0-or-later</a></td>
|
|
||||||
<td><a href="./js/formulario.js">formulario.js</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><a href="./js/efectos.js">efectos.js</a></td>
|
|
||||||
<td><a href="http://www.gnu.org/licenses/gpl-3.0.html">GNU-GPL-3.0-or-later</a></td>
|
|
||||||
<td><a href="./js/efectos.js">efectos.js</a></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,244 +0,0 @@
|
|||||||
html
|
|
||||||
scroll-behavior: smooth
|
|
||||||
|
|
||||||
body
|
|
||||||
background: #fff
|
|
||||||
font-family: "liberation serif", "times new roman", calibri, carlito, sans-serif, serif
|
|
||||||
font-size: 16px
|
|
||||||
|
|
||||||
.contenedor
|
|
||||||
width: 90%
|
|
||||||
max-width: 1000px
|
|
||||||
margin: auto
|
|
||||||
overflow: hidden
|
|
||||||
|
|
||||||
/* ---- ---- HEADER ---- ---- */
|
|
||||||
|
|
||||||
header
|
|
||||||
background: url("./../images/BG.jpg") #68bdea
|
|
||||||
background-repeat: no-repeat
|
|
||||||
background-position: center
|
|
||||||
max-height: 600px
|
|
||||||
.menu
|
|
||||||
margin: 40px 0px
|
|
||||||
text-align: right
|
|
||||||
a
|
|
||||||
margin: 0px 20px
|
|
||||||
color: #fff
|
|
||||||
padding-bottom: 9px
|
|
||||||
display: inline-block
|
|
||||||
text-decoration: none
|
|
||||||
border-bottom: 2px solid transparent
|
|
||||||
font-size: 1rem
|
|
||||||
&:hover
|
|
||||||
border-bottom: 2px solid #fff
|
|
||||||
.contenedor-texto
|
|
||||||
display: flex
|
|
||||||
justify-content: center
|
|
||||||
align-content: center
|
|
||||||
margin: 190px 0px
|
|
||||||
.texto
|
|
||||||
border: 2px solid rgba(255, 255, 255, 0.5)
|
|
||||||
border-radius: 3px
|
|
||||||
display: inline-block
|
|
||||||
text-align: center
|
|
||||||
padding: 20px 60px
|
|
||||||
h1, h2
|
|
||||||
color: #fff
|
|
||||||
font-weight: 300
|
|
||||||
margin: 0px
|
|
||||||
.nombre
|
|
||||||
margin-bottom: 10px
|
|
||||||
font-size: 3.125rem
|
|
||||||
line-height: 50px
|
|
||||||
.profesion
|
|
||||||
font-size: 1.5rem
|
|
||||||
line-height: 25px
|
|
||||||
|
|
||||||
/* ---- ---- MAIN ---- ---- */
|
|
||||||
|
|
||||||
main
|
|
||||||
.contenedor
|
|
||||||
overflow: visible
|
|
||||||
.acerca-de
|
|
||||||
text-align: center
|
|
||||||
.foto
|
|
||||||
margin-top: -60px
|
|
||||||
img
|
|
||||||
vertical-align: top
|
|
||||||
border-radius: 50%
|
|
||||||
border: 5px solid rgba(255, 255, 255, 0.2)
|
|
||||||
.texto
|
|
||||||
color: #5a5a5a
|
|
||||||
font-weight: 600
|
|
||||||
font-size: 1rem
|
|
||||||
line-height: 30px
|
|
||||||
width: 80%
|
|
||||||
margin: 40px auto 60px auto
|
|
||||||
.titulo
|
|
||||||
font-size: 2.125rem
|
|
||||||
margin-bottom: 40px
|
|
||||||
font-weight: 300
|
|
||||||
color: #dd820d
|
|
||||||
text-align: center
|
|
||||||
.bold
|
|
||||||
color: #3895ea
|
|
||||||
text-decoration: underline
|
|
||||||
.trabajos
|
|
||||||
background: #f2f2f2
|
|
||||||
padding: 60px 0
|
|
||||||
.contenedor
|
|
||||||
overflow: hidden
|
|
||||||
.titulo
|
|
||||||
font-size: 2.125rem
|
|
||||||
line-height: 34px
|
|
||||||
margin-bottom: 40px
|
|
||||||
font-weight: 300
|
|
||||||
color: #323068
|
|
||||||
text-align: center
|
|
||||||
.contenedor-trabajos
|
|
||||||
display: flex
|
|
||||||
flex-direction: row
|
|
||||||
flex-wrap: wrap
|
|
||||||
justify-content: space-between
|
|
||||||
.trabajo
|
|
||||||
width: 23%
|
|
||||||
margin-bottom: 40px
|
|
||||||
.thumb
|
|
||||||
width: 100%
|
|
||||||
margin-bottom: 10px
|
|
||||||
img
|
|
||||||
width: 100%
|
|
||||||
vertical-align: top
|
|
||||||
border-radius: 3px
|
|
||||||
.descripcion
|
|
||||||
text-align: center
|
|
||||||
.nombre
|
|
||||||
font-weight: 700
|
|
||||||
color: #3895ea
|
|
||||||
margin-bottom: 10px
|
|
||||||
a
|
|
||||||
text-decoration: none
|
|
||||||
color: #3895ea
|
|
||||||
.categoria
|
|
||||||
font-size: 0.8rem
|
|
||||||
color: #636363
|
|
||||||
|
|
||||||
/* ---- ---- FOOTER ---- ---- */
|
|
||||||
|
|
||||||
footer
|
|
||||||
.contacto
|
|
||||||
padding: 60px 0
|
|
||||||
.titulo
|
|
||||||
font-size: 2.125rem
|
|
||||||
line-height: 34px
|
|
||||||
margin-bottom: 40px
|
|
||||||
font-weight: 300
|
|
||||||
color: #3895ea
|
|
||||||
text-align: center
|
|
||||||
.formulario
|
|
||||||
display: flex
|
|
||||||
flex-wrap: wrap
|
|
||||||
justify-content: space-between
|
|
||||||
input
|
|
||||||
&[type="text"], &[type="email"]
|
|
||||||
background: #f3f4f7
|
|
||||||
border: 2px solid #cecece
|
|
||||||
border-radius: 5px
|
|
||||||
padding: 15px 20px
|
|
||||||
font-size: 1.125rem
|
|
||||||
color: #a4a4a4
|
|
||||||
textarea
|
|
||||||
background: #f3f4f7
|
|
||||||
border: 2px solid #cecece
|
|
||||||
border-radius: 5px
|
|
||||||
padding: 15px 20px
|
|
||||||
font-size: 1.25rem
|
|
||||||
color: #a4a4a4
|
|
||||||
input
|
|
||||||
&[type="text"]:focus, &[type="email"]:focus
|
|
||||||
border: 2px solid #3895ea
|
|
||||||
textarea:focus
|
|
||||||
border: 2px solid #3895ea
|
|
||||||
input
|
|
||||||
&[type="text"], &[type="email"]
|
|
||||||
width: 45%
|
|
||||||
margin-bottom: 15px
|
|
||||||
textarea
|
|
||||||
width: 100%
|
|
||||||
height: 100px
|
|
||||||
max-width: 100%
|
|
||||||
min-height: 100px
|
|
||||||
max-height: 300px
|
|
||||||
margin-bottom: 15px
|
|
||||||
.error
|
|
||||||
display: none
|
|
||||||
margin-top: 20px
|
|
||||||
border-radius: 3px
|
|
||||||
background: #fc636b
|
|
||||||
color: #fff
|
|
||||||
padding: 15px 10px
|
|
||||||
padding-left: 40px
|
|
||||||
width: 100%
|
|
||||||
.boton
|
|
||||||
margin: auto
|
|
||||||
background: #3895ea
|
|
||||||
color: #fff
|
|
||||||
border: none
|
|
||||||
border-radius: 3px
|
|
||||||
padding: 15px 40px
|
|
||||||
cursor: pointer
|
|
||||||
&:hover
|
|
||||||
background: #387bea
|
|
||||||
.alert
|
|
||||||
&.success
|
|
||||||
color: #3895ea
|
|
||||||
white-space: pre-line
|
|
||||||
&.danger
|
|
||||||
color: #ee4c58
|
|
||||||
white-space: pre-line
|
|
||||||
.redes-sociales-libres
|
|
||||||
background: #1e2b38
|
|
||||||
padding: 60px 0
|
|
||||||
.contenedor
|
|
||||||
display: flex
|
|
||||||
justify-content: center
|
|
||||||
a
|
|
||||||
color: #fff
|
|
||||||
text-align: center
|
|
||||||
width: 100px
|
|
||||||
display: block
|
|
||||||
padding: 15px 0
|
|
||||||
border-radius: 3px
|
|
||||||
font-size: 1.8rem
|
|
||||||
margin: 0 20px
|
|
||||||
svg
|
|
||||||
fill: currentcolor
|
|
||||||
width: 24px
|
|
||||||
.diaspora:hover
|
|
||||||
background: #010101
|
|
||||||
.gnusocial:hover
|
|
||||||
background: #a42833
|
|
||||||
.gitlab:hover
|
|
||||||
background: #e24329
|
|
||||||
.libregit:hover
|
|
||||||
background: #333333
|
|
||||||
.mediagoblin:hover
|
|
||||||
background: #775fa3
|
|
||||||
.notabug:hover
|
|
||||||
background: #244664
|
|
||||||
.peertube:hover
|
|
||||||
background: #f1680d
|
|
||||||
.copyleft
|
|
||||||
background: #192633
|
|
||||||
padding: 5px 0
|
|
||||||
p
|
|
||||||
color: #fff
|
|
||||||
text-align: center
|
|
||||||
font-size: 0.75rem
|
|
||||||
a
|
|
||||||
color: #3895ea
|
|
||||||
text-decoration: none
|
|
||||||
svg
|
|
||||||
width: 0.5rem
|
|
||||||
fill: currentcolor
|
|
@ -1,41 +0,0 @@
|
|||||||
@media screen and (max-width: 985px)
|
|
||||||
footer .contacto .formulario input
|
|
||||||
&[type="text"], &[type="email"]
|
|
||||||
width: 44%
|
|
||||||
|
|
||||||
@media screen and (max-width: 830px)
|
|
||||||
footer .contacto .formulario input
|
|
||||||
&[type="text"], &[type="email"]
|
|
||||||
width: 42%
|
|
||||||
|
|
||||||
@media screen and (max-width: 800px)
|
|
||||||
header .menu
|
|
||||||
text-align: center
|
|
||||||
main .trabajos .contenedor-trabajos .trabajo
|
|
||||||
width: 46%
|
|
||||||
footer .contacto .formulario [type="text"], [type="email"]
|
|
||||||
width: 100%
|
|
||||||
|
|
||||||
@media screen and (max-width: 630px)
|
|
||||||
footer .contacto .formulario input
|
|
||||||
&[type="text"], &[type="email"]
|
|
||||||
width: 100%
|
|
||||||
|
|
||||||
@media screen and (max-width: 500px)
|
|
||||||
header .contenedor-texto .texto
|
|
||||||
.nombre
|
|
||||||
font-size: 35px
|
|
||||||
.profesion
|
|
||||||
font-size: 18px
|
|
||||||
footer .redes-sociales-libres .contenedor
|
|
||||||
flex-wrap: wrap
|
|
||||||
padding: 20px 0
|
|
||||||
|
|
||||||
@media screen and (max-width: 320px)
|
|
||||||
footer .contacto .formulario input
|
|
||||||
&[type="text"], &[type="email"]
|
|
||||||
width: 84%
|
|
||||||
footer
|
|
||||||
.copyleft
|
|
||||||
p
|
|
||||||
font-size: 0.60rem
|
|
@ -1,8 +0,0 @@
|
|||||||
// Estilos para Portafolio
|
|
||||||
// License AGPLv3 or later
|
|
||||||
|
|
||||||
/* ---- Frontend ---- */
|
|
||||||
@import front
|
|
||||||
|
|
||||||
/* ---- MEDIA QUERIES ---- */
|
|
||||||
@import mediaqueries
|
|
47
django/Dockerfile
Normal file
47
django/Dockerfile
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
FROM python:3-alpine AS base
|
||||||
|
LABEL MAINTAINER="heckyel@riseup.net"
|
||||||
|
|
||||||
|
# Image to Build Dependencies
|
||||||
|
FROM base AS builder
|
||||||
|
|
||||||
|
ENV LANG C.UTF-8
|
||||||
|
ENV LC_ALL C.UTF-8
|
||||||
|
|
||||||
|
RUN apk add --no-cache musl-dev build-base make gcc g++ \
|
||||||
|
libxml2-dev libffi-dev zlib-dev libjpeg lcms2-dev libimagequant-dev \
|
||||||
|
libjpeg-turbo-dev libwebp-dev openjpeg-dev tk-dev py3-pillow
|
||||||
|
|
||||||
|
ARG APP_DIR="/srv/app"
|
||||||
|
|
||||||
|
RUN mkdir --parents "$APP_DIR"
|
||||||
|
|
||||||
|
WORKDIR "$APP_DIR"
|
||||||
|
|
||||||
|
COPY requirements_prod.txt .
|
||||||
|
RUN pip install --no-cache-dir --prefix=/install wheel gunicorn
|
||||||
|
RUN pip install --no-cache-dir --prefix=/install -r requirements_prod.txt
|
||||||
|
|
||||||
|
# Runtime Environment Image
|
||||||
|
FROM base
|
||||||
|
|
||||||
|
WORKDIR /srv/app
|
||||||
|
|
||||||
|
# Runtime Dependencies
|
||||||
|
RUN apk add py3-olefile brotli-libs libpng freetype libxcb \
|
||||||
|
libimagequant libjpeg-turbo lcms2 openjpeg libwebp zstd-libs \
|
||||||
|
tiff libxau libmd libbsd libxdmcp nginx
|
||||||
|
|
||||||
|
COPY --from=builder /install /usr/local
|
||||||
|
COPY core/ /srv/app/core
|
||||||
|
COPY personalsite/ /srv/app/personalsite
|
||||||
|
COPY project/ /srv/app/project
|
||||||
|
COPY social/ /srv/app/social
|
||||||
|
COPY manage.py /srv/app
|
||||||
|
COPY nginx.conf /etc/nginx/http.d/default.conf
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
COPY entrypoint.sh /
|
||||||
|
RUN chmod u+x /entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
161
django/entrypoint.sh
Normal file
161
django/entrypoint.sh
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
## Config
|
||||||
|
if [ ! -f "/srv/app/personalsite/settings.py" ]; then
|
||||||
|
# generate config
|
||||||
|
cat > /srv/app/personalsite/settings.py <<- EOF
|
||||||
|
"""
|
||||||
|
Django settings for personalsite project.
|
||||||
|
|
||||||
|
Generated by 'django-admin startproject' using Django 2.1.2.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/2.1/topics/settings/
|
||||||
|
|
||||||
|
For the full list of settings and their values, see
|
||||||
|
https://docs.djangoproject.com/en/2.1/ref/settings/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||||
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
|
||||||
|
|
||||||
|
# Quick-start development settings - unsuitable for production
|
||||||
|
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
|
||||||
|
|
||||||
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
|
SECRET_KEY = '${SECRET_KEY:-8$oylik7o2-dbx+5a77=2a532w8lx&=ofiyv!1bs9a9)0t%6r2}'
|
||||||
|
|
||||||
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
|
DEBUG = ${APP_DEBUG:-False}
|
||||||
|
|
||||||
|
ALLOWED_HOSTS = ["${WEB_SITE_URL:-example.com}", "localhost", "127.0.0.1", "0.0.0.0", "django"]
|
||||||
|
|
||||||
|
|
||||||
|
# Application definition
|
||||||
|
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
'django.contrib.admin',
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.messages',
|
||||||
|
'django.contrib.staticfiles',
|
||||||
|
|
||||||
|
'core',
|
||||||
|
'project.apps.ProjectConfig',
|
||||||
|
'social.apps.SocialConfig',
|
||||||
|
'django_cleanup.apps.CleanupConfig',
|
||||||
|
]
|
||||||
|
|
||||||
|
MIDDLEWARE = [
|
||||||
|
'django.middleware.security.SecurityMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'personalsite.urls'
|
||||||
|
|
||||||
|
TEMPLATES = [
|
||||||
|
{
|
||||||
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
|
'DIRS': [],
|
||||||
|
'APP_DIRS': True,
|
||||||
|
'OPTIONS': {
|
||||||
|
'context_processors': [
|
||||||
|
'django.template.context_processors.debug',
|
||||||
|
'django.template.context_processors.request',
|
||||||
|
'django.contrib.auth.context_processors.auth',
|
||||||
|
'django.contrib.messages.context_processors.messages',
|
||||||
|
'social.processors.ctx_dict',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
WSGI_APPLICATION = 'personalsite.wsgi.application'
|
||||||
|
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
||||||
|
'NAME': '${NAME_DB:-site}',
|
||||||
|
'USER': '${USER_DB:-site}',
|
||||||
|
'PASSWORD': '${PASS_DB:-site}',
|
||||||
|
'HOST': '${HOST_DB:-127.0.0.1}',
|
||||||
|
'PORT': '${PORT_DB:-5432}',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Password validation
|
||||||
|
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
|
||||||
|
|
||||||
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# Internationalization
|
||||||
|
# https://docs.djangoproject.com/en/2.1/topics/i18n/
|
||||||
|
|
||||||
|
LANGUAGE_CODE = 'es'
|
||||||
|
|
||||||
|
TIME_ZONE = 'UTC'
|
||||||
|
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
USE_L10N = True
|
||||||
|
|
||||||
|
USE_TZ = True
|
||||||
|
|
||||||
|
|
||||||
|
# Static files (CSS, JavaScript, Images)
|
||||||
|
# https://docs.djangoproject.com/en/2.1/howto/static-files/
|
||||||
|
|
||||||
|
STATIC_URL = '/static/'
|
||||||
|
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
|
||||||
|
|
||||||
|
# Media files
|
||||||
|
MEDIA_URL = '/media/'
|
||||||
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||||
|
|
||||||
|
# Incoming Email
|
||||||
|
EMAIL_FROM = '${EMAIL_FROM:-noreply@example.com}'
|
||||||
|
EMAIL_TO = '${EMAIL_TO:-user@example.com}'
|
||||||
|
|
||||||
|
# Email config
|
||||||
|
EMAIL_HOST = '${EMAIL_HOST:-smtp.example.com}'
|
||||||
|
EMAIL_HOST_USER = '${EMAIL_HOST_USER:-username}'
|
||||||
|
EMAIL_HOST_PASSWORD = '${EMAIL_HOST_PASSWORD:-password}'
|
||||||
|
EMAIL_PORT = '${EMAIL_HOST_PORT:-587}'
|
||||||
|
EMAIL_USE_TLS = ${EMAIL_USE_TLS:-True}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd /srv/app || exit
|
||||||
|
/usr/local/bin/python3 manage.py makemigrations --no-input
|
||||||
|
/usr/local/bin/python3 manage.py migrate --no-input
|
||||||
|
/usr/local/bin/python3 manage.py collectstatic --no-input
|
||||||
|
|
||||||
|
gunicorn -b "0.0.0.0:${GUNICORN_PORT_NUMBER:-8080}" --timeout "${GUNICORN_TIMEOUT:-30}" --workers "${GUNICORN_NUM_WORKERS:-4}" personalsite.wsgi &
|
||||||
|
exec nginx -g "daemon off;"
|
25
django/nginx.conf
Normal file
25
django/nginx.conf
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
upstream django {
|
||||||
|
server 127.0.0.1:8080;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
access_log /dev/null;
|
||||||
|
error_log /dev/null;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://django;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
location /static/ {
|
||||||
|
autoindex on;
|
||||||
|
alias /srv/app/static/;
|
||||||
|
}
|
||||||
|
location /media/ {
|
||||||
|
autoindex on;
|
||||||
|
alias /srv/app/media/;
|
||||||
|
}
|
||||||
|
}
|
@ -125,7 +125,7 @@ USE_TZ = True
|
|||||||
# https://docs.djangoproject.com/en/2.1/howto/static-files/
|
# https://docs.djangoproject.com/en/2.1/howto/static-files/
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'core/static')
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'static')
|
||||||
|
|
||||||
# Media files
|
# Media files
|
||||||
MEDIA_URL = '/media/'
|
MEDIA_URL = '/media/'
|
5
django/requirements_prod.txt
Normal file
5
django/requirements_prod.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Django==2.2.16
|
||||||
|
django-cleanup==5.0.0
|
||||||
|
Pillow==8.4.0
|
||||||
|
psycopg2-binary
|
||||||
|
pytz
|
40
docker-compose.yml
Normal file
40
docker-compose.yml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: rusian/personalsite
|
||||||
|
container_name: personalsite
|
||||||
|
env_file: config.env
|
||||||
|
ports:
|
||||||
|
- "7012:80"
|
||||||
|
tty: true
|
||||||
|
restart: "always"
|
||||||
|
networks:
|
||||||
|
teanet:
|
||||||
|
ipv4_address: 172.23.0.5
|
||||||
|
|
||||||
|
personalsite-db:
|
||||||
|
image: postgres:alpine
|
||||||
|
container_name: personalsite-db
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- personalsite_db:/var/lib/postgresql/data
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=postgres
|
||||||
|
- POSTGRES_PASSWORD=postgres
|
||||||
|
- POSTGRES_DB=personalsite
|
||||||
|
networks:
|
||||||
|
teanet:
|
||||||
|
ipv4_address: 172.23.0.6
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
personalsite_db:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
teanet:
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 172.23.0.0/16
|
@ -1,19 +0,0 @@
|
|||||||
"""
|
|
||||||
WSGI config for personalsite project.
|
|
||||||
|
|
||||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
|
||||||
|
|
||||||
For more information on this file, see
|
|
||||||
https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os, sys
|
|
||||||
|
|
||||||
from django.core.wsgi import get_wsgi_application
|
|
||||||
|
|
||||||
sys.path.append('/path/to/site/personalsite')
|
|
||||||
sys.path.append('/path/to/site')
|
|
||||||
|
|
||||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'personalsite.settings'
|
|
||||||
|
|
||||||
application = get_wsgi_application()
|
|
@ -1,31 +0,0 @@
|
|||||||
# Generated by Django 2.1.2 on 2018-10-04 02:27
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Project',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('title', models.CharField(max_length=200, verbose_name='Titulo')),
|
|
||||||
('decription', models.TextField(verbose_name='Descripción')),
|
|
||||||
('image', models.ImageField(upload_to='projects/uploads/%Y/%m/%d/', verbose_name='Imagen')),
|
|
||||||
('link', models.URLField(blank=True, null=True, verbose_name='Sitio web')),
|
|
||||||
('created', models.DateTimeField(auto_now_add=True, verbose_name='Fecha de creación')),
|
|
||||||
('updated', models.DateTimeField(auto_now=True, verbose_name='Fecha de modificación')),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'verbose_name': 'proyecto',
|
|
||||||
'verbose_name_plural': 'proyectos',
|
|
||||||
'ordering': ['-created'],
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
@ -1,5 +0,0 @@
|
|||||||
Django==2.2.16
|
|
||||||
django-cleanup==5.0.0
|
|
||||||
Pillow==9.0.0
|
|
||||||
psycopg2-binary==2.8.1
|
|
||||||
pytz==2018.9
|
|
@ -1,30 +0,0 @@
|
|||||||
# Generated by Django 2.1.2 on 2018-10-04 21:04
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Link',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('key', models.SlugField(max_length=100, unique=True, verbose_name='Nombre clave')),
|
|
||||||
('name', models.CharField(max_length=200, verbose_name='Red social')),
|
|
||||||
('url', models.URLField(blank=True, null=True, verbose_name='Enlace')),
|
|
||||||
('created', models.DateTimeField(auto_now_add=True, verbose_name='Fecha de creación')),
|
|
||||||
('updated', models.DateTimeField(auto_now=True, verbose_name='Fecha de modificación')),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'verbose_name': 'enlace',
|
|
||||||
'verbose_name_plural': 'enlaces',
|
|
||||||
'ordering': ['name'],
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
Loading…
x
Reference in New Issue
Block a user