通过docker在服务器上部署CodiMD

syan 发布于 2019-12-19 5953 次阅读


原来部署这玩意儿真的很简单,因为之前对docker和网络部署都一无所知所以踩了好多莫名其妙的坑,但是总算是逃出来了

CodiMD的主要好处就在于云端编辑和多人编辑啦,,真正体验下来才发现其中数学公式的显示还是挺糟糕的,所以其实我的主力还会是typora,不过有了它确实挺方便的就是√

部署的第一个门槛其实只是科学上网,因为CodiMD的官方部署文档是被墙掉的,给一手链接嗷。。。Docker Deployment

我们需要做的准备工作只有安装docker和docker-compose,给出linux下的安装代码

DOCKER

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

DOCKER-COMPOSE

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

然后就是创建容器了,这真是可以一步到位的,即听从官网的指导创建 docker-compose.yml 文件,然后输入以下代码

version: "3"
services:
  database:
    image: postgres:11.5
    environment:
      - POSTGRES_USER=<ENTER_YOUR_USERNAME>
      - POSTGRES_PASSWORD=<ENTER_YOUR_PASSWD>
      - POSTGRES_DB=codimd
    volumes:
      - "database-data:/var/lib/postgresql/data"
    restart: always
  codimd:
    image: nabo.codimd.dev/hackmdio/hackmd:1.4.1
    environment:
      - CMD_DB_URL=postgres://<ENTER_YOUR_USERNAME>:<ENTER_YOUR_PASSWD>@database/codimd
      - CMD_USECDN=false
    depends_on:
      - database
    ports:
      - "3000:3000"
    volumes:
      - upload-data:/home/hackmd/app/public/uploads
    restart: always
volumes:
  database-data: {}
  upload-data: {}

注意一下要把代码中<>内的部分修改为自己设定的数据库名和数据库密码,然后再使用代码运行激活容器就行了。

sudo docker-compose up -d

程序会自动从网络上获取codimd和postgres数据库的镜像。

以及随着codimd最新版本的更新,可以自行修改 docker-compose.yml 中镜像的名称

注意一下,不加sudo和-d都会导致报错,后者原因未知,如果失败了请务必删除容器再来一次

这组代码默认将容器的端口映射在了localhost:3000,在浏览器框中输入ip:3000就能访问了

暂时还不知道怎么把端口跟外网域名绑定,暂时的方案是使用宝塔面板的重定向功能,待日后更新吧?

运营维护

参考: 使用DOCKER搭建CODIMD

备份
docker-compose exec database pg_dump codimd -U codimd  > backup.sql
恢复
cat backup.sql | docker exec -i $(docker-compose ps -q database) psql -U codimd
升级软件
cd codimd ## enter the directory
git pull ## pull new commits
docker-compose pull ## pull new containers
docker-compose up ## turn on