Задача: Разобрать, как опираясь на ранее опубликованные заметки осуществить все тоже самое но с уклоном к системе Ubuntu Bionic (18.04) Server, а именно накрутить Web–доступ к репозитариям Mercurial собственных проектов.
Первым делом задействую заметку по выкачиванию с домашней основной системы репозитария где содержится собственный скрипт настраивающий запущенную систему Ubuntu 18.04 Server под виртуальной средой Virtualbox где я произвожу тестирование, а если все хорошо складывается применяю в продакшене. Я так работаю со всем.
ekzorchik@srv-bionic:~$ sudo apt-get install mercurial -y
ekzorchik@srv-bionic:~$ hg clone ssh://ekzorchik@172.33.33.7://home/ekzorchik/dproject
ekzorchik@srv-bionic:~$ sudo ./dproject/default
ekzorchik@srv-bionic:~$ uname -a
Linux srv-bionic 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Теперь перехожу собственно к решению поставленной задачи этой заметки:
ekzorchik@srv-bionic:~$ sudo apt-get install apache2 apache2-utils libapache2-mod-wsgi python-setuptools python-pip -y
ekzorchik@srv-bionic:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf
ServerName localhost
ekzorchik@srv-bionic:~$ sudo unlink /etc/apache2/sites-available/000-default.conf
ekzorchik@srv-bionic:~$ sudo unlink /etc/apache2/sites-available/default-ssl.conf
ekzorchik@srv-bionic:~$ sudo unlink /etc/apache2/sites-enabled/000-default.conf
ekzorchik@srv-bionic:~$ sudo rm /var/www/html/index.html
ekzorchik@srv-bionic:~$ sudo nano /var/www/html/index.html
<head>
<meta http-equiv="refresh" content="1;URL=http://172.33.33.25/hg" />
</head>
ekzorchik@srv-bionic:~$ sudo mkdir /var/www/html/hg
ekzorchik@srv-bionic:~$ sudo nano /var/www/html/hg/hgwebdir.cgi
#!/usr/bin/python
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)
ekzorchik@srv-bionic:~$ sudo nano /var/www/html/hg/hgweb.config
[paths]
/=/var/www/html/hg/**
[web]
allow_push = *
push_ssl = false
allowbz2 = yes
allowgz = yes
allowzip = yes
ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/hg/*
ekzorchik@srv-bionic:~$ sudo chmod gu+x /var/www/html/hg/hgwebdir.cgi
ekzorchik@srv-bionic:~$ sudo nano /etc/apache2/sites-available/hg.conf
<Virtualhost *:80>
ScriptAlias /hg "/var/www/html/hg/hgwebdir.cgi"
<Directory /var/www/html/hg>
Options +ExecCGI
</Directory>
<Location /hg>
AuthType Basic
AuthName "Mercurial repositories"
AuthUserFile /var/www/html/hg/hgusers
Require valid-user ekzorchik
</Location>
</Virtualhost>
ekzorchik@srv-bionic:~$ sudo a2ensite hg.conf
ekzorchik@srv-bionic:~$ sudo a2dismod mpm_event
Module mpm_event disabled.
To activate the new configuration, you need to run:
systemctl restart apache2
ekzorchik@srv-bionic:~$ sudo a2enmod mpm_prefork cgi
Considering conflict mpm_event for mpm_prefork:
Considering conflict mpm_worker for mpm_prefork:
Enabling module mpm_prefork.
Enabling module cgi.
To activate the new configuration, you need to run:
systemctl restart apache2
ekzorchik@srv-bionic:~$ sudo pip install demandimport
ekzorchik@srv-bionic:~$ sudo htpasswd -c /var/www/html/hg/hgusers ekzorchik
New password:
712mbddr@
Re-type new password:
712mbddr@
Adding password for user ekzorchik
ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/hg/*
ekzorchik@srv-bionic:~$ sudo systemctl restart apache2
Для того, чтобы ограничить права на запись (операция push) или на чтение мы будем использовать файл hgrc:
ekzorchik@srv-bionic:~$ sudo nano /etc/mercurial/hgrc
allow_push = *
push_ssl = false
ekzorchik@srv-bionic:~$ sudo hg init /var/www/html/hg/example
ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/hg/*
ekzorchik@srv-bionic:~$ sudo systemctl status apache2 | head -n 5
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Sun 2018-08-19 21:19:57 MSK; 2min 40s ago
После проверяю, через Web-браузер как происходит доступ к Web-странице (http://IP&DNS/hg) с авторизацией и после.
Указываю:
- Имя пользователя: ezkorchik
- Пароль: 712mbddr@
и нажимаю кнопку ОК.
После чего попадаю на Web-интерфейс представления каталога с будущими репозитариями Mercurial, в текущий момент у меня только один проект (репозитарий) с именем example.
Так как Web-сервис Apache2 работает от имени группы www-data, то чтобы я мог из под своей учетной записи (login: ekzorchik) создавать репозитарии и взаимодействовать с ними мне нужно быть в этой группе, иначе бы пришлось делать chown каждый раз, а это не совсем удобно:
ekzorchik@srv-bionic:~$ sudo chown -R ekzorchik:www-data /var/www/html/hg/*
ekzorchik@srv-bionic:~$ sudo nano /var/www/html/hg/example/.hg/hgrc
[web]
contact = Ollo Alexander
description = My repository on Ubuntu 18.04
allow_push = ekzorchik
allow_archive = gz zip bz2
[ui]
username = ekzorchik <ekzorchik@ekzorchik.ru>
ekzorchik@srv-bionic:~$ cd /var/www/html/hg/example/
ekzorchik@srv-bionic:/var/www/html/hg/example$ nano one
#!/bin/bash
echo $USER
ekzorchik@srv-bionic:/var/www/html/hg/example$ chmod +x one
ekzorchik@srv-bionic:/var/www/html/hg/example$ hg add
ekzorchik@srv-bionic:/var/www/html/hg/example$ hg status
A one
ekzorchik@srv-bionic:/var/www/html/hg/example$ hg commit -m "First Script on Mercurial"
Теперь переключаюсь на Web-интерфейс и что я вижу:
Просмотр и визуализация того что сделано в репозитарии через Web-интерфейс намного удобнее ну или смотря кому-как если использовать консоль. Я считаю, что оба способа имеют право на использование, я же так делаю.
И вот теперь когда все мои проекты доступны через Web-интерфейс, получить их содержимое не составляет большого труда:
ekzorchik@navy:~$ hg clone http://ekzorchik:712mbddr@@172.33.33.25/hg/example
destination directory: example
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
new changesets 7fa3ceda9cba
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
ekzorchik@navy:~$ ls example
one
→ а вот и файл в проекте и их может быть множество, просто в рамках этой заметки он пока один.
На заметку: Для своих системно-административных целей у меня на домашнем системе Ubuntu 18.04 развернуто большое количество проектов под каждую задачу:
- Дефолтная настройка Raspberry Pi 3 Model B
- Дефолтная настройка Ubuntu 18.04 Desktop & Server
- Установка Asterisk, MajorDoMo и т.д
и когда мне нужно окружение или я сподобился поработать на д очередным проектом я просто загружаю весь репозитарий и работаю с ним. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.