Prepara un servidor en AWS
Esta guía deja lista una instancia EC2 para Bring Your Own Server, con su firewall, su IP fija y su almacenamiento de copias de seguridad. Skysize instala todo lo demás en el servidor.
Cada paso tiene dos pestañas: haz clic en Console o pega desde Línea de comandos. Tu elección se aplica a toda la página.
Los comandos se ejecutan en CloudShell, el icono de terminal en la parte superior de la consola de AWS, así no tienes que instalar nada. Mantén abierta la misma pestaña: cada bloque reutiliza los valores del paso 1.
1. Elegir tus valores
Elige la región más cercana a tus usuarios y el tamaño adecuado para tu uso.
| Uso | Tipo de instancia | vCPU | RAM | Disco |
|---|---|---|---|---|
| Una rama de producción y una de staging | m7i.large | 2 | 8 GB | 100 GB |
| Producción con ramas de staging y de desarrollo | m7i.xlarge | 4 | 16 GB | 200 GB |
Evita los tipos Graviton como m7g o t4g: son ARM, y el instalador se niega a ejecutarse en ellos. Evita t3 en producción: se queda sin créditos de CPU con una carga sostenida.
- Console
- Línea de comandos
Selecciona tu región en la parte superior derecha de la consola de AWS. Usa la misma en todos los pasos.
export AWS_REGION=us-east-2 AWS_DEFAULT_REGION=us-east-2
NAME=skysize-odoo
TYPE=m7i.large
DISK_GB=100
BUCKET=$NAME-backups-$(aws sts get-caller-identity --query Account --output text)
2. Crear el grupo de seguridad
El servidor necesita estas reglas entrantes, y ninguna otra:
| Tipo | Puerto | Origen | Motivo |
|---|---|---|---|
| HTTP | 80 | Cualquier dirección (0.0.0.0/0) | Certificados y redirecciones |
| HTTPS | 443 | Cualquier dirección (0.0.0.0/0) | Tus sitios de Odoo |
Skysize no necesita ningún puerto entrante propio. No hay regla de SSH porque te conectas con Session Manager en el paso 6. Deja PostgreSQL (5432) cerrado salvo que uses el acceso de solo lectura a la base de datos. Mantén la regla saliente por defecto, que lo permite todo: el servidor la necesita.
- Console
- Línea de comandos
- Abre EC2 → Security Groups → Create security group.
- Pon
skysize-odoocomo nombre y descripción, y mantén la VPC por defecto. - En Inbound rules, agrega las dos reglas anteriores.
- Haz clic en Create security group.
VPC_ID=$(aws ec2 describe-vpcs --filters Name=isDefault,Values=true \
--query 'Vpcs[0].VpcId' --output text)
SG_ID=$(aws ec2 create-security-group --group-name "$NAME" \
--description "Skysize Odoo server" --vpc-id "$VPC_ID" \
--query GroupId --output text)
aws ec2 authorize-security-group-ingress --group-id "$SG_ID" \
--protocol tcp --port 80 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id "$SG_ID" \
--protocol tcp --port 443 --cidr 0.0.0.0/0
Si VPC_ID muestra None, tu cuenta no tiene una VPC por defecto. Asigna a VPC_ID una VPC con una subred pública y agrega --subnet-id en el paso 4.
3. Crear el bucket de copias de seguridad y el rol del servidor
Skysize no hace copias de seguridad hasta que un proyecto tiene un destino de copias. Esto crea un bucket privado y un rol que permite al servidor usarlo, sin ningún secreto que guardar.
- Console
- Línea de comandos
Bucket
- Abre S3 → Create bucket.
- Escribe un nombre único en todo AWS, por ejemplo
skysize-odoo-backups-seguido del ID de tu cuenta. - Deja Block all public access activado y haz clic en Create bucket.
Rol
- Abre IAM → Roles → Create role.
- Elige AWS service, luego EC2, y haz clic en Next.
- Selecciona la política
AmazonSSMManagedInstanceCorey haz clic en Next. - Llama al rol
skysize-odooy haz clic en Create role. - Abre el rol y luego Add permissions → Create inline policy → JSON.
- Pega esto, con el nombre de tu bucket en lugar de
YOUR_BUCKET, y llama a la políticabackups:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetBucketLocation"],
"Resource": "arn:aws:s3:::YOUR_BUCKET"
},
{
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts"],
"Resource": "arn:aws:s3:::YOUR_BUCKET/*"
}
]
}
aws s3 mb "s3://$BUCKET"
cat > ec2-trust.json <<'JSON'
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole"
}]
}
JSON
cat > backups.json <<JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket", "s3:GetBucketLocation"],
"Resource": "arn:aws:s3:::$BUCKET"
},
{
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts"],
"Resource": "arn:aws:s3:::$BUCKET/*"
}
]
}
JSON
aws iam create-role --role-name "$NAME" \
--assume-role-policy-document file://ec2-trust.json
aws iam put-role-policy --role-name "$NAME" \
--policy-name backups --policy-document file://backups.json
aws iam attach-role-policy --role-name "$NAME" \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
aws iam create-instance-profile --instance-profile-name "$NAME"
aws iam add-role-to-instance-profile \
--instance-profile-name "$NAME" --role-name "$NAME"
sleep 15
La última línea da tiempo a AWS para que el nuevo rol esté disponible.
4. Lanzar la instancia
Usa Ubuntu 24.04 para x86. En AWS, usa Ubuntu o Debian: Amazon Linux, la imagen que la consola ofrece por defecto, no es compatible y el instalador la rechaza. Los comandos de esta página están escritos para Ubuntu.
- Console
- Línea de comandos
Abre EC2 → Instances → Launch instances y configura:
| Opción | Valor |
|---|---|
| Name | skysize-odoo |
| Application and OS Images | Ubuntu, luego Ubuntu Server 24.04 LTS, arquitectura 64-bit (x86) |
| Instance type | El tipo del paso 1 |
| Key pair | Proceed without a key pair |
| Network settings | Select existing security group: skysize-odoo. Deja Auto-assign public IP activado. |
| Configure storage | El tamaño de disco del paso 1, tipo gp3 |
| Advanced details → IAM instance profile | skysize-odoo |
Luego haz clic en Launch instance.
INSTANCE_ID=$(aws ec2 run-instances \
--image-id resolve:ssm:/aws/service/canonical/ubuntu/server/24.04/stable/current/amd64/hvm/ebs-gp3/ami-id \
--instance-type "$TYPE" \
--security-group-ids "$SG_ID" \
--iam-instance-profile "Name=$NAME" \
--block-device-mappings "DeviceName=/dev/sda1,Ebs={VolumeSize=$DISK_GB,VolumeType=gp3}" \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=$NAME}]" \
--query 'Instances[0].InstanceId' --output text)
aws ec2 wait instance-running --instance-ids "$INSTANCE_ID"
5. Asignarle una IP fija
La IP pública de una instancia cambia cuando se detiene y se vuelve a iniciar, lo que rompería tus registros DNS. Anota esta IP: tus registros DNS apuntarán a ella.
- Console
- Línea de comandos
- Abre EC2 → Elastic IPs → Allocate Elastic IP address y haz clic en Allocate.
- Selecciona la nueva dirección y luego Actions → Associate Elastic IP address.
- Elige tu instancia y haz clic en Associate.
ALLOC_ID=$(aws ec2 allocate-address --domain vpc --query AllocationId --output text)
aws ec2 associate-address --instance-id "$INSTANCE_ID" --allocation-id "$ALLOC_ID"
aws ec2 describe-addresses --allocation-ids "$ALLOC_ID" --query 'Addresses[0].PublicIp' --output text
echo "Bucket: $BUCKET Region: $AWS_REGION"
6. Conectarse al servidor
En la consola de EC2, selecciona la instancia y elige Connect → Session Manager → Connect. Esto abre un terminal en tu navegador, sin clave SSH ni puerto abierto. Puede tardar uno o dos minutos en estar disponible después del lanzamiento. Aquí es donde pegas el comando de instalación de Skysize.
7. Definir el destino de copias
Cuando tu proyecto exista, abre su Configuración → Destino de copias, haz clic en Añadir destino y completa:
| Campo | Valor |
|---|---|
| Tipo | AWS S3 |
| Bucket | El nombre de tu bucket |
| Región | Tu región, por ejemplo us-east-2 |
| Prefijo | El nombre del proyecto |
| Autenticación | Rol de IAM |
Haz clic en Probar para comprobarlo desde tu servidor.
Enviar correo desde Odoo
AWS bloquea por defecto el puerto 25 saliente. Usa un relay SMTP en el puerto 587, como Amazon SES. Consulta Configurar el correo saliente.
Conectar el servidor a Skysize
Tu servidor está listo. Sigue Configura tu propio servidor, a partir del paso en el que se registra el servidor. En resumen: regístralo en el panel, conéctate a él por SSH y pega el comando de instalación. El estado cambia a En línea en menos de un minuto cuando termina el instalador.
Cuando tu primer proyecto esté en marcha, agrega tu dominio.
Si algo sale mal
El panel indica que los puertos 80 y 443 no son accesibles. Comprueba las reglas de firewall anteriores, y que la IP pública en la configuración del servidor es la que anotaste. Después haz clic en Comprobar de nuevo.
El servidor permanece en Desconectado. El servidor se conecta hacia afuera a Skysize, así que ninguna regla entrante soluciona esto. Ejecuta estos comandos en el servidor:
sudo systemctl status skysize-agent
sudo journalctl -u skysize-agent -n 50
nc -zv cp.skysize.io 50051
Si el instalador no terminó, o el token de acceso ya se usó, utiliza Regenerar token de acceso en la página del servidor y ejecuta de nuevo el comando de instalación.
¿Sigues sin poder resolverlo? Abre Soporte en el panel e incluye la salida de esos comandos.