Instalação Koel · 12 min read · Nov 03, 2025
Como Instalar o Servidor de Streaming de Música Koel Usando Docker no Rocky Linux 8

Koel é um serviço de streaming de áudio baseado na web escrito no framework PHP Laravel. Ele permite que você transmita sua coleção pessoal de músicas e a acesse de qualquer lugar do mundo. Suporta vários formatos de mídia, incluindo AAC, OGG, WMA, FLAC e APE.
Neste tutorial, você aprenderá como instalar o Servidor de Streaming de Música Koel usando Docker em uma máquina Rocky Linux 8.
Pré-requisitos
- Um servidor rodando Rocky Linux 8.5.
- Um usuário não-root com privilégios sudo.
- Atualize tudo.
$ sudo dnf update - Instale pacotes essenciais.
$ sudo dnf install yum-utils nano curl - Um nome de domínio personalizado apontando para o servidor como
koel.example.com.
Passo 1 - Configurar o Firewall
O primeiro passo é configurar o firewall. O Rocky Linux usa o Firewalld Firewall. Verifique o status do firewall.
$ sudo firewall-cmd --state
running
O firewall funciona com diferentes zonas, e a zona pública é a padrão que usaremos. Liste todos os serviços e portas ativos no firewall.
$ sudo firewall-cmd --permanent --list-services
Deve mostrar a seguinte saída.
cockpit dhcpv6-client ssh
Permita as portas HTTP e HTTPS.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Verifique novamente o status do firewall.
$ sudo firewall-cmd --permanent --list-services
Você deve ver uma saída semelhante.
cockpit dhcpv6-client http https ssh
Recarregue o firewall para habilitar as mudanças.
$ sudo firewall-cmd --reload
Passo 2 - Instalar o Docker
O Rocky Linux vem com uma versão mais antiga do Docker. Para instalar a versão mais recente, primeiro, instale o repositório oficial do Docker.
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Instale a versão mais recente do Docker.
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Habilite e execute o daemon do Docker.
$ sudo systemctl enable docker --now
Verifique se está rodando.
? docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-04-02 13:26:08 UTC; 2s ago
Docs: https://docs.docker.com
Main PID: 21152 (dockerd)
Tasks: 7
Memory: 30.9M
CGroup: /system.slice/docker.service
??21152 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
...
Por padrão, o Docker requer privilégios de root. Se você quiser evitar usar sudo toda vez que executar o comando docker, adicione seu nome de usuário ao grupo docker.
$ sudo usermod -aG docker $(whoami)
Você precisará sair do servidor e entrar novamente como o mesmo usuário para habilitar essa mudança.
Passo 3 - Instalar o Docker Compose
Baixe a versão estável mais recente do Docker Compose.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Aplique permissões executáveis ao arquivo binário do Docker Compose.
$ sudo chmod +x /usr/local/bin/docker-compose
Teste a instalação.
$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
Instale o script de conclusão do Bash do Docker-compose.
$ sudo curl \
-L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
-o /etc/bash_completion.d/docker-compose
Recarregue suas configurações de perfil para fazer a conclusão do bash funcionar.
$ source ~/.bashrc
Passo 4 - Criar a Chave do App Koel
Geraremos a chave do App Koel executando o contêiner por um curto momento. Execute o seguinte comando para rodar o contêiner e acessar seu shell.
$ docker run -it --rm phanan/koel bash
Uma vez dentro do contêiner, execute o seguinte comando para gerar a chave do aplicativo.
$ php artisan key:generate --force
Saída do arquivo de ambiente modificado com a nova chave do app gerada.
$ cat .env
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
Copie o valor da chave e saia do shell do contêiner.
$ exit
Passo 5 - Criar o Arquivo de Ambiente do Koel
Crie um diretório para o Koel.
$ mkdir ~/koel
Mude para o diretório.
$ cd ~/koel
Crie o diretório de música.
$ mkdir music
Crie e abra o arquivo .env.
$ nano .env
Cole o seguinte código nele.
APP_NAME=Koel
# Uma string aleatória de 32 caracteres. Você pode deixar isso vazio se usar php artisan koel:init.
APP_KEY=base64:fjtO7aVHHKWfk4DThKqf1nci6o2DuMkNd90TKX6Gj+4=
# O caminho ABSOLUTO para sua mídia. Este valor pode sempre ser alterado mais tarde via interface web.
MEDIA_PATH=/music
APP_ENV=production
APP_DEBUG=true
APP_URL=https://koel.example.com
# O tempo máximo de varredura, em segundos. Aumente isso se você tiver uma biblioteca enorme.
# Nota: Esta configuração não tem efeito ao escanear via koel:sync.
APP_MAX_SCAN_TIME=600
# O limite de memória, em MB, usado pelo processo de varredura.
# Por exemplo, se você quiser definir um limite de memória de 2048MB, insira "2048" (sem
# aspas) aqui.
MEMORY_LIMIT=512
# O método de streaming.
# Pode ser 'php' (padrão), 'x-sendfile' ou 'x-accel-redirect'
# Veja https://docs.koel.dev/#streaming-music para mais informações.
# Nota: Esta configuração não tem efeito se a mídia precisar de transcodificação (por exemplo, FLAC).
STREAMING_METHOD=x-sendfile
# Se você quiser que o Koel integre com Last.fm, defina os detalhes da API aqui.
# Veja https://docs.koel.dev/3rd-party.html#last-fm para mais informações
LASTFM_API_KEY=
LASTFM_API_SECRET=
# Se você quiser usar o Amazon S3 com o Koel, preencha as informações aqui e siga o
# guia de instalação em https://docs.koel.dev/aws-s3.html
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
# Se você quiser que o Koel integre com o YouTube, defina a chave da API aqui.
# Veja https://docs.koel.dev/3rd-party.html#youtube para mais informações.
YOUTUBE_API_KEY=
# Você também pode configurar o Koel para usar um CDN para servir os arquivos de mídia.
# Esta URL deve ser mapeada para a URL inicial da instalação do Koel.
# Sem barra no final, por favor.
CDN_URL=
# A taxa de bits do stream mp3 de saída. Um valor mais alto resulta em melhor qualidade,
# mas streaming mais lento e mais largura de banda.
OUTPUT_BIT_RATE=128
# Se deve permitir o download de músicas.
# Nota que se você estiver baixando mais de uma música, o Koel irá compactá-las
# usando o ZipArchive do PHP. Portanto, se o módulo não estiver disponível no ambiente atual,
# tal download falhará (silenciosamente).
ALLOW_DOWNLOAD=true
# Se isso estiver definido como verdadeiro, a consulta para obter informações sobre artista, álbum e música será armazenada em cache.
# Isso pode dar um impulso ao tempo de inicialização do Koel, especialmente se sua biblioteca for enorme.
# No entanto, o processo de desserialização do cache pode ser sensível à memória, então se você encontrar
# erros, tente definir isso como falso.
CACHE_MEDIA=true
# O Koel tenta detectar se seu site usa HTTPS e gera URLs seguras de acordo.
# Se isso falhar por qualquer motivo, você pode forçar isso definindo este valor como verdadeiro.
FORCE_HTTPS=true
# As variáveis abaixo são específicas do Laravel.
# Você pode alterá-las se souber o que está fazendo. Caso contrário, apenas deixe-as como estão.
APP_LOG_LEVEL=debug
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
A maioria das configurações é autoexplicativa acima. As seguintes configurações precisam ser configuradas para que funcione. Cole a chave do app gerada na etapa anterior contra a variável APP_KEY. Insira seu nome de domínio sob APP_URL e defina o limite de memória em MB dependendo dos recursos do seu servidor. Definimos o método de streaming como x-sendfile, pois a imagem do docker do Koel usa o Apache e vem pré-configurada com ele. A configuração FORCE_HTTPS está definida como verdadeira porque usaremos o Nginx como um balanceador de carga junto com o SSL Let’s Encrypt para servir o Koel na web. Configure outros serviços se quiser usá-los junto com o Koel.
Passo 6 - Criar o Arquivo Docker Compose do Koel
Crie e abra o arquivo docker-compose.yml para edição.
$ nano docker-compose.yml
Cole o seguinte código nele.
version: '3.3'
services:
koel:
image: phanan/koel
container_name: koel
depends_on:
- koeldb
restart: unless-stopped
ports:
- 8080:80
environment:
- DB_CONNECTION=mysql
- DB_HOST=koeldb
- DB_USERNAME=koel
- DB_PASSWORD=koelpassword
- DB_DATABASE=koel
volumes:
- ./music:/music
- ./.env:/var/www/html/.env
- covers:/var/www/html/public/img/covers
- search_index:/var/www/html/storage/search-indexes
koeldb:
image: mysql/mysql-server:8.0
restart: unless-stopped
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=koel
- MYSQL_USER=koel
- MYSQL_PASSWORD=koelpassword
volumes:
db:
driver: local
covers:
driver: local
search_index:
driver: local
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
O arquivo acima inicia contêineres com base nas imagens do Docker do Koel e MySQL. Ele expõe o Koel na porta 8080 em sua máquina. A música e o arquivo de ambiente são montados nos locais respectivos no contêiner. O diretório para capas de música e o índice de busca, juntamente com os dados do MySQL, são montados como volumes locais. Escolha uma senha forte para as variáveis MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD e combine esses valores com as variáveis para o contêiner Koel no arquivo acima. Para vincular o contêiner Koel ao contêiner do banco de dados, certifique-se de que as variáveis DB_HOST e depends_on tenham o nome do serviço do contêiner do banco de dados.
Passo 7 - Iniciar o Contêiner Koel
Inicie o Contêiner Koel usando o seguinte comando.
$ docker-compose up -d
Inicializar o Koel pela primeira vez
Faça login no shell do Contêiner Koel. koel no comando abaixo refere-se ao nome do contêiner definido pela variável container_name no arquivo Docker compose acima. Se você não tiver um nome de contêiner definido, precisará encontrar o nome do contêiner primeiro e usá-lo no comando a seguir.
$ docker exec --user www-data -it koel bash
Execute o seguinte comando para criar uma conta de administrador e inicializar o banco de dados.
$ php artisan koel:init --no-assets
Alterar a Senha do Administrador
O Koel cria uma conta de administrador padrão com as seguintes credenciais.
email: [email protected]
password: KoelIsCool
Você pode alterar a senha da conta de administrador usando o seguinte comando dentro do shell do contêiner.
$ php artisan koel:admin:change-password
Saia do shell do contêiner.
$ exit
Passo 8 - Instalar SSL
Para instalar um certificado SSL usando o Let’s Encrypt, precisamos instalar a ferramenta Certbot.
Primeiro, você precisa baixar e instalar o repositório EPEL.
$ sudo dnf install epel-release
Execute os seguintes comandos para instalar o Certbot.
$ sudo dnf install certbot
Gere o certificado SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d koel.example.com
O comando acima fará o download de um certificado para o diretório /etc/letsencrypt/live/koel.example.com em seu servidor.
Gere um certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Crie um diretório raiz da web para o desafio de auto-renovação do Let’s Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crie um Cron Job para renovar o SSL. Ele será executado todos os dias para verificar o certificado e renová-lo se necessário. Para isso, primeiro crie o arquivo /etc/cron.daily/certbot-renew e abra-o para edição.
$ sudo nano /etc/cron.daily/certbot-renew
Cole o seguinte código.
#!/bin/sh
certbot renew --cert-name koel.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Altere as permissões do arquivo da tarefa para torná-lo executável.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Passo 9 - Instalar o Nginx
Estaremos instalando a versão mais recente do Nginx. Crie e abra o arquivo /etc/yum.repos.d/nginx.repo para edição.
$ sudo nano /etc/yum.repos.d/nginx.repo
Cole as seguintes linhas nele.
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Instale o Nginx.
$ sudo dnf install nginx
Verifique a instalação.
$ nginx -v
nginx version: nginx/1.20.2
Habilite e inicie o serviço Nginx.
$ sudo systemctl enable nginx --now
Crie e abra o arquivo /etc/nginx/conf.d/koel.conf para edição.
$ sudo nano /etc/nginx/conf.d/koel.conf
Cole o seguinte código nele.
# Redirecionar todo o tráfego não criptografado para criptografado
server {
listen 80;
listen [::]:80;
server_name koel.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name koel.example.com;
ssl_certificate /etc/letsencrypt/live/koel.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/koel.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/koel.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
access_log /var/log/nginx/koel.example.com.access.log main;
error_log /var/log/nginx/koel.example.com.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host;
client_max_body_size 400M;
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
}
}
Uma vez terminado, salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado. A configuração acima permite que o Nginx atue como um servidor proxy e se vincule à porta 8080 no localhost.
Abra o arquivo /etc/nginx/nginx.conf para edição.
$ sudo nano /etc/nginx/nginx.conf
Adicione a seguinte linha antes da linha include /etc/nginx/conf.d/*.conf;.
server_names_hash_bucket_size 64;
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Verifique a sintaxe do arquivo de configuração do Nginx.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Reinicie o serviço Nginx para habilitar a nova configuração.
$ sudo systemctl restart nginx
Passo 10 - Acessar o Koel
Você pode acessar o Koel visitando a URL https://koel.example.com em seu navegador. Você será recebido pela seguinte tela de login.

Digite [email protected] como seu nome de usuário e a senha que você definiu antes de fazer login. O seguinte painel aparecerá após o login bem-sucedido.

Passo 11 - Importar Música
Copie os arquivos de música que você deseja importar para a pasta ~/koel/music do seu sistema. Você pode usar o comando scp para importar os arquivos do seu PC local para o servidor.
$ scp test.mp3 user@:/home/user/koel/music
Uma vez que você tenha copiado os arquivos para a pasta ~/koel/music, execute o seguinte comando para importar a música para o Koel.
$ docker exec --user www-data koel php artisan koel:sync
A música aparecerá na interface web do Koel, e você poderá começar a tocar.
A interface web do Koel também permite que você faça upload de músicas diretamente.
Passo 12 - Atualizar o Koel
Mude para o diretório do Koel.
$ cd ~/koel
Puxe a imagem Docker mais recente do Koel.
$ docker-compose pull
Desligue o contêiner.
$ docker-compose down --remove-orphans
Inicie o contêiner com as imagens atualizadas.
$ docker-compose up -d
Verifique os contêineres Docker.
$ docker ps
Conclusão
Isso conclui o tutorial sobre como instalar o Serviço de Streaming de Música Koel usando Docker em um servidor Rocky Linux. Se você tiver alguma dúvida, poste nos comentários abaixo.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.