Implementação de Seafile com OnlyOffice e Wiki usando Docker

Este guia descreve como implantar o Seafile (versão Pro ou CE) em conjunto com o OnlyOffice Document Server e o recurso de Wiki, utilizando Docker e docker-compose em um servidor CentOS. O processo inclui a configuração de HTTPS com seus próprios certificados SSL.

  1. Preparação do Ambiente Docker

Primeiramente, instale o Docker e o docker-compose no seu servidor CentOS.

# Instalação do Docker
sudo yum install -y docker
# Iniciar e habilitar o serviço do Docker
sudo systemctl start docker
sudo systemctl enable docker
# Verificação da instalação
docker version

Em seguida, instale o docker-compose. Uma opção é usar o gerenciador de pacotes ou baixar o binário diretamente do GitHub.

# Tentativa via yum (pode falhar em versões mais antigas)
sudo yum install -y docker-compose
# Alternativa: baixar o binário manualmente (verifique a versão mais recente)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verificar versão
docker-compose version

Certifique-se de que seu usuário tenha permissão para executar comandos Docker. Adicione-o ao grupo docker e reinicie o serviço, se necessário.

  1. Configuração do Seafile via Docker Compose

Crie um diretório de trabalho, por exemplo /opt/seafile-deploy, e dentro dele, crie o arquivo docker-compose.yml com o conteúdo a seguir. Ajuste as variáveis de ambiente, senhas, volumes de dados e o nome do host conforme sua necessidade.

version: '3.8'
services:
  seafile-database:
    image: mariadb:10.11
    container_name: seafile-db-container
    environment:
      - MYSQL_ROOT_PASSWORD=SuaSenhaRootComplexa
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - ./database-data:/var/lib/mysql
    networks:
      - seafile-internal-net
    restart: always

  seafile-cache:
    image: memcached:1.6
    container_name: seafile-cache-container
    entrypoint: memcached -m 256
    networks:
      - seafile-internal-net
    restart: always

  seafile-search:
    image: seafileltd/elasticsearch-with-ik:5.6.16
    container_name: seafile-search-container
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 2g
    volumes:
      - ./search-index:/usr/share/elasticsearch/data
    networks:
      - seafile-internal-net
    restart: always

  seafile-app:
    image: docker.seafile.top/seafileltd/seafile-pro-mc:latest
    container_name: seafile-app-container
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./seafile-data:/shared
    environment:
      - DB_HOST=seafile-database
      - DB_ROOT_PASSWD=SuaSenhaRootComplexa
      - SEAFILE_ADMIN_EMAIL=admin@seudominio.com
      - SEAFILE_ADMIN_PASSWORD=SuaSenhaAdminSegura
      - SEAFILE_SERVER_LETSENCRYPT=false
      - SEAFILE_SERVER_HOSTNAME=seafile.seudominio.com
    depends_on:
      - seafile-database
      - seafile-cache
      - seafile-search
    networks:
      - seafile-internal-net
    restart: always

networks:
  seafile-internal-net:
    driver: bridge

No diretório /opt/seafile-deploy, inicie todos os serviços em modo destacado.

docker-compose up -d

Acompanhe os logs para monitorar a inicialização:

docker-compose logs -f
  1. Configuração de SSL e Nginx para o Seafile

Após a inicialização bem-sucedida, crie um diretório para seus certificados SSL dentro do volume de dados do Seafile.

mkdir -p ./seafile-data/ssl

Copie seus certificados (arquivo .crt ou .pem e a chave privada .key) para este diretório.

Edite a configuração do Nginx embutida no container Seafile. O arquivo pode ser encontrado em ./seafile-data/nginx/conf/seafile.nginx.conf.

Localize ou crie o bloco server para a porta 443 e configure-o para usar seus certificados:

server {
    listen 443 ssl;
    server_name seafile.seudominio.com;
    ssl_certificate /shared/ssl/seu_certificado.pem;
    ssl_certificate_key /shared/ssl/sua_chave_privada.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    # ... restante da configuração proxy para seafile ...
    location / {
        proxy_pass http://seafile-app-container:80;
        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;
        # ... outras diretivas de proxy ...
    }
}

Recarregue a configuração do Nginx dentro do container:

docker exec seafile-app-container nginx -s reload

Certifique-se de que as portas 80 e 443 estejam liberadas no firewall do seu servidor.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
  1. Instalação do OnlyOffice Document Server

