Category: Webutils

  • Multipli siti web in diversi container su un server Proxmox 9 con un solo IP Pubblico

    tratto da: https://community.ovhcloud.com/community/en/new-os-available-proxmox-virtual-environment-ve-9?id=community_question&sys_id=362f0572b1e7ae14f07803b560bfcdaf

    Prerequisiti

    • OVH/Kimsufi dedicated server
    • Proxmox 9 installed by OVH
    • SSH access to the server
    • Basic understanding of Linux networking

    Parte 1: Installazione iniziale

    1.1 Setup utente amministratore

    # SSH into server as root
    ssh root@YOUR_SERVER_IP

    # Create admin user
    adduser utente
    usermod -aG sudo utente

    # Set up SSH key access
    mkdir -p /home/utente/.ssh
    cp /root/.ssh/authorized_keys /home/utente/.ssh/
    chown -R utente: /home/utente/.ssh
    chmod 700 /home/utente/.ssh
    chmod 600 /home/utente/.ssh/authorized_keys

    # Configure passwordless sudo
    echo "utente ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/utente
    chmod 440 /etc/sudoers.d/utente

    1.2 Accesso Interfaccia Web

    Imposto la password di root per poter accedere all’interfaccia web

    passwd root

    Posso ora accedere alla pagina web di Proxmox: https://YOUR_SERVER_IP:8006

    Parte 2: Configurazione di rete dei container

    2.1 il problema

    La configurazione di default della rete dei container su OVH fallisce a causa di:

    • I container si connettono direttamente alla rete esterna vmbr0
    • Non è prevista la configurazione NAT per i container
    • Mancano le regole di FORWARD tra le reti esterne ed interne

    2.2 Creo una rete Bridge interna

    Modifica /etc/network/interfaces e aggiungi:

    auto vmbr6
    iface vmbr6 inet static
    address 10.0.0.254/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0
    post-up echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o vmbr0 -j MASQUERADE

    2.3 Attivo il bridge interno

    # Bring up the new bridge
    ifup vmbr6

    # Verify bridge creation
    ip addr show vmbr6

    2.4 Configuro l’inoltro dei pacchetti:

    # Enable IP forwarding permanently
    echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
    sysctl -p

    # Add FORWARD rules for container-to-internet traffic
    iptables -I FORWARD -i vmbr6 -o vmbr0 -j ACCEPT
    iptables -I FORWARD -i vmbr0 -o vmbr6 -m state --state RELATED,ESTABLISHED -j ACCEPT

    # Importo il forward dei pacchetti web
    iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.100:15080
    iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.100:15443
    iptables -A FORWARD -p tcp -d 10.0.0.100 --dport 15080 -j ACCEPT
    iptables -A FORWARD -p tcp -d 10.0.0.100 --dport 15443 -j ACCEPT

    # Save iptables rules
    mkdir -p /etc/iptables
    iptables-save > /etc/iptables/rules.v4

    Parte 3: Creazione del container di routing

    3.1 Download del Template per il Container

    Dall’interfaccia web di Proxmox:

    • Vai sul nodo –> local storage
    • Clicca sul tab: “CT Templates”
    • Clicca sul tasto “Templates”
    • Scarica Debian-13-standard

    3.2 Crea il container dall’interfaccia web

    Dal nodo proxmox premo il tasto destro e scelgo “Crea CT”

    • General tab:
      • CT ID: 100
      • Hostname: your-container-name
      • Set password
      • Add SSH public key (opzionale)
    • Template tab:
      • Select debian-13-standard
    • Root Disk tab:
      • Size: 8GB (adjust as needed)
    • CPU/Memory tabs:
      • Set as needed (1 core, 1GB RAM for basic web server)
    • Network tab:
      • CRITICAL: Change bridge from vmbr0 to vmbr6
      • Set static IP: 10.0.0.100/24 (increment for additional containers)
      • Gateway: 10.0.0.254
    • DNS tab:
      • Use host settings

    3.3 Verifica e configurazione Container di routing

    # Start container
    pct start 100

    # Enter container
    pct enter 100

    # Test connectivity
    ping -c 3 10.0.0.254 # Gateway
    ping -c 3 8.8.8.8 # Internet

    # Applico gli aggiornamenti come di prassi
    apt update && apt upgrade -y

    # Scarico i pacchetti nginx e Let's Encrypt
    apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface python3-certbot-nginx nginx

    # Rimuovo la configurazione per il sito di default
    rm /etc/nginx/sites-enabled/default

    # Creo una configurazione di routing per un primo sito web: example.com sul server locale 10.0.0.101
    echo 'server {
    listen 15080;
    listen [::]:15080; # Also listen on IPv6
    server_name example.com;

    location / {
    proxy_pass http://10.0.0.101:80; # Indirizzo del server di destinazione
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
    }' > /etc/nginx/conf.d/router.conf

    # Riavvio il server NGINX
    service nginx restart

    3.4 Test raggiungibilità sito web

    I record DNS del vostro sito “example.com” deve essere configurato con un record di tipo A che punta all’indirizzo IP del vostro server Proxmox

    Puntate il vostro browser verso l’indirizzo http://example.com

    Se tutto e’ andato a buon fine dovreste vedere la pagina di Welcome di NGINX

    3.5 Richiesta del certificato Let’s Encrypt

    certbot --nginx -d example.com -m mymail@mydomain.com --agree-tos --no-eff-email --http-01-port 15080

    Certbot vi chiederà se redirigere il traffico http a https. Per ora rispondete no.

    3.6 Modificate la porta per https:

    sed -i 's/listen 443 ssl/listen 15443 ssl/g' /etc/nginx/conf.d/router.conf

    # Riavvio NGINX
    service nginx restart

    Parte 4: Server Web

    Potete ora creare un nuovo container per ospitare il sito example.com (potete ripetere questi passaggi per altri nuovi container):

    • General tab:
      • CT ID: 101
      • Hostname: example.com
      • Set password
      • Add SSH public key (opzionale)
    • Template tab:
      • Select debian-13-standard
    • Root Disk tab:
      • Size: 8GB (adjust as needed)
    • CPU/Memory tabs:
      • Set as needed (1 core, 1GB RAM for basic web server)
    • Network tab:
      • CRITICAL: Change bridge from vmbr0 to vmbr6
      • Set static IP: 10.0.0.101/24 (increment for additional containers)
      • Gateway: 10.0.0.254
    • DNS tab:
      • Use host settings

    Nota che l’indirizzo IP 10.0.0.101 è quello indicato nel file router.conf visto sopra.

    Dalla shell di proxmox:

    # Start container
    pct start 101

    # Enter container
    pct enter 101

    # Test connectivity
    ping -c 3 10.0.0.254 # Gateway
    ping -c 3 8.8.8.8 # Internet

    # Applico gli aggiornamenti come di prassi
    apt update && apt upgrade -y

    # Scarico, installo e configuro Caddy
    wget -O /tmp/caddy.tar.gz 'https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_linux_amd64.tar.gz'
    tar -xzf /tmp/caddy.tar.gz -C /usr/local/bin/ caddy
    chmod +x /usr/local/bin/caddy

    # Verify installation
    /usr/local/bin/caddy version

    # Create directory structure
    mkdir -p /etc/caddy /var/www/html

    # Create test page
    echo '<h1>Working Caddy Web Server</h1><p>Container networking successful!</p>' > /var/www/html/index.html

    # Create basic Caddyfile
    echo ':80 {
    root * /var/www/html
    file_server
    }' > /etc/caddy/Caddyfile

    # Start Caddy
    nohup /usr/local/bin/caddy run --config /etc/caddy/Caddyfile > /var/log/caddy.log 2>&1 &

    Potete ora navigare su https://example.com

    Avete finito !!

    Nel file /etc/nginx/conf.d/router.conf potete aggiungere la configurazione anche per altri siti o server locali modificando il nome del sito o l’indirizzo del server (10.0.0.102, 10.0.0.103 …)

  • Installare GitLab in Debian 8 con certificato Let’s Encrypt

    Da utente root:

    su -
    
    apt-get update && apt-get install curl

    Installo certbot

    echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
    
    apt-get update && apt-get install certbot -t jessie-backports

    Creo il file di configurazione di letsencrypt per gitlab.(cambiare gitlab.yourdomain.com con il nome del vostro sito e your@email.com con il vostro indirizzo email)

    Il dominio mattermost.yourdomain.com serve per abilitare anche la chat inclusa in gitlab (cambiare yourdomain.com col vostro dominio)

    mkdir -p /root/letsencrypt-config 
    cat <<EOT >> /root/letsencrypt-config/gitlab.ini
    # this is the let's Encrypt config for our gitlab instance
    
    # use the webroot authenticator. 
     authenticator = webroot
    # the following path needs to be served by our webserver
    # to validate our domains
     webroot-path = /var/www/letsencrypt
    
    # generate certificates for the specified domains.
    domains = gitlab.yourdomain.com, mattermost.yourdomain.com
    
    # register certs with the following email address
    email = your@email.com
    
    # use a 4096 bit RSA key instead of 2048
    rsa-key-size = 4096
    EOT

    Creo una cartella per la verifica del sito

    mkdir -p /var/www/letsencrypt

    Installo Gitlab

    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
    apt-get install gitlab-ce

    Modifico il file di configurazione di Gitlab impostando il nome del sito (cambiare gitlab.yourdomain.com con il nome del vostro sito)

    vi /etc/gitlab/gitlab.rb
    external_url "http://gitlab.yourdomain.com"

    Per abilitare la chat mattermost modificare anche la seguente riga:

    mattermost_external_url 'http://mattermost.yourdomain.com'

    Aggiungo al file di configurazione delle linee per utilizzare le chiavi e per attivare l’invio della posta. Modificare opportunamente le variabili evidenziate

    cat <<EOT >> /etc/gitlab/gitlab.rb
    ### Customize NGINX
    nginx['redirect_http_to_https'] = true
    nginx['ssl_certificate']= "/etc/letsencrypt/live/gitlab.yourdomain.com/fullchain.pem"
    nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/privkey.pem"
    
    nginx['custom_gitlab_server_config']="location ^~ /.well-known {\n alias /var/www/letsencrypt/.well-known;\n}\n"
    
    ### SMTP
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.gmail.com"
    gitlab_rails['smtp_port'] = 587
    gitlab_rails['smtp_user_name'] = "my.email@gmail.com"
    gitlab_rails['smtp_password'] = "my-gmail-password"
    gitlab_rails['smtp_domain'] = "smtp.gmail.com"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = false
    gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
    EOT

    Per configurare anche la chat Mattermost aggiungere le seguenti righe:

    cat <<EOT >> /etc/gitlab/gitlab.rb
    mattermost_nginx['custom_gitlab_mattermost_server_config'] = "location ^~ /.well-known {\n alias /var/www/letsencrypt/.well-known;\n}\n"
    mattermost['enable'] = true
    mattermost['gitlab_auth_endpoint'] = "https://gitlab.yourdomain.com/oauth/authorize"
    mattermost['gitlab_token_endpoint'] = "https://gitlab.yourdomain.com/oauth/token"
    mattermost['gitlab_user_api_endpoint'] = "https://gitlab.yourdomain.com/api/v3/user"
    mattermost_nginx['redirect_http_to_https'] = true
    mattermost_nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/fullchain.pem"
    mattermost_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.yourdomain.com/privkey.pem"
    mattermost['email_enable_sign_up_with_email'] = true
    mattermost['email_enable_sign_in_with_email'] = true
    mattermost['email_enable_sign_in_with_username'] = true
    mattermost['email_send_email_notifications'] = true
    mattermost['email_require_email_verification'] = false
    mattermost['email_smtp_username'] = "my.email@gmail.com"
    mattermost['email_smtp_password'] = "my-gmail-password"
    mattermost['email_smtp_server'] = "smtp.gmail.com"
    mattermost['email_smtp_port'] = 587
    mattermost['email_connection_security'] = "STARTTLS"
    EOT

    Per altre configurazioni smtp vedi: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md

    Riconfiguro GITLAB

    gitlab-ctl reconfigure

    Creo il certificato

    certbot certonly -c /root/letsencrypt-config/gitlab.ini

    Modifico la configurazione impostando https

    vi /etc/gitlab/gitlab.rb
    external_url "https://gitlab.yourdomain.com/"

    anche per Mattermost

    mattermost_external_url 'https://mattermost.yourdomain.com'

    Creo uno script per l’aggiornamento del certificato

    cat <<EOT >> /etc/cron.monthly/renew-ssl-certificates
    
    #!/bin/bash
    
    /usr/bin/certbot certonly -c /root/letsencrypt-config/gitlab.ini --renew-by-default
    # or /usr/bin/certbot renew --quiet
    
    gitlab-ctl restart
    EOT

    Rendo eseguibile lo script

    chmod +x /etc/cron.monthly/renew-ssl-certificates

    Accedo a gitlab con l’utente root (la password viene richiesta alla prima schermata)

    Dall’area admin – Settings – Applications, modifico l’url dell’applicazione Mattermost da http a https

    https://mattermost.yourdomain.com/signup/gitlab/complete
    
    https://mattermost.yourdomain.com/login/gitlab/complete
  • VestaCP e Iptables su container Proxmox

    Utilizzando il Pannello VestaCP su una macchina virtuale (container) sotto Proxmox ho riscontrato che non potevo inviare mail tramite smtp.

    Indagando sono riuscito a capire che iptables non funziona correttamente nei container di Proxmox.
    In particolare queste regole ad esempio non si attivano:
    – append INPUT – match state – state ESTABLISHED, RELATED – jump ACCEPT
    – append OUTPUT – match state – state ESTABLISHED, RELATED – jump ACCEPT
    Allora, visto che modprobe non è attivo nei container ho trovato che nella macchina padre Proxmox bisogna modificare il file

    /etc/vz/vz.conf
    e nella sezione IPv4 modificare la riga IPTABLES in:

    IPTABLES="iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT xt_mac ipt_owner"

    A questo punto riavviare la macchina e dai container le regole viste sopra funzionano..
    Ma ho visto anche che lo script di attivazione di iptables di vestaCP fa un test per verificare se e’ presente il modulo “state” che non funziona ancora..

    Allora ho modificato il file
    /usr/local/vesta/bin/v-update-firewall

    alla riga 41 e seguenti in questo modo:

    # Checking conntrack module avaiabilty
    #$modprobe nf_conntrack >/dev/null 2>&1
    #$modprobe nf_conntrack_ftp >/dev/null 2>&1
    cat /proc/net/ip_tables_matches | grep state > /dev/null 2>&1
    if [ $? -ne 0 ]; then
    stateful='no'
    fi
    

    riavviando dal pannello VestaCP il servizio di firewall, ora tutto funziona a dovere !!

  • Proxmox firewall e router con un solo ip pubblico

    Ecco come ho impostato il server proxmox per avere un firewall e il routing tramite un unico ip pubblico.

    Dal pannello di controllo web abilitare eth0 con l’ip pubblico senza bridge e vmbr0 con un ip locale:

    ...
    auto eth0
    iface eth0 inet static
             address 91.11.22.33
             netmask 255.255.255.0
             broadcast 91.11.22.255
             gateway 91.11.22.254
    
    auto vmbr0
    iface vmbr0 inet static
            address 10.254.254.254
            netmask 255.0.0.0
            broadcast 10.255.255.255
            bridge_ports none
            bridge_stp off
            bridge_fd 0
    
    ...
    ...

    Ora install shorewall

    sudo aptitude install shorewall

    Creo il file /etc/shorewall/zones e ci scrivo:

    #ZONE   TYPE            OPTIONS         IN                      OUT
    #                                       OPTIONS                 OPTIONS
    fw      firewall
    net     ipv4
    dmz     ipv4

    Creo il file /etc/shorewall/interfaces e ci scrivo:

    #ZONE   INTERFACE       BROADCAST       OPTIONS
    net     eth0            detect          blacklist,nosmurfs
    dmz     venet0          detect          routeback
    dmz     vmbr0           detect          routeback,bridge

    Creo il file /etc/shorewall/policy e ci scrivo:

    #SOURCE DEST    POLICY          LOG     LIMIT:          CONNLIMIT:
    #                               LEVEL   BURST           MASK
    
    # From Firewall Policy
    fw      fw      ACCEPT
    fw      net     ACCEPT
    fw      dmz     ACCEPT
    
    # From DMZ Policy
    
    dmz     dmz     ACCEPT
    dmz     net     ACCEPT
    dmz     fw      DROP            info
    
    # From Net Policy
    net     fw      DROP            info
    net     dmz     DROP            info
    
    # THE FOLLOWING POLICY MUST BE LAST
    #
    all     all     REJECT          info

    Creo il file /etc/shorewall/rules e ci scrivo:

    #ACTION          SOURCE     DEST       PROTO   DEST        SOURCE     ORIGINAL    RATE
    
    # Permit access to SSH
    SSH/ACCEPT       net        fw         -       -            -          -        
      6/min:5
    
    # Permit access to Proxmox Manager and Console
    ACCEPT           net        fw         tcp     443,5900:5999
    
    # PING Rules
    Ping/ACCEPT      all        all
    
    # LAST LINE -- DO NOT REMOVE

    Alla fine la cartella /etc/shorewall dovrebbe contenere i seguenti file:

    drwxr-xr-x  2 root root 4096 Apr 14 15:15 .
    drwxr-xr-x 77 root root 4096 Apr 14 13:15 ..
    -rw-r--r--  1 root root  453 Nov  8  2007 Makefile
    -rw-r--r--  1 root root  214 Apr 14 15:03 interfaces
    -rw-r--r--  1 root root  494 Apr 14 15:10 policy
    -rw-r--r--  1 root root  517 Apr 14 15:15 rules
    -rw-r--r--  1 root root 4004 Apr 14 13:18 shorewall.conf
    -rw-r--r--  1 root root  183 Apr 14 13:19 zones

    Controllo ora il funzionamento di shorewall:

    shorewall try /etc/shorewall 60

    in questo minuto di prova posso provare se risponde il pannello di controllo web di proxmox e se riesco a loggarmi in ssh al server.

    Se tutto funziona posso abilitare proxmox all’avvio automatico: modifico il file /etc/default/shorewall e cambio:

    startup=0

    in

    startup=1

    Posso ora avviare shorewall manualmente col comando

    shorewall start

    oppure riavviarlo al bisogno con

    shorewall restart

    Per permettere alle macchine virtuali di uscire in internet creo il file /etc/shorewall/masq e sccrivo:

    #INTERFACE      SOURCE          ADDRESS         PROTO   PORT(S) IPSEC   MARK
    eth0            10.0.0.0/8
    
    # LAST LINE -- DO NOT REMOVE

    per dirottare il traffico web (porta 80) su una macchina virtuale inserisco nel file /etc/shorewall/rules questa regola:

    DNAT                    net     dmz:10.0.1.101          tcp     80

    Posso anche cambiare porta di destinazione nella macchina virtuale con la regola:

    DNAT                    net     dmz:10.0.1.103:8180     tcp     80

    Le macchine virtuali potranno avere degli indirizzi privati del tipo 10.xxx.yyy.zzz (es 10.0.1.101) ed essere gestiti semplicemente con un’interfaccia venet.

    Shorewall ha alcune opzioni comode e interessanti:

    safe-restart

    salva la configurazione attuale, quindi applica quella nuova e chiede conferma per mantenere le nuove regole; se la conferma non è data entro 60 secondi sono riapplicate le regole precedenti;

    try configuration-directory [timeout]

    riavvia shorewall utilizzando la configurazione presente nella directory specificata e se sono rilevati errori o se il timeout è raggiunto, le regole precedenti sono riapplicate;

    show check

    esegue la validazione sintattica della configurazione;

    logwatch

    simile a tail -f $LOGFILE;

    ipcalc [<address> <mask> | <address/vlsm>]

    dato un indirizzo di rete, mostra i corrispondenti indirizzi di network, broadcast e netmask.

    (per questo post ho preso pesantemente spunto dal seguente: http://www.myatus.co.uk/2009/08/31/guide-firewall-and-router-with-proxmox/)

  • Come rimuovere i Credits da Phoca Gallery

    Usate Joomla, magari la versione nuova 1.6 e avete installato la galleria di immagini Phoca Gallery 3.0 rc3 ?

    Magari vorreste anche togliere dalle pagine della galleria la scritta “Powered by Phoca Gallery” che compare in ogni pagina della gallery.

    Bene allora questo vi può esser utile:

    Dalla cartella principale del vostro sito entrate nella cartella

    administrator/components/com_phocagallery/libraries/phocagallery/utils/

    ed editate il file utils.php

    cercate la funzione footer() e mettete un cancelletto (#) davanti alla riga che inizia per echo base64_decode

    Otterrete così:

    public function footer() {
      #echo base64_decode('PGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjojZDNkM2QzOyI+UG93ZXJlZCBieSA8YSBocmVmPSJodHRwOi8vd3d3LnBob2NhLmN6IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJQaG9jYS5jeiI+UGhvY2E8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cucGhvY2EuY3ovcGhvY2FnYWxsZXJ5IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyIgdGFyZ2V0PSJfYmxhbmsiIHRpdGxlPSJQaG9jYSBHYWxsZXJ5Ij5HYWxsZXJ5PC9hPjwvZGl2Pg0K');
     }
    

    Funziona ?

  • Nuovo ZopeSkel

    E’ stata appena rilasciata la nuova versione di ZopeSkel

    La nuova versione rende ora possibile creare un buildout apposito per Plone 4

    I sorgenti si trovano su pypi e plone.org

    per aggiornare o installare ZopeSkel:

    sudo easy_install -U ZopeSkel

    e per creare un buildout di Plone 4

    paster create -t plone4_buildout
  • Creazione di un tema personalizzato per Plone 4

    Nell’articolo precedente abbiamo visto come installare Plone in un server Ubuntu 10.04, ora vediamo come creare un tema personalizzato per Plone 4.

    Dalla cartella principale dove abbiamo installato Plone 4, entrimo nella cartella src:

    cd plone402/src

    Utilizziamo paster per generare il template:

    paster create -t plone3_theme

    Alle richieste rispondiamo in questo modo:

    Enter project name: plonetheme.testplone4
    Variables:
     egg:      plonetheme.testplone4
     package:  plonethemetestplone4
     project:  plonetheme.testplone4
    Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']:
    Skin Name (Name of the theme (human facing, added to portal_skins)) ['']: Tema Test Plone4
    Empty Styles? (Override default public stylesheets with empty ones?) [False]:
    Include Documentation? (Include in-line documentation in generated code?) [True]:
    Version (Version number for project) ['1.0']:
    Description (One-line description of the project) ['An installable theme for Plone 3']:
    

    Note:

    • Il nome così formato corrisponde al namespace tipico dei prodotti Plone
    • Lo Skin Name e’ il nome che poi sarà visibile
    • Empty styles: impostando su yes verranno generati automaticamente dei fogli di stile vuoti che avranno la precedenza su quelli standard di Plone. Risulta piu’ semplice però lasciar attivi i CSS originali e andar a sovrascrivere solo le parti da modificare

    Il tema è stato ora generato ma dovremo farlo riconoscere a Plone4

    cd ..

    editiamo il file buildout.cfg e lo modifichiamo in questo modo:

    Originale Modificato
    develop =
    develop =
     src/plonetheme.testplone4
    eggs =
     Zope2
     Plone
     ${buildout:eggs}
    eggs =
     Zope2
     Plone
     ${buildout:eggs}
     plonetheme.testplone4
    zcml =
    zcml =
     plonetheme.testplone4

    Salviamo le modifiche e rilanciamo lo script buildout

    ./bin/buildout -v

    Il parametro -v aumenta la verbosità

    Riavviamo il server:

    ./bin/instance fg

    (per stoppare il server utilizzeremo la combinazione di tasti ctrl+c)

    Col browser puntiamo al pannello di configurazione di Plone4: http://192.168.1.203:8080/Plone/plone_control_panel

    e selezioniamo il link Prodotti Aggiuntivi

    in alternativa possiamo puntare direttamente all’indirizzo: http://192.168.1.203:8080/Plone/prefs_install_products_form

    Selezioniamo il tema che abbiamo creato e attiviamolo con l’apposito tasto

    Ora vedremo il sito Plone spogliato di tutti i fogli di stile:

    Brutta sorpresa direte, visto che prima abbiamo scelto di non sovrascrivere i css originari.

    Con Plene 3 avrei avuto il risultato voluto ma con Plone 4 c’è ancora un passaggio da fare.

    Il tema che abbiamo trovato inizialmente su Plone 4 si chiama Sunburst Theme ma in Plone 3 il tema di default si chiamava Plone Default. Il vecchio tema è ancora disponibile ma ora in Plone 4 si chiama Plone Classic Theme.

    Il tema che abbiamo creato dunque va adattato a Plone 4.

    Basta modificare il file che troviamo in src/plonetheme.testplone4/plonetheme/testplone4/profiles/default/skins.xml in questo modo:

    Originale
    <skin-path name="Tema Test Plone4" based-on="Plone Default">
    Modificato
    <skin-path name="Tema Test Plone4" based-on="Sunburst Theme">

    Una volta salvata la modifica dovremo riavviare il server Zope per vederne l’effetto.

    Ora vediamo come personalizzare il tema che abbiamo creato.

    Gli strumenti che ci servono sono:

    • Firefox ed il plugin Firebug
    • Un buon editor (Komodo per esempio), magari che supporti l’editazione di file remoti
    • Eventualmente un Grid System (deco.gs per esempio) per aiutarci nello sviluppo

    Il primo lavoro che dovremo fare e’ copiare brutalmente i fogli di stile utilizzati dal tema SunBurst nel nostro tema, per poterli poi modificare a piacere.

    Per fare questo in modo semplice creiamo in ubuntu 2 variabili di sistema temporanee partendo dalla directory principale di Plone4 (nel nostro caso ~/plone402):

    cd ~/plone402
    orig=`cat bin/instance | grep "plonetheme.sunburst" | cut -d \' -f2`/plonetheme/sunburst/skins/sunburst_styles
    dest=src/plonetheme.testplone4/plonetheme/testplone4/skins/plonetheme_testplone4_styles/

    Verifichiamo i valori memorizzati con:

    echo $orig
    echo $dest

    e copiamo i file da modificare:

    cp $orig/ploneCustom.css.dtml $dest
    cp $orig/public.css $dest

    Ora col nostro editor di testo possiamo modificare a piacere questi files.

    Possiamo pensare di modificare public.css quando volgiamo modificare dei tag esistenti e inserire eventuali tag nuovi nel file ploneCustom.css.dtml ma questa scelta è arbitraria. L’importante è sapere che ploneCustom.css.dtml ha la precedenza su public.css.

    (work in progress….)

  • Installazione Plone 4.0.2 su Ubuntu server 10.04LTS

    Ecco come installare l’ultima versione di Plone (4.0.2) in un sistema Ubuntu minimale (installato in una virtual machine tramite l’immagine mini.iso ver 10.04 a 32bit).

    Inizia l’installazione di Ubuntu

    Scelgo la lingua:

    Do un nome al server:

    Partiziono come consigliato:

    Nel nostro caso bastano le partizioni essenziali:

    Imposto gli aggiornamenti automatici relativi alla sicurezza:

    Scelgo di installare solo i componenti essenziali e il servizio ssh

    Termino la procedura con l’installazione di Grub

    Una volta che il server ha terminato l’installazione e si sarà riavviato, scopriamo l’indirizzo ip assegnato dinamicamente dal server DHCP:

    ifconfig eth0
    

    Ora dal nostro PC possiamo accedere al server virtuale tramite ssh:

    ssh fc@192.168.1.203
    

    (anche Putty va bene se abbiamo solo Windows a disposizione)

    Ora possiamo installare i pacchetti che serviranno a Plone4.
    Nota bene: tutti i comandi vanno eseguiti come utente normale, non quindi da root, quando serviranno i privilegi di root verrà specificato di eseguirli tramite sudo

    sudo aptitude install build-essential python-dev python-pip python-pastescript python-setuptools python-imaging subversion
    

    Installiamo ora i componenti che ci servono per installare rapidamente i progetti Zope

    sudo pip install zopeskel

    Possiamo ora utilizzare paster per installare Plone. Diamo un’occhiata per vedere quali template sono disponibili:

    paster create --list-templates
    
    Available templates:
     archetype:          A Plone project that uses Archetypes content types
     basic_namespace:    A basic Python project with a namespace package
     basic_package:      A basic setuptools-enabled package
     basic_zope:         A Zope project
     kss_plugin:         A project for a KSS plugin
     nested_namespace:   A basic Python project with a nested namespace (2 dots in name)
     paste_deploy:       A web application deployed through paste.deploy
     plone:              A project for Plone products
     plone2.5_buildout:  A buildout for Plone 2.5 projects
     plone2.5_theme:     A theme for Plone 2.5
     plone2_theme:       A theme for Plone 2.1
     plone3_buildout:    A buildout for Plone 3 installation
     plone3_portlet:     A Plone 3 portlet
     plone3_theme:       A theme for Plone 3
     plone_app:          A project for Plone products with a nested namespace (2 dots in name)
     plone_hosting:      Plone hosting: buildout with ZEO and Plone versions below 3.2
     plone_pas:          A project for a Plone PAS plugin
     recipe:             A recipe project for zc.buildout
     silva_buildout:     A buildout for Silva projects
    

    Utilizziamo il template plone3_buildout visto che non c’e’ ancora un template specifico per Plone4

    paster create -t plone3_buildout
    

    Alle domande che ci vengono poste rispondiamo nel modo seguente

    Enter project name: plone402
    Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']: easy
    Plone Version (Plone version # to install) ['3.3.5']: 4.0.2
    Zope2 Install Path (Path to Zope2 installation; leave blank to fetch one!) ['']:
    Plone Products Directory (Path to Plone products; leave blank to fetch [Plone 3.0/3.1 only]) ['']:
    Initial Zope Username (Username for Zope root admin user) ['admin']: admin
    Initial User Password (Password for Zope root admin user) ['']: admin
    HTTP Port (Port that Zope will use for serving HTTP) ['8080']:
    Debug Mode (Should debug mode be "on" or "off"?) ['off']: on
    Verbose Security? (Should verbose security be "on" or "off"?) ['off']: off

    Per il passaggio successivo ci servirà anche il pacchetto distribute

    sudo easy_install distribute==0.6.14
    

    Entriamo nella cartella creata in precedenza:

    cd plone402/
    

    Lanciamo lo script bootstrap.py

    python bootstrap.py
    

    Alla fine otterremo la risposta: Generated script ‘/home/fc/plone402/bin/buildout’.

    Ora scarichiamo tutti i pacchetti e le dipendenze indicate nel file buildout.cfg col comando:

    ./bin/buildout
    

    Questo è il passaggio più lungo ma anche l’ultimo 😉

    Ora avviamo il server Zope

    ./bin/instance console

    Nota: è ancora possibile avviare il server tramite il comando ./bin/instance fg ma dalla versione 4 si consiglia di utilizzare ./bin/instance console

    Se vogliamo avviare il server in modalità background scriveremo: ./bin/instance start

    e col nostro Browser verifichiamo il funzionamento di Plone puntando all’indirizzo: http://192.168.1.203:8080 (sostituite all’occorrenza il numero IP con quello del vostro server):

    Questo post è stato riadattato dall’originale di Noe Misael Nieto Arroyo

    Nel prossimo articolo vedremo come creare un nostro tema per Plone 4

  • Installazione Python e Plone 4 da sorgenti

    Ecco un video di 5 minuti che mostra come installare in un sistema Unix-like Python e Plone 4 da file sorgenti:

    [youtube]DtYwZOedlcI[/youtube]

    I requisiti di sistema sono:

    • Strumenti per la compilazione (il pacchetto build-essential per Linux Debian o Ubuntu per esempio)
    • Subversion per il download da repository svn

    La procedura da linea di comando:

    Creo una cartella dove metto tutto il necessario (in questo modo non modifico minimamente le impostazione del sistema e posso fare tutto senza i permessi di root)

    cd ~
    mkdir plone
    cd plone

    Scarico Python e una libreria necessaria a Plone per la gestione delle immagini

    wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz
    wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz

    Scompatto Python e PIL

    tar xvzf Python-2.7.tgz
    tar xvzf Imaging-1.1.7.tar.gz

    Creo una cartella dove installare Python

    mkdir -p ~/plone/python/2.7

    Configuro Python per l’installazione nella cartella predisposta (specificare il percorso assoluto)

    cd ~/plone/Python-2.7
    ./configure --prefix=/Users/fc/plone/python/2.7/

    Compilo e installo Python

    make
    make install

    Installo PIL

    cd ~/plone/Imaging-1.1.7
    ~/plone/python/2.7/bin/python2.7 setup.py install
    cd ~/plone/

    Scarico il buildout di Plone 4 dal repository svn

    svn co http://svn.plone.org/svn/plone/buildouts/plone-coredev/branches/4.0/ plone4

    Installo Plone 4

    cd plone4
    ~/plone/python/2.7/bin/python2.7 ./bootstrap.py

    Modifico eventualmente il file buildout.cfg

    vi ./buildout.cfg

    Scarico tutti i pacchetti necessari

    ./bin/buildout

    Avvio il server Zope per generare l’instanza Plone

    ./bin/instance.fg

    Dal mio Browser visito la pagina: http://localhost:8080

  • Google Apps: POP su più client

    Indiscutibile la qualità del servizio di posta che Google offre tramite Google Apps, si può scegliere se consultare la posta via web (io lo preferisco), oppure utilizzare un client di posta installato nel PC tramite il protocollo POP3 o anche tramite IMAP.

    Gli affezionati al protocollo POP3 vorranno continuare ad utilizzarlo ma sorge un problema quando si vuol consultare lo stesso account di posta da più di un PC tramite il protocollo POP3. Si noterà infatti che il secondo PC che tenta di scaricare la posta non trova i messaggi che il primo PC ha già scaricato.

    Ecco allora come fare: per poter utilizzare su piu’ PC tramite POP la posta configurata su Google Apps o Gmail, occorre anteporre al nome utente la stringa “recent:

    Nelle impostazioni del  client POP , sostituire ‘username@dominio.com’ nel campo ‘Username’ o ‘e-mail’ con il la voce  ‘recent:username@dominio.com’.

    Ricordare di configurare il proprio client POP in modo da lasciare i messaggi sul server

    Per approfondimenti seguite questi link: