Como eu criei um servidor de PalWorld na AWS com start por bot no Discord
Magno Gouveia
Posted on January 27, 2024
É 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!
Posted on January 27, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
January 27, 2024
January 27, 2024