Tutoriales técnicos
Crear un blog personal en un VPS (2025) - Soluciones completas WordPress/Typecho/Hugo
Tres enfoques principales para crear un blog personal en un VPS en 2025: WordPress, Typecho y Hugo. Este artículo ofrece tutoriales detallados de despliegue con Docker y una guía de configuración de HTTPS para ayudarte a tener fácilmente un blog independiente.

En 2025, aunque plataformas como WeChat Official Accounts, Zhihu y Xiaohongshu tienen un tráfico enorme, tener un blog independiente totalmente propio sigue siendo una obsesión para muchas personas. Representa la soberanía de los datos, la expresión sin ataduras y el romanticismo de los técnicos.
Este artículo te ofrece tres enfoques principales para crear un blog personal en un VPS: WordPress (potente), Typecho (ligero y sencillo) y Hugo (estático para geeks), junto con los tutoriales de despliegue con Docker más recientes de 2025.
| Característica | WordPress | Typecho | Hugo |
|---|---|---|---|
| Tipo | CMS dinámico | CMS dinámico | Generador de sitios estáticos (Static) |
| Dificultad de inicio | ⭐ (La más fácil) | ⭐⭐ (Fácil) | ⭐⭐⭐⭐ (Tiene barrera) |
| Consumo de recursos | Alto (se recomienda 1G+ de memoria) | Bajo (funciona con 512MB) | Extremadamente bajo (archivos puramente estáticos) |
| Ecosistema de plugins | ⭐️⭐️⭐️⭐️⭐️ (Enorme) | ⭐️⭐️⭐️ (Suficiente) | ⭐️⭐️ (Requiere configuración manual) |
| Seguridad | Requiere actualizar parches con frecuencia | Relativamente buena | ⭐️⭐️⭐️⭐️⭐️ (Sin base de datos, la más segura) |
| Público adecuado | Personas que no quieren complicarse con código y quieren temas y funciones listos | Personas que prefieren el estilo minimalista y se centran solo en escribir | Geeks y programadores a quienes les gusta gestionar el contenido con Git |
WordPress es el CMS más popular del mundo, con innumerables temas y plugins.
Pasos de despliegue:
-
Crear el directorio:
mkdir wordpress && cd wordpress -
Crear
docker-compose.yml:Aviso de seguridad: Vinculamos el puerto web a
127.0.0.1, permitiendo solo el acceso desde Caddy local, para evitar exponer el puerto directamente a la internet pública y mejorar la seguridad.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 el servicio:
docker compose up -d -
Recomendaciones de configuración:
- Una vez completada la configuración de Caddy, visita
https://你的域名para finalizar la instalación. - Se recomienda encarecidamente instalar el plugin "Redis Object Cache", con la dirección de conexión
redis, lo que puede mejorar notablemente la velocidad de carga del panel de administración.
- Una vez completada la configuración de Caddy, visita
Typecho es un sistema de blogs ligero muy popular en China, con soporte nativo de Markdown, estructura simple y funcionamiento muy rápido.
Pasos de despliegue:
-
Crear el directorio:
mkdir typecho && cd typecho -
Crear
docker-compose.yml(usando la combinación 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: -
Crear
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 el servicio:
docker compose up -d
Hugo no es un programa que se ejecute en el VPS, sino que genera archivos HTML en tu computadora local y luego los subes al VPS.
Flujo de trabajo:
- Local (Mac/PC): Escribe Markdown -> ejecuta el comando
hugo-> genera la carpetapublic. - VPS: Ejecuta un servidor web (Caddy/Nginx) para alojar los archivos HTML.
- Publicación: Usa
rsyncoscppara sincronizar la carpeta localpublical VPS.
Despliegue en el lado del VPS (Docker Caddy):
-
Crear el directorio:
mkdir myblog -
Crear
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 el servicio:
docker compose up -d -
Subir contenido (ejecutar en tu computadora local):
# 假设你的 VPS IP 是 1.2.3.4,目录是 /root/myblog/public rsync -avz --delete ./public/ [email protected]:/root/myblog/public/
Para WordPress y Typecho, también recomendamos usar Caddy como proxy inverso para gestionar HTTPS.
Pasos clave de preparación (lectura obligatoria):
- Resolución de dominio: Asegúrate primero de ir a tu proveedor de dominios (como Alibaba Cloud, Namecheap) y apuntar el registro A del dominio a la dirección IP del VPS.
- Esperar la propagación: Haz ping al dominio en tu terminal local y debes asegurarte de que la IP ya haya cambiado. Si el dominio no está resuelto correctamente cuando Caddy se inicia, la solicitud del certificado SSL fallará directamente, lo que hará que el sitio sea inaccesible.
Ejemplo de Caddyfile:
# WordPress 反代
blog.yourdomain.com {
reverse_proxy localhost:8080
}
# Typecho 反代
note.yourdomain.com {
reverse_proxy localhost:8081
}
Después de iniciar Caddy, solicita y renueva los certificados automáticamente, sin necesidad de intervención manual.
Muchos principiantes pasan esto por alto fácilmente, pero en un VPS, la copia de seguridad de datos es vital. Si el proveedor del VPS desaparece o el servidor falla, no tener copia de seguridad significa que todos tus artículos se pierden.
- Directorio de copia de seguridad: Todas las configuraciones de Docker de este artículo montan los datos en
volumes. Debes hacer copias de seguridad periódicas del directorio/var/lib/docker/volumes. - Copia de seguridad automatizada: Las copias manuales se olvidan fácilmente, por lo que recomendamos encarecidamente consultar nuestro artículo anterior Soluciones de copia de seguridad automática en VPS (2025) y usar Rclone para sincronizar automáticamente los datos a Google Drive o a un bucket de S3, para dormir tranquilo.
- WordPress: El ecosistema más potente, adecuado para usuarios que no quieren complicarse y tienen muchas necesidades de funciones.
- Typecho: Ligero, rápido y sencillo, adecuado para escribir puramente.
- Hugo: Seguro, ultrarrápido y sin base de datos, adecuado para entusiastas de la tecnología.
Independientemente de la solución que elijas, el contenido siempre será el núcleo de un blog.