[{"data":1,"prerenderedAt":218},["ShallowReactive",2],{"slug-content-en-\u002Fprojects\u002Fftptogit":3},{"kind":4,"item":5,"categories":55},"project",{"id":6,"title":7,"body":8,"dateEnd":40,"dateStart":40,"description":41,"extension":42,"featuredInCv":43,"link":44,"meta":45,"navigation":46,"path":47,"repo":44,"seo":48,"stem":49,"tags":50,"__hash__":54},"projects_en\u002Fprojects\u002Fftptogit.md","FtpToGit",{"type":9,"value":10,"toc":34},"minimark",[11,16,24,28],[12,13,15],"h2",{"id":14},"about-the-project","About the Project",[17,18,19,20,23],"p",{},"I was commissioned by a web agency to develop a tool that helps them log configuration changes on client servers.",[21,22],"br",{},"\nAt the agency's request, this was built with Laravel Lumen, a stripped-down version of Laravel optimized for console applications.",[12,25,27],{"id":26},"how-it-works","How It Works",[17,29,30,31,33],{},"The tool can be configured for any number of client servers, with individual glob-style exclude lists, similar to a .gitignore file.\nAfter connecting to the client's server, the files are checked for changes and then logged in a local Git repository, which is then pushed to a remote Git server.",[21,32],{},"\nThis way, Git's excellent version control is used to log every configuration change, which greatly simplifies troubleshooting in everyday agency work.",{"title":35,"searchDepth":36,"depth":36,"links":37},"",2,[38,39],{"id":14,"depth":36,"text":15},{"id":26,"depth":36,"text":27},"2019-12","Laravel console application for monitoring a remote FTP host.","md",false,null,{},true,"\u002Fprojects\u002Fftptogit",{"title":7,"description":41},"projects\u002Fftptogit",[51,52,53],"php","laravel","git","ttr-GHptjk2BnywsGNPTyl8umNAT_qHOoEdzqsFU3d4",[56,65,86,113,141,153,165,174],{"name":57,"items":58},"Databases",[59,62],{"slug":60,"name":61},"sql","SQL (MySQL, MariaDB)",{"slug":63,"name":64},"sqlite","SQLite",{"name":66,"items":67},"Frontend",[68,71,74,77,80,83],{"slug":69,"name":70},"html5","HTML5",{"slug":72,"name":73},"css3","CSS3",{"slug":75,"name":76},"tailwindcss","Tailwind CSS",{"slug":78,"name":79},"bootstrap","Bootstrap",{"slug":81,"name":82},"uikit","UIkit",{"slug":84,"name":85},"extjs","Ext JS",{"name":87,"items":88},"JavaScript Ecosystem",[89,92,95,98,101,104,107,110],{"slug":90,"name":91},"javascript","JavaScript",{"slug":93,"name":94},"typescript","TypeScript",{"slug":96,"name":97},"nodejs","Node.js",{"slug":99,"name":100},"vuejs","Vue.js",{"slug":102,"name":103},"nuxt","Nuxt.JS",{"slug":105,"name":106},"react","React",{"slug":108,"name":109},"next","Next.JS",{"slug":111,"name":112},"deno","Deno",{"name":114,"items":115},"PHP Ecosystem",[116,118,120,123,126,129,132,135,138],{"slug":51,"name":117},"PHP",{"slug":52,"name":119},"Laravel",{"slug":121,"name":122},"symfony","Symfony",{"slug":124,"name":125},"laminas","Laminas",{"slug":127,"name":128},"mezzio","Mezzio",{"slug":130,"name":131},"zend","Zend Framework",{"slug":133,"name":134},"wordpress","WordPress",{"slug":136,"name":137},"shopware","Shopware",{"slug":139,"name":140},"spryker","Spryker",{"name":142,"items":143},"Mobile",[144,147,150],{"slug":145,"name":146},"dart","Dart",{"slug":148,"name":149},"flutter","Flutter",{"slug":151,"name":152},"android","Android",{"name":154,"items":155},"Other Languages",[156,159,162],{"slug":157,"name":158},"java","Java",{"slug":160,"name":161},"python","Python",{"slug":163,"name":164},"go","Go",{"name":166,"items":167},"Operating Systems",[168,171],{"slug":169,"name":170},"linux","Linux",{"slug":172,"name":173},"windows","Windows",{"name":175,"items":176},"Other",[177,179,182,185,188,191,194,197,200,203,206,209,212,215],{"slug":53,"name":178},"Git",{"slug":180,"name":181},"docker","Docker",{"slug":183,"name":184},"jenkins","Jenkins",{"slug":186,"name":187},"jvm","JVM",{"slug":189,"name":190},"aws","AWS",{"slug":192,"name":193},"cloudflare","Cloudflare",{"slug":195,"name":196},"nginx","Nginx",{"slug":198,"name":199},"redis","Redis",{"slug":201,"name":202},"networking","Networking",{"slug":204,"name":205},"rabbitmq","RabbitMQ",{"slug":207,"name":208},"oidc","OIDC",{"slug":210,"name":211},"rest","REST",{"slug":213,"name":214},"terraform","Terraform",{"slug":216,"name":217},"cicd","CI\u002FCD",1783417755512]