No description
- Go 100%
| main.go | ||
| readme.md | ||
textserver
Простой HTTP-сервер для загрузки файлов через API. Работает за nginx, принимает файлы через multipart/form-data, возвращает прямую ссылку для скачивания.
Функции
- Загрузка файлов через
curlили любой HTTP-клиент - API-ключ авторизация через заголовок
X-Upload-Key - Случайные имена файлов (32 символа hex)
- Раздача файлов через nginx (без участия Go)
- Лимит загрузки: 500MB
Требования
- Go 1.21+
- nginx
- Linux (Alpine, Debian, Ubuntu и др.)
Установка
1. Клонирование
git clone https://github.com/username/fileserver.git
cd fileserver
2. Настройка
Изменить пароль в main.go:
const uploadPassword = "password"
3. Компиляция
CGO_ENABLED=0 go build -ldflags="-s -w" -o fileserver main.go
4. Установка на сервер
sudo mkdir -p /var/www/html/uploads /opt/fileserver
sudo chown -R www-data:www-data /var/www/html/uploads
sudo cp fileserver /opt/fileserver/
sudo chmod +x /opt/fileserver/fileserver
5. Настройка nginx
location /uploads/ {
alias /var/www/html/uploads/;
expires 30d;
add_header Cache-Control "public, immutable";
location ~* \.(php|php3|php4|php5|phtml|pl|py|sh|cgi|rb)$ {
deny all;
return 403;
}
}
location /api/upload {
proxy_pass http://127.0.0.1:8080;
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_set_header X-Forwarded-Host $host;
client_max_body_size 500M;
proxy_read_timeout 300s;
}
6. Автозапуск
systemd (Debian/Ubuntu):
sudo tee /etc/systemd/system/fileserver.service << 'EOF'
[Unit]
Description=File Upload Server
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/fileserver
ExecStart=/opt/fileserver/fileserver
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable fileserver
sudo systemctl start fileserver
OpenRC (Alpine Linux):
sudo tee /etc/init.d/fileserver << 'EOF'
#!/sbin/openrc-run
name="File Upload Server"
command="/opt/fileserver/fileserver"
command_background="yes"
pidfile="/run/fileserver.pid"
directory="/opt/fileserver"
user="www-data"
group="www-data"
depend() {
need net
after nginx
}
EOF
sudo chmod +x /etc/init.d/fileserver
sudo rc-update add fileserver default
sudo rc-service fileserver start
Использование
Загрузка файла
curl -k -H "X-Upload-Key: password" \
-F "file=@document.pdf" \
https://example.com/api/upload
Ответ:
{
"success": true,
"url": "https://example.com/uploads/a1b2c3d4...pdf",
"filename": "document.pdf",
"size": 12345
}
Получить только ссылку
curl -k -s -H "X-Upload-Key: password" \
-F "file=@image.png" \
https://example.com/api/upload | jq -r '.url'