Strails – Lo stato dei sentieri – Pubblicato il codice sorgente su GitHub

strails

Social trail state

Strails è un'applicazione web utile agli appassionati di Mountain bike e trekking.

L'applicazione Strails ha un funzionamento molto semplice.

Il suo scopo è quello di poter descrivere lo stato di un sentiero o di un segmento Strava.

Gli utenti di Strails possono conoscere quasi in tempo reale le condizioni di un tragitto e decidere quali sentieri percorrere, preventivamente consapevoli e informati su eventuali pericoli presenti nel tracciato scelto. Queste informazioni, condivise in modo social su Strails, permettono quindi di migliorare la sicurezza degli utenti e di poter scegliere il percorso più divertente e nelle migliori condizioni.

Inoltre anche i trail builder potranno intervenire in modo più preciso e puntuale per il ripristino dei sentieri grazie alle segnalazioni di Strails. Strails necessità di una banale registrazione con email e password oppure del login con il proprio account Google, Facebook o Strava. La registrazione consente di commentare i soli sentieri presenti su openstreetmap.

Cliccando anche su "Connect with Strava" si può accedere ai propri dati ed a tutti i segmenti Strava. La connessione con Strava permette di poter recuperare le proprie attività e visualizzarle su una mappa (in arancione), contestualmente appaiono anche i sentieri OSM (in blu) ed i segmenti Strava (in rosso). Gli ultimi due potranno quindi essere più facilmente individuabili per essere "commentati" cliccandoci sopra.

Per individuare un sentiero e poterlo "commentare", è anche possibile scorrere semplicemente la mappa cliccando su "apri e scorri la mappa". Zommando fino alla zona di interesse, oppure cliccando sull'icona in alto a sinistra per zommare sulla posizione corrente, si possono visualizzare tutti i sentieri cliccabili. Ogni utente può anche inserire un sentiero o un segmento nei propri preferiti per poterlo consultare e commentare più agevolmente. Tutto ciò che è nei preferiti può avere colore celeste (se non ha mai avuto commenti), verde (se l'ultimo commento è positivo), giallo (se l'ultimo commento è un avviso) o rosso (se l'ultimo commento segnala un pericolo o problema grave). Il colore permette quindi una rapida valutazione.

Strails è in continuo aggiornamento. Ogni volta che ho un po' di tempo libero cerco di aumentarne funzionalità e semplicità d'uso. Ogni consiglio e suggerimento sarà prezioso per renderlo migliore.

L'indirizzo è:

https://www.strails.it

Pubblicato il codice sorgente

Lo trovate qui

Spero possiate aiutarmi e darmi buone idee per migliorare

Grazie per l'attenzione

WordPress con docker-compose e traefik

wordpress-docker-compose

Eseguire wordpress su docker o migrare un Wordpress esistente su Docker

Se alcuni link non dovessero funzionare prova qui https://github.com/MaoX17/wordpress-docker-compose/ o qui

GreMaPro

Dockerizzare un wordpress esistente

Questa versione è valida sia con traefik che con nginx di jwilder come reverse proxy

Adesso iniziamo

Di seguito ci sono i passaggi per ralizzare il tutto da zero...

Altrimenti ... quick install

Partiamo dal traefik

Traefik

Traefik

Primo comando:

docker network create proxy

Genero la stringa di auth:

htpasswd -n username

ottengo:

username:$apr1$VDSty0Wy$5nrZ7nthjusltZXM0eE2s/

Creo il file acme.json

touch conf/acme.json
chmod 600 conf/acme.json

Creo il file ./conf/traefik.toml


[entryPoints]
  [entryPoints.web]
    address = ":80"
    [entryPoints.web.http.redirections.entryPoint]
      to = "websecure"
      scheme = "https"

  [entryPoints.websecure]
    address = ":443"

[api]
  dashboard = true

[certificatesResolvers.lets-encrypt.acme]
  email = "maurizio.proietti(AT)EMAIL.com"
  storage = "acme.json"
  [certificatesResolvers.lets-encrypt.acme.tlsChallenge]

[providers.docker]
  watch = true
  network = "proxy"


[providers.file]
  filename = "traefik_dynamic.toml"
  

Creo il file ./conf/traefik_dynamic.toml

[http.middlewares.simpleAuth.basicAuth]
  users = [
    "username:$apr1$VDSty0Wy$5nrZ7nthjusltZXM0XXeE2s/"
  ]

