First commit

This commit is contained in:
Andros Fenollosa 2021-04-01 09:48:35 +02:00
commit 17e952bdbd
12 changed files with 438 additions and 0 deletions

11
Caddyfile Normal file
View File

@ -0,0 +1,11 @@
http://api.localhost
root * /usr/src/app/
@notStatic {
not path /static/* /media/*
}
reverse_proxy @notStatic django:8000
file_server

View File

@ -0,0 +1,21 @@
FROM debian:stable-slim
ENV PYTHONUNBUFFERED: 1
# set work directory
WORKDIR /usr/src/app
# install software
RUN apt update
RUN apt install -y build-essential cron python3-pip gettext
# install dependencies
RUN pip3 install --upgrade pip
COPY ./requirements.txt .
RUN pip3 install -r requirements.txt
# launcher
COPY django-launcher.dev.sh /django-launcher.dev.sh
COPY django-launcher.pro.sh /django-launcher.pro.sh
RUN chmod +x /django-launcher.dev.sh
RUN chmod +x /django-launcher.pro.sh

View File

@ -0,0 +1,19 @@
FROM debian:unstable-slim
# set work directory
WORKDIR /usr/src/app
# install software
RUN apt update
RUN apt -y upgrade
# dependencies
RUN apt install -y build-essential nodejs npm
# gulp
RUN npm install -g gulp-cli
# Add package.json
COPY package.json package.json
# dependencies gulp
RUN npm i

80
README.md Normal file
View File

@ -0,0 +1,80 @@
# Install
## Django
https://programadorwebvalencia.com/django-chat-usando-websockets-con-salas-y-async/
## Gulp
```shell
npm i
```
Run.
```shell
gulp dev
```
# Config
## Change path templates
In `settings.py`.
``` python
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',
],
},
},
]
```
Update `DIRS`.
``` python
'DIRS': [str(BASE_DIR) + '/app/templates/'],
```
# Run development
``` sh
docker-compose -f docker-compose.dev.yaml up
```
Now open:
`http://api.localhost`
### Other domains
- Caddy: `http://api.localhost`.
- Gulp: `http://localhost:3000`.
- Django: `http://localhost:8000`.
- Mailhog: `http://localhost:8025`.
- Postgres: `localhost:5432`.
### Bash Django
``` shell
docker exec -it api_django_1 bash
```
# Run production
``` sh
docker-compose up -d
```
Open `https://domain.com`.

11
asgi.py Normal file
View File

@ -0,0 +1,11 @@
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
import django
django.setup()
from channels.routing import ProtocolTypeRouter
application = ProtocolTypeRouter({})

14
django-launcher.dev.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/sh
# Collect static files
echo "Collect static files"
python3 manage.py collectstatic --noinput
# Apply database migrations
echo "Apply database migrations"
python3 manage.py makemigrations
python3 manage.py migrate
# Start server
echo "Starting server"
uvicorn --host 0.0.0.0 --port 8000 --reload chapps.asgi:application

14
django-launcher.pro.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/sh
# Collect static files
echo "Collect static files"
python3 manage.py collectstatic --noinput
# Apply database migrations
echo "Apply database migrations"
python3 manage.py makemigrations
python3 manage.py migrate
# Start server
echo "Starting server"
uvicorn --host 0.0.0.0 --port 8000 chapps.asgi:application

66
docker-compose.dev.yaml Normal file
View File

@ -0,0 +1,66 @@
version: '3.1'
services:
db:
image: postgres
restart: always
volumes:
- ./../postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: api
POSTGRES_PASSWORD: postgres
expose:
- 5432
django:
build:
context: .
dockerfile: ./Dockerfiles/django/Dockerfile
restart: always
entrypoint: /django-launcher.dev.sh
volumes:
- .:/usr/src/app/
environment:
DEBUG: "True"
ALLOWED_HOSTS: ""
SECRET_KEY: ""
DB_HOST: db
DB_NAME: ""
DB_USER: "postgres"
DB_PASSWORD: "postgres"
DB_PORT: "5432"
DOMAIN: "api.localhost"
DOMAIN_URL: "http://api.localhost"
STATIC_URL: "/static/"
MEDIA_URL: "/media/"
EMAIL_HOST: "mailhog"
EMAIL_USE_TLS: "False"
EMAIL_PORT: "1025"
EMAIL_USER: ""
EMAIL_PASSWORD: ""
expose:
- 8000
depends_on:
- db
caddy:
image: caddy:alpine
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./../caddy_data:/data
- .:/usr/src/app/
depends_on:
- django
mailhog:
image: mailhog/mailhog:latest
restart: always
expose:
- 1025:1025
ports:
- 8025:8025

66
docker-compose.pro.yaml Normal file
View File

@ -0,0 +1,66 @@
version: '3.1'
services:
db:
image: postgres
restart: always
volumes:
- ./../postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: guitarlions
POSTGRES_PASSWORD: postgres
expose:
- 5432
django:
build: .
restart: always
entrypoint: /django-launcher.pro.sh
volumes:
- .:/usr/src/app/
environment:
DEBUG: "False"
ALLOWED_HOSTS: ""
SECRET_KEY: "secret"
DB_HOST: db
DB_NAME: "guitarlions"
DB_USER: "postgres"
DB_PASSWORD: "postgres"
DB_PORT: "5432"
DOMAIN: ""
DOMAIN_URL: "https://"
STATIC_URL: "/static/"
MEDIA_URL: "/media/"
EMAIL_USE_TLS: True
EMAIL_HOST: ""
EMAIL_USE_TLS: "True"
EMAIL_PORT: "2525"
EMAIL_USER: ""
EMAIL_PASSWORD: ""
expose:
- 8000
depends_on:
- db
caddy:
image: caddy:alpine
restart: always
ports:
- 80:80
- 443:443
volumes:
- .:/usr/src/app/
- ./Caddyfile:/etc/caddy/Caddyfile
- ./../caddy_data:/data
depends_on:
- django
gulp:
build: Dockerfiles/gulp
restart: always
command: gulp
volumes:
- .:/app/
depends_on:
- caddy

97
gulpfile.js Normal file
View File

@ -0,0 +1,97 @@
//===
// IMPORTS
//===
const { src, dest, parallel, series, watch } = require('gulp');
const browserSync = require('browser-sync').create();
const clean = require('gulp-clean');
const sass = require('gulp-sass');
const sourcemaps = require('gulp-sourcemaps');
const ts = require('gulp-typescript');
const iconfont = require('gulp-iconfont');
//===
// VARIABLES
//===
const runTimestamp = Math.round(Date.now() / 1000);
const SRC_PATH = 'assets';
const DEST_PATH = 'static';
//===
// TASKS
//===
function cleanDist() {
return src('static/*')
.pipe(clean());
}
// Static server with reload
function initBrowserSync(cb) {
browserSync.init({
notify: false,
open: false,
proxy: 'http://localhost'
});
return cb;
}
// Compile SASS + sourcemaps
function sassCompile() {
return src([SRC_PATH + "/sass/desktop.sass", SRC_PATH + "/sass/mobile.sass"])
.pipe(sourcemaps.init())
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
.pipe(sourcemaps.write('.'))
.pipe(dest(DEST_PATH + '/css/'))
.pipe(browserSync.stream()) ;
}
// Compile Typescript to JavaScript
function typescript() {
return src(SRC_PATH +'/ts/*.ts')
.pipe(ts({
noImplicitAny: true,
outFile: 'main.js'
}))
.pipe(dest('static/js'))
.pipe(browserSync.stream()) ;
}
// Copy images
function images() {
return src(SRC_PATH +'/img/**/*')
.pipe(dest(DEST_PATH + '/img/'))
.pipe(browserSync.stream()) ;
}
// Build Font icons. *.svg to font-icons.woff2
function buildFontIcons() {
return src(SRC_PATH + '/fonts/icons/*.svg')
.pipe(iconfont({
fontName: 'font-icons',
prependUnicode: true,
formats: ['woff2'],
timestamp: runTimestamp
}))
.pipe(dest(DEST_PATH + '/fonts/'))
.pipe(browserSync.stream()) ;
}
//===
// Tasks
//===
// Default: 'gulp'
const build = series(
cleanDist,
parallel(sassCompile, typescript, images, buildFontIcons)
);
exports.default = build;
// Dev: 'gulp dev'
exports.dev = function () {
build();
watch([SRC_PATH + '/sass/*.sass', SRC_PATH + '/sass/**/*.sass'], sassCompile);
watch([SRC_PATH + '/ts/*.ts', SRC_PATH + '/ts/**/*.ts'], typescript);
watch([SRC_PATH + '/img/*', SRC_PATH + '/img/**/*'], images);
watch([SRC_PATH + '/fonts/icons/*.svg'], buildFontIcons);
initBrowserSync();
}

29
package.json Normal file
View File

@ -0,0 +1,29 @@
{
"name": "web",
"version": "1.0.0",
"description": "",
"main": "gulpfile.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+ssh://git@gitlab.com/sapps-studio/....git"
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "https://gitlab.com/sapps-studio/.../issues"
},
"homepage": "https://gitlab.com/sapps-studio/...#readme",
"dependencies": {
"browser-sync": "^2.26.14",
"gulp": "^4.0.2",
"gulp-clean": "^0.4.0",
"gulp-iconfont": "^11.0.0",
"gulp-sass": "^4.1.0",
"gulp-sourcemaps": "^3.0.0",
"gulp-typescript": "*"
}
}

10
requirements.txt Normal file
View File

@ -0,0 +1,10 @@
# Django
django
# Servidor para Django
uvicorn
# Conector para PostgreSQL
psycopg2-binary
# Channels
channels==2.4.0
# Conector de Redis para Channels
channels_redis