前几天,腾讯云发来邮件说,检测到备案的域名长时间没有解析云服务的IP,要如何如何,思量一下,还是搭建个站点吧。
首先想到的的是wordpress,但是尝试下来,并不是很顺手,而且各种配置非常多,效果也不是很好,感觉比较臃肿。刚好思源笔记的开发者们开发了一套博客系统,名称叫Solo,看起来比较简洁,也可以通过docker部署,就尝试一下。
腾讯云轻量服务器,Debian Linux 11系统,域名解析配置完成,同时,域名也使用acme.sh申请到了Let's Encrypt的TLS证书。
mysql数据库目录:/services/solo/mysql/data
nginx配置目录:/services/solo/nginx/conf ,/services/solo/nginx/www
域名证书目录:/services/solo/cert
网站favicon图标目录:/services/solo/favicon
sudo -i
# 创建数据集配置文件目录
mkdir -p /services/solo/mysql/data
mkdir -p /services/solo/nginx/conf
mkdir -p /services/solo/nginx/www
mkdir -p /services/solo/cert
mkdir -p /services/solo/favicon
# 最后,使用ssh工具将域名证书、nginx配置文件、网站的favicon上传到服务器
nginx配置文件内容如下:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
# 关闭显示nginx版本号
server_tokens off;
access_log off;
# http协议,80端口
server {
listen 80;
# 修改server_name后的域名为自己的域名
server_name www.oakdb.cn oakdb.cn;
return 301 https://$server_name$request_uri;
}
# https协议,443端口
server {
# 修改server_name后的域名为自己的域名
server_name www.oakdb.cn oakdb.cn;
listen 443 ssl;
# 填写域名证书的公钥路径
ssl_certificate /etc/nginx/conf.d/cert/oakdb.cn.cer;
# 定义域名证书的私钥路径
ssl_certificate_key /etc/nginx/conf.d/cert/oakdb.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
location / {
proxy_pass http://solo:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 10m;
}
# 添加favicon目录到网站资源,这样https://www.oakdb.cn/favicon/xx.ico就可以作为图标路径了
location /favicon/ {
alias /favicon/;
}
# 定义nginx的日志文件路径
access_log /etc/nginx/conf.d/www.oakdb.cn.log;
}
version: "2"
services:
mysql:
container_name: mysql
image: mysql:5.5.60
restart: always
volumes:
- /services/solo/mysql/data:/var/lib/mysql #mysql的数据文件存放地址
ports:
- "3306:3306" #mysql的端口,按需修改
environment:
- MYSQL_ROOT_PASSWORD=mysql_password #自定义mysql的root账号密码
command: --max_allowed_packet=32505856
solo:
container_name: solo
image: b3log/solo
restart: always
ports:
- "8080:8080" #https部署的方式不需要修改此处
environment:
RUNTIME_DB: "MYSQL"
JDBC_USERNAME: "root"
JDBC_PASSWORD: "mysql_password"
JDBC_DRIVER: "com.mysql.cj.jdbc.Driver"
JDBC_URL: "jdbc:mysql://mysql:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" #此处,因为solo跟mysql同为docker容器,所以可以直接使用容器名 + 容器端口来访问
command: --listen_port=8080 --server_port=80 --server_scheme=https --server_host=www.oakdb.cn #按照solo官方要求,在solo启动之初,配置solo的域名、端口
nginx:
container_name: nginx
image: nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- "/services/solo/nginx/conf:/etc/nginx/conf.d" #映射nginx配置文件目录
- "/services/solo/cert/:/etc/nginx/conf.d/cert" #映射服务器的证书目录
- "/services/solo/nginx/www/:/var/www/" #映射www目录
- "/services/solo/favicon:/favicon" #映射favicon图标目录
附注:
i. docker-compose编写参考链接(github),这是solo官方推荐的docker-compose编写格式,但是有一些内容已经过时了,作了一些适当的修改:
https://github.com/liumapp/solo-in-docker/tree/master/https
ii. solo官方的帮助手册,上面链接的一些问题是看了这个才解决的:
https://ld246.com/article/1492881378588
# docker-compose.yml文件存放在/opt/solo目录下
sudo -i
cd /opt/solo
docker-compose up -d
# 部署完毕之后,查看solo的运行日志
docker logs -t -f --tail 100 solo
# 部署完毕之后,如果solo日志提示打开浏览器配置,则表示部署成功,打开浏览器输入域名,就可以开始配置solo了
我们在nginx配置里面已经设置好了图标文件的目录,那么图标的网络资源路径则是下列格式,填写在solo控制台的 “工具-偏好设定-参数设置-Favicon”中,应用即可。如果没有刷新,换一个浏览器,或者用ccleaner之类的工具,清理掉浏览器的favicon缓存就可以看到了。
# 图标文件的格式可以是ico或者png,在免费的favicon图标网站下载一个喜欢的
https://www.oakdb.cn/favicon/my_icon.ico
如果遇到solo无法找到mysql数据库表的故障,首先仔细检查docker-compose.yml文件内容是否有误,如果持续出现这个问题,手动创建mysql数据表
sudo -i
# 进入mysql容器终端
docker exec -it mysql bash
# mysql容器终端中,用docker-compose.yml中定义的密码登录mysql
mysql -uroot -pmysql_password
# 在登录mysql之后,查看是否存在数据表solo
show databases;
# 如果solo表不存在,则尝试手动创建,注意,不要忘了每行命令结尾的英文分号“;”
create database solo default character set utf8mb4 collate utf8mb4_general_ci;
create user 'root'@'127.0.0.1' identified by 'mysql_password';
grant all privileges on *.* to 'root'@'127.0.0.1';
flush privileges;
# 再回到debian系统终端,查看solo的运行日志
docker logs -t -f --tail 100 solo
# 如果没啥问题,就启动浏览器,输入域名开始solo设置
如果认为是nginx配置文件有问题,按照如下流程检查:
首先,对照nginx.conf文件内容,确认正确替换了域名为自己的域名,并且正确填写了域名证书的路径,并且上传了正确的域名证书文件和配置文件。
另外,进入nginx容器,检查配置文件
docker exec -it nginx bash
# 测试nginx配置文件是否有误
nginx -t
# 重新加载配置文件
nginx -s reload
一般多试几次,就好了。