ITRaspberry Pi

OneScript на Raspberry Pi: проверка совместимости, systemd и Nginx

Главная проверка перед установкой OneScript на Raspberry Pi — архитектура процессора. На момент обновления статьи официальная страница OneScript 2.1.0 публикует готовую Linux-сборку только для x64. Большинство Raspberry Pi работают на ARM/ARM64, поэтому нельзя просто скачать OneScript-*-linux-x64.zip и ожидать, что он запустится.

1. Проверяем архитектуру Raspberry Pi

uname -m
dpkg --print-architecture 2>/dev/null || true
getconf LONG_BIT
cat /etc/os-release

Типичный Raspberry Pi покажет aarch64/arm64 либо armv7l/armhf. Официальная Linux SCD-сборка x64 для такой системы не подходит. Если команда показывает x86_64, можно использовать готовый Linux x64-дистрибутив.

2. Что делать на ARM/ARM64

  • не устанавливайте x64-пакет через эмуляцию в production без отдельного тестирования;
  • не копируйте старые Mono/deb-инструкции для версии 1.x как руководство для OneScript 2.x;
  • используйте отдельный x64 Linux-хост для OneScript-сервиса либо подготовьте и протестируйте собственную ARM-сборку из исходников;
  • после появления официального Linux ARM64-дистрибутива замените этот раздел на штатную установку.

Остальная часть статьи применима после того, как команда oscript --version уже работает на вашей машине.

3. Установка официальной x64-сборки

Этот раздел выполняйте только при uname -m = x86_64.

apt update
apt install curl unzip ca-certificates tzdata libicu-dev
install -d -m 755 /opt/onescript
cd /tmp
curl -fL 'https://oscript.io/downloads/latest/scd-lin/x64' -o onescript.zip
unzip -q onescript.zip -d /opt/onescript
find /opt/onescript -type f -name oscript -exec chmod +x {} \;
find /opt/onescript -type f -name oscript -print

Путь внутри архива может измениться. Найдите исполняемый файл и создайте ссылку:

OSCRIPT_BIN=$(find /opt/onescript -type f -name oscript | head -1)
ln -sfn "$OSCRIPT_BIN" /usr/local/bin/oscript
oscript --version

4. Проверяем запуск простого скрипта

cat > /tmp/test.os <<'EOF'
Сообщить("Привет, OneScript!");
EOF
oscript /tmp/test.os

До настройки HTTP-сервиса добейтесь корректного запуска обычного скрипта.

5. Создаём отдельного пользователя и каталог приложения

useradd --system --home /opt/onescript-app --shell /usr/sbin/nologin onescript
install -d -o onescript -g onescript -m 750 /opt/onescript-app
install -d -o onescript -g onescript -m 750 /etc/onescript-app

Разместите рабочий HTTP-скрипт в /opt/onescript-app/server.os. Конкретный код сервера зависит от используемой библиотеки OneScript, поэтому команда запуска должна соответствовать вашему приложению.

6. Проверяем приложение вручную

sudo -u onescript /usr/local/bin/oscript /opt/onescript-app/server.os
ss -lntp | grep ':8080'
curl -v http://127.0.0.1:8080/

Сервис должен слушать только 127.0.0.1:8080, пока перед ним не настроен reverse proxy.

7. Создаём systemd unit

cat > /etc/systemd/system/onescript-app.service <<'EOF'
[Unit]
Description=OneScript HTTP application
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=onescript
Group=onescript
WorkingDirectory=/opt/onescript-app
EnvironmentFile=-/etc/onescript-app/app.env
ExecStart=/usr/local/bin/oscript /opt/onescript-app/server.os
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/onescript-app

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now onescript-app
systemctl status onescript-app --no-pager
journalctl -u onescript-app -n 100 --no-pager

8. Проверяем локальный HTTP endpoint

ss -lntp | grep ':8080'
curl -fsS http://127.0.0.1:8080/
echo $?

Код возврата 0 и ожидаемый ответ приложения — обязательное условие перед настройкой Nginx.

9. Устанавливаем и настраиваем Nginx

apt install nginx
cat > /etc/nginx/sites-available/onescript-app <<'EOF'
server {
    listen 80;
    server_name onescript.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
    }
}
EOF
ln -sfn /etc/nginx/sites-available/onescript-app /etc/nginx/sites-enabled/onescript-app
nginx -t
systemctl reload nginx
curl -I -H 'Host: onescript.example.com' http://127.0.0.1/

10. Диагностика

systemctl status onescript-app nginx --no-pager
journalctl -u onescript-app --since '15 min ago' --no-pager
tail -n 100 /var/log/nginx/error.log
ss -lntp | grep -E ':(80|8080)\b'
curl -v http://127.0.0.1:8080/
curl -v -H 'Host: onescript.example.com' http://127.0.0.1/

11. Rollback

systemctl disable --now onescript-app
rm -f /etc/systemd/system/onescript-app.service
systemctl daemon-reload
rm -f /etc/nginx/sites-enabled/onescript-app
nginx -t && systemctl reload nginx

Критерий успеха: архитектура системы совместима с установленным дистрибутивом, oscript --version работает, systemd-service находится в active, локальный endpoint отвечает, а Nginx успешно проксирует запрос без прямого публикации порта 8080.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *