skip to content
The Life of Leung

How to create a Scaleway VPS

/ 4 min read

Updated:
Table of Contents

准备工作

  • scaleway 星辰官网
  • 注册账号,绑定信用卡
  • 创建API 拿到 ACCESS_KEY、SECRET_KEY、PROJECT_ID
  • 添加一个 SSH Keys,下面开机会用到,例如:key_name
  • 安装 scaleway-cli
  • 可在三个区域各创建一台 STARDUST1-S ,这里以 fr-par-1 为例,其他两个区域 nl-ams-1、pl-waw-2 操作一样

创建实例

  • 首先设置环境变量,下面的main.tf再引用
Terminal window
export SCW_ACCESS_KEY="你的AccessKey"
export SCW_SECRET_KEY="你的SecretKey"
export SCW_DEFAULT_PROJECT_ID="你的项目ID"
  • Terraform 代码 (main.tf)
Terminal window
terraform {
required_providers {
scaleway = {
source = "scaleway/scaleway"
}
}
}
provider "scaleway" {
zone = "fr-par-1"
}
# 1. 引用已有的 SSH Key
data "scaleway_account_ssh_key" "existing_oracle_key" {
name = "key_name"
}
# 2. 申请纯 IPv6 地址
resource "scaleway_instance_ip" "ipv6_only" {
type = "routed_ipv6"
}
# 3. 创建 Stardust 实例
resource "scaleway_instance_server" "stardust_node" {
name = "stardust-ubuntu-2404"
type = "STARDUST1-S"
image = "ubuntu_noble"
# 绑定 IPv6 地址
ip_ids = [scaleway_instance_ip.ipv6_only.id]
# 修复 1: 强制关闭动态 IPv4 以避免收费
enable_dynamic_ip = false
# 默认 10GB 磁盘
root_volume {
size_in_gb = 10
volume_type = "l_ssd"
}
# 修复 3: Scaleway 的 user_data 必须指定 key 为 "cloud-init"
user_data = {
cloud-init = <<-EOT
#!/bin/bash
apt-get clean
rm -rf /var/lib/apt/lists/*
EOT
}
}
# 输出所有绑定的 IPv6 地址列表
output "all_public_ipv6" {
value = scaleway_instance_server.stardust_node.public_ips[*].address
}
# 直接生成方便复制的 SSH 命令(取列表中的第一个)
output "ssh_login_fixed" {
value = "ssh root@${scaleway_instance_server.stardust_node.public_ips[0].address}"
}
  • 部署命令
Terminal window
terraform init
terraform plan
# 如果 plan 没问题,直接 apply
terraform apply
  • 至此创建实例完成,可正常使用,费用为 0.43欧/月。如果想要 0.15欧/月则更换磁盘为1GB,操作往下看

scaleway-cli 创建1G磁盘并关联实例

  • 查看刚才创建的实例,记录实例ID
Terminal window
scw instance server list
scw instance server list zone=all
  • 关闭实例
Terminal window
scw instance server stop ecd6-4540-8c60-c9d55bea89e8 zone=fr-par-1
  • 创建 1G 磁盘
Terminal window
scw instance volume create name=fr-par-1 size=1G volume-type=l_ssd zone=fr-par-1
  • 查看区域下的磁盘
Terminal window
scw instance volume list
  • 关联磁盘到实例
Terminal window
scw instance server attach-volume server-id=ecd6-4540-8c60-c9d55bea89e8 volume-id=a40a-4eb7-ac29-0dbd1a05d58b zone=fr-par-1 volume-type=l_ssd
  • 分离10G磁盘并删除
Terminal window
scw instance server detach-volume volume-id=9fe5-45b5-b238-b17245447362 zone=fr-par-1 server-id=ecd6-4540-8c60-c9d55bea89e8
scw instance volume delete 9fe5-45b5-b238-b17245447362 zone=fr-par-1

救援恢复模式启动

  • 到后台面板设置
    实例 - settings - Use rescue image(救援系统) - 然后保存启动

  • 终端 ssh 实例执行下面命令

Terminal window
parted /dev/vda mklabel gpt
wget -qO- https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/x86_64/alpine-virt-3.21.1-x86_64.iso | dd of=/dev/vda
init 0

改回 1G 硬盘启动

实例 - 把boot mode改回Use local boot - 下面的硬盘选上你的1G盘,接着开机

配置Alpine系统

  • 登录系统
Terminal window
scw instance server console server-id=ecd6-4540-8c60-c9d55bea89e8 zone=fr-par-1
  • 格式化硬盘安装系统
Terminal window
mkdir /media/setup
cp -a /media/vda/* /media/setup
mkdir /lib/setup
cp -a /.modloop/* /lib/setup
/etc/init.d/modloop stop
umount /dev/vda
mv /media/setup/* /media/vda/
mv /lib/setup/* /.modloop/
  • 配置系统(大多数默认回车就可以了,以下需要手动配置)
Terminal window
setup-alpine
# 网络,添加以下配置
auto eth0
iface eth0 inet6 static
address ipv6地址
netmask 64
gateway 网关
# 镜像源
cat > /etc/apk/repositories << EOF
https://dl-cdn.alpinelinux.org/alpine/v3.21/main
https://dl-cdn.alpinelinux.org/alpine/v3.21/community
# https://dl-cdn.alpinelinux.org/alpine/edge/main
# https://dl-cdn.alpinelinux.org/alpine/edge/community
# https://dl-cdn.alpinelinux.org/alpine/edge/testing
EOF
# ssh key 最好也添加上
# 配置DNS64服务器
echo "nameserver 2a00:1098:2c::1" | tee /etc/resolv.conf > /dev/null
# 安装引导并安装到硬盘
apk update
apk add dosfstools
apk add grub-efi
setup-disk -s 0 (vda - sys - y 即可)

彻底销毁所有资源

Terminal window
terraform destroy