Деплой Swift приложения на VPS: пошаговое руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Деплой Swift приложения на VPS: пошаговое руководство

Разработка серверных приложений на Swift с использованием фреймворка Vapor набирает популярность. Однако после написания кода встаёт вопрос: как разместить Swift-приложение на удалённом сервере? В этой статье мы разберём полный процесс деплоя Swift-приложения на VPS (Ubuntu 22.04) — от установки необходимых компонентов до настройки reverse proxy и запуска в production-режиме.

1. Подготовка сервера и установка Swift

Первым делом подключаемся к VPS по SSH и обновляем пакетную базу:

sudo apt update && sudo apt upgrade -y

Swift требует зависимости для сборки. Устанавливаем их:

sudo apt install clang libicu-dev libcurl4-openssl-dev libssl-dev python3 pkg-config -y

Затем скачиваем и устанавливаем Swift для Ubuntu. На момент написания статьи актуальна версия 5.9. Загружаем архив:

wget https://download.swift.org/swift-5.9-release/ubuntu2204/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04.tar.gz

Распаковываем и перемещаем в /usr/share:

tar xzf swift-5.9-RELEASE-ubuntu22.04.tar.gz
sudo mv swift-5.9-RELEASE-ubuntu22.04 /usr/share/swift

Добавляем Swift в PATH. Откройте ~/.bashrc:

nano ~/.bashrc

Добавьте строку в конец файла:

export PATH="/usr/share/swift/usr/bin:$PATH"

Примените изменения:

source ~/.bashrc

Проверяем установку:

swift --version

Должна отобразиться версия Swift 5.9.

2. Сборка Swift-приложения (Vapor) на сервере

Клонируем репозиторий с приложением или копируем файлы через SCP. Для примера создадим тестовый проект Vapor:

mkdir ~/myapp && cd ~/myapp
swift package init --type executable

Добавим Vapor в Package.swift (пример минимального сервера):

// swift-tools-version:5.9
import PackageDescription

let package = Package(
    name: "myapp",
    platforms: [.macOS(.v13)],
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", from: "4.89.0")
    ],
    targets: [
        .executableTarget(name: "myapp", dependencies: [
            .product(name: "Vapor", package: "vapor")
        ])
    ]
)

Создадим файл Sources/myapp/main.swift:

import Vapor

let app = try Application(.detect())
app.get { req in
    return "Hello, Swift on VPS!"
}
try app.run()

Собираем проект в режиме release:

swift build -c release

После сборки бинарник будет находиться в .build/release/myapp. Скопируем его в удобное место:

cp .build/release/myapp /usr/local/bin/myapp

3. Настройка Nginx как reverse proxy

Swift-приложение будет слушать порт 8080, а Nginx будет перенаправлять трафик с порта 80 (или 443 для HTTPS). Устанавливаем Nginx:

sudo apt install nginx -y

Создаём конфигурационный файл для нашего приложения:

sudo nano /etc/nginx/sites-available/myapp

Содержимое файла:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Активируем конфигурацию и перезапускаем Nginx:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Не забудьте настроить DNS-запись A для вашего домена, указывающую на IP-адрес VPS.

4. Запуск приложения через Supervisor (production)

Чтобы приложение автоматически перезапускалось при сбоях и стартовало после перезагрузки сервера, используем Supervisor. Устанавливаем:

sudo apt install supervisor -y

Создаём конфигурацию:

sudo nano /etc/supervisor/conf.d/myapp.conf

Содержимое:

[program:myapp]
command=/usr/local/bin/myapp
directory=/root/myapp
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
user=root

Перечитываем конфигурацию Supervisor и запускаем приложение:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myapp

Проверяем статус:

sudo supervisorctl status myapp

Если всё настроено правильно, вы увидите статус RUNNING. Теперь ваше Swift-приложение доступно по адресу http://your-domain.com.

5. Дополнительные рекомендации

  • Настройка HTTPS: Используйте Certbot для получения бесплатного SSL-сертификата от Let's Encrypt.
  • Логирование: Настройте ротацию логов через logrotate, чтобы логи не занимали всё место на диске.
  • Мониторинг: Добавьте health-check endpoint в ваше приложение и мониторьте его через UptimeRobot или аналоги.
  • Переменные окружения: Для хранения чувствительных данных (пароли БД, API-ключи) используйте переменные окружения, передавая их через Supervisor: environment=DB_PASSWORD="secret".

Заключение

Мы прошли полный цикл деплоя Swift-приложения на VPS: от установки Swift и

Блоги

Рекомендаций по книгам