Configuring Website Deployment on Selectel
Selectel is a Russian cloud provider with data centers in Moscow, St. Petersburg, and Tashkent. The preferred choice for projects requiring data storage in the Russian Federation (Law 152-FZ). Provides Cloud VPS, Managed Kubernetes, S3-compatible storage.
Creating Server via CLI
# Install openstack CLI
pip install python-openstackclient
# Configure credentials (from Selectel panel → API Keys)
export OS_AUTH_URL=https://cloud.api.selcloud.ru/identity/v3
export OS_PROJECT_ID=your_project_id
export OS_USERNAME=your_username
export OS_PASSWORD=your_password
export OS_REGION_NAME=ru-1
# Create server
openstack server create \
--flavor 1014 \ # 2 vCPU, 4 GB RAM
--image "Ubuntu 22.04 LTS 64-bit" \
--key-name my-key \
--security-group web-sg \
myapp-prod
Terraform for Selectel
# main.tf
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "~> 5.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.53"
}
}
}
provider "selectel" {
token = var.selectel_token
}
resource "selectel_vpc_project_v2" "myapp" {
name = "myapp-project"
theme = { color = "#4CAF50" }
}
resource "openstack_compute_instance_v2" "app" {
name = "myapp-prod"
flavor_name = "1014"
image_name = "Ubuntu 22.04 LTS 64-bit"
key_pair = openstack_compute_keypair_v2.mykey.name
security_groups = ["web-sg", "ssh-sg"]
region = "ru-1"
network {
name = "public"
}
user_data = file("cloud-init.yaml")
}
Selectel Object Storage (Swift/S3)
# Configure AWS CLI for Selectel S3
aws configure
# AWS Access Key ID: your_key
# AWS Secret Access Key: your_secret
# Default region: ru-1
# Default output format: json
# Create container
aws --endpoint-url https://s3.selcdn.ru s3 mb s3://myapp-assets
# Upload static files
aws --endpoint-url https://s3.selcdn.ru \
s3 sync ./dist/assets s3://myapp-assets \
--acl public-read \
--cache-control "public, max-age=31536000, immutable"
# CDN via Selectel CDN
# Bind domain cdn.example.com → myapp-assets.s3.selcdn.ru
Laravel + Selectel S3
// config/filesystems.php
'selectel' => [
'driver' => 's3',
'key' => env('SELECTEL_S3_KEY'),
'secret' => env('SELECTEL_S3_SECRET'),
'region' => 'ru-1',
'bucket' => env('SELECTEL_S3_BUCKET'),
'endpoint' => 'https://s3.selcdn.ru',
'url' => env('SELECTEL_CDN_URL'),
'use_path_style_endpoint' => true,
],
Managed Kubernetes (MKS)
# Create cluster via web panel or API
# Get kubeconfig
selectel mks kubeconfig --cluster-id CLUSTER_ID > kubeconfig.yaml
export KUBECONFIG=./kubeconfig.yaml
# Deploy
kubectl apply -f k8s/
# Testing
kubectl get pods -n myapp
kubectl get svc -n myapp
GitHub Actions for Selectel VPS
jobs:
deploy:
steps:
- name: Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SELECTEL_SERVER_IP }}
username: deploy
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/myapp
git pull origin main
composer install --no-dev --optimize-autoloader
npm ci && npm run build
php artisan migrate --force
php artisan optimize
sudo systemctl reload php8.3-fpm nginx
Law 152-FZ and Selectel
Selectel has certification under Law 152-FZ for personal data storage. When deploying applications with Russian users, Selectel ensures direct compliance with data localization requirements.
Implementation Timeline
- VPS + Nginx + deploy: 1–2 days
- Object Storage + CDN: 1 day
- Managed Kubernetes: 3–4 days







