Yandex Marketplace
September 12, 2022

Django

Django — фреймворк с открытым исходным кодом для разработки на языке программирования Python. Подходит для создания сложных веб-сервисов, которые используют базы данных.

Фреймворк основан на шаблоне проектирования, близком к Model-View-Controller (MVC). Код сервиса, при разработке которого использован Django, получается компактным, легко читаемым и готовым к быстрому расширению функциональности.

Набор софта:

Ubuntu       18.04.5 LTS, Linux 4.15.0-55-generic
Django       3.1.6
Python       3.6.9
MySQL        5.7.33
Apache       2.4.29

Установка:

export FOLDER=$(yc config get folder-id)
export ZONE=ru-central1-a
export SA=$(yc iam service-account get cameda-service --format json | jq -r '.id')
export SG=$(yc vpc sg get cam-all --format json | jq -r '.id')
export SUBNET=$(yc vpc subnet get subnet-a --format json | jq -r '.id')
yc compute instance create \
--folder-id $FOLDER \
--name cameda-django \
--hostname cameda-django \
--description "Django" \
--platform standard-v2 \
--zone $ZONE \
--create-boot-disk image-family=django,size=30,type=network-ssd,block-size=8K \
--image-folder-id standard-images \
--memory 2 \
--cores 2 \
--core-fraction 100 \
--preemptible \
--network-interface subnet-id=$SUBNET,address=10.128.0.202,nat-ip-version=ipv4,security-group-ids=$SG \
--metadata serial-port-enable=1 \
--ssh-key ~/.ssh/id_rsa.pub \
--service-account-id $SA \
--async

Подключение к ВМ по ssh осуществляется от имени пользователя yc-user.

python3 -m django --version
3.1.6

Последняя версия django на момент публикации статьи 12.09.2022 - 4.1.1
apachectl -v
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2020-08-12T21:33:25
mysql --version
mysql  Ver 14.14 Distrib 5.7.33, for Linux (x86_64) using  EditLine wrapper

Все проекты лежат здесь: /usr/share/django-projects/ Все пароли собраны здесь: /root/default_passwords.txt

Ниже bash скрипт настройки данного образа:

#!/bin/bash

set -e

source /opt/yc-marketplace/yc-welcome-msg.sh
source /opt/yc-marketplace/yc-clean.sh

echo "Install packages ..."

systemd-run --property="After=apt-daily.service apt-daily-upgrade.service" --wait /bin/true
apt-get -y update

mkdir -p /usr/share/django-projects

echo "Updating locales ..."
export LC_ALL=en_US.UTF-8

apt-get -q -y install apache2 libapache2-mod-wsgi-py3 \
    mysql-client libmysqlclient-dev \
    python3-pip python3-dev\
    cron debconf-utils \
    libssl-dev \
    iptables

echo "Install Django with pip3 ..."
pip3 install django

cd /usr/share/django-projects/
django-admin startproject welcome

MYSQL_ROOT_PASS=ZkbEsVNb2rXKT

echo iptables-persistent iptables-persistent/autosave_v4 boolean false | debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean false | debconf-set-selections
debconf-set-selections <<< "mysql-server-5.7 mysql-server/root_password password ${MYSQL_ROOT_PASS}"
debconf-set-selections <<< "mysql-server-5.7 mysql-server/root_password_again password ${MYSQL_ROOT_PASS}"

apt-get -q -y install iptables-persistent mysql-server-5.7

pip3 install mysqlclient

mkdir /usr/share/django-projects/welcome/static

echo "Setup apache2 ..."

cat > /etc/apache2/sites-enabled/000-default.conf <<EOF
<VirtualHost *:80 [::]:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /usr/share/django-projects/

        ErrorLog \${APACHE_LOG_DIR}/error.log
        CustomLog \${APACHE_LOG_DIR}/access.log combined

        WSGIDaemonProcess welcome user=www-data group=www-data python-path=/usr/share/django-projects/welcome
        WSGIProcessGroup welcome
        WSGIScriptAlias / /usr/share/django-projects/welcome/welcome/wsgi.py

        <Directory /usr/share/django-projects/welcome/welcome>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>

       Alias /static/ /usr/share/django-projects/welcome/static/

       <Directory /usr/share/django-projects/welcome/static>
            Require all granted
       </Directory>
</VirtualHost>
EOF

sed -i "s/ALLOWED_HOSTS\ =\ \[\]/ALLOWED_HOSTS\ =\ \['*'\]/" /usr/share/django-projects/welcome/welcome/settings.py
sed -i "/STATIC_URL/a STATIC_ROOT\ =\ '/usr/share/django-projects/welcome/static/'" /usr/share/django-projects/welcome/welcome/settings.py

mkdir -p /usr/local/apache/passwd/
touch /usr/local/apache/passwd/passwords

chown -R www-data /usr/share/django-projects/

generate_print_credentials;
on_install;
print_msg;

Полезные ссылки.

Настройка SG: https://teletype.in/@cameda/qpWd5IvF8EZ
Настройка SA: https://teletype.in/@cameda/w93lPMPQWS4
Про зону доступности тут: https://teletype.in/@cameda/S34zdiTcbUM
Сеть создавали тут: https://teletype.in/@cameda/ZbTkF70KWK9
Страничка продукта: https://cloud.yandex.ru/marketplace/products/yc/django-3
Квоты в облаке: https://teletype.in/@cameda/yTu0k42dbw0