Puxe a imagem oficial do OnlyOffice e inicie um novo container. Mapeie portas diferentes das usadas pelo Seafile e crie volumes para persistência de dados.

# Criar diretórios para dados do OnlyOffice
mkdir -p /opt/onlyoffice-data/{logs,data,lib,db}

# Executar o container
docker run -d \
  --name onlyoffice-server \
  --restart=always \
  -p 8080:80 \
  -p 8443:443 \
  -v /opt/onlyoffice-data/logs:/var/log/onlyoffice \
  -v /opt/onlyoffice-data/data:/var/www/onlyoffice/Data \
  -v /opt/onlyoffice-data/lib:/var/lib/onlyoffice \
  -v /opt/onlyoffice-data/db:/var/lib/postgresql \
  onlyoffice/documentserver
  1. Configuração de SSL para o OnlyOffice

Para configurar HTTPS no OnlyOffice, copie a configuração do Nginx padrão do container para o host, modifique-a e copie-a de volta.

# Copiar configuração
docker cp onlyoffice-server:/etc/onlyoffice/documentserver/nginx/ds.conf /tmp/onlyoffice-ds.conf

Edite o arquivo /tmp/onlyoffice-ds.conf. Dentro do bloco server na porta 443, aponte para seus certificados SSL, que devem ser colocados em /opt/onlyoffice-data/data/certs/.

# Dentro do bloco server:
ssl_certificate /var/www/onlyoffice/Data/certs/seu_certificado.pem;
ssl_certificate_key /var/www/onlyoffice/Data/certs/sua_chave_privada.key;

Copie o arquivo modificado de volta e reinicie o container:

docker cp /tmp/onlyoffice-ds.conf onlyoffice-server:/etc/onlyoffice/documentserver/nginx/ds.conf
# Copie também seus certificados para /opt/onlyoffice-data/data/certs/ se ainda não o fez.
docker restart onlyoffice-server
  1. Integração do Seafile com o OnlyOffice

Adicione as seguintes configurações ao arquivo seahub_settings.py localizado em ./seafile-data/seafile/conf/seahub_settings.py (caminho no host). Substitua o URL pelo endereço HTTPS do seu servidor OnlyOffice.

# Habilitar a integração com o OnlyOffice
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = True # Defina como False se seu certificado for autoassinado e não quiser erros
ONLYOFFICE_APIJS_URL = 'https://onlyoffice.seudominio.com:8443/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = (
    'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx',
    'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods'
)
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')

Reinicie o container Seafile para aplicar as mudanças:

cd /opt/seafile-deploy
docker-compose restart seafile-app
  1. Configuração de Auto-Salvamento no OnlyOffice

Para garantir que as edições sejam salvas periodicamente no Seafile, configure o auto-salvamento no OnlyOffice.

# Copiar o arquivo de configuração
docker cp onlyoffice-server:/etc/onlyoffice/documentserver/local.json /tmp/onlyoffice-local.json

Edite o arquivo /tmp/onlyoffice-local.json e adicione ou modifique a seção CoAuthoring como mostrado abaixo:

{
    "services": {
        "CoAuthoring": {
            "autoAssembly": {
                "enable": true,
                "interval": "5m"
            },
            "sql": {
                ...
            }
        }
    }
}

Copie o arquivo de volta e reinicie o OnlyOffice:

docker cp /tmp/onlyoffice-local.json onlyoffice-server:/etc/onlyoffice/documentserver/local.json
docker restart onlyoffice-server
  1. Ativação do Recurso de Wiki no Seafile

Para habilitar a funcionalidade de Wiki no Seafile, adicione a seguinte linha ao mesmo arquivo seahub_settings.py:

ENABLE_WIKI = True

Reinicie o Seafile novamente. Após reiniciar, você pode publicar qualquer biblioteca de arquivos do Seafile como um Wiki. Crie uma biblioteca, adicione arquivos Markdown (.md), e use a opção "Publicar como Wiki" nas configurações da biblioteca. Os arquivos serão ordenados pelo nome do arquivo, portanto, use uma nomenclatura como 01-Introducao.md, 02-Configuracao.md para controlar a ordem de exibição.

Tags: Docker Seafile OnlyOffice Docker Compose nginx

Publicado em 6-16 03:59 por Thomas