Skip to main content

Установка китайского облака KodeCloud в Docker

Установите Docker

1. Среда установки

Установите и запустите службу docker, новая версия docker автоматически установит docker-compose-plugin


 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
 systemctl enable docker && systemctl start docker

Использование Docker Compose, после запуска docker compose up Up вы можете использовать docker compose ls для просмотра местоположения профиля


 docker compose ls

Подсказывать:

Если команда docker compose не существует, вы можете вручную установить docker-compose и заменить его последующей командой.

  • curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  • chmod +x /usr/local/bin/docker-compose

2. Быстрый запуск режима HTTP

Заметка:

Сначала создадим директорию в качестве директории проекта, а затем все команды будут выполняться в этой директории

  • mkdir /kodbox && cd /kodbox
  • Вам нужно установить пароль базы данных в db.env, а MYSQL_ROOT_PASSWORD в yml нужно дополнить.
  • Создание файла для установки переменной окружения базы данных vim db.env

    MYSQL_PASSWORD=
    MYSQL_DATABASE=kodbox
    MYSQL_USER=kodbox
    
  • Создание файла docker-compose.yml, в котором настраиваются сопоставленные порты и постоянные каталоги

    
    
  •  vim docker-compose.yml
    
    version: '3.5'
    
    services:
      db:
        image: mariadb:10.6
        restart: always
        command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
        volumes:
          - "./db:/var/lib/mysql"       #./db是数据库持久化目录,可以修改
          # - "./etc/mysql/conf.d:/etc/mysql/conf.d"       #增加自定义mysql配置
        environment:
          - MYSQL_ROOT_PASSWORD=
          - MARIADB_AUTO_UPGRADE=1
          - MARIADB_DISABLE_UPGRADE_BACKUP=1
        env_file:
          - db.env
          
      app:
        image: kodcloud/kodbox
        restart: always
        ports:
          - 80:80                       #左边80是使用端口,可以修改
        volumes:
          - "./site:/var/www/html"      #./site是站点目录位置,可以修改
        environment:
          - MYSQL_HOST=db
          - REDIS_HOST=redis
        env_file:
          - db.env
        depends_on:
          - db
          - redis
    
      redis:
        image: redis:alpine
        restart: always
    

Добавьте пользовательскую конфигурацию MySQL:

mkdir -p ./etc/mysql/conf.d && vim ./etc/mysql/conf.d/custom.cnf

Перейдите в директорию проекта и выполните команду docker compose up -d startup, чтобы автоматически вытащить контейнер и запустить его


 docker compose up -d

Контейнеры Docker перечислены в списке, и вы можете видеть, что 3 контейнера запущены


 docker ps 
80/tcp, 9000/tcp   kodbox_app_1

Если вам необходимо остановить обслуживание


 docker compose down

Поскольку база данных и kodbox были смонтированы с постоянным каталогом, их можно перезапустить при необходимости, не беспокоясь о потере данных


 docker compose up -d

В соответствии с подключенными портами, настроенными в файле docker-compose.yml, обратитесь к мастеру настройки для инициализации системы.

3. Настройте сертификат HTTPS

Способ 1: Обратный прокси хоста Nginx

server {
    listen 80;
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate     /etc/nginx/ssl/example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols       TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers         EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:!MD5;
    add_header Strict-Transport-Security "max-age=31536000";
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:2m;
    ssl_session_timeout 1h;
    ssl_session_tickets off;

    client_max_body_size 0;
    proxy_buffering off;

    access_log  /var/log/nginx/proxy_access.log  main;
    error_log  /var/log/nginx/proxy_error.log  info;

    location / {
        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 Host $http_host;

        proxy_connect_timeout 3600;
        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        proxy_pass http://127.0.0.1:80/;
    }
}

Способ 2: Настройка сертификата для контейнера

Создайте директорию сертификатов и добавьте в нее загруженный SSL-сертификат NGINX


 mkdir /etc/kodbox/ssl

Переименование сертификата


 mv xxx.pem fullchain.pem
 mv xxx.key privkey.pem

Добавьте сопоставление каталога сертификатов в HTTP-docker-compose.yml /etc/kodbox/ssl:/etc/nginx/ssl и контейнер автоматически включит конфигурацию https при обнаружении существования файла сертификата.


 mkdir kodbox && cd kodbox
 vim docker-compose.yaml