[http.routers.api]
  rule = "Host(`traefik.proietti.net`)"
  entrypoints = ["websecure"]
  middlewares = ["simpleAuth"]
  service = "api@internal"
  [http.routers.api.tls]
    certResolver = "lets-encrypt"


Creo il ./docker-compose.yaml:

version: "3.3"

services:

  traefik:
    image: "traefik:v2.2"
    container_name: "traefik"

    ports:
      - "80:80"
      - "443:443"

    networks:
      - "proxy"
    volumes:
      - "./data/letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./conf/traefik.toml:/traefik.toml"
      - "./conf/traefik_dynamic.toml:/traefik_dynamic.toml"
      - "./conf/acme.json:/acme.json"
      


networks:
  proxy:
    external: true


Lancio il docker-compose up -d

docker-compose up -d

Et voilà!!!

Per vedere il risultato mi collego a

traefik.proietti.net

e faccio login

WordPress

Per usare il docker-compose occorre creare prima di tutto un file .env esempio env.example

Di seguito un esempio:

## WP ENV
WORDPRESS_DB_HOST=db
WORDPRESS_DB_USER=userdb
WORDPRESS_DB_PASSWORD=passworddb
WORDPRESS_DB_NAME=database
VIRTUAL_HOST=www.maurizio.proietti.name,blog.proietti.net
VIRTUAL_PORT=80
LETSENCRYPT_HOST=www.maurizio.proietti.name
LETSENCRYPT_EMAIL=maurizio.proietti(AT))EMAIL.com

## MYSQL ENV
MYSQL_DATABASE=database
MYSQL_USER=userdb
MYSQL_PASSWORD=passworddb
MYSQL_ROOT_PASSWORD=segretissima

##TRAEFIK
TRAEFIK_ROUTE_NAME=wp_mp


Nella dir dockerfile/wp trovo:

  • il Dockerfile di WP
  • la conf di apache (mpm) con alto o scarso traffico
  • le impostazioni personalizzate del php.ini

Ho personalizzato un po' l'immagine di WordPress per avere un po' di performance in più e per distinguere un sito con meggior traffico da uno con meno traffico. Per cambiare impostazione vedi (dockerfile/wp/Dockerfile) e in particolare le righe:

## APACHE
#COPY ./mpm_prefork_low_trafic.conf /etc/apache2/mods-available/mpm_prefork.conf
COPY ./mpm_prefork_low_trafic.conf /etc/apache2/mods-available/mpm_prefork.conf

Anche il php.ini è modificato per gestire le dimensioni di upload v. dockerfile/wp/php-wp.ini

Creo il mio docker-compose.yml

version: '3.1'

services:


  wordpress:
#    image: wordpress
    build:
      # call the Dockerfile in ./wordpress
      context: ./dockerfile/wp
    restart: always
    container_name: wp_www.maurizio.proietti.name
    environment:
      WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
      WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
      WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
      WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
      VIRTUAL_HOST: ${VIRTUAL_HOST}
      VIRTUAL_PORT: ${VIRTUAL_PORT}
      LETSENCRYPT_HOST: ${LETSENCRYPT_HOST}
      LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
    labels:
      - traefik.http.routers.${TRAEFIK_ROUTE_NAME}.rule=Host(`${LETSENCRYPT_HOST}`)
      - traefik.http.routers.${TRAEFIK_ROUTE_NAME}.tls=true
      - traefik.http.routers.${TRAEFIK_ROUTE_NAME}.tls.certresolver=lets-encrypt
      - traefik.port=${VIRTUAL_PORT}
    depends_on:
      - db
      - redis
    restart: unless-stopped
    networks:
      - proxy
      - backend
    volumes:
      - ./data/html:/var/www/html

  db:
    container_name: mysql_www.maurizio.proietti.name
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    labels:
      - traefik.enable=false
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - backend


  redis:
    image: redis:6
    container_name: redis_www.maurizio.proietti.name
    restart: always
    sysctls:
      - net.core.somaxconn=1024
    labels:
      - traefik.enable=false
    volumes:
      - ./data/redis:/data
    networks:
      - backend
    # launch Redis in cache mode with :
    #     #  - max memory up to 50% of your RAM if needed (--maxmemory 512mb)
    #         #  - deleting oldest data when max memory is reached (--maxmemory-policy allkeys-lru)
