前言
今天尝试了好几种博客的一键化部署,最后个人感觉用起来最舒服的还是halo。在这里正好把一键部署的方式记录一下
没用solo的原因是:部署完后初始化管理员账户,居然需要用第三方的什么平台去登录,有点嫌麻烦就算了
系统:ubuntu22.04 server
目录结构
├── docker-compose.yml
├── .env
├── solo/
├── latke.properties
├── log4j2.xml/
├── logs/
└── nginx/
├── nginx.conf
└── ssl/
├── www.yourdomain.crt.pem
└── www.yourdomain.key.pem
文件内容
docker-compose.yml文件
version: '3'
volumes:
mysql_data:
services:
mysql:
image: mysql:8.0
container_name: solo-mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
- ./mysql/conf.d:/etc/mysql/conf.d
networks:
- solo-network
solo:
image: b3log/solo:latest
container_name: solo-blog
restart: always
ports:
- "8080:8080"
environment:
# 基本配置
- RUNTIME_DB=MYSQL
- JDBC_USERNAME=${MYSQL_USER}
- JDBC_PASSWORD=${MYSQL_PASSWORD}
- JDBC_DRIVER=com.mysql.cj.jdbc.Driver
- JDBC_URL=jdbc:mysql://mysql:3306/${MYSQL_DATABASE}?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
# 服务器配置
- SERVER_PORT=8080
- SERVER_SCHEME=https
- SERVER_HOST=www.yourdomain.com
- SERVER_PATH=
- STATIC_SERVER_SCHEME=https
- STATIC_SERVER_HOST=www.yourdomain.com
- STATIC_SERVER_PORT=443
- STATIC_PATH=
# 管理员初始配置
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=admin
# 其他配置
- RUNTIME_MODE=PRODUCTION
depends_on:
- mysql
volumes:
- ./solo/logs:/opt/solo/logs
- ./solo/latke.properties:/opt/solo/latke.properties
networks:
- solo-network
nginx:
image: nginx:latest
container_name: solo-nginx
restart: always
ports:
- "${NGINX_PORT}:80"
- "${NGINX_SSL_PORT}:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
- ./nginx/html:/usr/share/nginx/html
depends_on:
- solo
networks:
- solo-network
networks:
solo-network:
driver: bridge
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
# 增加请求体大小限制
client_max_body_size 10M;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
upstream solo_backend {
server solo:8080;
}
server {
listen 80;
server_name www.yourdomain.com;
return 301 https://$host$request_uri; # HTTP强制跳转HTTPS
}
server {
listen 443 ssl;
server_name www.yourdomain.com;
# SSL证书配置
ssl_certificate /etc/nginx/ssl/www.yourdomain.com_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/www.yourdomain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_tickets on;
# 强制HTTPS安全协议
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://solo_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
.env文件
# MySQL配置
MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_DATABASE=solo
MYSQL_USER=solo
MYSQL_PASSWORD=your_solo_password
# Solo配置
SOLO_SERVER_PORT=8080
SOLO_RUNTIME_MODE=PRODUCTION
SOLO_JDBC_USERNAME=solo
SOLO_JDBC_PASSWORD=your_solo_password
SOLO_JDBC_DRIVER=com.mysql.cj.jdbc.Driver
SOLO_JDBC_URL=jdbc:mysql://mysql:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
# Solo Latke配置
SOLO_SERVE_PATH=/
SOLO_STATIC_SERVER_SCHEME=https
SOLO_STATIC_SERVER_HOST=www.yourdomain.com
SOLO_STATIC_SERVER_PORT=443
SOLO_STATIC_PATH=/
SOLO_STATIC_SERVE_PATH=/
SOLO_SERVER_SCHEME=https
SOLO_SERVER_HOST=www.yourdomain.com
SOLO_SERVER_PORT=443
SOLO_CONTEXT_PATH=
# Nginx配置
NGINX_PORT=80
NGINX_SSL_PORT=443
latke.properties
#### 服务器配置 ####
# 伺服路径,如果有多个,用逗号分隔
serverServePath=/
# 静态服务地址
staticServerScheme=https
staticServerHost=www.yourdomain.com
staticServerPort=443
# 静态服务路径
staticServerPath=/
# 静态资源路径映射
staticResourcePath=/
#### 仓库配置 ####
# 仓库类型
repositoryType=mysql
# 数据库JDBC URL
jdbc.URL=jdbc:mysql://mysql:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
# 数据库用户名
jdbc.username=solo
# 数据库密码
jdbc.password=your_solo_password
# 数据库驱动
jdbc.driver=com.mysql.cj.jdbc.Driver
#### 运行模式 ####
# 开发模式:development,生产模式:production
runtimeMode=PRODUCTION
启动方式
docker-compose up -d