think - O principal evento global de Cloud Híbrida e IA - 11/05 | Américas e 12/05 | APAC e EMEA Inscrição Gratuita

Arquivado | Implementar servidores Spigot Minecraft no IBM Cloud

Conteúdo arquivado

Data de arquivamento: 2019-11-25

Esse conteúdo não está mais sendo atualizado ou passando por manutenção. Esse conteúdo está sendo providenciado “da forma que está”. Considerando a rápida evolução da tecnologia, alguns conteúdos, passos, ou ilustrações podem ter mudado.

Na Parte 1 e na Parte 2, você aprendeu a construir e implementar um servidor Minecraft em um container Docker executado localmente, e como estender seu servidor Minecraft local ao construir e implementar plug-ins do lado do servidor. Nesta parte, levaremos as imagens Docker que construímos na Parte 2, as implantaremos no IBM Cloud e as executaremos como containers Docker acessíveis através da nuvem.

Recursos e comandos IBM Cloud e Cloud Foundry

Mas antes de iniciarmos, vamos recapitular alguns dos recursos do IBM Cloud e Cloud Foundry. IBM Cloud é uma solução de plataforma como serviço (PaaS) da IBM baseada no Cloud Foundry, que permite aos desenvolvedores rapidamente criarem, implementarem, gerenciarem e monitorarem aplicativos em nuvem. O Cloud Foundry é uma solução PaaS de software livre que fornece aos desenvolvedores e organizadores muitas opções em maneiras de construir soluções em nuvem. Por exemplo, os desenvolvedores podem escolher buildpacks (baseados em comunidade, customizados , ou construídos do zero), que convenientemente empacotam as estruturas e tempos de execução.

Para usar o IBM Cloud, a primeira etapa é se inscrever em uma conta de avaliação grátis. Ao criar sua conta, anote suas credenciais de acesso (nome de usuário e senha), pois você precisará delas mais tarde neste tutorial.

Diferente da versão de software livre do Cloud Foundry, o IBM Cloud possibilita implementar containers Docker na nuvem. Ao implementar os containers Docker no IBM Cloud, usaremos a interface da linha de comandos do Cloud Foundry (cf) e também o plug-in Cloud Foundry para containers IBM (cf ic), que você instalou na Parte 1.

Os cf ic comandos são usados para gerenciar containers no ambiente IBM Cloud. O comando cf ic login autentica o usuário no repositório IBM Cloud e fornece informações sobre o registro privado para armazenar imagens no IBM Cloud. Os cf ic comandos são na verdade uma extensão do Docker e suportam todos os comandos Docker, além de alguns comandos específicos para gerenciar containers IBM no IBM Cloud.

Eis alguns outros comandos úteis que usam a interface da linha de comandos do Cloud Foundry e plug-in do Cloud Foundry para containers IBM:

Para listar as imagens no repositório IBM Cloud:

cf ic images

Para exibir os containers em execução no IBM Cloud:

cf ic ps

Para exibir todos os containers no IBM Cloud:

cf ic ps –a

Para parar um container em execução:

cf ic stop CONTAINER

Para remover a imagem do repositório IBM Cloud:

cf ic rmi IMAGE

Para remover um container do repositório IBM Cloud:

cf ic rm CONTAINER

Definir um namespace para seu repositório de containers IBM

No IBM Containers for IBM Cloud, o repositório IBM Cloud privado é um armazenador central dentro de uma organização para armazenar suas imagens Docker confiáveis. É possível realizar o push e realizar o pull das imagens do repositório e pode implementar essas imagens em qualquer ambiente de desenvolvimento, preparação ou produção.

A primeira vez que você criar um container em uma organização, você será solicitado a inserir um nome para o namespace que está associado com o repositório IBM Cloud privado. O namespace é usado para gerar uma URL única que você usa para acessar seu repositório IBM Cloud privado. A URL é necessária sempre que você realizar uma ação, como uma solicitação de pull ou de push de uma imagem para o repositório.

As regras a seguir se aplicam aos nomes de repositórios privados:

  • O nome não pode ser alterado após ser configurado como uma organização.
  • O nome deve conter somente letras minúsculas, números e sublinhados.
  • O nome precisa começar com pelo menos uma letra ou um número.
  • O nome precisa ter entre 4 e 30 caracteres de comprimento.

Para definir seu namespace, use este comando:

cf ic namespace set <namespace>

Para saber qual é o seu namespace, use este comando:

