Tutoriais técnicos
Criar um blog pessoal em VPS (2025) - Soluções completas WordPress/Typecho/Hugo
Três abordagens principais para criar um blog pessoal em VPS em 2025: WordPress, Typecho e Hugo. Este artigo oferece tutoriais detalhados de implantação com Docker e um guia de configuração de HTTPS para ajudar você a ter facilmente um blog independente.

Em 2025, embora plataformas como WeChat Official Accounts, Zhihu e Xiaohongshu tenham um tráfego enorme, ter um blog independente totalmente seu continua sendo uma fixação para muitas pessoas. Ele representa a soberania dos dados, a expressão sem amarras e o romantismo dos técnicos.
Este artigo oferece três abordagens principais para criar um blog pessoal em VPS: WordPress (poderoso), Typecho (leve e simples) e Hugo (estático para geeks), além dos tutoriais de implantação com Docker mais recentes de 2025.
| Característica | WordPress | Typecho | Hugo |
|---|---|---|---|
| Tipo | CMS dinâmico | CMS dinâmico | Gerador de sites estáticos (Static) |
| Dificuldade de início | ⭐ (A mais fácil) | ⭐⭐ (Fácil) | ⭐⭐⭐⭐ (Tem barreira) |
| Consumo de recursos | Alto (recomenda-se 1G+ de memória) | Baixo (roda com 512MB) | Extremamente baixo (arquivos puramente estáticos) |
| Ecossistema de plugins | ⭐️⭐️⭐️⭐️⭐️ (Enorme) | ⭐️⭐️⭐️ (Suficiente) | ⭐️⭐️ (Requer configuração manual) |
| Segurança | Requer atualização frequente de patches | Relativamente boa | ⭐️⭐️⭐️⭐️⭐️ (Sem banco de dados, a mais segura) |
| Público adequado | Pessoas que não querem mexer com código e querem temas e funções prontos | Pessoas que preferem o estilo minimalista e se concentram apenas em escrever | Geeks e programadores que gostam de gerenciar conteúdo com Git |
O WordPress é o CMS mais popular do mundo, com inúmeros temas e plugins.
Etapas de implantação:
-
Criar o diretório:
mkdir wordpress && cd wordpress -
Criar
docker-compose.yml:Aviso de segurança: Vinculamos a porta web a
127.0.0.1, permitindo apenas o acesso do Caddy local, para evitar expor a porta diretamente à internet pública e aumentar a segurança.services: db: image: mariadb:10.11 container_name: wp-db restart: always environment: MYSQL_ROOT_PASSWORD: your_strong_root_password # 请务必修改为强密码 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: your_strong_db_password # 请务必修改为强密码 volumes: - db_data:/var/lib/mysql wordpress: image: wordpress:latest container_name: wp-app restart: always ports: - "127.0.0.1:8080:80" # 仅监听本地,配合 Caddy 反代 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: your_strong_db_password # 与上面保持一致 WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html depends_on: - db redis: # 可选:用于对象缓存加速 image: redis:alpine container_name: wp-redis restart: always volumes: db_data: wp_data: -
Iniciar o serviço:
docker compose up -d -
Recomendações de configuração:
- Após concluir a configuração do Caddy, acesse
https://你的域名para finalizar a instalação. - Recomenda-se fortemente instalar o plugin "Redis Object Cache", com o endereço de conexão
redis, o que pode melhorar significativamente a velocidade de carregamento do painel administrativo.
- Após concluir a configuração do Caddy, acesse
O Typecho é um sistema de blogs leve muito popular na China, com suporte nativo a Markdown, estrutura simples e execução muito rápida.
Etapas de implantação:
-
Criar o diretório:
mkdir typecho && cd typecho -
Criar
docker-compose.yml(usando a combinação PHP-FPM + Nginx):services: typecho: image: joyqi/typecho:nightly-php7.4-fpm-alpine container_name: typecho-app restart: always environment: TYPECHO_DB_HOST: db TYPECHO_DB_USER: typecho TYPECHO_DB_PASSWORD: your_strong_db_password TYPECHO_DB_DATABASE: typecho volumes: - typecho_data:/var/www/html depends_on: - db nginx: image: nginx:alpine container_name: typecho-nginx restart: always ports: - "127.0.0.1:8081:80" # 仅监听本地 volumes: - typecho_data:/var/www/html - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - typecho db: image: mariadb:10.11 container_name: typecho-db restart: always environment: MYSQL_ROOT_PASSWORD: your_strong_root_password MYSQL_DATABASE: typecho MYSQL_USER: typecho MYSQL_PASSWORD: your_strong_db_password volumes: - db_data:/var/lib/mysql volumes: typecho_data: db_data: -
Criar
nginx.conf:server { listen 80; server_name localhost; root /var/www/html; index index.php index.html; # 屏蔽敏感文件 location ~ ^/(\.user.ini|\.htaccess|\.git|admin/config.inc.php) { deny all; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass typecho:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } -
Iniciar o serviço:
docker compose up -d
O Hugo não é um programa que roda no VPS, mas sim gera arquivos HTML no seu computador local, que você depois envia para o VPS.
Fluxo de trabalho:
- Local (Mac/PC): Escreva Markdown -> execute o comando
hugo-> gere a pastapublic. - VPS: Execute um servidor web (Caddy/Nginx) para hospedar os arquivos HTML.
- Publicação: Use
rsyncouscppara sincronizar a pasta localpubliccom o VPS.
Implantação no lado do VPS (Docker Caddy):
-
Criar o diretório:
mkdir myblog -
Criar
docker-compose.yml:services: caddy: image: caddy:alpine container_name: blog-server restart: always ports: - "80:80" # Caddy 需要公开 80/443 以申请证书 - "443:443" volumes: - ./public:/usr/share/caddy # 映射网页文件目录 - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config: -
Iniciar o serviço:
docker compose up -d -
Enviar conteúdo (executar no seu computador local):
# 假设你的 VPS IP 是 1.2.3.4,目录是 /root/myblog/public rsync -avz --delete ./public/ [email protected]:/root/myblog/public/
Para WordPress e Typecho, também recomendamos usar o Caddy como proxy reverso para lidar com HTTPS.
Etapas-chave de preparação (leitura obrigatória):
- Resolução de domínio: Certifique-se primeiro de ir ao seu provedor de domínios (como Alibaba Cloud, Namecheap) e apontar o registro A do domínio para o endereço IP do VPS.
- Aguardar a propagação: Faça ping do domínio no seu terminal local e você deve garantir que o IP já tenha mudado. Se o domínio não estiver resolvido corretamente quando o Caddy iniciar, a solicitação do certificado SSL falhará diretamente, tornando o site inacessível.
Exemplo de Caddyfile:
# WordPress 反代
blog.yourdomain.com {
reverse_proxy localhost:8080
}
# Typecho 反代
note.yourdomain.com {
reverse_proxy localhost:8081
}
Após iniciar o Caddy, ele solicita e renova os certificados automaticamente, sem necessidade de intervenção manual.
Muitos iniciantes costumam ignorar isso, mas em um VPS, o backup de dados é vital. Se o provedor do VPS desaparecer ou o servidor falhar, não ter backup significa que todos os seus artigos se perdem.
- Diretório de backup: Todas as configurações de Docker deste artigo montam os dados em
volumes. Você precisa fazer backup periódico do diretório/var/lib/docker/volumes. - Backup automatizado: Backups manuais são fáceis de esquecer, por isso recomendamos fortemente consultar nosso artigo anterior Soluções de backup automático em VPS (2025) e usar o Rclone para sincronizar automaticamente os dados com o Google Drive ou um bucket S3, para dormir tranquilo.
- WordPress: O ecossistema mais forte, adequado para usuários que não querem mexer e têm muitas necessidades de recursos.
- Typecho: Leve, rápido e simples, adequado para escrita pura.
- Hugo: Seguro, ultrarrápido e sem banco de dados, adequado para entusiastas de tecnologia.
Independentemente da solução escolhida, o conteúdo sempre será o núcleo de um blog.