Sign inSign up

jiaopengzi/blog

By jiaopengzi

•Updated about 2 months ago

将 blog-client、blog-server、PostgreSQL、Redis、Elasticsearch 打包为独立镜像 blog

Image
0

1.3K

jiaopengzi/blog repository overview

独立镜像约定只挂载一个总目录, 默认使用 HTTPS, 并在首次启动时自动生成 CA 证书与 HTTPS 证书。若第二次启动发现证书已存在, 则不会重复生成。

镜像会根据可见内存自动选择更保守的 ES、PostgreSQL、Nginx 参数。若是小内存机器, 建议在启动容器前, 直接在部署宿主机执行一次如下命令。

sudo sysctl vm.overcommit_memory=1

如需手动覆盖配置, 可在 docker run 时传入以下环境变量:

  • BLOG_MEMORY_PROFILE=small
  • BLOG_ES_JAVA_OPTS=-Xms384m -Xmx384m
  • BLOG_PG_SHARED_BUFFERS=64MB
  • BLOG_PG_MAX_CONNECTIONS=40

⁠使用宿主机内网 IP 部署

HOST_IP="$(hostname -I | awk '{print $1}')" && sudo docker run -d \
  --name blog \
  -p 443:443 \
  -v /data/blog:/data \
  -e BLOG_PUBLIC_HOST="$HOST_IP" \
  jiaopengzi/blog:latest

首次启动后, 可从宿主机挂载目录导出 CA 证书:

/data/blog/certs/internal-ca/ca.crt
⁠使用自定义证书和域名
sudo docker run -d \
  --name blog \
  -p 443:443 \
  -v /data/blog:/data \
  -v /your/path/cert.pem:/data/blog-client/nginx/ssl/cert.pem \
  -v /your/path/cert.key:/data/blog-client/nginx/ssl/cert.key \
  -e BLOG_PUBLIC_HOST=blog.example.com \
  jiaopengzi/blog:latest

⁠启动后状态校验

sudo docker ps -a | grep blog

sudo docker logs blog

同时使用如下 curl 校验是否通畅

在部署机执行 curl -vk https://127.0.0.1:443,先确认宿主机本地 HTTPS 是否通。

在外部机器执行 curl -vk https://blog.example.com/,再看是 DNS、链路还是证书链问题。

如果您更习惯先把证书整理到数据目录, 也可以预先放到 /data/blog/blog-client/nginx/ssl/cert.pem 和 /data/blog/blog-client/nginx/ssl/cert.key, 再只挂载 -v /data/blog:/data 启动。

⁠常用运行时环境变量

变量默认值说明
BLOG_PUBLIC_HOSTlocalhost对外访问域名或 IP, 用于生成默认证书和后端 host
BLOG_HTTPS_PORT443容器内 HTTPS 监听端口
BLOG_PG_PORT15432容器内 PostgreSQL 监听端口
BLOG_REDIS_PORT16379容器内 Redis 监听端口
BLOG_ES_PORT19200容器内 Elasticsearch HTTPS 监听端口

⁠说明

  • 仅执行 sudo docker run -d blog:latest 不会自动发布宿主机端口, 仍需显式添加 -p 443:443, 否则无法从宿主机或局域网访问。
  • 数据库默认不占用容器内常见端口, 如果需要对外连接数据库, 请自行增加端口映射, 例如 -p 5432:15432。
  • Elasticsearch 内置 IK 分词器, 默认保留空的 my.dic, 可在挂载目录中按需维护。

Tag summary

Content type

Image

Digest

sha256:ff8344327…

Size

864.9 MB

Last updated

about 2 months ago

docker pull jiaopengzi/blog