From 2142d0173174e003bf19b27a2ad15a1a1b4a07db Mon Sep 17 00:00:00 2001 From: Luc Juggery Date: Fri, 2 Feb 2018 10:16:32 +0100 Subject: [PATCH] Cleanup --- .gitignore | 4 +- README.md | 20 +++- bin/build.sh | 20 ++++ www/update.sh => bin/deploy.sh | 7 +- bin/push.sh | 1 + {www => data}/clean_events.js | 0 {www => data}/events.json | 4 +- {www => data}/package.json | 0 data/rss.js | 14 +++ deploy_stack.sh | 16 --- docker-compose.yml | 10 ++ {www => template}/index.mustache | 0 www/Dockerfile | 2 +- www/deploy.sh | 2 - www/images/cncf-sophia.png | Bin 0 -> 34655 bytes www/index.html | 164 +++++++++++++++++++++++++++++++ www/past.html | 94 ++++++++++++++++++ www/rss.js | 14 +++ www/test.sh | 4 - 19 files changed, 340 insertions(+), 36 deletions(-) create mode 100755 bin/build.sh rename www/update.sh => bin/deploy.sh (71%) create mode 100755 bin/push.sh rename {www => data}/clean_events.js (100%) rename {www => data}/events.json (98%) rename {www => data}/package.json (100%) create mode 100644 data/rss.js delete mode 100755 deploy_stack.sh create mode 100644 docker-compose.yml rename {www => template}/index.mustache (100%) delete mode 100755 www/deploy.sh create mode 100644 www/images/cncf-sophia.png create mode 100644 www/index.html create mode 100644 www/past.html create mode 100644 www/rss.js delete mode 100755 www/test.sh diff --git a/.gitignore b/.gitignore index f27c618..4e349b2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -www/*.html -www/*_events.json -www/node_modules +js/node_modules diff --git a/README.md b/README.md index 4ecfb96..c83218d 100644 --- a/README.md +++ b/README.md @@ -18,21 +18,31 @@ A lot of great stuff is happening in Sophia: Some people ask about a place that lists them all... here is a simple attempt that tries to answer this need. -## How to run it +## Want to help making this website look better ? :) + +Fell free to modify it and to submit a PR. ### Clone de repository ``` -$ git clone https://github.com/lucj/sophia.events.git +$ git clone https://github.com/lucj/sophia.events.git && cd sophia.events ``` -### Run the wrapper scrip +### Run stack + +This assumes you have [Docker](https://www.docker.com/community-edition#/download) / [Docker Compose](https://docs.docker.com/compose/install/) installed on your machine ``` -$ cd www && ./test.sh +$ docker-compose up -d ``` -A web server is run in a Docker container. The port to use is provided at the end of the output. +A web server is run in a Docker container available on port 8000. + +### Modify the files + +Fell free to modify the css / html. + +Once you'r happy with your changes you can report the modifications of the html in the *template/index.mustache* file. ## Status diff --git a/bin/build.sh b/bin/build.sh new file mode 100755 index 0000000..81a83d9 --- /dev/null +++ b/bin/build.sh @@ -0,0 +1,20 @@ +# Copy resources needed in the image build phase +cp ../template/index.mustache ../data/*.* ../www/ + +# Build image +cd ../www +docker image build -t lucj/sophia.events . + +# Run website +ID=$(docker run -d -p 80 lucj/sophia.events) + +# Copy generated index.html and past.html locally +docker cp $ID:/usr/share/nginx/html/index.html . +docker cp $ID:/usr/share/nginx/html/past.html . + +# Remove files used for image build +rm index.mustache events.json clean_events.js package.json + +# Get port +PORT=$(docker inspect --format '{{ (index (index .NetworkSettings.Ports "80/tcp") 0).HostPort }}' $ID) +echo "=> web site available on http://localhost:$PORT" diff --git a/www/update.sh b/bin/deploy.sh similarity index 71% rename from www/update.sh rename to bin/deploy.sh index b9b040b..2382f94 100755 --- a/www/update.sh +++ b/bin/deploy.sh @@ -5,12 +5,13 @@ if [ "$version" = "" ]; then version="latest" fi -#TODO: update service instead of single container -# docker service update www --image=... - # Pull new image docker pull lucj/sophia.events:$version +# TODO +# Replace the following with a service update +# docker service update www --image=lucj/sophia.events + # Stop previous container docker stop events docker rm events diff --git a/bin/push.sh b/bin/push.sh new file mode 100755 index 0000000..dec98de --- /dev/null +++ b/bin/push.sh @@ -0,0 +1 @@ +docker push lucj/sophia.events diff --git a/www/clean_events.js b/data/clean_events.js similarity index 100% rename from www/clean_events.js rename to data/clean_events.js diff --git a/www/events.json b/data/events.json similarity index 98% rename from www/events.json rename to data/events.json index 24048f9..f1d814f 100644 --- a/www/events.json +++ b/data/events.json @@ -34,12 +34,12 @@ { "id" : 4, "type": "cncf-meetup", - "title": "CNCF Sophia-Antipolis #1", + "title": "", "ts": "20180129T173000", "date": "29/01 à 17h30", "desc": "Cédric Lamorinière et David Benque vous présenterons Prometheus une solution de monitoring pour le système et les applications", "link": "https://www.meetup.com/fr-FR/CNCF-Cloud-Native-Computing-Sophia-Antipolis/events/246424155/", - "pict": "cncf.png" + "pict": "cncf-sophia.png" }, { "id" : 5, diff --git a/www/package.json b/data/package.json similarity index 100% rename from www/package.json rename to data/package.json diff --git a/data/rss.js b/data/rss.js new file mode 100644 index 0000000..0a9960d --- /dev/null +++ b/data/rss.js @@ -0,0 +1,14 @@ + + + + MakeUseOf RSS Feed + //sophia.events/ + Upcoming technical events in Sophia-Antipolis + + Entry Title + Link to the entry + http://example.com/item/123 + Sat, 9 Jan 2010 16:23:41 GMT + [CDATA[ This is the description. ]] + + diff --git a/deploy_stack.sh b/deploy_stack.sh deleted file mode 100755 index ad4ddb3..0000000 --- a/deploy_stack.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -version=$1 -if [ "$version" = "" ]; then - version="latest" -fi - -# Pull new image -docker pull lucj/sophia.events:$version - -# Stop previous container -docker stop events -docker rm events - -# Run Docker stack -docker stack deploy -c docker-stack.yml sophia diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..97d1c25 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +version: '3.4' +services: + www: + image: lucj/sophia.events + build: ./www + ports: + - 8000:80 + restart: on-failure + volumes: + - ./www:/usr/share/nginx/html diff --git a/www/index.mustache b/template/index.mustache similarity index 100% rename from www/index.mustache rename to template/index.mustache diff --git a/www/Dockerfile b/www/Dockerfile index e2b2e36..338b36d 100644 --- a/www/Dockerfile +++ b/www/Dockerfile @@ -1,7 +1,7 @@ FROM mhart/alpine-node:8.9.4 as build -RUN npm install -g mustache COPY . /build WORKDIR /build +RUN npm i -g mustache && npm i RUN node clean_events.js RUN mustache upcoming_events.json index.mustache > index.html RUN mustache past_events.json index.mustache > past.html diff --git a/www/deploy.sh b/www/deploy.sh deleted file mode 100755 index 925b5b9..0000000 --- a/www/deploy.sh +++ /dev/null @@ -1,2 +0,0 @@ -docker build -t lucj/sophia.events . -docker push lucj/sophia.events diff --git a/www/images/cncf-sophia.png b/www/images/cncf-sophia.png new file mode 100644 index 0000000000000000000000000000000000000000..02d2efc17bd0ae220951211fb819b883b34b7095 GIT binary patch literal 34655 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 literal 0 HcmV?d00001 diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..9a344c8 --- /dev/null +++ b/www/index.html @@ -0,0 +1,164 @@ + + + + + + + TechEvents@Sophia + + + + + + + + + + + +
+
+

Technical events in #SophiaAntipolis

+

...in one single place

+
+
+ +
+
+ + +
+
+
+ +

+
06/02 à 12h
+

Cloud, virtualisation, microservices, conteneurs… quelles sont les bonnes pratiques de sécurité ? par Serge HARTMANN de ACP Qualife

+ More +
+
+ + +
+
+
+ +

+
06/02 à 18h
+

Présentation de la base de données Hazelcast par Neil Stevenson

+ More +
+
+ + +
+
+
+ +

+
20/02 à 12h
+

Présentation de Open Source Business Diagnostic par Jaime Arredondo (BoldAndOpen.com)

+ A venir... +
+
+ + +
+
+
+

Développement Mobile Côte-d'Azur

+
21/02 à 18h30
+

#21: Reactive programming

+ More +
+
+ + +
+
+
+ +

Google Hash Code 2018

+
01/03 à 18h
+

Comme tous les ans, Google organise le Hash Code, une compétition de programmation en équipe pour résoudre un problème d’ingénierie de la vie réelle de Google

+ More +
+
+ + +
+
+
+ +

+
15/03 à 12h
+

Introduction à la programmation fonctionnelle par Yann Esposito. Attention, Haskell au programme...

+ A venir... +
+
+ + +
+
+
+

Développement Mobile Côte-d'Azur

+
28/03 à 18h30
+

#22

+ A venir... +
+
+ + +
+
+
+ +

+
12/04 à 12h
+

Rémy Coutable de GitLab viendra nous présenter Gitlab-CI

+ A venir... +
+
+ + +
+
+
+ +

+
Du 16 au 18/05
+

Riviera DEV c'est 3 jours de conférences et d'ateliers sur un large panel de sujets : langages de programmation, Front-end & UX, Mobile & IoT, Big Data & Machine Learning, Containers & DevOps, Performance, Agilité ...

+ More +
+
+ + +
+
+
+ +

+
Du 2 au 5/07
+

3 soirées de talks et une journée entièrement dédiée à des workshops techniques. Au programme cette année: AI, DevOps et Cloud, IoT. Les CFPs sont ouverts !

+ More +
+
+ + +
+
+ + + + + + diff --git a/www/past.html b/www/past.html new file mode 100644 index 0000000..2660d5e --- /dev/null +++ b/www/past.html @@ -0,0 +1,94 @@ + + + + + + + TechEvents@Sophia + + + + + + + + + + + +
+
+

Technical events in #SophiaAntipolis

+

...in one single place

+
+
+ +
+
+ + +
+
+
+ +

+
29/01 à 17h30
+

Cédric Lamorinière et David Benque vous présenterons Prometheus une solution de monitoring pour le système et les applications

+ More +
+
+ + +
+
+
+ +

+
25/01 à 12h
+

Retour d'expérience sur l'utilisation de Kafka par Sébastien Alegret de GreenCom Network

+ More +
+
+ + +
+
+
+ +

Hashicorp User Group #2

+
23/01 à 18h
+

Thomas Sarboni fera une introduction à Terraform, David Calvert nous présentera Vault

+ More +
+
+ + +
+
+
+ +

Meetup Docker / RivieraJug

+
18/01 à 18h
+

Anthony Lapenna viendra nous présenter Portainer pour gérez vos environnements Docker en toute simplicité

+ More +
+
+ + +
+
+ + + + + + diff --git a/www/rss.js b/www/rss.js new file mode 100644 index 0000000..0a9960d --- /dev/null +++ b/www/rss.js @@ -0,0 +1,14 @@ + + + + MakeUseOf RSS Feed + //sophia.events/ + Upcoming technical events in Sophia-Antipolis + + Entry Title + Link to the entry + http://example.com/item/123 + Sat, 9 Jan 2010 16:23:41 GMT + [CDATA[ This is the description. ]] + + diff --git a/www/test.sh b/www/test.sh deleted file mode 100755 index e7b410c..0000000 --- a/www/test.sh +++ /dev/null @@ -1,4 +0,0 @@ -docker image build -t test.sophia.events . -ID=$(docker run -d -p 80 test.sophia.events) -PORT=$(docker inspect --format '{{ (index (index .NetworkSettings.Ports "80/tcp") 0).HostPort }}' $ID) -echo "=> web site available on http://localhost:$PORT"