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 --version4. Проверяем запуск простого скрипта
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-pager8. Проверяем локальный 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.