{"id":8671,"date":"2023-11-12T01:10:43","date_gmt":"2023-11-12T04:10:43","guid":{"rendered":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/"},"modified":"2023-11-12T01:10:43","modified_gmt":"2023-11-12T04:10:43","slug":"migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters","status":"publish","type":"post","link":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/","title":{"rendered":"Migrando um blog do WordPress para um cont\u00eainer Docker &#8211; iMasters"},"content":{"rendered":"<p>we are developers<br \/>Back-End<br \/>Tem <a href=\"#\">38<!-- --> artigos<\/a> publicados com<a href=\"#\"> <!-- -->144400<!-- --> visualiza\u00e7\u00f5es<\/a> desde <a href=\"#\">2009<\/a><br \/>Arquiteto e desenvolvedor, agilista, pai, filho, escalador, ciclista, quebrador de status quo, Microsoft MVP. Escreve artigos, fundou o .Net Architects, mant\u00e9m o podcast Tecnoret\u00f3rica e da Lambda3, um blog e muitos projetos no Github. \u00c9 agilista, e trouxe os programas da Scrum.org pro Brasil. Criou a Lambda3, que insiste em fazer projetos e consultoria direito.<br \/>O blog Lambda3\u00a0foi migrado para uma m\u00e1quina mais nova. \u00c9 um WordPress, rodando numa m\u00e1quina no Azure. Ele estava, inicialmente, em uma m\u00e1quina pequena, e conforme a audi\u00eancia foi crescendo, a m\u00e1quina cresceu junto. Mas ainda estava no modelo antigo de <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-resource-manager\/resource-manager-deployment-model\">gest\u00e3o do Azure (ASM)<\/a>, e a m\u00e1quina era menos eficiente que as mais novas, que t\u00eam SSD, entre outros pontos.<br \/>Resolvemos migr\u00e1-lo para o modelo <a href=\"https:\/\/docs.microsoft.com\/azure\/azure-resource-manager\/resource-group-overview\">ARM<\/a> e m\u00e1quinas melhores. No processo, oras, por que n\u00e3o coloc\u00e1-lo pra rodar num cont\u00eainer com Docker? Foi exatamente o que fizemos! E este artigo \u00e9 pra contar para voc\u00eas como fazer isso. Parecia meio complicado a princ\u00edpio, mas foi bem tranquilo no final.<br \/>O <a href=\"https:\/\/hub.docker.com\/_\/wordpress\/\">WordPress possui um reposit\u00f3rio oficial no Docker Hub<\/a>, e as imagens est\u00e3o sempre taggeadas de acordo com a vers\u00e3o do WordPress que elas representam. Na home do repo h\u00e1 at\u00e9 indica\u00e7\u00f5es de como rodar um cont\u00eainer j\u00e1 com o MySql, e at\u00e9 um exemplo com docker-compose. S\u00f3 que cont\u00eaineres WordPress s\u00e3o um pouco peculiares. \u00c9 importante eu fazer essa introdu\u00e7\u00e3o para que algumas decis\u00f5es que tomamos fiquem mais claras.<br \/>O WordPress possui um banco de dados para os dados estruturados, e um diret\u00f3rio\u00a0<em>wp-content<\/em>\u00a0para armazenar todo conte\u00fado, como imagens e arquivos em geral. \u00c9 nesse diret\u00f3rio tamb\u00e9m que ficam os temas e plugins. Isso \u00e9 \u00f3timo, porque assumimos que tudo que est\u00e1 fora desse diret\u00f3rio \u00e9 do engine do WordPress, e esse diret\u00f3rio mant\u00e9m o estado do blog em si. Entretanto, isso n\u00e3o \u00e9 verdade. N\u00e3o \u00e9 incomum plugins e temas instalarem recursos em outros diret\u00f3rios do WordPress. Se todo conte\u00fado ficasse somente no diret\u00f3rio\u00a0<em>wp-content <\/em>seria f\u00e1cil: o diret\u00f3rio seria montado a partir de um volume, e\u00a0poder\u00edamos trocar a imagem de base quando quis\u00e9ssemos atualizar o WordPress. Mas, como h\u00e1 conte\u00fado fora desse diret\u00f3rio, isso n\u00e3o \u00e9 poss\u00edvel.<br \/>Outro problema \u00e9 o pr\u00f3prio sistema de atualiza\u00e7\u00f5es do WordPress. Ele \u00e9 capaz de atualizar n\u00e3o s\u00f3 plugins, mas o WordPress em si. E quando o WordPress \u00e9 atualizado, n\u00e3o somente os arquivos diversos do WordPress s\u00e3o atualizados (todos os que n\u00e3o est\u00e3o no diret\u00f3rio\u00a0<em>wp-content<\/em>), mas tamb\u00e9m o banco de dados. Ou seja, trocar a imagem de base do WordPress gerar\u00e1 um problema de inconsist\u00eancia com a base de dados.<br \/>Isso quer dizer que o volume do Docker para o WordPress\u00a0n\u00e3o pode ser somente o diret\u00f3rio <em>wp-content<\/em>, mas todo o conte\u00fado do WordPress, inclusive os arquivos do WordPress em si, e n\u00e3o s\u00f3 o conte\u00fado do blog. O que fica estranho depois \u00e9 que, ao inspecionar o cont\u00eainer, voc\u00ea pode ver a vers\u00e3o, por exemplo,\u00a04.2.0, mas na verdade, a vers\u00e3o que est\u00e1 rodando j\u00e1 foi atualizada, e agora \u00e9 a\u00a04.4.0. Mas n\u00e3o h\u00e1 como resolver esse problema. O pr\u00f3prio repo do Docker Hub te direciona a isso. A imagem de base e a vers\u00e3o servem somente para fazer o bootstrap inicial do WordPress, depois disso, n\u00e3o significam nada.<br \/>O interessante \u00e9 que, se voc\u00ea montar o diret\u00f3rio onde o WordPress vai rodar, que \u00e9 o\u00a0<em>\/var\/www\/html<\/em>\u00a0(ele \u00e9 baseado na <a href=\"https:\/\/hub.docker.com\/_\/php\/\">imagem de PHP<\/a>, e no caso estamos falando de Apache2), o cont\u00eainer vai respeitar isso e n\u00e3o vai sobrescrever nenhum arquivo. Guarde essa informa\u00e7\u00e3o.<br \/>O banco de dados \u00e9 um conteiner simples de MySQL. Pode ser tamb\u00e9m um <a href=\"https:\/\/mariadb.org\/\">MariaDb<\/a>, que \u00e9 um fork feito pela comunidade quando o MySQL foi parar na m\u00e3o da Oracle (tire suas pr\u00f3prias conclus\u00f5es do porqu\u00ea) plenamente compat\u00edvel, e \u00e9 o que estou usando. A escolha \u00e9 sua. Tanto o <a href=\"https:\/\/hub.docker.com\/_\/mariadb\/\">MariaDb<\/a>, quanto o <a href=\"https:\/\/hub.docker.com\/_\/mysql\">MySQL<\/a>\u00a0possuem reposit\u00f3rios oficiais no Docker Hub.<br \/>O primeiro passo \u00e9 fazer um dump do MySQL\/MariaDb que cont\u00e9m o banco de dados atual do WordPress. Isso \u00e9 bem simples, basta rodar, no server, o <a href=\"https:\/\/mariadb.com\/kb\/en\/mariadb\/mysqldump\/\">mysqldump<\/a>:<br \/>Voc\u00ea tamb\u00e9m pode fazer com um server remoto, veja mais <a href=\"https:\/\/mariadb.com\/kb\/en\/mariadb\/mysqldump\/\">nos docs do mysqldump<\/a> pra ver as op\u00e7\u00f5es.\u00a0Isso vai gerar um dump, que voc\u00ea vai poder usar pra restaurar depois. \u00c9 um arquivo de texto simples, voc\u00ea pode abri-lo pra ver o que ele gerou. No entanto, ele n\u00e3o cont\u00e9m o nome do banco, assim, abra o arquivo, e na primeira linha coloque:<br \/>Escolhi montar o cont\u00eainer do MariaDb com um volume montado a partir do file system do host. Poderia ser tamb\u00e9m com um <a href=\"https:\/\/docs.docker.com\/engine\/tutorials\/dockervolumes\/\">volume do Docker<\/a> direto, n\u00e3o montado no host, n\u00e3o faria diferen\u00e7a. Vamos criar um server MariaDb que inicialmente n\u00e3o conter\u00e1 nenhum dado, depois que ele subir eu vou acess\u00e1-lo e restaurar o dump, o que vai gerar os dados no volume. Assim, rodei:<br \/>O diret\u00f3rio do cont\u00eainer\u00a0<em>\/var\/lib\/mysql<\/em> \u00e9 onde o MariaDb coloca os dados, e montei esse diret\u00f3rio no host em\u00a0\/data\/blog\/mysql. E meu dump estava em\u00a0<em>\/tmp\/dump<span style=\"font-family: monospace;\">\u00a0<\/span><\/em>que montei no cont\u00eainer no diret\u00f3rio\u00a0<em>\/backup<\/em>. Depois disso, basta acessar o cont\u00eainer, que j\u00e1 estava rodando:<br \/>Com isso, estamos com um terminal dentro do cont\u00eainer que est\u00e1 rodando o banco de dados. Agora vamos acessar a console do MariaDb e criar o banco. Digite:<br \/>Em seguida, digite sua senha. Voc\u00ea deve estar na console.<br \/><a href=\"https:\/\/imasters.com.br\/?attachment_id=111463\" rel=\"attachment wp-att-111463\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-large wp-image-111463\" src=\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png\" alt=\"\" width=\"620\" height=\"211\" srcset=\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png 620w, https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-300x102.png 300w, https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349.png 1024w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><\/a><br \/>Ent\u00e3o, crie o banco de dados:<br \/>E crie um usu\u00e1rio\u00a0para acessar o banco de dados do WordPress. \u00c9 importante o uso do <em>@&#8217;%&#8217;<\/em><code>\u00a0<\/code>que identifica o usu\u00e1rio porque o acesso vai vir pra um ip\/host que voc\u00ea n\u00e3o controlar\u00e1. Se colocar\u00a0<em>@&#8217;localhost&#8217;<\/em> n\u00e3o vai funcionar:<br \/>(Voc\u00ea provavelmente n\u00e3o quer dar todos os privil\u00e9gios a esse usu\u00e1rio. Estude os docs para dar as permiss\u00f5es mais apropriadas ao seu cen\u00e1rio.)<br \/>Ent\u00e3o, saia da console, e importe o arquivo de dump que foi montado no diret\u00f3rio \/backup:<br \/>Com isso feito, voc\u00ea j\u00e1 pode matar esse cont\u00eainer. A essa altura, o banco j\u00e1 foi restaurado com sucesso e os arquivos j\u00e1 est\u00e3o no volume. N\u00e3o queremos manter esse mesmo cont\u00eainer porque que tem um diret\u00f3rio de backup montado.<br \/>E assim, a parte do banco est\u00e1 conclu\u00edda.<br \/>O WordPress \u00e9 bem simples de se preparar.\u00a0Eu resolvi montar uma imagem pr\u00f3pria porque eu tinha configura\u00e7\u00f5es a fazer no PHP e no Apache, assim, criei esse Dockerfile:<br \/>A notar:<br \/>Se voc\u00ea n\u00e3o quiser usar SSL e n\u00e3o quiser configurar o PHP, pode usar direto a imagem de base do <em>wordpress:4.7.1-apache<\/em> (ou <a href=\"https:\/\/hub.docker.com\/_\/wordpress\/\">at\u00e9 outra<\/a>, h\u00e1 op\u00e7\u00f5es com Alpine e FPM, por exemplo).<br \/>Meu arquivo de Php.ini possui somente 3 configs para o tamanho do upload e tempo de execu\u00e7\u00e3o:<br \/>Al\u00e9m disso, voc\u00ea vai precisar observar o arquivo<em>\u00a0wp-config.php<\/em> e notar se precisa alterar algo. Minhas informa\u00e7\u00f5es do banco de dados mudaram. Especificamente a vari\u00e1vel\u00a0<em>DB_HOST<\/em>\u00a0vai mudar &#8211; utilize M<em>ySQL<\/em>\u00a0para o novo nome. Vamos linkar o cont\u00eainer do MariaDb com esse nome.<br \/>Eu tamb\u00e9m precisei alterar as vari\u00e1vel\u00a0<em>WPCACHEHOME<\/em>\u00a0porque eu uso o plugin <a href=\"https:\/\/br.wordpress.org\/plugins\/wp-super-cache\/\">WP Super Cache<\/a> (que \u00e9 muito bom, por sinal), e essa vari\u00e1vel aponta o local do cache. O novo local ficou como: <em>\/var\/www\/html\/wp-content\/plugins\/wp-super-cache\/<\/em>. E esse plugin mantinha o local tamb\u00e9m no arquivo\u00a0<em>wp-content\/wp-cache-config.php<\/em>, que tamb\u00e9m precisei alterar.<br \/>Tive problemas com permiss\u00f5es nos arquivos. Como os arquivos j\u00e1 existem e v\u00e3o ser montados a partir do file system do host, o Apache do cont\u00eainer n\u00e3o conseguia acessar.\u00a0No host, tive que alterar o owner dos arquivos e diret\u00f3rios para www-data. Isso \u00e9 no host, n\u00e3o no cont\u00eainer &#8211; e \u00e9 antes do cont\u00eainer subir. V\u00e1 ao diret\u00f3rio onde os arquivos do WordPress est\u00e3o e rode:<br \/>N\u00e3o vamos rodar tudo na m\u00e3o, n\u00e9? Pra isso, tempos o <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a>. Aqui o meu compose file:<br \/>Pra criar os cont\u00eaineres a partir da configura\u00e7\u00e3o do compose\u00a0basta rodar:<br \/>A notar:<br \/>Tudo funcionou perfeitamente. Testei na minha m\u00e1quina primeiro, alterando o arquivo<em> hosts<\/em> para ver se funcionava. Com o sucesso, alterei o DNS do blog pra apontar para o novo local. No Azure, configurei a pol\u00edtica do <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/virtual-network\/virtual-networks-nsg\">Network Security Group<\/a> para abrir somente as portas 80 e 443.<br \/>O resultado \u00e9 que uma m\u00e1quina menor est\u00e1 com um desempenho melhor. Aqui os testes do Application Insights, que testam a app a cada 5 minutos. Notem que na madrugada do dia 26\/1 o desempenho melhora significativamente.<br \/><a href=\"https:\/\/imasters.com.br\/?attachment_id=111466\" rel=\"attachment wp-att-111466\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-111466\" src=\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/appinsightstest.png\" alt=\"\" width=\"528\" height=\"423\" srcset=\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/appinsightstest.png 528w, https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/appinsightstest-300x240.png 300w\" sizes=\"(max-width: 528px) 100vw, 528px\" \/><\/a><br \/>Fiz ainda um outro teste. Derrubei os cont\u00eaineres, e subi do zero. Como os dados estavam em volumes, nada deveria mudar. Foi exatamente o que aconteceu. Confian\u00e7a total.<br \/>Tenho agora alguns outros sites bem pequenos (perto do blog da Lambda3) pra migrar. Vou avaliar como vou entreg\u00e1-los usando o mesmo host, j\u00e1 que antes o Apache cuidava disso. Provavelmente vou rotear pelo Azure e usar portas diferentes.<br \/>A configura\u00e7\u00e3o do servidor foi feita com 4\u00a0discos SSD em RAID com stripe, utilizando <a href=\"https:\/\/raid.wiki.kernel.org\/index.php\/RAID_setup\">mdadm<\/a>. Desempenho excepcional, com 4TB de espa\u00e7o e custo ridiculamente baixo (s\u00f3 pago pelo que uso). O storage do Azure ainda me <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/storage\/storage-redundancy\">garantiu replica\u00e7\u00e3o em 3 locais diferentes<\/a> (sem que eu precise fazer nada para isso), com garantias absurdas de precis\u00e3o e seguran\u00e7a na persist\u00eancia.<br \/>Os logs est\u00e3o direcionados via <a href=\"http:\/\/www.fluentd.org\/\">fluentd<\/a> para o <a href=\"https:\/\/www.microsoft.com\/en-us\/cloud-platform\/operations-management-suite\">OMS<\/a>, que tamb\u00e9m <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/operations-management-suite\/operations-management-suite-overview\">roda como SASS no Azure<\/a>. Aqui, um dos relat\u00f3rios que ele me d\u00e1, entre os diversos logs, alertas, etc. E \u00e9 super simples de configurar, <a href=\"https:\/\/github.com\/Microsoft\/OMS-Agent-for-Linux#quick-install-guide\">\u00e9 uma linha no terminal do host<\/a>.<br \/><a href=\"https:\/\/imasters.com.br\/?attachment_id=111468\" rel=\"attachment wp-att-111468\"><img decoding=\"async\" class=\"aligncenter size-large wp-image-111468\" src=\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/oms-982x1024-620x647.png\" alt=\"\" width=\"620\" height=\"647\" srcset=\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/oms-982x1024-620x647.png 620w, https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/oms-982x1024-288x300.png 288w, https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/oms-982x1024.png 982w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><\/a><br \/>E o servidor que hospeda tudo est\u00e1 limpo. Nada de Apache, MariaDb etc instalado. Ele roda somente uma coisa: Docker. E para que precisaria de mais?<br \/>*<em>**<\/em><br \/><em>Este artigo foi produzido em parceria com a Lambda3. Leia outros conte\u00fados no blog da empresa: <a href=\"https:\/\/blog.lambda3.com.br\/\">blog.lambda3.com.br<\/a><\/em><br \/>De 0 a 10, o quanto voc\u00ea recomendaria este artigo para um amigo?<br \/>Arquiteto e desenvolvedor, agilista, pai, filho, escalador, ciclista, quebrador de status quo, Microsoft MVP. Escreve artigos, fundou o .Net Architects, mant\u00e9m o podcast Tecnoret\u00f3rica e da Lambda3, um blog e muitos projetos no Github. \u00c9 agilista, e trouxe os programas da Scrum.org pro Brasil. Criou a Lambda3, que insiste em fazer projetos e consultoria direito.<br \/>Fique em dia com as novidades do iMasters! Assine nossa newsletter e receba conte\u00fados especiais curados por nossa equipe<\/p>\n<p><a href=\"https:\/\/news.google.com\/rss\/articles\/CBMiV2h0dHBzOi8vaW1hc3RlcnMuY29tLmJyL2JhY2stZW5kL21pZ3JhbmRvLXVtLWJsb2ctZG8td29yZHByZXNzLXBhcmEtdW0tY29udGVpbmVyLWRvY2tlctIBAA?oc=5\">source<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>we are developersBack-EndTem 38 artigos publicados com 144400 visualiza\u00e7\u00f5es desde 2009Arquiteto e desenvolvedor, agilista, pai, filho, escalador, ciclista, quebrador de status quo, Microsoft MVP. Escreve artigos, fundou o .Net Architects, mant\u00e9m o podcast Tecnoret\u00f3rica e da Lambda3, um blog e muitos projetos no Github. \u00c9 agilista, e trouxe os programas da Scrum.org pro Brasil. Criou&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[69],"class_list":["post-8671","post","type-post","status-publish","format-standard","hentry","category-tutoriais","tag-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.1 (Yoast SEO v22.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Migrando um blog do WordPress para um cont\u00eainer Docker - iMasters - 4tuneagencia.digital<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrando um blog do WordPress para um cont\u00eainer Docker - iMasters\" \/>\n<meta property=\"og:description\" content=\"we are developersBack-EndTem 38 artigos publicados com 144400 visualiza\u00e7\u00f5es desde 2009Arquiteto e desenvolvedor, agilista, pai, filho, escalador, ciclista, quebrador de status quo, Microsoft MVP. Escreve artigos, fundou o .Net Architects, mant\u00e9m o podcast Tecnoret\u00f3rica e da Lambda3, um blog e muitos projetos no Github. \u00c9 agilista, e trouxe os programas da Scrum.org pro Brasil. Criou...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/\" \/>\n<meta property=\"og:site_name\" content=\"4tuneagencia.digital\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-12T04:10:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png\" \/>\n<meta name=\"author\" content=\"4tune\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"4tune\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/\"},\"author\":{\"name\":\"4tune\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/person\/7c40d2e8b9964c2390122613459c2100\"},\"headline\":\"Migrando um blog do WordPress para um cont\u00eainer Docker &#8211; iMasters\",\"datePublished\":\"2023-11-12T04:10:43+00:00\",\"dateModified\":\"2023-11-12T04:10:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/\"},\"wordCount\":1834,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png\",\"keywords\":[\"Tutorial\"],\"articleSection\":[\"Tutoriais\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/\",\"url\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/\",\"name\":\"Migrando um blog do WordPress para um cont\u00eainer Docker - iMasters - 4tuneagencia.digital\",\"isPartOf\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png\",\"datePublished\":\"2023-11-12T04:10:43+00:00\",\"dateModified\":\"2023-11-12T04:10:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage\",\"url\":\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png\",\"contentUrl\":\"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/4tuneagencia.digital\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrando um blog do WordPress para um cont\u00eainer Docker &#8211; iMasters\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#website\",\"url\":\"https:\/\/4tuneagencia.digital\/blog\/\",\"name\":\"4tuneagencia.digital\",\"description\":\"Marketing e Web Designer \",\"publisher\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/4tuneagencia.digital\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#organization\",\"name\":\"4tuneagencia.digital\",\"url\":\"https:\/\/4tuneagencia.digital\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/4tuneagencia.digital\/blog\/wp-content\/uploads\/2023\/09\/novo-logo-e1694954525541.png\",\"contentUrl\":\"https:\/\/4tuneagencia.digital\/blog\/wp-content\/uploads\/2023\/09\/novo-logo-e1694954525541.png\",\"width\":250,\"height\":250,\"caption\":\"4tuneagencia.digital\"},\"image\":{\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/person\/7c40d2e8b9964c2390122613459c2100\",\"name\":\"4tune\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e81e8ea0176022ee4555117aee5e3092bff2a7aaa930134f8023c7d4bc2f1495?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e81e8ea0176022ee4555117aee5e3092bff2a7aaa930134f8023c7d4bc2f1495?s=96&d=mm&r=g\",\"caption\":\"4tune\"},\"sameAs\":[\"http:\/\/4tuneagencia.digital\"],\"url\":\"https:\/\/4tuneagencia.digital\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrando um blog do WordPress para um cont\u00eainer Docker - iMasters - 4tuneagencia.digital","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:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/","og_locale":"pt_BR","og_type":"article","og_title":"Migrando um blog do WordPress para um cont\u00eainer Docker - iMasters","og_description":"we are developersBack-EndTem 38 artigos publicados com 144400 visualiza\u00e7\u00f5es desde 2009Arquiteto e desenvolvedor, agilista, pai, filho, escalador, ciclista, quebrador de status quo, Microsoft MVP. Escreve artigos, fundou o .Net Architects, mant\u00e9m o podcast Tecnoret\u00f3rica e da Lambda3, um blog e muitos projetos no Github. \u00c9 agilista, e trouxe os programas da Scrum.org pro Brasil. Criou...","og_url":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/","og_site_name":"4tuneagencia.digital","article_published_time":"2023-11-12T04:10:43+00:00","og_image":[{"url":"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png"}],"author":"4tune","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"4tune","Est. tempo de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#article","isPartOf":{"@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/"},"author":{"name":"4tune","@id":"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/person\/7c40d2e8b9964c2390122613459c2100"},"headline":"Migrando um blog do WordPress para um cont\u00eainer Docker &#8211; iMasters","datePublished":"2023-11-12T04:10:43+00:00","dateModified":"2023-11-12T04:10:43+00:00","mainEntityOfPage":{"@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/"},"wordCount":1834,"commentCount":0,"publisher":{"@id":"https:\/\/4tuneagencia.digital\/blog\/#organization"},"image":{"@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage"},"thumbnailUrl":"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png","keywords":["Tutorial"],"articleSection":["Tutoriais"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/","url":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/","name":"Migrando um blog do WordPress para um cont\u00eainer Docker - iMasters - 4tuneagencia.digital","isPartOf":{"@id":"https:\/\/4tuneagencia.digital\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage"},"image":{"@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage"},"thumbnailUrl":"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png","datePublished":"2023-11-12T04:10:43+00:00","dateModified":"2023-11-12T04:10:43+00:00","breadcrumb":{"@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#primaryimage","url":"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png","contentUrl":"https:\/\/static.imasters.com.br\/wp-content\/uploads\/2017\/02\/mariadb-1024x349-620x211.png"},{"@type":"BreadcrumbList","@id":"https:\/\/4tuneagencia.digital\/blog\/migrando-um-blog-do-wordpress-para-um-conteiner-docker-imasters\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/4tuneagencia.digital\/blog\/"},{"@type":"ListItem","position":2,"name":"Migrando um blog do WordPress para um cont\u00eainer Docker &#8211; iMasters"}]},{"@type":"WebSite","@id":"https:\/\/4tuneagencia.digital\/blog\/#website","url":"https:\/\/4tuneagencia.digital\/blog\/","name":"4tuneagencia.digital","description":"Marketing e Web Designer ","publisher":{"@id":"https:\/\/4tuneagencia.digital\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/4tuneagencia.digital\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/4tuneagencia.digital\/blog\/#organization","name":"4tuneagencia.digital","url":"https:\/\/4tuneagencia.digital\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/4tuneagencia.digital\/blog\/wp-content\/uploads\/2023\/09\/novo-logo-e1694954525541.png","contentUrl":"https:\/\/4tuneagencia.digital\/blog\/wp-content\/uploads\/2023\/09\/novo-logo-e1694954525541.png","width":250,"height":250,"caption":"4tuneagencia.digital"},"image":{"@id":"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/person\/7c40d2e8b9964c2390122613459c2100","name":"4tune","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/4tuneagencia.digital\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e81e8ea0176022ee4555117aee5e3092bff2a7aaa930134f8023c7d4bc2f1495?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e81e8ea0176022ee4555117aee5e3092bff2a7aaa930134f8023c7d4bc2f1495?s=96&d=mm&r=g","caption":"4tune"},"sameAs":["http:\/\/4tuneagencia.digital"],"url":"https:\/\/4tuneagencia.digital\/blog\/author\/admin\/"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/posts\/8671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/comments?post=8671"}],"version-history":[{"count":0,"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/posts\/8671\/revisions"}],"wp:attachment":[{"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/media?parent=8671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/categories?post=8671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/4tuneagencia.digital\/blog\/wp-json\/wp\/v2\/tags?post=8671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}