После того, как свой старый компьютер (Lubuntu 18.04 Desktop
) я приспособил к проекту изучения работы связки Python3
+ нейронные сети, а то обычное системное администрирование уже как-то под надоело, хочется может сменить или дополнить навыки в пользу программирования. И дабы быстрее производить изучение и сразу видеть результат, я решил вогрузить на него компьютер — Apache2 + Jupyter.
Jupyter Notebook
— это Web оболочка для интерактивных вычислений. Этот инструмент поможет создавать файлы (notebooks
), которые содержат не только компьютерный код, но и другие элементы (заметки, уравнения, диаграммы, ссылки и т.д.), которыми можно потом поделиться с заказчиками или друзьями.
Старый компьютер:
Motherboard: Gigabyte GA-MA770-UD3
CPU: AMD Phenom(tm) 9850 Quad-Core Processor
HDD: 120 ГБ SSD диск Kingston A400 (SA400S37/120G)
RAM: 8G (DDR 2)
VideoCard: PALIT nVidia GeForce GTX 1080 , PA-GTX1080 GameRock Premium 8G, 8Гб, GDDR5X, Ret [neb1080h15p2-1040g]
Шаг №1:
Установка системы Lubuntu 18.04 Desktop
выполнена по заметке:
Шаг №2:
Установка драйверов на видеокарту выполнена по заметке:
Шаг №3:
К систему Lubuntu 18.04 Desktop
применена заметка где настраивается AutoLogon:
Шаг №4:
Устанавливаю на систему Lubuntu 18.04 Desktop Web
-сервис apache2:
ekzorchik@srv-dbionic:~$ sudo apt-get install -y apache2 ekzorchik@srv-dbionic:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf ekzorchik@srv-dbionic:~$ sudo rm -f /var/www/html/index.html ekzorchik@srv-dbionic:~$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/jupyter.conf ekzorchik@srv-dbionic:~$ sudo nano /etc/apache2/sites-available/jupyter.conf <VirtualHost *:80> ServerName 172.33.33.2 ProxyPreserveHost On ProxyRequests Off ProxyPass /api/kernels/ ws://localhost:5000/api/kernels/ ProxyPassReverse /api/kernels/ http://localhost:5000/api/kernels/ ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/ </VirtualHost> ekzorchik@srv-dbionic:~$ sudo unlink /etc/apache2/sites-available/000-default.conf ekzorchik@srv-dbionic:~$ sudo unlink /etc/apache2/sites-available/default-ssl.conf ekzorchik@srv-dbionic:~$ sudo unlink /etc/apache2/sites-enabled/000-default.conf
Шаг №5:
Устанавливаю пакеты Python3
на систему:
ekzorchik@srv-dbionic:~$ sudo apt-get install -y python3.6-venv python3.6 python3-venv ipython3 python3-pip virtualenvwrapper ekzorchik@srv-dbionic:~$ sudo pip3 install virtualenv virtualenvwrapper
Шаг №6:
Создаю виртуальное окружение для Jupyter:
ekzorchik@srv-dbionic:~$ python3.6 -m venv jupyterenv ekzorchik@srv-dbionic:~$ source jupyterenv/bin/activate (jupyterenv) ekzorchik@srv-dbionic:~$ (jupyterenv) ekzorchik@srv-dbionic:~$ pip install jupyter wheel (jupyterenv) ekzorchik@srv-dbionic:~$ (jupyterenv) ekzorchik@srv-dbionic:~$ jupyter notebook --generate-config Writing default config to: /home/ekzorchik/.jupyter/jupyter_notebook_config.py (jupyterenv) ekzorchik@srv-dbionic:~$ (jupyterenv) ekzorchik@srv-dbionic:~$ mkdir notebooks (jupyterenv) ekzorchik@srv-dbionic:~$ nano ~/.jupyter/jupyter_notebook_config.py c.NotebookApp.notebook_dir = '/home/ekzorchik/notebooks/' c.NotebookApp.open_browser = False c.NotebookApp.port = 5000 jupyterenv) ekzorchik@srv-dbionic:~$ jupyter notebook password Enter password: указываю пароль 712mbddr@ Verify password: указываю пароль 712mbddr@ [NotebookPasswordApp] Wrote hashed password to /home/ekzorchik/.jupyter/jupyter_notebook_config.json (jupyterenv) ekzorchik@srv-dbionic:~$ (jupyterenv) ekzorchik@srv-dbionic:~$ cat .jupyter/jupyter_notebook_config.json { "NotebookApp": { "password": "sha1:9a1a2f1301f2:5bfc952787102560963e56ace6c6bc54231651d3" } }(jupyterenv) ekzorchik@srv-dbionic:~$ (jupyterenv) ekzorchik@srv-dbionic:~$ deactivate ekzorchik@srv-dbionic:~$
Шаг №7:
Активирую сайт jupyter.conf
и модули для работы Web
-сервиса с окружением Python3
сервиса jupyter:
ekzorchik@srv-dbionic:~$ sudo a2ensite jupyter.conf ekzorchik@srv-dbionic:~$ sudo a2enmod proxy ekzorchik@srv-dbionic:~$ sudo a2enmod proxy_http ekzorchik@srv-dbionic:~$ sudo a2enmod proxy_wstunnel ekzorchik@srv-dbionic:~$ nano jupyter #!/bin/bash . /home/ekzorchik/jupyterenv/bin/activate jupyter notebook --config="/home/ekzorchik/.jupyter/jupyter_notebook_config.py" & ekzorchik@srv-dbionic:~$ chmod +x jupyter
Шаг №8:
Теперь нужно настроить чтобы созданный в предыдущем шаге скрипт запускался вместе с системой.
Далее по заметке "Как на Ubuntu 18.04 включить rc.local"
ekzorchik@srv-dbionic:~$ sudo nano /etc/systemd/system/rc-local.service [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
Вот только в Ubuntu 18.04 Server
файл rc.local
есть, а в Lubuntu Desktop 18.04
его нет, значит создаю:
ekzorchik@srv-dbionic:~$ sudo nano /etc/rc.local #!/bin/bash exit 0 ekzorchik@srv-dbionic:~$ sudo chmod +x /etc/rc.local ekzorchik@srv-dbionic:~$ sudo systemctl enable rc-local Created symlink /etc/systemd/system/multi-user.target.wants/rc-local.service → /etc/systemd/system/rc-local.service. ekzorchik@srv-dbionic:~$ sudo systemctl start rc-local
Да, все в заметке выше справедливо и для Lubuntu 18.04 Desktop amd64
После действий выше указываю строку на запуск скрипта:
ekzorchik@srv-dbionic:~$ sudo nano /etc/rc.local #!/bin/bash su -c "/home/ekzorchik/jupyter" -s /bin/sh ekzorchik exit 0
Шаг №9:
Отправляю систему в перезагрузку дабы проверить, что после отработает скрипт запуска виртуального окружения jupyter
через Web
-сервис Apache2:
ekzorchik@srv-dbionic:~$ sudo reboot ekzorchik@srv-dbionic:~$ sudo netstat -tulpn | grep -I '80\|5000' tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 809/python3 tcp6 0 0 ::1:5000 :::* LISTEN 809/python3 tcp6 0 0 :::80 :::* LISTEN 692/apache2 ekzorchik@srv-dbionic:~$
Из локальной сети обращаюсь на http://172.33.33.2
Почему?
Запустил строки вручную и выявил ошибку вида
[W 17:24:43.493 NotebookApp] Blocking request with non-local 'Host' 172.33.33.2 (172.33.33.2). If the notebook should be accessible at that name, set NotebookApp.allow_remote_access to disable the check. ekzorchik@srv-dbionic:~$ nano .jupyter/jupyter_notebook_config.py c.NotebookApp.allow_remote_access = True ekzorchik@srv-dbionic:~$ sudo reboot
После открываю браузер и в строке адрес указываю URL
где все выше проделывается: http://172.33.33.2
и вот он запрос на авторизацию.
Ввел пароль (тот который я указывал шагами выше, т.е. 712mbddr@
) и я успешно авторизован:
Итого, теперь с каждым запуском компьютера у меня в автоматическом режиме запускается Jupyter.
На заметку: Shift + Enter
— это выполнить код в ячейке
В процессе использования выявил, что не работает New - Terminal
, но это пока для меня не главное. Будет нужда разберусь. На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.