É difícil não ter ouvido sobre Palworld recentemente, com o sucesso explosivo e mais de 8 milhões de vendas.
Queria jogar com meus amigos e ter um servidor sempre disponível, independente de um de nós hostear. Isso pareceu uma ótima oportunidade para brincar um pouco com a AWS.
Cheguei a testar alguns outros servidores, como Nitrado, mas a falta de servidor no Brasil, quedas constantes e também pouco controle de acesso ao servidor, me fizeram optar por criar o meu próprio servidor em um serviço de cloud privado, como já trabalho com AWS há alguns anos, não tive duvidas e comecei a criar a infra.
Aqui vou mostrar como fiz cada passo.
Criação de um servidor EC2
EC2 é o serviço da AWS para criar “máquinas na cloud”, ao criar uma, a primeira coisa para ter em mente é o tamanho do servidor.
Dentro do console da Aws, busque pelo serviço: EC2.
No canto esquerdo no menu, selecione Instâncias
No canto superior direito, clique em “Executar Instâncias”
Nome e tags
- Dê um nome para sua instância (eg: PalworldServer)
Application and OS Images (Amazon Machine Image)
- Neste guia vamos escolher o sistema operacional Ubuntu 22.04 (64bits x86)
Tipo de instância
Pelas configurações ideais dadas pelos desenvolvedores, a maquina deveria ter:
16gb de Ram
4 núcleos de processamento
Optei então pela maquina mais barata que atendesse esses requisitos: t3a.xlarge.
(Você pode buscar o tipo da maquina por configuração na calculadora da aws))
- Selecione o tipo de instância (t3a.xlarge)
Par de chaves (login)
Crie uma par de chaves para fazer o login por ssh:
nesse exemplo, vou chamar de palworld-sao-paulo.pem
Tipo: RSA
Formato: .pem
Criar par de chaves
Configurações de Rede
Neste momento não é necessário fazer nenhuma mudança aqui, mas vamos voltar para essa configuração depois de criar a máquina, só lembre de deixar marcado a opção:
“Allow SSH traffic from” — “Qualquer lugar” (Só será possível acessar a maquina usando o arquivo .pem criado anteriormente.)
Configurar armazenamento
1x de 20gb gp2 é o suficiente para um servidor, na minha experiência o servidor usa menos de 7gb, mas gosto de deixar espaço para alguma emergência.
(Obs: Não recomendo tentar usar uma instancia spot, mesmo sendo mais barato, a instabilidade de disponibilidade quebra todo o conceito de ter um servidor para jogar com os amigos na hora que você quiser.
Se isso não é um problema pra você e souber o que está fazendo, é uma opção.)
Configuração inicial da maquina linux
Pronto! você tem uma instancia linux preparada para uso, agora vamos configurá-la
No console da aws em EC2>Instâncias copie o “Endereço IPv4 público”
Usando um terminal (cmd/bash) conecte-se no endereço com o seguinte comando:
$ ssh -i [/endereco/da/chave/palworld-sao-paulo.pem] ubuntu@[seu-endereço-ip]
Com isso você já tem a maquina preparada para receber o servidor, vamos utilizar essa imagem docker-compose:
https://github.com/jammsen/docker-palworld-dedicated-server
- na home do seu servidor (/home/ubuntu) crie uma pasta palworld
$ mkdir palworld
- dentro da pasta palworld, crie uma pasta chamada “game”
$ mkdir game
- Dê permissões de acesso para a pasta game:
$ chmod 777 game
ou
$ chown -R 1000:1000 game/
Crie um arquivo de configuração chamado docker-compose.yml e cole o exemplo abaixo (retirado do github):
version: '3.9'
services:
palworld-dedicated-server:
#build: .
container_name: palworld-dedicated-server
image: jammsen/palworld-dedicated-server:latest
restart: always
network_mode: bridge
ports:
- target: 8211 # Gamerserver port inside of the container
published: 8211 # Gamerserver port on your host
protocol: udp
mode: host
- target: 25575 # RCON port inside of the container
published: 25575 # RCON port on your host
protocol: tcp
mode: host
environment:
- TZ=Europe/Berlin # Change this for logging and backup, see "Environment-Variables"
- ALWAYS_UPDATE_ON_START=true
- MULTITHREAD_ENABLED=true
- COMMUNITY_SERVER=true
- BACKUP_ENABLED=true
- BACKUP_CRON_EXPRESSION=0 * * * *
- NETSERVERMAXTICKRATE=120
- DIFFICULTY=None
- DAYTIME_SPEEDRATE=1.000000
- NIGHTTIME_SPEEDRATE=1.000000
- EXP_RATE=1.000000
- PAL_CAPTURE_RATE=1.000000
- PAL_SPAWN_NUM_RATE=1.000000
- PAL_DAMAGE_RATE_ATTACK=1.000000
- PAL_DAMAGE_RATE_DEFENSE=1.000000
- PLAYER_DAMAGE_RATE_ATTACK=1.000000
- PLAYER_DAMAGE_RATE_DEFENSE=1.000000
- PLAYER_STOMACH_DECREASE_RATE=1.000000
- PLAYER_STAMINA_DECREACE_RATE=1.000000
- PLAYER_AUTO_HP_REGENE_RATE=1.000000
- PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
- PAL_STOMACH_DECREACE_RATE=1.000000
- PAL_STAMINA_DECREACE_RATE=1.000000
- PAL_AUTO_HP_REGENE_RATE=1.000000
- PAL_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
- BUILD_OBJECT_DAMAGE_RATE=1.000000
- BUILD_OBJECT_DETERIORATION_DAMAGE_RATE=1.000000
- COLLECTION_DROP_RATE=1.000000
- COLLECTION_OBJECT_HP_RATE=1.000000
- COLLECTION_OBJECT_RESPAWN_SPEED_RATE=1.000000
- ENEMY_DROP_ITEM_RATE=1.000000
- DEATH_PENALTY=All
- ENABLE_PLAYER_TO_PLAYER_DAMAGE=false
- ENABLE_FRIENDLY_FIRE=false
- ENABLE_INVADER_ENEMY=true
- ACTIVE_UNKO=false
- ENABLE_AIM_ASSIST_PAD=true
- ENABLE_AIM_ASSIST_KEYBOARD=false
- DROP_ITEM_MAX_NUM=3000
- DROP_ITEM_MAX_NUM_UNKO=100
- BASE_CAMP_MAX_NUM=128
- BASE_CAMP_WORKER_MAXNUM=15
- DROP_ITEM_ALIVE_MAX_HOURS=1.000000
- AUTO_RESET_GUILD_NO_ONLINE_PLAYERS=false
- AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS=72.000000
- GUILD_PLAYER_MAX_NUM=20
- PAL_EGG_DEFAULT_HATCHING_TIME=72.000000
- WORK_SPEED_RATE=1.000000
- IS_MULTIPLAY=false
- IS_PVP=false
- CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP=false
- ENABLE_NON_LOGIN_PENALTY=true
- ENABLE_FAST_TRAVEL=true
- IS_START_LOCATION_SELECT_BY_MAP=true
- EXIST_PLAYER_AFTER_LOGOUT=false
- ENABLE_DEFENSE_OTHER_GUILD_PLAYER=false
- COOP_PLAYER_MAX_NUM=4
- MAX_PLAYERS=32
- SERVER_NAME=jammsen-docker-generated-###RANDOM###
- SERVER_DESCRIPTION=Palworld-Dedicated-Server running in Docker by jammsen
- ADMIN_PASSWORD=adminPasswordHere
- SERVER_PASSWORD=serverPasswordHere
- PUBLIC_PORT=8211
- PUBLIC_IP=
- RCON_ENABLED=false
- RCON_PORT=25575
- REGION=
- USEAUTH=true
- BAN_LIST_URL=https://api.palworldgame.com/api/banlist.txt
volumes:
- ./game:/palworld
rcon:
image: outdead/rcon:latest
entrypoint: ['/rcon', '-a', '10.0.0.5:25575', '-p', 'adminPasswordHere']
profiles: ['rcon']
Lembre-se de alterar o arquivo de acordo com o seu servidor.
Após a criação do docker-compose.yml, execute o docker-compose:
$ sudo docker-compose up -d
Você pode acompanhar os logs com: $ sudo docker-compose logs -f
Após algum tempo o container irá baixar a steam, o servidor, fazer o login anonimamente e servir o jogo na porta: 8211
Vamos liberar o acesso a essa porta na aws:
No console da aws no serviço EC2, selecione “security groups”
Clique no security group atrelado a sua maquina (provavelmente launch-wizard-1)
Clique em “Regras de saída”
Clique em “Editar Regras de saída”
Clique em “Adicionar Regra”
Selecione o Tipo: “UDP Personalizado”
Intervalo de portas: 8211
Destino: Qualquer Local — IPv4
Com isso já será possível se conectar com o jogo na sua máquina.
Porém temos alguns problemas:
Sem um IP estático, toda vez que a maquina reiniciar, o IP de acesso público irá mudar
Só é possível iniciar a máquina pelo painel da AWS
A maquina ficará ligada 24/7 a menos que você a desligue manualmente pelo console da AWS.
Com essa configuração, os custos não são otimizados, e a máquina ligada 24/7 terá um custo aproximado de: $170USD por mês.
Vou criar uma parte 2 explicando como resolver cada um desses problemas, diminuir drasticamente os custos e como facilitar seu acesso, criando um bot no discord vinculado com a AWS!
Top comments (0)