สร้าง Server บน Digital Ocean ทำยังไง มาดูกัน Ep.6 (Configure web service)
จากตอนที่ 5 เราสามารถเรียกหน้าเว็บของเราผ่านทาง ip:port ได้แล้วนะคับ ต่อไปเราจะมา configure เพิ่มเติม เพื่อ map กับ domain name และเอา port ออกไปนะคับ อ่อ…แล้วตอนนี้ เราก็ยังต้อง run server ค้างไว้ที่ venv ฝั่ง server ด้วยนะ ถ้า Ctrl+c มันก้อจะใช้ไม่ได้ ฉะนั้นจะมีขั้นตอน web service ด้วย article นี้จะมาทำให้จบไปเลย
- ผูก domain เลยนะคับ (Install apache ยังทำใน venv นะคับ ให้อยู่ข้างใน project ด้วย).
sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi-py3 # wsgi คือ web service ทำให้ server คุยกับ Django ได้
2. หลังจากติดตั้ง apache เสร็จแล้ว ให้เข้าไปที่ apache
cd /etc/apache2/sites-available/ # จะเจอ 2 ไฟล์ข้างในนะ
sudo cp 000-default.conf django_project.conf # เราจะ copy ไฟล์configure "000-default" มา duplicate เพิ่มทำให้มี 3 ไฟล์นะ
3. ต่อไปให้ copy code ชุดนี้เข้าไปวางไว้ที่ editor ก่อนนะคับ
Alias /static /home/ADMINNAME/PROJECTNAME/static
<Directory /home/ADMINNAME/PROJECTNAME/static>
Require all granted
</Directory>
Alias /media /home/ADMINNAME/PROJECTNAME/media
<Directory /home/ADMINNAME/PROJECTNAME/media>
Require all granted
</Directory>
<Directory /home/ADMINNAME/PROJECTNAME/PROJECTNAME>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/ADMINNAME/PROJECTNAME/PROJECTNAME/wsgi.py
WSGIDaemonProcess django_app python-path=/home/ADMINNAME/PROJECTNAME python-home=/home/ADMINNAME/PROJECTNAME/venv
WSGIProcessGroup django_app
4. จาก code ในข้อ3 มีจุดที่เราต้องเปลี่ยน 2 จุดนะคับ คือ ADMINNAME และ PROJECTNAME (ถ้าใน sublime text เราจะกด Ctrl+d เพื่อให้ไปตัวถัดไปได้เลย)
นำไปวางใน Editor จะแก้ไขทีเดียวได้เลยคับADMINNAME 8 จุด = apiadmin
PROJECTNAME 10 จุด = grassroot
หลังจากเราแก้ไขแล้ว จะได้ code แบบนี้นะคับ ตามค่าที่เราตั้งไว้ ให้เราลองเช็ค path ของแต่ละบรรทัดให้ดี จะต้องตรงกับ path ใน FileZilla นะเช่น
python-home=/home/apiadmin/grassroot/venv ก็จะต้องมี venv ใน project grassroot นะ
Alias /static /home/apiadmin/grassroot/static
<Directory /home/apiadmin/grassroot/static>
Require all granted
</Directory>Alias /media /home/apiadmin/grassroot/media
<Directory /home/apiadmin/grassroot/media>
Require all granted
</Directory><Directory /home/apiadmin/grassroot/grassroot>
<Files wsgi.py>
Require all granted
</Files>
</Directory>WSGIScriptAlias / /home/apiadmin/grassroot/grassroot/wsgi.py
WSGIDaemonProcess django_app python-path=/home/apiadmin/grassroot python-home=/home/apiadmin/grassroot/venv
WSGIProcessGroup django_app
จากนั้นให้นำ code ที่แก้ไขแล้วไปวางที่
sudo nano django_project.conf # ไปวางไว้บริเวณก่อนบรรทัด </VirtualHost>
5. ต่อไปเป็นการ Enable site ใหม่
sudo a2ensite django_project # Enabling new site
sudo a2dissite 000-default.conf # Disable old site
6. กลับไปที่ user desktop
cd /home/apiadmin # ถ้า ls จะเจอ project เรา
ใกล้จบล่ะคับ
sudo chown :www-data grassroot/db.sqlite3 # grassroot= PROJECTNAME
sudo chmod 664 grassroot/db.sqlite3 # เอาเลข 664 ตามนั้นเลย
sudo chown :www-data grassroot/
7. ต่อไปให้เราสร้าง folder media ขึ้นมานะ โดยเข้าไปที่ Project และ mkdir
cd grassroot
mkdir media
cd .. # ถอยกลับออกมาที่ apiadmin เหมือนเดิม หลังจากสร้าง Folder เสร็จsudo chown -R :www-data grassroot/media
sudo chown -R 775 grassroot/media
8. ต่อไปจะเป็นการตัด port ออก, allow http/tcp, และเมื่อไหร่ที่มีการแก้ไข File จะต้องมีการ restart apache2 ทุกครั้ง ไม่งั้นมันจะจำค่าเดิม
sudo ufw delete allow 8000
sudo ufw allow http/tcp
sudo service apache2 restart
จนถึงบรรทัดนี้เราสามารถเปิดเว็บของเราได้แล้วนะ แค่ใส่ ip droplet เท่านั้น (ไม่ต้องใส่ port แล้ว และไม่ต้อง run server ค้างไว้แล้วด้วย)
และถ้าเราจะทดสอบ Postman ก้อใส่ ip droplet เข้าไปใช้ได้เลยนะคับ เช่น
“ GET http://xxx.xx.xx.xx/apiproduct/ ” เป็นต้น
จบล่ะคับ เด๋วตอนหน้าผมจะมาบอกวิธีจด domain name และ ผูกกับ Digital ocean.