django – Deploy to Production #02

ต่อจาก django #01

Development Environment

เริ่มจาก ไปที่ command prompt แล้วใช้คำสั่งต่อไปนี้ เพื่อ เก็บรายละเอียดของ Package และ Version ที่ใช้ในการพัฒนา ไว้ในไฟล์ myenv.txt และ เก็บไฟล์ myproject ทั้งหมดไว้ในไฟล์ myproject.tar.gz (บน Windows อาจจะใช้ 7zip สร้าง)

pip freeze > myenv.txt
tar -zxvf myproject.tar.gz myproject

แล้ว Upload ไฟล์ myenv.txt และ myproject.tar.gz ขึ้นบน Projection Server

Production Server

ในที่นี้ ลองไปใช้ Google Compute Engine สร้าง Instance ขึ้นมา เป็น Ubuntu 18.04 และ ได้ Upload ไฟล์ myenv.txt และ myproject.tar.gz จาก Development ขึ้นไว้แล้ว (ใน /home/user01)

ติดตั้ง Python3, PIP, Apache2, และ mod_wsgi

sudo apt update
sudo apt install python3 python3-pip apache2 libapache2-mod-wsgi-py3

ติดตั้ง virtualenv

pip3 install virtualenv

สร้าง Virtual Environment ชื่อ production

virtualenv production
source production/bin/activate

ติดตั้ง Package ต่าง ๆ ตามที่สร้างไว้จาก Development Environment (จากไฟล์ myenv.txt)

pip install -r myenv.txt

แตกไฟล์ myproject.tar.gz ออกมา

tar -zxvf myproject.tar.gz

สร้าง Apache Site Configuration ที่ /etc/apache2/sites-available/001-myproject.conf

เนื้อหาตามนี้

<VirtualHost *:80>
    Alias /static /home/user01/myproject/static
    <Directory /home/user01/myproject/static>
        Require all granted
    </Directory>
    <Directory /home/user01/myproject/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess myproject python-home=/home/user01/production python-path=/home/user01/myproject
    WSGIProcessGroup myproject
    WSGIScriptAlias / /home/user01/myproject/myproject/wsgi.py
</VirtualHost>

จากนั้น สร้าง Symbolic Link จาก /home/user01/production/lib/python3.6/site-packages/django/contrib/admin/static มาที่ /home/user01/myproject/static

ln -s /home/user01/production/lib/python3.6/site-packages/django/contrib/admin/static /home/user01/myproject/static

ปรับ Permission ให้ www-data สามารถแก้ไข Database ได้ (เพราะในที่นี้ใช้ SQLite)

sudo chown :www-data /home/user01/myproject/db.sqlite3
sudo chown :www-data /home/user01/myproject

สั่ง Apache ให้เอา Default Site ออก และ นำ myproject ขึ้นแทน และ ทำการ Reload

sudo a2dissite 000-default
sudo a2ensite 001-myproject
sudo systemctl reload apache2

ก็จะใช้ได้แล้ว

มีหน้า Admin ให้ใช้
admin เข้าใช้งานได้
User ก็สามารถเข้าใช้งานได้

หวังว่าจะเป็นประโยชน์ครับ