version: '3.5'

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - "./db:/var/lib/mysql"       #./db是数据库持久化目录,可以修改
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env
      
  app:
    image: kodcloud/kodbox
    restart: always
    ports:
      - 443:443                      #左边80是使用端口,可以修改
    volumes:
      - "/etc/kodbox/ssl:/etc/nginx/ssl"  #左边配置主机证书目录
      - "./site:/var/www/html"      #./site是站点目录位置,可以修改
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  redis:
    image: redis:alpine
    restart: always

Затем перейдите в директорию проекта и запустите команду docker compose up -d для запуска

4. Прочие вопросы

Настройка сети контейнера и диапазона IP-адресов

Обратитесь к provide-static-ip-to-docker-containers-via -docker-compose

version: '3.5'

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - "./db:/var/lib/mysql"       #./db是数据库持久化目录,可以修改
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env
    networks:
      vpcbr:
        ipv4_address: 10.5.0.5
      
  app:
    image: kodcloud/kodbox
    restart: always
    ports:
      - 80:80                       #左边80是使用端口,可以修改
    volumes:
      - "./site:/var/www/html"      #./site是站点目录位置,可以修改
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
    env_file:
      - db.env
    networks:
      vpcbr:
        ipv4_address: 10.5.0.6
    depends_on:
      - db
      - redis

  redis:
    image: redis:alpine
    restart: always
    networks:
      vpcbr:
        ipv4_address: 10.5.0.7

networks:
  vpcbr:
    driver: bridge
    ipam:
     config:
       - subnet: 10.5.0.0/16
         gateway: 10.5.0.1

Подключение тома NFS

Подсказывать:

  • Сервер NFS должен быть настроен no_root_squash
  • После запуска необходимо предоставить контейнеру права на чтение и запись в mount directorydocker docker exec -it kodbox-app-1 chown -R nginx:nginx /mnt/nfs
version: '3.5'

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - "./db:/var/lib/mysql"       #./db是数据库持久化目录,可以修改
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env
      
  app:
    image: kodcloud/kodbox
    restart: always
    ports:
      - 80:80                       #左边80是使用端口,可以修改
    volumes:
      - "./site:/var/www/html"      #./site是站点目录位置,可以修改
      - nfs_mount:/mnt/nfs
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  redis:
    image: redis:alpine
    restart: always

volumes:
  nfs_mount:
    driver_opts:
      type: "nfs"
      o: "addr=192.168.1.4,nolock,rw"
      device: ":/path/to-dir"

Подключение тома хранилища CIFS (SMB)

Обратитесь к docker_compose_cifs_mounts

# Variables that will need to be changed:
#     <PUID>                            -  User id for folder/file permissions
#     <PGID>                            -  Group id for folder/file permissions
#     <PATH_TO_CONFIG>                  -  Path where Unmanic will store config files
#     <PATH_TO_ENCODE_CACHE>            -  Cache path for in-progress encoding tasks
#     <REMOTE_IP>                       -  Remote IP address of CIFS mount
#     <PATH_TO_LIBRARY>                 -  Path in remote machine to be mounted as your library 
#     <USERNAME>                        -  Remote mount username
#     <PASSWORD>                        -  Remote mount password
version: '3.5'

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - "./db:/var/lib/mysql"       #./db是数据库持久化目录,可以修改
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MARIADB_AUTO_UPGRADE=1
      - MARIADB_DISABLE_UPGRADE_BACKUP=1
    env_file:
      - db.env
      
  app:
    image: kodcloud/kodbox
    restart: always
    ports:
      - 80:80                       #左边80是使用端口,可以修改
    volumes:
      - "./site:/var/www/html"      #./site是站点目录位置,可以修改
      - cifs_mount:/mnt/cifs
    environment:
      - MYSQL_HOST=db
      - REDIS_HOST=redis
      - PUID=100
      - PGID=101
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  redis:
    image: redis:alpine
    restart: always

volumes:
  cifs_mount:
    driver: local
    driver_opts:
      type: cifs    
      device: //<REMOTE_IP>/<PATH_TO_LIBRARY>
      o: "username=<USERNAME>,password=<PASSWORD>,uid=100,gid=101"