สร้าง Server บน Digital Ocean ทำยังไง มาดูกัน Ep.6 (Configure web service)

Grassroot Engineer
3 min readJan 8, 2020

--

จากตอนที่ 5 เราสามารถเรียกหน้าเว็บของเราผ่านทาง ip:port ได้แล้วนะคับ ต่อไปเราจะมา configure เพิ่มเติม เพื่อ map กับ domain name และเอา port ออกไปนะคับ อ่อ…แล้วตอนนี้ เราก็ยังต้อง run server ค้างไว้ที่ venv ฝั่ง server ด้วยนะ ถ้า Ctrl+c มันก้อจะใช้ไม่ได้ ฉะนั้นจะมีขั้นตอน web service ด้วย article นี้จะมาทำให้จบไปเลย

  1. ผูก 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> 
พอวางแล้ว ให้ save เหมือนเดิมนะ (cat เข้าไปดูอีกรอบก็ได้ว่าถูก save จิงไหม)

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.

--

--

Grassroot Engineer
Grassroot Engineer

Written by Grassroot Engineer

ATM engineer who is interested in CODING and believe in EFFORT. — https://grassrootengineer.com

No responses yet