#    entrypoint: redis-server --maxmemory 512mb -maxmemory-policy allkeys-lru
    entrypoint: redis-server /data/redis.conf




networks:
  proxy:
    external: true
  backend:
    external: false






Lancio:

docker-compose build
docker-compose up -d

Entro nel sito e completo l’installazione con dati casuali

Poi faccio un rsync della SOLA directory wp-content:

rsync -uazv /var/www/maurizioproietti/wp/wp-content data/html/

Poi eseguo il dump del vecchio DB:

mysqldump --opt maurizioproietti > dump.sql

E controllo che la prefix delle tabelle sia wp_

Se non lo fosse sostituisco la prefix che ha il dump con wp_

Poi importo il dump nel nuovo db sotto docker:

cat dump.sql | docker exec -i mysql_www.maurizio.proietti.name /usr/bin/mysql -u root --password=secret123 db

Imposto i permessi sul filesystem per bene oppure (se ho fretta)

chmod -R 777 data

Entro nella sezione wp-admin e inizio gli aggiornamenti suggeriti nel seguente ordine (che penso possa variare la per scaramanzia non vario 🙂 )

1.) Plugins

2.) Temi

3.) WordPress Core

Posso poi installare w3 total cache.

Attenzione!!!

Occorre settare correttamente l'indirizzo di redis:

redis:6379

Come ti dockerizzo un WordPress esistente

Questa è una guida di massima… tutti gli aggiornamenti sono qui:

https://github.com/MaoX17/wordpress-docker-compose

Ho avuto qualche difficoltà ma poi ho trovato la via giusta.

Segui ESATTAMENTE i passaggi che riporto.

1.) Creo il mio docker-compose.yml

version: '3.1'

services:


  wordpress:
    image: wordpress
    restart: always
    container_name: wp_www.maurizio.proietti.name
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password123
      WORDPRESS_DB_NAME: db
      VIRTUAL_HOST: www.maurizio.proietti.name
      VIRTUAL_PORT: 80
      LETSENCRYPT_HOST: www.maurizio.proietti.name
      LETSENCRYPT_EMAIL: maurizio.proietti@gmail.com
    depends_on:
      - db
    restart: unless-stopped
    networks:
      - proxy
      - www.maurizio.proietti.name-net
    volumes:
      - ./data/html:/var/www/html

  db:
    container_name: mysql_www.maurizio.proietti.name
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: password123
      MYSQL_ROOT_PASSWORD: secret123
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - www.maurizio.proietti.name-net

networks:
  proxy:
    external:
      name: nginx-proxy
  www.maurizio.proietti.name-net:

Lancio il docker-compose up -d

docker-compose up -d

Entro nel sito e completo l’installazione con dati casuali

Poi faccio un rsync della SOLA directory wp-content:

rsync -uazv /var/www/maurizioproietti/wp/wp-content data/html/

Poi eseguo il dump del vecchio DB:

mysqldump --opt maurizioproietti > dump.sql

E controllo che la prefix delle tabelle sia wp_

Se non lo fosse sostituisco la prefix che ha il dump con wp_

Poi importo il dump nel nuovo db sotto docker:

cat dump.sql | docker exec -i mysql_www.maurizio.proietti.name /usr/bin/mysql -u root --password=secret123 db

Imposto i permessi sul filesystem per bene oppure (se ho fretta)

chmod -R 777 data

Aggiungi 

define('FS_METHOD', 'direct');

al wp-config.php

Entro nella sezione wp-admin e inizio gli aggiornamenti suggeriti nel seguente ordine (che penso possa variare la per scaramanzia non vario 🙂 )

1.) Plugins

2.) Temi

3.) WordPress Core

Come ti Dockerizzo un progetto laravel esistente

La mia base di partenza è stata il seguente git (che ringrazio per l’idea)

https://github.com/aschmelyun/docker-compose-laravel

Quindi ho seguito i seguenti passaggi:

docker network create nginx-proxy

mkdir /opt/docker
mkdir 00_nginx_reverse

cat 00_nginx_reverse/docker-compose.yml

version: '2'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./data/conf:/etc/nginx/conf.d
      - ./data/vhost:/etc/nginx/vhost.d
      - ./data/dhparam:/etc/nginx/dhparam
      - ./data/nginx-html:/usr/share/nginx/html
      - ./data/certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy
    restart: always

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-proxy-le
    environment:
      - "DEFAULT_EMAIL=maurizio.proietti@gmail.com"
      - "NGINX_PROXY_CONTAINER=nginx-proxy"
