{"id":1490,"date":"2021-10-24T14:59:41","date_gmt":"2021-10-24T14:59:41","guid":{"rendered":"https:\/\/www.giuseppemaccario.com\/it\/?p=1490"},"modified":"2026-10-17T21:11:46","modified_gmt":"2026-10-17T21:11:46","slug":"continuous-deployment-con-github-actions-su-server-condiviso","status":"publish","type":"post","link":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/","title":{"rendered":"Continuous Deployment con GitHub Actions (su server condiviso)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduzione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tempo fa ho avuto la necessit\u00e1 di implementare un sistema di Continuous Deployment con GitHub Actions per un progetto personale. A livello enterprise, e lavorando in team, ho usato diversi servizi come per esempio Team City, che \u00e8 una soluzione CI\/CD che permette la massima flessibilit\u00e0 per tutti i tipi di flussi di lavoro e pratiche di sviluppo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In locale invece, e come sviluppatore solitario, inizialmente non facevo altro che caricare su server i file modificati, via FTP. Dinosaur style!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alcune note: uso Docker per lo sviluppo in locale per essere in grado di replicare lo stesso ambiente di produzione. Github invece mi permette di tracciare i cambiamenti apportati al codice e lavorare in isolamento usando i feature branch. Per completare il quadro, il progetto personale \u00e9 basato su Laravel 6, ed \u00e9 ospitato su un server condiviso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deploy in produzione con Github Actions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ad un certo punto, per quanto il progetto sia personale e le modifiche siano poche, trovo sempre interessante imparare ad utilizzare nuovi servizi e <a aria-describedby=\"gm-new-tab\" rel=\"noopener\" target=\"_blank\" href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions\">Github Actions<\/a> era quello che mi serviva perch\u00e9 gi\u00e1 usavo Github e anche perch\u00e9 \u00e9 uno strumento gratuito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le GitHub Actions aiutano ad automatizzare attivit\u00e1 come il deploy durante il ciclo di vita di sviluppo del tuo software. Le GitHub Actions sono guidate dagli eventi, il che significa che puoi eseguire una serie di comandi dopo che si \u00e8 verificato un evento specifico. Per esempio, ogni volta che qualcuno crea una pull request per un repository, puoi eseguire automaticamente un comando che esegue uno script di test del software o appunto, come interessa a noi in questo articolo, un deploy automatico dei file modificati sul server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo ora come configurare le Github Actions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Come configurare Github Actions per un deploy automatico via FTP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se come me, avete un server condiviso, potete seguire la mia configurazione e il risultato sar\u00e1 quello di configurare un deploy automatico via FTP, ogni volta che una Pull Request viene approvata e viene fatto il merge del feature branch con il master branch (o main branch).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sul marketplace di Github, nella sezione Actions, possiamo trovare lo strumento, gratuito, che fa per noi: <a aria-describedby=\"gm-new-tab\" rel=\"noopener\" target=\"_blank\" href=\"https:\/\/github.com\/marketplace\/actions\/ftp-deploy\">FTP Deploy<\/a> che serve appunto per automatizzare il deploy di siti web e web app.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Possiamo dire che ci sono due pre-requisiti da rispettare:<br>&#8211; avere l&#8217;accesso FTP al proprio server. Se il vostro server invece richiede un accesso con chiave SSH, allora questo <em>non<\/em> \u00e9 lo strumento che fa per voi;<br>&#8211; il vostro progetto su Github deve rispecchiare l&#8217;esatta struttura del progetto su server, quindi non va bene se avete per esempio salvato su Github anche l&#8217;infrastruttura Docker, con all&#8217;interno il vostro progetto, e che non esiste su server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Il file di Workflows<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per prima cosa dobbiamo creare una nuova directory all&#8217;interno del nostro progetto, chiamata <em>.github<\/em> e all&#8217;interno di quest&#8217;ultima, crearne un&#8217;altra chiamata <em>workflows<\/em>. A questo punto possiamo creare un nuovo file chiamato <em>main.yml<\/em> all&#8217;interno di <em>\/.github\/workflows\/<\/em> e incollare questo codice all&#8217;interno del file appena creato:<\/p>\n\n\n\n<pre tabindex=\"0\" class=\"wp-block-code\"><code># This is a basic workflow to help you get started with Actions\n\nname: \ud83d\ude80 Automatic YOUR-PROJECT Deploy on pull_request\n\non:\n  pull_request:\n    branches: \n      - master\n      - main\n    types: &#91;closed]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# A workflow run is made up of one or more jobs that can run sequentially or in parallel\njobs:\n  web-deploy:\n    name: \ud83c\udf89 Deploy\n    runs-on: ubuntu-latest\n    steps:\n    - name: \ud83d\ude9a Get latest code\n      uses: actions\/checkout@v2\n\n    - name: \ud83d\udcc2 Sync files\n      uses: SamKirkland\/FTP-Deploy-Action@4.1.0\n      with:\n        server: YOUR-PROJECT-FTP-HOST\n        username: YOUR-PROJECT-FTP-USERNAME\n        password: ${{ secrets.FTP_PASSWORD }}\n        server-dir: YOUR-PROJECT-FTP-DIRECTORY<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Prima di tutto modificare <em>tutti<\/em> i placeholder con i vostri valori di progetto: YOUR-PROJECT, YOUR-PROJECT-FTP-HOST, YOUR-PROJECT-FTP-USERNAME, YOUR-PROJECT-FTP-DIRECTORY.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ora bisogna aggiungere una chiave alla sezione secrets del tuo progetto. Per aggiungere una password segreta \u00e9 necessario cliccare sulla tab Settings del progetto e selezionare la voce <em>Secrets<\/em>. Aggiungere quindi una nuova stringa segreta per la password cliccando in alto a destra &#8220;New repository secret&#8221;. Usiamo FTP_PASSWORD come nome per valore e inseriamo la password del proprio server FTP nell&#8217;area di testo corrispondente al valore della nostra nuova stringa segreta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Salvare, poi con git aggiungiamo il nuovo file <em>\/.github\/workflows\/main.yml<\/em> e facciamo un commit e un push per salvare il nuovo file sul repository remoto:<\/p>\n\n\n\n<pre tabindex=\"0\" class=\"wp-block-code\"><code>git add .\ngit commit -m \"Added github actions workflow\"\ngit push<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In questo caso \u00e9 possibile lavorare sul branch principale, master o main.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prima sincronizzazione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A questo punto torniamo sul nostro repository Github e clicchiamo sulla tab <em>Actions<\/em>. A sinistra, sotto la voce &#8220;All workflows&#8221;, dovremmo trovare il nostro nuovo workflow, e cliccandoci sopra entreremo nella pagina di riepilogo del workflow. Potremo vedere quante volte \u00e9 stato eseguito (per ora zero volte).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per questa prima volta eseguiamolo manualmente, cos\u00ed che il workflow sincronizzer\u00e1 il progetto. Il risultato \u00e9 la creazione automatica di due file:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>.ftp-deploy-sync-state.json<\/li><li>.gitattributes<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Il primo \u00e9 un file di indice che indicher\u00e1 al workflow quali file sono contenuti all&#8217;interno del vostro progetto, ed \u00e8 usato per tenere traccia di quali file sono stati sincronizzati nella distribuzione pi\u00f9 recente. Se si elimina questo file sar\u00e0 necessario effettuare una risincronizzazione. Nel secondo file vengono salvate alcun e informazioni necessario al workflow. Se avete un progetto WordPress la prima esecuzione ci metter\u00e1 parecchio tempo per finire, anche fino a un&#8217;ora, perch\u00e9 i file in un progetto del genere sono migliaia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pull request e deploy automatico<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta finita la sincronizzazione, possiamo testare la nostra nuova Action per controllare il nostro sistema di Continuous Deployment con GitHub Actions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo un nuovo branch, chiamato <em>autodeploy<\/em>:<\/p>\n\n\n\n<pre tabindex=\"0\" class=\"wp-block-code\"><code>git checkout -b autodeploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ora apriamo il file README del progetto, e aggiungiamo la seguente riga in fondo al file:<\/p>\n\n\n\n<pre tabindex=\"0\" class=\"wp-block-code\"><code>Automatic YOUR-PROJECT deployed on pull_request with FTP Deploy and Github Action.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sostituire il placeholder YOUR-PROJECT con il nome del progetto in questione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Possiamo quindi aggiungere il file al repository, lanciando un comando di commit e un push:<\/p>\n\n\n\n<pre tabindex=\"0\" class=\"wp-block-code\"><code>git add .\\readme.html\ngit commit -m \"Readme updated\"\ngit push --set-upstream origin autodeploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ora andiamo su Github e creiamo una <em>pull request<\/em>:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"924\" height=\"85\" src=\"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-compare-and-pull-request.png\" alt=\"Setup Continuous Delivery - Github Actions compare and pull request\" class=\"wp-image-1491\" srcset=\"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-compare-and-pull-request.png 924w, https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-compare-and-pull-request-300x28.png 300w, https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-compare-and-pull-request-768x71.png 768w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><figcaption>Setup Continuous Delivery &#8211; Github Actions compare and pull request<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta creata, possiamo cliccare su <em>Merge pull request<\/em> e <em>Confirm merge<\/em> per fondere il nostro feature branch <em>autodeploy<\/em> con il branch master (o main). Possiamo quindi cliccare su <em>Delete branch<\/em> perch\u00e9 <em>autodeploy<\/em> non ci servir\u00e1 pi\u00fa. \u00c8 possibile cancellare anche il branch in locale, ecco i comandi da utilizzare nel terminale:<\/p>\n\n\n\n<pre tabindex=\"0\" class=\"wp-block-code\"><code>git checkout master\ngit pull\ngit branch -d autodeploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In questo modo ci siamo spostati sul branch master, lo abbiamo aggiornato con le ultime modifiche dovute al merge, e abbiamo cancellato il feature branch <em>autodeploy<\/em> in locale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se ora torniamo sul nostro repository Github e clicchiamo sulla tab <em>Actions<\/em>, possiamo vedere che il nostro <em>workflows<\/em> <em>Readme updated<\/em> \u00e9 stato eseguito in quanto ha la spunta verde!<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"90\" src=\"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-workflow-run-successfully.png\" alt=\"Setup Continuous Delivery - Github Actions workflow run successfully\" class=\"wp-image-1492\" srcset=\"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-workflow-run-successfully.png 908w, https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-workflow-run-successfully-300x30.png 300w, https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/setup-continuous-delivery-github-actions-workflow-run-successfully-768x76.png 768w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><figcaption>Setup Continuous Delivery &#8211; Github Actions workflow run successfully<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Possiamo controllare il file Readme, via browser o scaricandono via FTP, e vedere come automaticamente \u00e9 stata aggiunta la nuova riga che abbiamo inserito senza il nostro intervento manuale di upload del file via FTP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Grazie all&#8217;implementazione di questo sistema di Continuous Deployment con GitHub Actions e FTP Deploy, d&#8217;ora in poi non sar\u00e0 pi\u00f9 necessario caricare i file uno ad uno via FTP, ma dopo avere fatto le nostre modifiche in locale, in isolamento all&#8217;interno di un feature branch, sar\u00e0 sufficiente creare una <em>pull request<\/em> e quando questa sar\u00e0 chiusa, le modifiche verranno automaticamente caricate su server. Sicuramente un bel risparmio di tempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se hai trovato questo articolo interessante o, ancora meglio, ti ha aiutato con il tuo flusso di lavoro, valuta l&#8217;articolo cliccando sulle stelle. Se hai dubbi o domande, scrivimi attravero il <a href=\"https:\/\/www.giuseppemaccario.com\/contact\/\" hreflang=\"en\">form dei contatti<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Buon lavoro!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo articolo ho descritto come ho implementato un sistema di Continuous Deployment con GitHub Actions e FTP Deploy per un progetto personale.<\/p>\n","protected":false},"author":1,"featured_media":1495,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","ngg_post_thumbnail":0,"footnotes":""},"categories":[57,58,27],"tags":[54,55],"class_list":["post-1490","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-continuous-deployment","category-github-actions","category-programming","tag-continuous-deployment","tag-github-actions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Continuous Deployment con GitHub Actions (su server condiviso)<\/title>\n<meta name=\"description\" content=\"Come implementare un sistema di Continuous Deployment con GitHub Actions e FTP Deploy per un progetto personale.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Continuous Deployment con GitHub Actions (su server condiviso)\" \/>\n<meta property=\"og:description\" content=\"Come implementare un sistema di Continuous Deployment con GitHub Actions e FTP Deploy per un progetto personale.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/\" \/>\n<meta property=\"og:site_name\" content=\"Giuseppe Maccario\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-24T14:59:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-17T21:11:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/Continuous-Deployment-con-GitHub-Actions.png\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"giuseppemaccario\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"giuseppemaccario\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/\"},\"author\":{\"name\":\"giuseppemaccario\",\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/#\\\/schema\\\/person\\\/cb06a58fab509a897056972173e2e5dc\"},\"headline\":\"Continuous Deployment con GitHub Actions (su server condiviso)\",\"datePublished\":\"2021-10-24T14:59:41+00:00\",\"dateModified\":\"2026-10-17T21:11:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/\"},\"wordCount\":1145,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/#\\\/schema\\\/person\\\/cb06a58fab509a897056972173e2e5dc\"},\"image\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/Continuous-Deployment-con-GitHub-Actions.png\",\"keywords\":[\"Continuous Deployment\",\"GitHub Actions\"],\"articleSection\":[\"Continuous Deployment\",\"GitHub Actions\",\"Programming\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/\",\"url\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/\",\"name\":\"Continuous Deployment con GitHub Actions (su server condiviso)\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/Continuous-Deployment-con-GitHub-Actions.png\",\"datePublished\":\"2021-10-24T14:59:41+00:00\",\"dateModified\":\"2026-10-17T21:11:46+00:00\",\"description\":\"Come implementare un sistema di Continuous Deployment con GitHub Actions e FTP Deploy per un progetto personale.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/Continuous-Deployment-con-GitHub-Actions.png\",\"contentUrl\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/Continuous-Deployment-con-GitHub-Actions.png\",\"width\":900,\"height\":300,\"caption\":\"Continuous Deployment con GitHub Actions\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/continuous-deployment-con-github-actions-su-server-condiviso\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Continuous Deployment con GitHub Actions (su server condiviso)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/\",\"name\":\"Giuseppe Maccario\",\"description\":\"Sviluppatore software indipendente ad Amsterdam\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/#\\\/schema\\\/person\\\/cb06a58fab509a897056972173e2e5dc\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.giuseppemaccario.com\\\/it\\\/#\\\/schema\\\/person\\\/cb06a58fab509a897056972173e2e5dc\",\"name\":\"giuseppemaccario\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g\",\"caption\":\"giuseppemaccario\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/giuseppemaccario\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GiuseppeMaccario\",\"https:\\\/\\\/github.com\\\/gmaccario\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Continuous Deployment con GitHub Actions (su server condiviso)","description":"Come implementare un sistema di Continuous Deployment con GitHub Actions e FTP Deploy per un progetto personale.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/","og_locale":"it_IT","og_type":"article","og_title":"Continuous Deployment con GitHub Actions (su server condiviso)","og_description":"Come implementare un sistema di Continuous Deployment con GitHub Actions e FTP Deploy per un progetto personale.","og_url":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/","og_site_name":"Giuseppe Maccario","article_published_time":"2021-10-24T14:59:41+00:00","article_modified_time":"2026-10-17T21:11:46+00:00","og_image":[{"width":900,"height":300,"url":"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/Continuous-Deployment-con-GitHub-Actions.png","type":"image\/png"}],"author":"giuseppemaccario","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"giuseppemaccario","Tempo di lettura stimato":"6 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#article","isPartOf":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/"},"author":{"name":"giuseppemaccario","@id":"https:\/\/www.giuseppemaccario.com\/it\/#\/schema\/person\/cb06a58fab509a897056972173e2e5dc"},"headline":"Continuous Deployment con GitHub Actions (su server condiviso)","datePublished":"2021-10-24T14:59:41+00:00","dateModified":"2026-10-17T21:11:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/"},"wordCount":1145,"commentCount":1,"publisher":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/#\/schema\/person\/cb06a58fab509a897056972173e2e5dc"},"image":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#primaryimage"},"thumbnailUrl":"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/Continuous-Deployment-con-GitHub-Actions.png","keywords":["Continuous Deployment","GitHub Actions"],"articleSection":["Continuous Deployment","GitHub Actions","Programming"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/","url":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/","name":"Continuous Deployment con GitHub Actions (su server condiviso)","isPartOf":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#primaryimage"},"image":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#primaryimage"},"thumbnailUrl":"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/Continuous-Deployment-con-GitHub-Actions.png","datePublished":"2021-10-24T14:59:41+00:00","dateModified":"2026-10-17T21:11:46+00:00","description":"Come implementare un sistema di Continuous Deployment con GitHub Actions e FTP Deploy per un progetto personale.","breadcrumb":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#primaryimage","url":"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/Continuous-Deployment-con-GitHub-Actions.png","contentUrl":"https:\/\/www.giuseppemaccario.com\/it\/wp-content\/uploads\/2021\/10\/Continuous-Deployment-con-GitHub-Actions.png","width":900,"height":300,"caption":"Continuous Deployment con GitHub Actions"},{"@type":"BreadcrumbList","@id":"https:\/\/www.giuseppemaccario.com\/it\/continuous-deployment-con-github-actions-su-server-condiviso\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.giuseppemaccario.com\/it\/"},{"@type":"ListItem","position":2,"name":"Continuous Deployment con GitHub Actions (su server condiviso)"}]},{"@type":"WebSite","@id":"https:\/\/www.giuseppemaccario.com\/it\/#website","url":"https:\/\/www.giuseppemaccario.com\/it\/","name":"Giuseppe Maccario","description":"Sviluppatore software indipendente ad Amsterdam","publisher":{"@id":"https:\/\/www.giuseppemaccario.com\/it\/#\/schema\/person\/cb06a58fab509a897056972173e2e5dc"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.giuseppemaccario.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":["Person","Organization"],"@id":"https:\/\/www.giuseppemaccario.com\/it\/#\/schema\/person\/cb06a58fab509a897056972173e2e5dc","name":"giuseppemaccario","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g","caption":"giuseppemaccario"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/0f6ac8204df50d485be5d5dfa7d68550e09c411ccea7c7ba5b0d513098d7e2b0?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/giuseppemaccario\/","https:\/\/www.youtube.com\/@GiuseppeMaccario","https:\/\/github.com\/gmaccario"]}]}},"_links":{"self":[{"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/posts\/1490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/comments?post=1490"}],"version-history":[{"count":5,"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/posts\/1490\/revisions"}],"predecessor-version":[{"id":2673,"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/posts\/1490\/revisions\/2673"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/media\/1495"}],"wp:attachment":[{"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/media?parent=1490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/categories?post=1490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giuseppemaccario.com\/it\/wp-json\/wp\/v2\/tags?post=1490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}