1. Видалення файла з відстеження (збереження на диску)
Щоб припинити відстеження файла системною контролю версій Fossil, але залишити його у робочому каталозі:
fossil forget path/to/file.ext
fossil commit -m "Stop tracking path/to/file.ext"
2. Організація self-hosted сервера Fossil (Arch Linux)
Встановлення
sudo pacman -S fossil
Дисковий простір та структура
Fossil використовує базу даних SQLite (.fossil). Рекомендоване дерево каталогів:
/srv/fossil/
├── repos/ # Бази даних проєктів (.fossil)
│ ├── project1.fossil
│ └── project2.fossil
├── checkout/ # Робочі копії (за потреби)
└── backups/ # Резервні копії
Примітка: Для файлових систем Btrfs рекомендується вимикати Copy-on-Write (chattr +C /srv/fossil/repos).
Створення системного користувача
sudo useradd -r -s /usr/bin/nologin -d /srv/fossil fossil
sudo mkdir -p /srv/fossil/{repos,backups}
sudo chown -R fossil:fossil /srv/fossil
sudo chmod -R 750 /srv/fossil
Автозапуск сервісу (Systemd)
Файл /etc/systemd/system/fossil.service:
[Unit]
Description=Fossil SCM Server
After=network.target
[Service]
Type=simple
User=fossil
Group=fossil
ExecStart=/usr/bin/fossil server --port 8080 /srv/fossil/repos/
Restart=always
RestartSec=3
ProtectSystem=full
ProtectHome=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Запуск та автозавантаження:
sudo systemctl daemon-reload
sudo systemctl enable --now fossil
3. Документація в проєкті (Embedded Documentation)
Fossil підтримує вбудовану документацію (Markdown файли в проєкті):
- Документація зберігається і версіонується разом з кодом (наприклад, у папці
doc/чиdocs/). - Відкривається через веб-інтерфейс за адресою:
http://IP-сервера:8080/назва_проєкту/doc/trunk/docs/index.md
4. Перенос існуючого локального репозиторію на сервер
Спосіб 1: Клон по SSH (рекомендований)
# Локально:
fossil clone /path/to/local/myproject.fossil ssh://user@server_ip//srv/fossil/repos/myproject.fossil
# На сервері:
sudo chown fossil:fossil /srv/fossil/repos/myproject.fossil
Спосіб 2: SCP та налаштування remote-url
# Локально:
scp /path/to/local/myproject.fossil user@server_ip:/tmp/
# На сервері:
sudo mv /tmp/myproject.fossil /srv/fossil/repos/
sudo chown fossil:fossil /srv/fossil/repos/myproject.fossil
# Локально у папці проєкту:
fossil remote-url http://server_ip:8080/myproject
5. Обмеження доступу та авторизація
Вимкнення анонімного доступу у Fossil
При запуску команди поза робочим каталогом потрібно обов'язково вказувати -R:
fossil user capabilities nobody "" -R /srv/fossil/repos/project.fossil
fossil user capabilities anonymous "" -R /srv/fossil/repos/project.fossil
# Додаємо користувача нового користувача
fossil user new devuser "DEV" "YOUR_SECRET_PASSWORD" -R /srv/fossil/repos/user.fossil
fossil user capabilities devuser "v-o-r" -R /srv/fossil/repos/user.fossil
Синхронізація після закриття анонімного доступу
Щоб виправити помилку Error: not authorized to read, вкажіть користувача в URL синхронізації:
# Встановлення нового URL з вказанням користувача
fossil remote-url http://devuser@repo.example.com:8083/project
# Запуск синхронізації та збереження пароля
fossil sync
6. Nginx Reverse Proxy з Basic Auth (опціонально)
Файл /etc/nginx/sites-available/fossil.conf:
server {
listen 80;
server_name fossil.yourdomain.com;
location / {
return 404;
}
location ~ ^/(project1|project2)(/.*)?$ {
auth_basic "Fossil Private Area";
auth_basic_user_file /etc/nginx/.fossil_htpasswd;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}