Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.dockerignore
Dockerfile*
docker-compose*
/build
/.cache
/log
/tmp
/var
.git
.idea
.swp
tags
3 changes: 2 additions & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
URL_BASE=http://localhost:8001
KEY=jajaparaquequieressabereso123!
PHANTOMJS=phantomjs
PHANTOMJS=phantomjs
# APP_BOT_NAME=odiometro
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
node_modules
public/node_modules
public/.sass-cache
config/database_odiometro.json
config/database_*.json
config/twitter_*.json
config/twitter_*.json
var
.DS_Store
40 changes: 40 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
## Dockerfile for building development image
FROM node:14.12-alpine3.12
LABEL maintainer "Igor Pellegrini <igor.pellegrini@live.com>"

ENV NODE_ENV=development

# Install system dependencies
# bzip2 to install phantomjs; bash to run entrypoint
USER root
RUN apk update && apk add --no-cache --upgrade bash bzip2

WORKDIR /home/node/app
RUN chown node:node -R /home/node/app

# copy custom entrypoint + related functions
COPY --chown=node:node ./docker/bash_functions.sh /scripts/bash_functions.sh
COPY --chown=node:node ./docker/entrypoint.sh /usr/local/bin/docker-entrypoint.sh

# copy installation manifests fist (to allow caching NPM installation)
COPY --chown=node:node ./package.json /home/node/app/package.json
COPY --chown=node:node ./public/package.json /home/node/app/public/package.json

# set user to run NPM scripts
# RUN npm config set user node

# Install application
USER node

RUN npm install
RUN cd public && npm install

# copy the rest of the application code
COPY --chown=node:node . /home/node/app

# RUN ./home/node/app/public/node_modules/grunt/bin/grunt

EXPOSE $PORT

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["/usr/local/bin/docker-entrypoint.sh", "npm", "start"]
24 changes: 24 additions & 0 deletions Dockerfile-database
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Dockerfile for building development image
FROM mariadb:10.4-focal
LABEL maintainer "Igor Pellegrini <igor.pellegrini@live.com>"

USER root

# install netcat to run the `wait-for-mysql` readyness probe function
RUN apt-get -q update \
&& apt-get -q --yes install netcat \
&& apt-get clean

RUN chown -R mysql:mysql /var/lib/mysql

COPY --chown=mysql:mysql ./db/app-schema.sql /schemas/app-schema.sql
COPY --chown=mysql:mysql ./docker/bash_functions.sh /scripts/bash_functions.sh

# initialize the project database, when running container (create database, import schema, run migrations)
# MySql/MariaDB images support putting files into `docker-entrypoint-initdb.d/`
# to load *.sql or execute initialization *.sh scripts.
COPY --chown=mysql:mysql ./docker/init-from-DB_NAMES.sh /docker-entrypoint-initdb.d/init-from-DB_NAMES.sh

USER mysql

# CMD ["--user=root","--explicit_defaults_for_timestamp"]
71 changes: 44 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ODIÓMETRO
================================
# ODIÓMETRO
---

Ya disponible en https://odiometro.es

