Docker 搭建 CodiMD

创建数据目录

  • codimd 用于存储上传的文件
  • mariadb 用于存储数据库文件
1
2
$ mkdir /data/docker/{codimd,mariadb}
$ chown 1500:1500 /data/docker/{codimd,mariadb}

安装数据库

这里我们选择使用容器运行 MariaDB

1
2
3
4
5
6
7
$ docker run -d \
--name mariadb \
--restart=unless-stopped \
-e MYSQL_ROOT_PASSWORD=Your_Password \
-p 3306:3306 \
-v /data/docker/mariadb:/var/lib/mysql \
mariadb

配置数据库

1. 登录到数据库

1
$ mysql -h 192.168.2.253 -u root -p

2. 创建 codimd 数据库

1
CREATE DATABASE codimd CHARACTER SET utf8 COLLATE utf8_general_ci;

3. 设置数据库访问权限

1
GRANT ALL PRIVILEGES ON codimd.* TO 'codimd'@'%' IDENTIFIED BY 'Your_Password';

4. 退出数据库

1
EXIT;

安装 CodiMD

这里提供了 1.6.02.0.1 两个版本,可根据实际需求选择。

v1.6.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ docker run -d \
--name codimd \
--restart=unless-stopped \
-e PUID=1500 \
-e PGID=1500 \
-e DB_HOST=192.168.2.253 \
-e DB_PORT=3306 \
-e DB_NAME=codimd \
-e DB_USER=codimd \
-e DB_PASS=Your_Password \
-e TZ=Asia/Shanghai \
-e CMD_ALLOW_ANONYMOUS=false \
-e CMD_DEFAULT_PERMISSION=private \
-e CMD_ALLOW_EMAIL_REGISTER=false \
-e CMD_ALLOW_GRAVATAR=false \
-e CMD_DOMAIN=note.chl.com.cn \
-e CMD_PROTOCOL_USESSL=true \
-e CMD_IMAGE_UPLOAD_TYPE=filesystem \
-p 127.0.0.1:3000:3000 \
-v /data/docker/codimd:/config \
linuxserver/codimd

v2.0.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ docker run -d \
--name codimd \
--restart=unless-stopped \
-e UID=1500 \
-e GID=1500 \
-e TZ=Asia/Shanghai \
-e CMD_DB_URL=mysql://codimd:Your_Password@192.168.2.253:3306/codimd \
-e CMD_USECDN=false \
-e CMD_ALLOW_ANONYMOUS=false \
-e CMD_DEFAULT_PERMISSION=private \
-e CMD_ALLOW_EMAIL_REGISTER=false \
-e CMD_ALLOW_GRAVATAR=false \
-e CMD_DOMAIN=note.chl.com.cn \
-e CMD_PROTOCOL_USESSL=true \
-e CMD_IMAGE_UPLOAD_TYPE=filesystem \
-p 127.0.0.1:3000:3000 \
-v /data/docker/codimd:/home/hackmd/app/public/uploads \
nabo.codimd.dev/hackmdio/hackmd:2.1.0-cjk

从版本 2.1.0 开始,为了优化 Docker 镜像的尺寸,官方默认的镜像中不包含 CJK 字体,如果您在导出 PDF 时会使用到 CJK 字体,请使用带 -cjk 后缀的镜像。例如:

1
nabo.codimd.dev/hackmdio/hackmd:2.0.1-cjk

配置 Nginx

申请域名和 SSL 证书以及配置域名解析的步骤就不在这里赘述了,直接开始 Nginx 的配置。

1. 拷贝证书文件

1
2
$ cp ~/.acme.sh/note.chl.com.cn/fullchain.cer /etc/ssl/note.chl.com.cn.crt
$ cp ~/.acme.sh/note.chl.com.cn/note.chl.com.cn.key /etc/ssl/note.chl.com.cn.key

2. 为 CodiMD 编写配置文件

创建 /etc/nginx/sites-available/codimd,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# setup a upstream point to CodiMD server
upstream @codimd {
server 127.0.0.1:3000;
keepalive 300;
}

# for socket.io (http upgrade)
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

# redirect all http traffic to https
server {
listen 80;
server_name note.chl.com.cn;
return 301 https://$server_name$request_uri;
}

# https server
server {
listen 443 ssl http2;
server_name note.chl.com.cn;

# setup certificate
ssl_certificate /etc/ssl/note.chl.com.cn.crt;
ssl_certificate_key /etc/ssl/note.chl.com.cn.key;

location / {
proxy_http_version 1.1;

# set header for proxy protocol
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

# setup for image upload
client_max_body_size 8192m;
proxy_max_temp_file_size 8192m;

proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_pass http://@codimd;
}
}

3. 启用站点

1
$ ln -s /etc/nginx/sites-available/codimd /etc/nginx/sites-enabled/codimd

4. 重新载入配置

1
$ systemctl reload nginx

至此,CodiMD 搭建完成。

使用 CodiMD

先创建一个用户

1
$ docker exec -it codimd ./bin/manage_users --add me@mail.com

然后使用浏览器访问 https://note.chl.com.cn 便可以登录使用了。

附:用户管理

创建用户

方法 A

1
$ docker exec -it codimd ./bin/manage_users --add me@mail.com

方法 B

1
$ docker exec -it codimd ./bin/manage_users --add me@mail.com --pass Your_Password

删除用户

1
$ docker exec -it codimd ./bin/manage_users --del me@mail.com

重设密码

方法 A

1
$ docker exec -it codimd ./bin/manage_users --reset me@mail.com

方法 B

1
$ docker exec -it codimd ./bin/manage_users --reset me@mail.com --pass Your_Password