{"id":17081081,"url":"https://github.com/expoli/start-bolo-with-docker-compose","last_synced_at":"2025-04-12T20:50:19.762Z","repository":{"id":46074403,"uuid":"247037430","full_name":"expoli/start-bolo-with-docker-compose","owner":"expoli","description":"本项目专注于使用 docker-compose 进行容器的编排，实现 bolo 博客的一键启动，以避免广大人民群众在进行 bolo 部署时走不必要的弯路；降低了使用门槛，同时也大大增加了维护与迁移的便利性。","archived":false,"fork":false,"pushed_at":"2022-09-08T00:36:20.000Z","size":3339,"stargazers_count":15,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-26T15:02:54.409Z","etag":null,"topics":["bolo","bolo-solo","docker-compose","solo"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/expoli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-13T09:46:21.000Z","updated_at":"2025-01-26T08:14:34.000Z","dependencies_parsed_at":"2023-01-17T23:30:46.289Z","dependency_job_id":null,"html_url":"https://github.com/expoli/start-bolo-with-docker-compose","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expoli%2Fstart-bolo-with-docker-compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expoli%2Fstart-bolo-with-docker-compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expoli%2Fstart-bolo-with-docker-compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/expoli%2Fstart-bolo-with-docker-compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/expoli","download_url":"https://codeload.github.com/expoli/start-bolo-with-docker-compose/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631727,"owners_count":21136560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bolo","bolo-solo","docker-compose","solo"],"created_at":"2024-10-14T12:49:23.362Z","updated_at":"2025-04-12T20:50:19.736Z","avatar_url":"https://github.com/expoli.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align = \"center\"\u003e\n\u003cimg alt=\"Bolo\" src=\"image/bolo-circle.png\" height=\"200px\" width=\"200px\"\u003e\n\u003cbr\u003e\u003cbr\u003e\n使用 docker-compose 一键启动 Bolo 博客\n\u003cbr\u003e\n\u003cimg src=\"https://img.shields.io/github/last-commit/expoli/start-bolo-with-docker-compose.svg?style=flat-square\"\u003e\n\u003cimg src=\"https://img.shields.io/github/issues-pr-closed/expoli/start-bolo-with-docker-compose.svg?style=flat-square\"\u003e\n\u003cimg src=\"https://img.shields.io/github/downloads/expoli/start-bolo-with-docker-compose/total?style=flat-square\"\u003e\n\u003cbr\u003e\n\u003cimg src=\"https://img.shields.io/docker/cloud/automated/tangcuyu/bolo-solo?style=flat-square\"\u003e\n\u003cimg src=\"https://img.shields.io/docker/cloud/build/tangcuyu/bolo-solo?style=flat-square\"\u003e\n\u003cimg src=\"https://img.shields.io/docker/pulls/tangcuyu/bolo-solo.svg?style=flat-square\"\u003e\n\u003cimg src=\"https://img.shields.io/docker/v/tangcuyu/bolo-solo?sort=date\u0026style=flat-square\"\u003e\n\u003c!-- \u003cimg alt=\"Docker Image Version (latest semver)\" src=\"https://img.shields.io/docker/v/tangcuyu/bolo-solo?sort=semver\u0026style=flat-square\"\u003e --\u003e\n\u003c!-- \u003cimg src=\"https://img.shields.io/github/v/expoli/start-bolo-with-docker-compose?style=flat-square\"\u003e --\u003e\n\u003c!-- \u003cimg src=\"https://img.shields.io/github/issues/expoli/start-bolo-with-docker-compose?style=flat-square\"\u003e --\u003e\n\u003c!-- \u003cimg src=\"https://img.shields.io/github/commit-activity/y/expoli/start-bolo-with-docker-compose?style=flat-square\"\u003e --\u003e\n\u003c/p\u003e\n\n# 简介\n\n## 注意：本配置方式不支持宝塔用户、BT用户请自行尝试裸启动 [tangcuyu/bolo-solo](https://hub.docker.com/repository/docker/tangcuyu/traefik/general) 镜像、BT用户不在解答范围。\n\n本项目专注于使用 docker-compose 进行容器的编排，实现 Bolo 博客的一键启动，以避免广大人民群众在进行 bolo 部署时走不必要的弯路；降低了使用门槛，同时也大大增加了维护与迁移的便利性，同时也增加了 `Let's Encrypt` SSL证书的自动配置与续签。\n\n\u003e 一键部署脚本传送门(傻瓜式、欢迎试用) [https://github.com/expoli/start-bolo](https://github.com/expoli/start-bolo)\n\n**注意：本项目使用 Traefik 的反向代理作为 Bolo 的 Web 服务器、支持一键式的 HTTP \u0026 HTTPS 部署（默认占用了80、443 端口）。**\n\n\u003e Nginx Web Server 请下载 [1.4 版本](https://github.com/expoli/start-bolo-with-docker-compose/releases/tag/v1.4)\n\u003e Nginx Web Server 手动配置证书 [1.3 版本](https://github.com/expoli/start-bolo-with-docker-compose/releases/tag/v1.3)\n\n\u003e 2.2 版本为兼容 **ARM64** 设备，将默认数据库由 `MySQL` 更改为 `MariaDB` **使用时注意数据备份**\n\n## 快速开始\n\n### 安装 Docker 以及 docker-compose 运行环境\n\n[1. 安装 Docker](https://docs.docker.com/engine/install/)\n\n[2. 安装 docker-compose](https://docs.docker.com/compose/install/)\n\n### 服务器部署\n\n默认 Bolo 的访问域名为 expoli.tech，请根据需要同步修改 `bolo-env.env` 中的各环境变量， **强烈建议将数据库密码修改为强密码！同时别忘对所有密码项进行同步更改！** 修改完成后根据 [快速部署](#快速部署)，进行后续步骤即可。\n\n```\n# mysql env\n# 建议使用强密码\nMYSQL_ROOT_PASSWORD=new_root_password\nMYSQL_USER=bolo\nMYSQL_DATABASE=bolo\nMYSQL_PASSWORD=bolo123456\n\n# bolo env\n# 请同步更新为上方MYSQL密码\nRUNTIME_DB=MYSQL\nJDBC_USERNAME=bolo\nJDBC_PASSWORD=bolo123456\nJDBC_DRIVER=com.mysql.cj.jdbc.Driver\nJDBC_URL=jdbc:mysql://db:3306/bolo?useUnicode=yes\u0026characterEncoding=UTF-8\u0026useSSL=false\u0026allowPublicKeyRetrieval=true\u0026serverTimezone=UTC\n\n```\n\n**启动参数说明：**\n\n- `--listen_port` ：进程监听端口\n- `--server_scheme` ：最终访问协议，如果反代服务启用了 HTTPS 这里也需要改为 https\n- `--server_host` ：最终访问域名或公网 IP，不要带端口\n- `--server_port` ：最终访问端口，使用浏览器默认的 80 或者 443 的话值留空即可\n\n详情请参考：[Solo 用户指南](https://hacpai.com/article/1492881378588)\n\n### 快速部署\n\n- **克隆本项目**\n\n```shell\ngit clone https://github.com/expoli/start-bolo-with-docker-compose.git\n```\n\n- **进入至项目根路径**\n\n```shell\ncd start-bolo-with-docker-compose\n```\n\n- **修改配置文件**\n\n**启用HTTPS**，**注意：启用HTTPS时需保证你的主机拥有公网IP且、80 443 端口可以被正常访问，否则有可能自动颁发证书失败**\n\n修改相应的字段值为自己所需，可对 `docker-compose.yaml` 中的 `blog.example.org` 进行批量替换\n\n```bash\n# 请修改为自己的邮箱地址\n- \"--certificatesresolvers.myresolver.acme.email=me@example.org\"\n\n# 请将 blog.example.org 修改为你自己的博客域名\ncommand: --listen_port=8080 --server_scheme=https --server_host=blog.example.org --server_port=443 --lute_http=http://lute:8249\n- traefik.http.routers.bolo.rule=Host(`blog.example.org`)\n```\n\n**如果要多域名访问，请按下例修改**\n```yaml\n- traefik.http.routers.bolo.rule=Host(`blog.example.org`) || Host(`www.example.org`)\n```\n\n- **使用 docker-compose 启动 Bolo**\n\n```shell\n# 后台启动\ndocker-compose up -d\n\n# 前台方式启动可以看到日志输出、方便进行排错\ndocker-compose up\n```\n\n- **更新容器**\n\n```shell\ndocker-compose pull \u0026\u0026 docker-compose up -d\n```\n\n- **删除容器与 Docker 网络（但保留关键数据）**\n\n```shell\ndocker-compose down\n```\n\n- **完全删除**\n\n如果你想完全卸载 Bolo 只需要运行以下命令\n\n```shell\nrm start-bolo-with-docker-compose -rf\n```\n\n### 迁移\n\n因为数据库的相关数据直接映射到了本地所以**直接打包文件夹**、然后在新机器上**直接解压启动**。（注：2.2 版本之前默认使用 MySQL 数据库，2.2 版本采用 MariaDB ，进行迁移的时候建议使用 `mysqldump` 工具对数据进行备份导出与还原，保证信息可用性。\n\n```shell\n# Backup\nzip -r start-bolo-with-docker-compose.zip start-bolo-with-docker-compose\n\n# Restore\nunzip start-bolo-with-docker-compose.zip\n```\n\n### 性能监控\n\n默认 traefik 已经开启了 `prometheus` 性能监控功能、可配合 `Grafana` 进行使用，最终效果如图\n\n![Traefik](image/Traefik-2-2-Copy-Grafana.png)\n\n### 启用定时更新\n\n\u003cdetails\u003e\n\u003csummary\u003e定时更新\u003c/summary\u003e\n\n可使用 Linux 的定时任务实现定时更新。具体实现方式如下：\n\n1. 手动运行定时命令进行测试\n\n```bash\ncd /path/to/your/docker-compose \u0026\u0026 docker-compose pull \u0026\u0026 docker-compose down \u0026\u0026 docker-compose up -d\n```\n\n2. 确认运行无误之后将其添加至定时任务中\n\n编辑 `/var/spool/cron/你的用户名` 文件，将下面这一行添加至文件中即可。（每周五的凌晨2点钟进行更新）时间间隔可随意设置、写法可参考 https://crontab.guru/\n\n```shell\n0  2  *  *  5  cd /path/to/your/docker-compose \u0026\u0026 export $(cat ./bolo-env.env ) \u0026\u0026 docker-compose pull \u0026\u0026 docker-compose down \u0026\u0026 docker-compose up -d\n```\n\u003c/details\u003e\n\n### 访问测试\n\n\u003cdetails\u003e\n\u003csummary\u003e点击查看访问测试\u003c/summary\u003e\n\n再确认已经启动完成之后、使用浏览器访问您设置的对应域名即可完成博客的初始化。\n\n- Bolo 初始化界面\n![bolo 初始化界面](image/2020-03-22_09-32-bolo-admin.png)\n\n- Bolo 初始化完成界面\n![bolo 初始化完成界面](image/2020-03-22_09-41-bolo-init-success.png)\n\u003c/details\u003e\n\n## 详细介绍\n\n\u003cdetails\u003e\n\u003csummary\u003e点击查看项目介绍\u003c/summary\u003e\n\n### docker-compose.yaml\n\n```yaml\nversion: '3'\n\nservices:\n\n  traefik:\n    image: \"traefik\"\n    container_name: \"traefik\"\n    restart: always\n    command:\n#      - \"--log.level=DEBUG\"\n#      - \"--api.insecure=true\"\n      - \"--providers.docker=true\"\n      - \"--providers.docker.exposedbydefault=false\"\n      - \"--entrypoints.web.address=:80\"\n      - \"--entrypoints.websecure.address=:443\"\n      - \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"\n      - \"--certificatesResolvers.myresolver.acme.dnsChallenge.resolvers=1.1.1.1:53,8.8.8.8:53\"\n#      - \"--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory\"\n      ############\n      # 修改为自己的邮箱地址\n      ############\n      - \"--certificatesresolvers.myresolver.acme.email=me@example.org\"\n      - \"--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json\"\n      # prometheus 数据监控、如不需要可注释掉\n      - \"--metrics.prometheus=true\"\n      - \"--entryPoints.metrics.address=:9090\"\n      - \"--metrics.prometheus.entryPoint=metrics\"\n      # http 跳转至 https\n      - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"\n      - \"--entrypoints.web.http.redirections.entryPoint.scheme=https\"\n    network_mode: host\n    volumes:\n      - \"./letsencrypt:/letsencrypt\"\n      - \"/var/run/docker.sock:/var/run/docker.sock:ro\"\n\n  db:\n    image: mysql:5.7\n    command: --max_allowed_packet=32505856 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --transaction-isolation=READ-COMMITTED --binlog-format=ROW\n    restart: always\n    volumes:\n      - ./mysql/data:/var/lib/mysql\n    env_file:\n      - bolo-env.env\n    networks: \n      - default\n\n  bolo:\n    image: tangcuyu/bolo-solo:latest\n    restart: always\n    container_name: \"bolo\"\n    expose:\n      - \"8080\"\n    # 主题与文章挂载目录\n    volumes: \n      - /etc/localtime:/etc/localtime:ro\n    #   - ./web/markdowns:/opt/solo/markdowns:rw\n    #   - ./theme/solo-nexmoe:/opt/solo/skins/nexmoe\n    env_file:\n      - bolo-env.env\n    command: --listen_port=8080 --server_scheme=https --server_host=blog.example.org --server_port=443 --lute_http=http://lute:8249\n    dns: 8.8.8.8\n    labels:\n      - traefik.enable=true\n      - traefik.port=8080\n      - traefik.http.routers.bolo.rule=Host(`blog.example.org`)\n      - traefik.http.routers.bolo.tls=true\n      - \"traefik.http.routers.cloudreve.entrypoints=websecure\"\n      - traefik.http.routers.bolo.tls.certresolver=myresolver\n    depends_on:\n      - db\n    networks:\n      - default\n\n  lute:\n    image: b3log/lute-http\n    restart: always \n    expose: \n      - \"8249\"\n    networks: \n      - default\n\nnetworks:\n  default:\n\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexpoli%2Fstart-bolo-with-docker-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexpoli%2Fstart-bolo-with-docker-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexpoli%2Fstart-bolo-with-docker-compose/lists"}