cf ic namespace get

Dockerfiles para construir e executar containers no IBM Cloud

Na Parte 1, você clonou um repositório Git (https://github.com/kgb1001001/minecraft-project.git) em seu espaço local. No diretório do projeto minecraft, há uma pasta chamada spigot-plugin-bluemix que contém um Dockerfile, um arquivo de propriedades do servidor, e um arquivo HelloWorld.jar. Conforme descrito anteriormente, o Dockerfile é usado para construir a imagem que irá realizar o push mais tarde para o container IBM Cloud. O arquivo HelloWorld.jar é o plug-in que contém o mod do servidor para Spigot semelhante àquele que criamos na Parte 2.

Para alterar o diretório spigot-plugin-bluemix e imprimir os conteúdos do novo Dockerfile, execute os comandos a seguir em um terminal Linux:

cd $DIR/minecraft-project
cd spigot-plugin-bluemix
ls

onde DIR é o diretório onde você clonou o projeto Minecraft do GitHub.

Dockerfile results returned
cat dockerfile

Veja o Dockerfile e procure diferenças da versão 0.0.3; discutiremos as diferenças a seguir.

# Versão 0.0.4
# Esta versão constrói um servidor spigot # usando a estratégia de
construção recomendada para spigot
# A vantagem é ser melhor para o desenvolvimento de plug-ins # e ter
boa correspondência com a abordagem Docker
# também adiciona um primeiro plug-in Minecraft
no servidor spigot básico #
FROM ubuntu:14.04
MAINTAINER Kyle Brown "brownkyl@us.ibm.com”
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y openjdk-7-jre-headless
RUN apt-get install -y wget
RUN mkdir minecraft
RUN wget
    "https://hub.spigotmc.org//jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar"
    -O minecraft/BuildTools.jar
RUN git config --global core.autocrlf input
RUN java -jar minecraft/BuildTools.jar
RUN echo "eula=true" > eula.txt
ADD server.properties ./server.properties
RUN mkdir plugins
ADD HelloWorld.jar /plugins/HelloWorld.jar
CMD java -XX:MaxPermSize=128M -Xms512m -Xmx1024m -jar spigot-1.8.8.jar nogui
EXPOSE 9085

Encontrou as duas diferenças neste Dockerfile? A primeira mudança é a introdução de um novo arquivo que está sendo adicionado à imagem Docker (server.properties). A segunda alteração é na porta que está sendo exposta. Vamos falar sobre a configuração da porta primeiro, pois é a mudança mais simples.

O IBM Cloud, por padrão, somente abre portas abaixo de um certo número da porta. O número da porta que usamos até agora (a porta padrão do Minecraft: 25565) está além desse intervalo. Ao expor uma porta menor, é possível obedecer a limitação do IBM Cloud. No entanto, isso exige que você faça uma alteração na configuração do servidor, conforme mostraremos a seguir.

Configurar as propriedade de servidor

Antes de fazer essas mudanças na configuração do servidor, precisamos falar sobre o arquivo server.properties que adicionamos, que armazena todas as configurações para um servidor multiplayer (Minecraft ou Minecraft Classic). Até agora, estivemos usando a configuração padrão e não precisamos deste arquivo opcional. Execute o comando a seguir para ver os conteúdos do novo arquivo server.properties:

cat server.properties

Os conteúdos do arquivo server.properties são:

#Propriedades do servidor Minecraft
#(Registro de data de modificação do arquivo) spawn-protection=16
max-tick-time=60000
generator-settings=
force-gamemode=false
allow-nether=true
gamemode=0
enable-query=false
player-idle-timeout=0
difficulty=1
spawn-monsters=true
op-permission-level=4
resource-pack-hash=
announce-player-achievements=true
pvp=true
snooper-enabled=true
level-type=DEFAULT
hardcore=false
enable-command-block=false
max-players=20
network-compression-threshold=256
max-world-size=29999984
server-port=9085
server-ip=
spawn-npcs=true
allow-flight=false
level-name=world
view-distance=10
resource-pack=
spawn-animals=true
white-list=false
generate-structures=true
online-mode=false
max-build-height=256
level-seed=
use-native-transport=true
motd=A Minecraft Server
enable-rcon=false

Ao editar o server.properties, você precisa usar a mesma estrutura que o arquivo original, embora a ordem das linhas seja arbitrária. O texto antes do sinal de igual é a chave, que não deve ser alterado. O texto após o sinal de igual é o valor da propriedade, que pode ser editado. Linhas que se iniciam com # são comentários, — e alterar ou remover essas linhas não afeta o jogo.

Parece que o IBM Cloud (ou SoftLayer) está bloqueando a porta de autenticação usada para comunicação de saída com os servidores de autenticação Mojang. Para contornar isso, você precisa configurar a propriedade online-mode para falso, que ignora a etapa de autenticação quando o usuário efetua login. Aviso: Isso essencialmente torna seu servidor Minecraft inseguro. Essa configuração é útil para testar e depurar (que é o que estamos fazendo), mas você não deve usar esta configuração para um servidor de nível de produção.

Finalmente, você precisa executar o servidor Minecraft para receber na porta 9085, que é a porta que expomos em nosso Dockerfile. Faça isso ao mudar a configuração servidor-porta no arquivo server.properties.

Após fazer as alterações no arquivo server.properties, você precisa reiniciar o servidor para que entre em vigor. Em nosso caso sempre reiniciaremos a imagem Docker toda, que cuidará desse requisito. Se o arquivo server.properties não listar todas as propriedades (por exemplo, se uma nova versão do servidor adiciona novas propriedades, ou se o arquivo não existe), na inicialização, o servidor irá reescrever o arquivo server.properties com as novas propriedades listadas e configurá-las com seus valores padrão.

Implemente as imagens Docker no IBM Cloud e execute-as no container IBM

  1. Como na Parte 1 e na Parte 2, se você já não o fez, mude para o diretório minecraft-project/spigot-plugin-bluemix e construa a imagem spigot-plugin-bluemix usando os comandos a seguir:

    cd $DIR/minecraft-project/spigot-plugin-bluemix
    docker build -t spigot-plugin-bluemix.
    
  2. Após a imagem ser desenvolvida com sucesso, é possível verificar através deste comando:

    docker images
    

    Screen shot of commands issued

  3. Depois, crie uma tag, que é um nome mnemônico para uma imagem. É possível criar a tag no repositório para a imagem spigot-plugin-bluemix usando este comando:

    docker tag spigot-plugin-bluemix
    registry.ng.bluemix.net/<namespace>/spigot-plugin-bluemix
    

    Screen shot of commands issued

  4. Agora que sua imagem Docker foi desenvolvida e possui uma tag, você pode implementá-la em seu repositório IBM Cloud. Para isso, você precisa entrar em sua conta IBM Cloud e autenticar seu registro IBM Cloud. (Se você pertence a várias organizações IBM Cloud, será solicitado o acesso à organização.)

    cf login –u nome de usuário –p senha
    

    onde o nome de usuário e senha são o nome de usuário e senha IBM Cloud que você especificou no início deste tutorial. (Outra alternativa é emitir o cf login e ter seu nome de usuário e senha solicitados.)

  5. Para se autenticar em seu registro IBM Cloud, digite:

    cf ic login
    

    Caso tenha êxito, você verá algo semelhante a:

    Screen shot of results

  6. Para implementar (fazer upload) da imagem Docker em seu repositório IBM Cloud , digite o comando a seguir. Isso pode demorar alguns minutos, dependendo da velocidade de sua rede:

    docker push registry.ng.bluemix.net/<namespace>/spigot-plugin-bluemix
    
  7. Para verificar se foi realizado o push da imagem com êxito para seu repositório IBM Cloud, digite o seguinte comando:

    cf ic images
    
  8. Agora que a imagem Docker foi implementada com sucesso no IBM Cloud, você pode iniciar o container no IBM Cloud usando este comando:

    cf ic run --name=testspigot --publish=9085 registry.ng.bluemix.net/<namespace>/spigot-plugin-bluemix
    
  9. Depois, verifique se o novo container está em execução no IBM Cloud usando este comando:

    cf ic ps
    
  10. Associe o servidor Spigot em execução em um container IBM Cloud com um endereço IP público para que clientes possam acessar o servidor. É possível fazer isso ao emitir esses comandos:

    Para solicitar um novo endereço IP público (certifique-se de observar o endereço IP de retorno, <ip>):

    cf ic ip request
    

    Para ligar o IP público ao container spigot-plugin-bluemix em execução no IBM Cloud:

    cf ic ip bind <ip> spigot-plugin-bluemix
    

    Caso encontre problemas, esses comandos podem ajudá-lo a depurar qualquer problema com a obtenção de um endereço IP:

    Para retornar os IPs disponíveis para sua organização:

    cf ic ip list
    

    Para liberar o endereço <ip> para que possa ser reutilizado:

    cf ic ip release <ip>
    

Teste a imagem Docker

Após ter ligado o endereço IP a seu novo container em execução no IBM Cloud, você está pronto para testar.

  1. Como na Parte 1 e na Parte 2, se você já não o fez, mude para o diretório minecraft-project/spigot-plugin-bluemix e construa a imagem spigot-plugin-bluemix usando os comandos a seguir:
    
    cd $DIR/minecraft‑project/spigot‑plugin‑bluemix
    docker build ‑t spigot‑plugin‑bluemix .
    
  2. Após a imagem ser desenvolvida com sucesso, é possível verificar através deste comando:
    
    docker images
    
    Screen shot of commands issued
  3. Depois, crie uma tag, que é um nome mnemônico para uma imagem. É possível criar a tag no repositório para a imagem spigot-plugin-bluemix usando este comando:
    
    docker tag spigot‑plugin‑bluemix 
    registry.ng.bluemix.net/<namespace>/spigot‑plugin‑bluemix
    
    Screen shot of commands issued
  4. Agora que sua imagem Docker foi desenvolvida e possui uma tag, você pode implementá-la em seu repositório IBM Cloud. Para isso, você precisa entrar em sua contan IBM Cloud e autenticar seu registro IBM Cloud. (Se você pertence a várias organizações IBM Cloud, será solicitado o acesso à organização.)
    
    cf login –u nome de usuário –p senha
    
    onde o nome de usuário e senha são o nome de usuário e senhan IBM Cloud que você especificou no início deste tutorial. (Outra alternativa é emitir o cf login e ter seu nome de usuário e senha solicitados.)
  5. Para se autenticar em seu registro IBM Cloud, digite:
    
    cf ic login
    
    Caso tenha êxito, você verá algo semelhante a: Screen shot of results
  6. Para implementar (fazer upload) da imagem Docker em seu repositório IBM Cloud , digite o comando a seguir. Isso pode demorar alguns minutos, dependendo da velocidade de sua rede:
    
    docker push registry.ng.bluemix.net/<namespace>/spigot‑plugin‑bluemix
    
  7. Para verificar se foi realizado o push da imagem com êxito para seu repositório IBM Cloud, digite o seguinte comando:
    
    cf ic images
    
  8. Agora que a imagem Docker foi implementada com sucesso no IBM Cloud, você pode iniciar o container no IBM Cloud usando este comando:
    
    cf ic run ‑‑name=testspigot ‑‑publish=9085 registry.ng.bluemix.net/<namespace>/spigot‑plugin‑bluemix
    
  9. Depois, verifique se o novo container está em execução no IBM Cloud usando este comando:
    
    cf ic ps
    
  10. Associe o servidor Spigot em execução em um container IBM Cloud com um endereço IP público para que clientes possam acessar o servidor. É possível fazer isso ao emitir esses comandos: Para solicitar um novo endereço IP público (certifique-se de observar o endereço IP de retorno, <ip>):

    
    cf ic ip request
    
    Para ligar o IP público ao container spigot-plugin-bluemix em execução no IBM Cloud:
    
    cf ic ip bind <ip> spigot‑plugin‑bluemix
    
    Caso encontre problemas, esses comandos podem ajudá-lo a depurar qualquer problema com a obtenção de um endereço IP: Para retornar os IPs disponíveis para sua organização:
    
    cf ic ip list
    
    Para liberar o endereço <ip> para que possa ser reutilizado:
    
    cf ic ip release <ip>
    

    Screen shot of Edit Server Info

  11. Após ter configurado este servidor, você deve ser capaz de associar o servidor como mostrado nas duas capturas de tela a seguir:

    Screen shot of Play Multiplayer

  12. Vá até seu cliente Minecraft local e configure um novo servidor (como você fez na Parte 1 e na Parte 2), mas desta vez use o novo endereço IP público que você obteve com o comando cf ic ip request (se esqueceu, use cf ic ip list para encontrá-lo). Certifique-se de usar a porta 9085 como a porta para se conectar no endereço do servidor. Screen shot of Edit Server Info

  13. Após ter configurado este servidor, você deve ser capaz de associar o servidor como mostrado nas duas capturas de tela a seguir: Screen shot of Play Multiplayer Screen shot of game play

Conclusão

Se você seguiu todas as etapas corretamente, você deve estar no jogo e ser capaz de usar o plug-in “Hello World” que você desenvolveu anteriormente. Divirta-se e experimente alterar o plug-in algumas vezes e repetir as etapas acima para ver como os containers funcionam!

Na Parte 4 você aprenderá como estender o servidor Spigot com um plug-in que usa os serviços cognitivos Watson. A IBM fornece vários serviços Watson no IBM Cloud que podem ser utilizados para desenvolver soluções cognitivas, inclusive jogos educacionais e interativos.

Apêndice

Um problema ao usar os containers Docker no IBM Cloud é que você precisa executar uma série de comandos para desenvolver seu container, realizar o push para o repositório no IBM Cloud, solicitar e atribuir um endereço IP e desfazer todas essas ações ao terminar. Após fazer isso algumas vezes, a repetição se tornará entediante.

Por isso, encorajamos você a usar a automação para realizar o pull de todos esses comandos juntos em alguns scripts simples para executar essas ações comuns. Incluímos alguns scripts de exemplo (chamados de setup.sh e cleanup.sh) que já transferimos por upload ao projeto Minecraft no GitHub.

Aqui está o script setup.sh. Tente experimentar o uso deste script e você descobrirá que você não quer voltar a digitar cada comando individualmente!


#!/bin/bash
#setup script
N="kgb1001001"

if [ "$#" ‑ne 5 ]; then
        echo "ERROR: setupcf takes 5 parameters"
        echo "usage ./setupcf.sh local_directory image_name container_name container_ip container_port"
        exit 1
else

#      Verifique a disponibilidade do endereço IP
        echo "Checking for available IP address. O programa irá substituir o IP fornecido no Argumento
pelo IP recuperado!!"
        ipaddr=$(sudo cf ic ip list | sed 1d | sed '/^\s∗$/d' | sed 1d | awk 'NF < 2' | head ‑n 1)
        if [ [$ipaddr == $4] ]; then
                echo "Using the IP address provided : $4"
        fi
        if [ ‑z "$ipaddr" ]; then
                echo "Unable to find a IP address to use ‑‑ Terminating program !!!:"
                echo "Use the command: cf ic ip request "
                echo "Refer to this URL to release IP over Quota: https://www.ng.bluemix.net/docs/containers/container_cli_reference_cfic.html"
                exit 0

        else

                echo "Using the IP address retrieved from IBM Cloud: $ipaddr"
                set ‑‑ "$1" "$2" "$3" "$ipaddr" "$5"
        fi

        echo "Clean up the Docker Image Locally"
        docker rmi registry.ng.bluemix.net/$N/$2
        sleep 10s

        echo "Phase 1‑>building container locally"
        echo docker build ‑t $2 $1
        docker build ‑t $2 $1

#       sleep 15s
        echo "Phase 2‑>tagging container"

        echo docker tag ‑f $2 registry.ng.bluemix.net/$N/$2
        docker tag ‑f $2 registry.ng.bluemix.net/$N/$2


        echo "Phase 1‑>building container locally"
        echo docker build ‑t $2 $1
        docker build ‑t $2 $1

#       sleep 15s
        echo "Phase 2‑>tagging container"

        echo docker tag ‑f $2 registry.ng.bluemix.net/$N/$2
        docker tag ‑f $2 registry.ng.bluemix.net/$N/$2

#       sleep 15s
        echo "Login to the Container Registry"
        sudo cf ic login

        echo "Phase 3‑>pushing container to bluemix"
        echo docker push registry.ng.bluemix.net/$N/$2
        docker push registry.ng.bluemix.net/$N/$2

        sleep 45s
        echo "Phase 4‑>validating image list"

        echo cf ic images > images.txt
        cf ic images > images.txt

        cat images.txt | grep $2

        echo "Phase 5‑>running container on bluemix"
        sleep 45s
        echo cf ic run ‑‑name $3 ‑‑publish $5 registry.ng.bluemix.net/$N/$2
        cf ic run ‑‑name $3 ‑‑publish $5 registry.ng.bluemix.net/$N/$2

        echo "Phase 6‑>binding IP address"
        echo cf ic ip bind $4 $3
        cf ic ip bind $4 $3
        exit 0
fi

Aviso

O conteúdo aqui presente foi traduzido da página IBM Developer US. Caso haja qualquer divergência de texto e/ou versões, consulte o conteúdo original.