[图片] Solo 官方提供了 docker 的部署方案,本人习惯使用 docker-compose 部署服务,docker-compose 的优点就不多提了,在此附上本人博客部署步骤的详细介绍。 前期准备 docker 安装 docker-compose 下载 Solo 官方配置文件和皮肤文件下载 步骤一:docke ..

docker-compose 部署 Solo 博客的详细介绍

Solo 官方提供了 docker 的部署方案,本人习惯使用 docker-compose 部署服务,docker-compose 的优点就不多提了,在此附上本人博客部署步骤的详细介绍。

前期准备

步骤一:docker 安装

1.更新 yum 包

yum update

2.安装必要的系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

3.设置 yum 源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.查看并选择合适的 docker 版本

yum list docker-ce --showduplicates | sort -r

5.安装 docker

yum install docker-ce-17.12.1.ce

6.DaoCloud 配置 docker 镜像源加速

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

步骤二:docker-compose 下载

1.选择最新的 docker-compose 版本并下载

curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2.设置 docker-compose 执行权限

chmod +x /usr/local/bin/docker-compose

步骤三:配置 blog(如果觉得配置复杂可以直接看步骤四)

1.以下是需要新建的空文件夹目录,此处以 MySQL 作为数据库,包括后文的数据库配置均以此为例

└─blog
    ├─mysql
    │  ├─conf
    │  ├─data
    │  ├─init
    │  └─logs
    ├─nginx
    │  ├─cert
    │  ├─conf
    │  └─logs
    └─solo
        ├─conf
        └─skins

2.数据库配置文件

cd blog/mysql/conf
vim my.cnf
# my.cnf
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
cd blog/mysql/init
vim init.sql
# init.sql
create database if not exists `solo` character set utf8mb4 collate utf8mb4_general_ci;

3.nginx 配置文件

cd blog/nginx/conf
vim app.conf
# app.conf
server {
    listen 80;
    charset utf-8;
        access_log /etc/nginx/log/access.log;
        error_log /etc/nginx/log/error.log;
        location / {
	        proxy_pass http://blog-solo:8080;
	        proxy_set_header Host $host:$server_port;
	        proxy_set_header X-Forwarded-Host $server_name;
	        proxy_set_header X-Real-IP $remote_addr;
	        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	        client_max_body_size 10m;
        }
}

4.solo 配置文件

cd blog/solo/conf
vim latke.properties

solo 的配置可以复制下方,也可从官方仓库下载

# latke.properties
serverScheme=http
serverHost=localhost
serverPort=8080
runtimeMode=PRODUCTION

5.solo 皮肤文件
把最先准备好的官方皮肤,放到下面这个目录下

cd blog/solo/skins

6.docker-compose.yml 配置文件

cd blog
vim docker-compose.yml
# docker-compose.yml
version: "3"
services:
  blog-mysql:
    image: mysql:5.7
    restart: always
    container_name: blog-mysql
    privileged: false
    ports:
      - 3306:3306
    networks:
      - blog-extranet
    environment:
      - MYSQL_ROOT_PASSWORD=setapassword
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./mysql/conf/:/etc/mysql/
      - ./mysql/data/:/var/lib/mysql/
      - ./mysql/init/:/docker-entrypoint-initdb.d/
      - ./mysql/logs/:/logs/
  blog-solo:
    image: b3log/solo
    restart: always
    container_name: blog-solo
    privileged: false
    networks:
      - blog-extranet
    links:
      - blog-mysql
    depends_on:
      - blog-mysql
    ports:
      - 8080:8080
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./solo/conf/latke.properties:/opt/solo/latke.properties:ro
      - ./solo/skins/:/opt/solo/skins/:ro
    environment:
      - RUNTIME_DB=MYSQL
      - JDBC_USERNAME=root
      - JDBC_PASSWORD=setapassword
      - JDBC_DRIVER=com.mysql.cj.jdbc.Driver
      - JDBC_URL=jdbc:mysql://blog-mysql/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
  blog-nginx:
    image: nginx:1.14
    restart: always
    container_name: blog-nginx
    privileged: false
    networks:
      - blog-extranet
    links:
      - blog-solo
    depends_on:
      - blog-solo
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./nginx/conf/:/etc/nginx/conf.d/
      - ./nginx/cert/:/etc/nginx/cert/
      - ./nginx/logs/:/etc/nginx/log/
networks:
  blog-extranet:
    driver: bridge

步骤四:运行与停止

(皮一下)其实可以跳过步骤三
配置我都准备好了,步骤三只是为了让大家熟悉下过程,大家可以从我的 blog 仓库地址:https://github.com/YYJeffrey/blog 下载所有的配置包括皮肤。
该仓库下拉后是直接可以通过 docker 运行的,当然为保障站点安全性,需要修改几处配置,包括 docker-compose.yml 里的两处 setapssword,以及需要将 latke.properties 的 serverHost 改成自己服务器的域名或者 IP 地址。

1.运行

cd blog
docker-compose up -d

2.停止

cd blog
docker-compose rm -svf

最后,如果各位朋友如果有更好的优化建议的话,可以一起交流学习。

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    1003 引用 • 7670 回帖 • 652 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    110 引用 • 230 回帖 • 3 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    108 引用 • 523 回帖 • 3 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

    300 引用 • 704 回帖 • 536 关注
9 回帖
请输入回帖内容...
  • YYJeffrey

    今儿是祖国大庆,各位节日快乐!

    1 回复
  • zhaoyangkun

    同乐同乐 😁

  • gwyy

    支持 J 兄 👍

  • YYJeffrey

    谢谢哈

  • Wit13

    您好,我参照着你的教程弄的,docker-compose 我用的是 18.06.0 版的,启动后访问页面报:latke 配置错误,请问是什么导致的呢?

  • YYJeffrey

    你好,如果容器启动了的话,可能是 latke.properties 配置的问题,看看是否已经改成了自己的域名或 IP。

    如果是下图的问题,也可以试下官方的处理方法。
    image.png

    1 回复
  • Wit13

    加了还是报错

  • YYJeffrey

    我修改了 docker-compose 的部分配置,刚刚我试着在自己的纯净的虚拟器里下拉可以正常运行

    建议从 https://github.com/YYJeffrey/blog 下拉源码运行

    git clone git@github.com:YYJeffrey/blog.git
    

    下拉后只需要将 serverHost 改成自己的域名或 IP 地址即可正常运行的,还有一点就是 docker-compose 两处 setapassword 要保持一直才行。

    其他有什么遇到的问题可以在上述仓库直接提 issues 给我,我会在第一时间回复。

  • Wit13

    参考你的教程,我也写了一个 witbolg.com 感谢大佬教程 👍 👍 👍

请输入回帖内容 ...