#      - "DEBUG=true"
    volumes_from:
      - nginx-proxy
    volumes:
      - ./data/vhost:/etc/nginx/vhost.d
      - ./data/nginx-html:/usr/share/nginx/html
      - ./data/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

networks:
  proxy:
    external:
      name: nginx-proxy

git clone https://github.com/aschmelyun/docker-compose-laravel.git

mv docker-compose-laravel template_laravel

cd template_laravel

vim docker-compose.yml


version: '3'

networks:
  laravel:

services:
  site:
    build:
      context: .
      dockerfile: nginx.dockerfile
    container_name: nginx_TEMPLATE_DA_CAMBIARE
    environment:
      VIRTUAL_HOST: TEMPLATE_DA_CAMBIARE
      VIRTUAL_PORT: 80
      LETSENCRYPT_HOST: TEMPLATE_DA_CAMBIARE
      LETSENCRYPT_EMAIL: maurizio.proietti@gmail.com
    volumes:
      - ./src:/var/www/html:delegated
    depends_on:
      - php
      - mysql
    networks:
      - laravel_TEMPLATE_DA_CAMBIARE
      - proxy

  mysql:
    image: mariadb
    container_name: mysql_TEMPLATE_DA_CAMBIARE
    restart: unless-stopped
    tty: true
    environment:
      MYSQL_DATABASE: homestead
      MYSQL_USER: homestead
      MYSQL_PASSWORD: secret
      MYSQL_ROOT_PASSWORD: secret
      SERVICE_NAME: mysql
    volumes:
      - ./mysqldata:/var/lib/mysql
    networks:
      - laravel_TEMPLATE_DA_CAMBIARE

  php:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: php_TEMPLATE_DA_CAMBIARE
    volumes:
      - ./src:/var/www/html:delegated
    networks:
      - laravel_TEMPLATE_DA_CAMBIARE

  composer:
    build:
      context: .
      dockerfile: composer.dockerfile
    container_name: composer_TEMPLATE_DA_CAMBIARE
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    depends_on:
      - php
    user: laravel
    networks:
      - laravel_TEMPLATE_DA_CAMBIARE
    entrypoint: ['composer', '--ignore-platform-reqs']

  npm:
    image: node:13.7
    container_name: npm_TEMPLATE_DA_CAMBIARE
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    entrypoint: ['npm']

  artisan:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: artisan_TEMPLATE_DA_CAMBIARE
    volumes:
      - ./src:/var/www/html:delegated
    depends_on:
      - mysql
    working_dir: /var/www/html
    user: laravel
    entrypoint: ['php', '/var/www/html/artisan']
    networks:
      - laravel_TEMPLATE_DA_CAMBIARE

networks:
  proxy:
    external:
      name: nginx-proxy
  laravel_TEMPLATE_DA_CAMBIARE:


vim php.dockerfile

FROM php:7.2-fpm-alpine

ADD ./php/www.conf /usr/local/etc/php-fpm.d/www.conf

RUN addgroup -g 1000 laravel && adduser -G laravel -g laravel -s /bin/sh -D laravel

RUN mkdir -p /var/www/html

RUN chown laravel:laravel /var/www/html

WORKDIR /var/www/html

RUN docker-php-ext-install pdo pdo_mysql

RUN apk update

RUN apk add libpng libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev libxpm-dev gd && docker-php-ext-install gd


Ho dovuto installare gd perchè non c’era

Nel progetto non funzionavano i link creati con l’helper url() perchè puntavano tutti a http invece che https

Occorre quindi effettuare una modifica:

Editare il file /app/Providers/AppServiceProvider.php 

e modificare la

public function boot()

con

use Illuminate\Routing\UrlGenerator;

public function boot(UrlGenerator $url)
{
    if (env('APP_ENV') !== 'NATIVO') {
        $url->forceScheme('https');
    }
}

In questo modo i link hanno ricominciato a funzionare

Dopo occorre modificare il file .env

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

I file sorgenti di laravel vanno messi in ./src

Poi possiamo costruire i container:

docker-compose up --build 

Occorre migrare il db:

mysqldump --opt db_original > dump.sql

cat dump.sql | docker exec -i mysql_TEMPLATE_DA_CAMBIARE
 /usr/bin/mysql -u root --password=secret homestead