Expand All @@ -11,58 +11,75 @@ y el amplio uso de insultos, descalificaciones, etc. que se producen en Twitter.
La web hace uso de las siguientes tecnologías:
* NodeJS / Express
* Socket.io
* MySQL
* MySQL (if having problems, stick to 5.x; see [mysqljs#1962](https://github.com/mysqljs/mysql/pull/1962))
* VueJS
* SASS
* Grunt
* *(opcional)* Docker

## Instalación
---

1. Clonar el repositorio
```git clone git@github.com:ojoven/odiometro.git```

Instalación
-------------
### **Docker setup:**
Para instalar en un contenedor de Docker…

1. Clonar el repositorio
2. Configurar las credenciales de la [API de Twitter](https://developer.twitter.com/en/docs/twitter-api/getting-started/guide) con las environment variables `APP_TWITTER_`, en ``docker-compose.yml``.

```git clone git@github.com:ojoven/odiometro.git```
3. En *docker-compose.yml*, asegúrate de que `INIT_DB_NAMES` lista los nombres de la base de datos a inicializar, separados por una coma (por ejemplo, `INIT_DB_NAMES=odiometro,amorometro`).

2. Desde la raíz del proyecto (instalará express, socket y otras librerías)
4. Ejecute `docker-compose up` desde el directorio raíz del proyecto.
**NOTE:** Necesitas tener [Docker](https://www.docker.com/get-started) ya instalado. Si tienes problemas, [abre un issue](https://github.com/ojoven/odiometro/issues) o intenta la configuración manual.

```npm install```
> Por defecto, el `docker-compose.yml` está configurado para inicializar:
> 1 contenedor de base de datos (compartido entre instancias)
> 1..N contenedores, para cada versión de la aplicación (odómetro, amorómetro u otros).
> Comente los servicios no deseados, o configúrelos para su versión personalizada.
> Cada instancia de la aplicación puede ser alcanzada en una porta diferente (3001, 3002; see `PORT` env variable).

3. También desde la carpeta `/public` (instalará grunt y plugins, vue)
5. Accede a la aplicación de *odiometro* en http://localhost:8081, y a la aplicación de *amorometro* en http://localhost:8082

```cd public && npm install```
**Nota:** Los file de configuración correspondientes a cada bot deben existir; por ejemplo, para *odiometro* crea `database_odiometro.json` y `twitter_odiometro.json` y `odiometro.json`. Los dos primeros pueden dejarse vacíos (`{}`), cuando se utilizan variables del sistema.

4. Crea una base de datos e importa el dump en `db/odiometro.sql`
### **Local setup:**
De lo contrario, siga los pasos a continuación para instalar en la máquina local.

```mysql -u [username] -p [dbname] < db/odiometro.sql```
2. Configurar las credenciales de la [API de Twitter](https://developer.twitter.com/en/docs/twitter-api/getting-started/guide) en `/config/twitter_odiometro.json` (o `twitter_[dbname].json`)

4.2 Configura los datos de tu DB en /config/database_odiometro.json o si estás creando el odiómetro en tu país database_odiometro.pais.json
3. Desde la raíz del proyecto (instalará express, socket y otras librerías)
```npm install```

```mysql -u [username] -p [dbname] < db/odiometro.sql```
4. También desde la carpeta `/public` (instalará grunt y plugins, vue)
```cd public && npm install```

5. Corre el grunt desde /public
5. Crear una base de datos y configurar la aplicación para acceder a ella

```grunt```
5.2 Configure les credenciales de tu DB desde `/config/database_odiometro.json`; o `database_[dbname].pais.json`, si estás creando el odiómetro en tu país)

6. Lanza la app
5.3 Importar el esquema a su base de datos
```mysql -u [username] -p [dbname] < db/app-schema.sql```

```node app.js```
6. Corre el grunt desde */public*
```grunt```

7. Si has creado tu propia versión de país (o de otro estilo tipo amorómetro)
7. Lanza la app
```node app.js```

```node app.js [nombredebot]```
8. Si has creado tu propia versión de país (o de otro estilo tipo amorómetro)
```node app.js [nombredebot]```. Alternativamente, configura la variable de sistema `APP_BOT_NAME`, en *.env*.


IMPORTANTE
-------------------------------
### IMPORTANTE
---
Tendrás que crear una app en Twitter y rellenar los datos de consumer key y secret, y access_token y secret en twitter_odiometro.json o twitter_odiometro.pais.json.

No sé bien cómo funciona la API de Twitter ahora, ya que estuvieron implementando bastantes restricciones que igual no afectan a apps antiguas pero sí a las nuevas. Si tienes algún problema o sabes cómo va, no dudes en escribir en las Issues.


Notas adicionales de desarrollo
-------------------------------
## Notas adicionales de desarrollo
---

* Los componentes Vue del frontend se encuentran en `js/src/app/components`
* Otros archivos interesantes son:
Expand All @@ -76,6 +93,6 @@ Notas adicionales de desarrollo



Contacta
------------
## Contacta
---
Si tienes alguna duda, sugerencia, crítica o palabra de odio, puedes contactarme en https://twitter.com/ojoven
7 changes: 4 additions & 3 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require('dotenv').config();
/*
|--------------------------------------------------------------------------
| INITIALIZATION
Expand All @@ -6,13 +7,12 @@

// Bot
var args = process.argv.slice(2);
var defaultBot = 'odiometro';
var defaultBot = process.env.APP_BOT_NAME || 'odiometro';
var bot = (args && typeof args[0] !== "undefined") ? args[0] : defaultBot;

// Path and ENV
var path = require('path');
global.appRoot = path.resolve(__dirname);
require('dotenv').config();
global.urlBase = process.env.URL_BASE;
global.phantomJsBin = process.env.PHANTOMJS;
global.botName = bot;
Expand All @@ -23,6 +23,7 @@ var express = require('express'),
app = express();

var port = process.env.PORT || global.botConfig.port;
var external_port = process.env.EXTERNAL_PORT || port;

var io = require('socket.io').listen(app.listen(port));
require('./config')(app, io);
Expand All @@ -45,7 +46,7 @@ var Tweet = require("./app/models/Tweet.js");
var Historic = require("./app/models/Historic.js");

// Logging
console.log('Odiometro is running on http://localhost:' + port);
console.log('Odiometro is running on http://localhost:' + external_port);

// Vars
var numberTweets, mostHatedUser, mostHatedUsersLastTweet, mostHatefulUser, mostHatefulUserTweet, mostHatefulUserTweetId;
Expand Down
Loading