ทางเลือก Heroku? ต่อไปนี้คือวิธีปรับใช้เว็บแอปกับ AWS EC2

Nov 28 2022
ย้ายแอปของคุณจาก Heroku โดยตั้งค่าเวิร์กโฟลว์การปรับใช้อย่างต่อเนื่องสำหรับเว็บแอป Python และ PHP ของคุณ Heroku กำลังเลิกใช้งานระดับฟรีสำหรับการปรับใช้เว็บแอปภายในวันที่ 28 พฤศจิกายน 2022 หากคุณมีโปรเจ็กต์พอร์ตโฟลิโอที่มีทราฟฟิกต่ำจำนวนมากเช่นฉัน ให้โฮสต์ไว้ VPS ทั้งหมดในที่เดียวนั้นถูกกว่าการจ่ายตามแอปสำหรับโซลูชัน PaaS เช่น AWS Elastic Beanstalk หรือ App Platform ของ DigitalOcean

ย้ายแอปของคุณจาก Heroku โดยตั้งค่าเวิร์กโฟลว์การปรับใช้อย่างต่อเนื่องสำหรับเว็บแอป Python และ PHP ของคุณ

ภาพถ่ายโดย Rubaitul Azad บน Unsplash

Heroku กำลังเลิกใช้งาน Free Tier สำหรับการปรับใช้เว็บแอปภายในวันที่ 28 พฤศจิกายน 2022 หากคุณมีโปรเจ็กต์พอร์ตโฟลิโอที่มีทราฟฟิกต่ำมากมายเช่นฉัน การโฮสต์ทั้งหมดบน VPS เดียวนั้นถูกกว่าการจ่ายตามแอปสำหรับโซลูชัน PaaS เช่น AWS Elastic Beanstalk หรือแพลตฟอร์มแอปของ DigitalOcean

หากคุณกำลังปรับใช้เว็บแอปพลิเคชัน Flask หรือ Django เป็นครั้งแรก โดยที่ไม่เคยใช้ Heroku มาก่อน โพสต์นี้จะช่วยคุณปรับใช้แอปพลิเคชันของคุณเช่นกัน

หลังจากทำตามบทช่วยสอนนี้ ในขณะที่คุณพุชคอมมิชชันกับ GitHub VPS ของคุณจะสร้างอิมเมจ Docker ใหม่ ติดตั้งการพึ่งพาของแอปในนั้น จากนั้นเรียกใช้คอนเทนเนอร์นั้นด้วยตัวเอง และคุณจะสามารถตรวจสอบทั้งหมดนี้ได้จากเบราว์เซอร์ของคุณ

กลไกการปรับใช้อย่างต่อเนื่อง

สารบัญ

  1. เปิดใช้งานและกำหนดค่าอินสแตนซ์ AWS EC2
    1.1 แนบ EBS Volume
    1.2 ติดตั้งวอลุ่มสตอเรจอัตโนมัติหลังจากรีบูต
    1.3 ตั้งกฎขาเข้าบนแดชบอร์ด AWS เพื่อเปิดพอร์ต
  2. ติดตั้งและกำหนดค่า Docker
    2.1 การ ติดตั้ง
    2.2. เพิ่มผู้ใช้ของคุณในกลุ่มนักเทียบท่า
    2.3 ทำให้นักเทียบท่าใช้ไดรฟ์ข้อมูลที่แนบมา
  3. ติดตั้งและกำหนดค่า CapRover
    3.1 กำหนดค่าระเบียน DNS
    3.2 ติดตั้ง CapRover
    3.3 กำหนดค่า CapRover
    3.4 ติดตั้งแอปแรกของคุณ
  4. ย้ายแอปของคุณจาก Heroku ไปยังเซิร์ฟเวอร์ใหม่
    4.1 สร้าง GitHub Repo (ถ้าไม่มี)
    4.2. เชื่อมต่อแอปพลิเคชัน Python ของคุณ
    4.3 สร้างแอปพลิเคชันใหม่บน CapRover
    4.4 การตั้งค่าเวิร์กโฟลว์การปรับใช้อย่างต่อเนื่อง
  5. การโอนย้ายฐานข้อมูล PostgreSQL
    5.1 ส่งออกจาก Heroku
    5.2 โยกย้ายฐานข้อมูล
  6. พิเศษ
    6.1 แล้วแอพพลิเคชั่น PHP ล่ะ?
    6.2. จะเกิดอะไรขึ้นหากแอปของฉันไม่ใช่ "ไร้สัญชาติ"

เราจะเริ่มต้นด้วยการสร้างอินสแตนซ์ EC2 บนแดชบอร์ด AWS คุณสามารถทำตามคำแนะนำเช่นนี้ได้หากต้องการ สำหรับความต้องการของฉัน ฉันเลือก Ubuntu 22.04 บน t2.micro และเพิ่ม Elastic Block Storage (EBS) Volume ที่สองที่มีความจุ 20 GB

1.1. แนบไดรฟ์ข้อมูล EBS

เมื่อคุณ ssh เข้าสู่เซิร์ฟเวอร์ของคุณแล้ว ให้แสดงรายการพาร์ติชันทั้งหมดด้วยคำสั่งต่อไปนี้

lsblk -o NAME,FSTYPE,LABEL,SIZE,MOUNTPOINT

      
                
Partitions before the EBS volume is mounted

sudo mkfs -t xfs /dev/xvdb

sudo mkdir /mnt/ebs1

sudo mount -t auto -v /dev/xvdb /mnt/ebs1

lsblk -o NAME,FSTYPE,LABEL,SIZE,MOUNTPOINT

พาร์ติชันหลังจากเมาต์ไดรฟ์ข้อมูล EBS

1.2. ติดตั้งวอลุ่มสตอเรจอัตโนมัติหลังจากรีบูต

ไดรฟ์ข้อมูล EBS จะไม่ถูกเมานต์หลังจากรีบูต เว้นแต่เราจะตั้งค่าให้เมานต์อัตโนมัติ เราสามารถทำได้โดยการแก้ไข/etc/fstab.

sudo nano -w /etc/fstab

/dev/xvdb /mnt/ebs1 xfs defaults 0 2

sudo findmnt --verify

sudo reboot

lsblk -o NAME,FSTYPE,LABEL,SIZE,MOUNTPOINT

1.3. ตั้งกฎขาเข้าบนแดชบอร์ด AWS เพื่อเปิดพอร์ต

ตอนนี้เราต้องเปิดบางพอร์ตด้วยการสร้างกฎขาเข้า เลือกรหัสอินสแตนซ์ EC2 ของคุณบนแดชบอร์ด AWS เลือกแท็บความปลอดภัย แล้วคลิกรหัสของกลุ่มความปลอดภัย จากนั้นคลิกที่ปุ่ม “แก้ไขกฎขาเข้า” และเพิ่มกฎ TCP สำหรับพอร์ต 22, 80, 443, 3000 และ 5432 เป็นอย่างน้อย

กฎขาเข้าของกลุ่มความปลอดภัยสำหรับอินสแตนซ์ EC2 ของเรา

หลังจากCapRoverตั้งค่า คุณสามารถลบกฎ TCP/3000 หากคุณวางแผนที่จะใช้แอพที่ต้องใช้พอร์ตอื่น คุณสามารถเพิ่มที่นี่ได้เช่นกัน

2. ติดตั้งและกำหนดค่า Docker

เราจะใช้ CapRover ซึ่งเป็น Platform as a Service (Paas) เพื่อจัดการการปรับใช้อัตโนมัติ การกำหนดค่า Nginx และอื่นๆ CapRover จะใช้คอนเทนเนอร์ Docker เพื่อปรับใช้แอปของคุณ ดังนั้นเราต้องติดตั้ง Docker ก่อน

2.1. การติดตั้ง

ขั้นแรก ให้เรียกใช้ต่อไปนี้เพื่ออัปเดตดัชนีแพ็กเกจ apt และติดตั้งแพ็กเกจเพื่อให้ apt ใช้ที่เก็บผ่าน HTTPS:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

sudo docker run hello-world

ผลลัพธ์ที่สำเร็จจากอิมเมจนักเทียบท่าชื่อ hello-world

ดูคำแนะนำนี้หากคุณพบข้อผิดพลาดใดๆ

2.2. เพิ่มผู้ใช้ของคุณในกลุ่มนักเทียบท่า

หากคุณต้องการให้ไม่ต้องพิมพ์sudoก่อนคำสั่งนักเทียบท่าทุกคำสั่ง ให้รันคำสั่งต่อไปนี้เพื่อเพิ่มผู้ใช้ระบบของคุณลงในกลุ่มนักเทียบท่าและเปิดใช้งานการเปลี่ยนแปลงในกลุ่ม แทนที่ Ubuntu ด้วยชื่อผู้ใช้ของคุณ หากจำเป็น

sudo usermod -aG docker ubuntu
newgrp docker

หากคุณต้องการเก็บอิมเมจนักเทียบท่าไว้ในวอลุ่มที่เมาท์ ให้รันคำสั่งต่อไปนี้:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/docker-storage.conf

# For docker after 17.06-ce:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt/ebs1"

sudo systemctl daemon-reload
sudo systemctl restart docker

sudo rm -rf /var/lib/docker

3. ติดตั้งและกำหนดค่า CapRover

ขั้นแรก คุณต้องเลือกโดเมนหลักที่จะมีการปรับใช้เว็บแอปในโดเมนย่อย โดเมนหลักสามารถเป็นโดเมนย่อยได้ สำหรับตัวอย่างนี้ ฉันจะใช้test.cansin.netเป็นโดเมนหลักและแอปพลิเคชันจะถูกติดตั้งในโดเมนย่อย เช่นflaskapp.test.cansin.net.

3.1. กำหนดค่าระเบียน DNS

เพื่อให้บรรลุเป้าหมายนี้ เราจำเป็นต้องตั้งค่าระเบียน DNS สองรายการ: รายการหนึ่งสำหรับโดเมนย่อยและไวด์การ์ดสำหรับโดเมนย่อยระดับสองทั้งหมด ใน Google Domains ระเบียนเหล่านี้มีการตั้งค่าด้านล่าง ซึ่งควรคล้ายกับผู้รับจดทะเบียนของคุณ

ตัวอย่างระเบียน DNS สำหรับการใช้โดเมนย่อยทดสอบและโดเมนย่อยระดับที่สอง

แทนที่ 34.238.245.243 ด้วยที่อยู่ IP สาธารณะของอินสแตนซ์ EC2 ของคุณและ "ทดสอบ" ด้วยโดเมนย่อยที่คุณต้องการใช้

หากคุณต้องการใช้โดเมนรูทของคุณ (เช่น example.com) และให้แอพปรับใช้เป็นโดเมนย่อยระดับแรก (เช่น flaskapp.example.com) ให้ลบ “test” เพื่อเว้นว่างไว้ (หรือแทนที่ด้วยตัวอย่าง com ขึ้นอยู่กับผู้รับจดทะเบียน) ในระเบียน A แรก และลบ ".test" ออกจากระเบียนที่สอง เหลือเพียงเครื่องหมายดอกจัน (*)

3.2. ติดตั้ง CapRover

ตอนนี้เราพร้อมที่จะติดตั้ง PaaS, CapRover แล้ว มันเหมือนกับการรันคอนเทนเนอร์ Docker อื่น ๆ :

docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover

หากคุณใช้ VPS ที่มีอยู่กับไฟร์วอลล์ คุณจะได้รับข้อผิดพลาดในขั้นตอนนี้ หากคุณทำเช่นนั้น ให้กำหนดค่าไฟร์วอลล์ของคุณเพื่อเปิดพอร์ตที่เราเปิดไว้บนแดชบอร์ด AWS ในหัวข้อ 1.3 ดูเอกสารประกอบการติดตั้ง CapRoverสำหรับข้อมูลเพิ่มเติม

3.3. กำหนดค่า CapRover

ตอนนี้ เราสามารถเข้าสู่ระบบแดชบอร์ดของ CapRover ได้โดยไปที่พอร์ต 3000 ของที่อยู่ IP ของอินสแตนซ์ EC2 ของเรา ใช้รหัสผ่านเริ่มต้น Captain42 เพื่อเข้าสู่ระบบ

หน้าจอเข้าสู่ระบบ CapRover

เมื่อเข้าสู่ระบบ คุณจะเห็นแบบฟอร์มต่อไปนี้เพื่อกำหนดค่าโดเมนหลักของคุณ พิมพ์โดเมนของคุณ คลิก “อัปเดตโดเมน” ซึ่งจะเปลี่ยนเส้นทางให้คุณเข้าสู่ระบบอีกครั้ง เมื่อคุณทำเช่นนั้น ให้คลิก "เปิดใช้งาน HTTPS" จากนั้นคลิก "บังคับ HTTPS" เพื่อให้ certbot มอบใบรับรอง SSL ให้คุณและต่ออายุตามต้องการ

จากนั้น เปลี่ยนรหัสผ่านเริ่มต้นจากเมนูการตั้งค่า

3.4. ติดตั้งแอปแรกของคุณ

เราจะเริ่มต้นด้วยตัวเลือก One-Click Apps เพื่อหมุนเซิร์ฟเวอร์ PostgreSQL เมื่อคุณเลือกตัวเลือกนี้ในหน้าแอพ คุณจะเห็นแอพพลิเคชั่นมากมายที่พร้อมให้ปรับใช้ได้ในคลิกเดียว

หน้าแอพคลิกเดียว

เพียงค้นหา PostgreSQL เลือก ตั้งชื่อแอป แล้วคลิกที่ Deploy

สิ่งนี้จะสร้างอิมเมจนักเทียบท่าบนเซิร์ฟเวอร์ของคุณโดยติดตั้ง PostgreSQL

ในการนำเข้าฐานข้อมูลที่มีอยู่ของแอพที่เรากำลังย้าย เราจะต้องเชื่อมต่อกับฐานข้อมูลนี้จากเครื่องคอมพิวเตอร์ของเรา ดังนั้น เราต้องแมปพอร์ต 5432 ของคอนเทนเนอร์นี้กับพอร์ตเดียวกันบนโฮสต์ของเรา โดยไปที่หน้าแอพ เลือกแอพ PostgreSQL ที่เราสร้างขึ้น หาปุ่ม Add Port Mapping และเพิ่มกฎด้วย 5432 ในช่องทั้งสองด้านล่าง

สุดท้ายคลิกที่บันทึกและอัปเดต

เราจะย้ายฐานข้อมูลไปยังคอนเทนเนอร์นี้ในหัวข้อที่ 5

4. ย้ายแอปของคุณไปยังเซิร์ฟเวอร์ใหม่

ในส่วนนี้ เราจะปรับใช้แอปพลิเคชันขวดทดสอบนี้และตั้งค่าเวิร์กโฟลว์การปรับใช้อย่างต่อเนื่องเพื่อให้ปรับใช้ซ้ำกับทุกคอมมิชชันที่เราส่งไปยัง GitHub

คุณสามารถทำตามขั้นตอนเดียวกันนี้หากคุณปรับใช้แอปเป็นครั้งแรก

4.1. สร้าง GitHub Repo (ถ้าไม่มี)

ส่วนนี้จะขึ้นอยู่กับเวิร์กโฟลว์ที่คุณมีอยู่ หากคุณได้เชื่อมต่อที่เก็บ GitHub กับบัญชี Heroku ของคุณสำหรับการปรับใช้อัตโนมัติ คุณสามารถข้ามส่วนนี้ได้

หากคุณยังไม่มีพื้นที่เก็บข้อมูลบน GitHub สำหรับโครงการของคุณ ให้สร้างขึ้นใหม่ หากคุณเคยใช้ Heroku git มาก่อน คุณสามารถดึงจากตรงนั้นแล้วพุชไปยังที่เก็บ GitHub ใหม่

4.2. Dockerize Your Python Application (ดูที่ส่วนท้ายสำหรับ PHP)

ฉันชอบใช้ Dockerfile แทนที่จะเป็นไฟล์ CapRover native Captain Definition ในกรณีที่ฉันต้องการใช้บริการคอนเทนเนอร์อื่นในอนาคต เพิ่มไฟล์ชื่อ Dockerfile ในไดเร็กทอรีรูทของที่เก็บของคุณโดยมีเนื้อหาต่อไปนี้

FROM ubuntu:22.04
RUN apt-get -y update
RUN apt-get install --no-install-recommends -y python3 python3-dev python3-venv python3-pip python3-wheel build-essential libmysqlclient-dev && \
 apt-get clean && rm -rf /var/lib/apt/lists/*
ADD . /my-flask-app
WORKDIR /my-flask-app
RUN pip install -r requirements.txt
EXPOSE 5000

# Ensure that the python outputs are streamed to the terminal
ENV PYTHONUNBUFFERED=1

# Run the app with gunicorn on port 5000 with 4 workers, using gevent worker
CMD ["gunicorn","-b", "0.0.0.0:5000", "-w", "4", "-k", "gevent", "--worker-tmp-dir", "/dev/shm", "wsgi:app"]

ในของrequirements.txtคุณ คุณจะต้องใช้บางเวอร์ชันของgeventและ gunicornดู ข้อกำหนด . txt ของแอปทดสอบของฉันที่นี่

สำหรับแอปพลิเคชัน PHP โปรดดูส่วนสุดท้ายของโพสต์นี้สำหรับตัวอย่าง Dockerfile

4.3. สร้างแอปพลิเคชันใหม่บน CapRover

ในหน้าแอพของ CapRover เลือกชื่อแอพของคุณแล้วคลิกสร้างแอพใหม่ ชื่อนี้จะกลายเป็นโดเมนย่อยเริ่มต้นของแอปนี้ (http://flaskapp.test.cansin.net) แต่คุณจะสามารถกำหนดค่าโดเมนอื่นให้กับแอปนี้ได้เช่นกัน

สำหรับตัวอย่างนี้ เราต้องการให้แอปนี้อยู่บน flaskapp.cansin.net หลังจากเพิ่มระเบียน A สำหรับ flaskapp บนเว็บไซต์ผู้รับจดทะเบียนของเราแล้ว เราคลิกที่แอปที่เราเพิ่งสร้างและพิมพ์โดเมนใหม่ตามด้านล่าง จากนั้นคลิกเชื่อมต่อโดเมนใหม่

การแก้ไขโดเมนใหม่ให้กับแอปของคุณ

จากนั้นคลิกเปิดใช้งาน HTTPS เลือกตัวเลือก Force HTTPS พิมพ์ 5000 ในช่องพอร์ต HTTP ของคอนเทนเนอร์ (เว้นแต่คุณจะเลือกพอร์ตอื่นในไฟล์ Docker ของคุณ) แล้วคลิก "บันทึกและอัปเดต" สิ่งนี้จะทำการกำหนดค่า Nginx และ certbot ที่จำเป็นโดยอัตโนมัติ แม้ว่าคุณจะสามารถเพิ่มกฎ Nginx ที่กำหนดเองได้ที่นี่หากจำเป็น

หากคุณต้องการตั้งค่าตัวแปรสภาพแวดล้อม เช่น ฐานข้อมูลหรือข้อมูลรับรอง SMTP คุณสามารถป้อนตัวแปรเหล่านั้นได้ในหน้าการกำหนดค่าแอป

4.4. การตั้งค่าเวิร์กโฟลว์การปรับใช้อย่างต่อเนื่อง

ตอนนี้คุณพร้อมที่จะปรับใช้แอปของคุณบนแท็บการปรับใช้ แม้ว่าคุณจะสามารถอัปโหลดไฟล์บนแท็บนี้ได้ง่ายๆ แต่บทความนี้จะอธิบายเวิร์กโฟลว์ที่จะทำให้คอมมิชชันของคุณที่ส่งไปยัง GitHub ทริกเกอร์ CapRover เพื่อปรับใช้จาก GitHub โดยอัตโนมัติ

4.4.1. อนุญาตให้ CapRover เข้าถึงพื้นที่เก็บข้อมูลของคุณ

หากคุณใช้ที่เก็บสาธารณะ คุณสามารถข้ามขั้นตอนนี้ได้ หากพื้นที่เก็บข้อมูลของคุณเป็นแบบส่วนตัว CapRover จะต้องใช้คีย์ SSH เพื่อตรวจสอบสิทธิ์กับ GitHub และดูพื้นที่เก็บข้อมูลของคุณ แม้ว่าในทางเทคนิคแล้ว คุณสามารถวางคีย์ SSH ของบัญชี GitHub ของคุณที่นี่ แต่วิธีที่ปลอดภัยกว่าก็คือการใช้คีย์การปรับใช้ที่ให้การเข้าถึงเฉพาะที่เก็บเฉพาะเท่านั้น

หมายเหตุ:แทนที่จะใช้คีย์การปรับใช้ คุณสามารถสร้างผู้ใช้ GitHub ใหม่แทน เพิ่มเป็นผู้ทำงานร่วมกันในที่เก็บที่คุณจะปรับใช้กับ CapRover สร้างคีย์ SSH สำหรับผู้ใช้นั้น และเพิ่มคีย์เหล่านั้นไปยังบัญชี GitHub ของผู้ใช้นั้น จากนั้นคุณสามารถใช้คีย์ SSH ของผู้ใช้สำหรับที่เก็บทั้งหมด

การสร้างรหัสการปรับใช้

รันคำสั่งต่อไปนี้บนเซิร์ฟเวอร์ของคุณเพื่อสร้างคีย์ ssh เลือกชื่อที่กำหนดเองสำหรับคีย์นี้ในพรอมต์ถัดไป จากนั้นกด Enter อีกครั้งเพื่อข้ามการตั้งค่าข้อความรหัสผ่าน

ssh-keygen -t ed25519 -C "Caprover Flask Deployment Key"

      
                
Creating an SSH key

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/flaskApp

      
                
Adding the SSH key to the ssh-agent

การเพิ่มรหัสการปรับใช้ให้กับ GitHub และ CapRover

เรียกใช้คำสั่งต่อไปนี้และคัดลอกรหัสสาธารณะของคุณ:

cat ~/.ssh/flaskApp.pub

วิธีเพิ่มรหัสปรับใช้ไปยังที่เก็บ GitHub

จากนั้นเพิ่มเนื้อหาของรหัสสาธารณะของคุณที่นี่ และคลิกที่เพิ่มรหัส

กำลังบันทึกคีย์การปรับใช้ของคุณไปยังที่เก็บของคุณ

ถัดไป เรียกใช้คำสั่งต่อไปนี้และคัดลอกคีย์ส่วนตัวของคุณ:

cat ~/.ssh/flaskApp

การเพิ่มรหัสการปรับใช้ของคุณบนแท็บการปรับใช้ของ CapRover

คลิกที่ บันทึกและอัปเดต จากนั้น บังคับสร้าง

การตั้งค่าเว็บฮุค GitHub

หลังจากที่คุณบันทึกข้อมูลรับรอง GitHub ของคุณบน CapRover แล้ว URL สำหรับตำแหน่งข้อมูล API จะปรากฏเหนือ URL ที่เก็บของคุณ คัดลอก URL นี้

URL ปลายทาง API บนอินเทอร์เฟซ CapRover

จากนั้นเปิดหน้า repository ของคุณบน GitHub ไปที่ Settings → Webhooks วาง URL นี้ลงในฟิลด์ Payload URL แล้วคลิก Add webhook

การเพิ่มเว็บฮุคไปยังที่เก็บ GitHub ของคุณ

ตอนนี้กดยืนยันไปยังพื้นที่เก็บข้อมูลของคุณและดูบันทึกการสร้างบนแท็บการปรับใช้สำหรับแอปของคุณบน CapRover คุณควรเห็นข้อความแสดงความสำเร็จด้านล่าง

ข้อความที่ระบุว่า “สร้างเสร็จแล้ว!” ในส่วนบันทึกการสร้างของ CapRover

นั่นคือทั้งหมด ตอนนี้ ทุกครั้งที่คุณพุชไปที่ GitHub เว็บฮุคจะเรียกใช้ CapRover เพื่อปรับใช้เวอร์ชันใหม่ของแอปพลิเคชันของคุณ หากมีข้อผิดพลาดใดๆ เช่น ขาดการพึ่งพา คุณจะดูได้ในส่วนบันทึกการสร้าง

5. ย้ายฐานข้อมูล PostgreSQL

แอปพลิเคชันทดสอบของเราในตัวอย่างนี้ใช้ฐานข้อมูล PostgreSQL จาก Heroku เราจะย้ายไปยังเซิร์ฟเวอร์ PostgreSQL ที่เราสร้างไว้ในส่วนที่ 3

5.1. ส่งออกจาก Heroku

สตริงการเชื่อมต่อสำหรับฐานข้อมูลของคุณสามารถพบได้Settings → Config Vars → DATABASE_URLหลังจากเลือกแอปของคุณบน Heroku หากคุณกำลังย้ายจากแพลตฟอร์มอื่น ให้ค้นหาสตริงการเชื่อมต่อฐานข้อมูลในตัวแปรสภาพแวดล้อมหรือการตั้งค่าของแอปของคุณ

postgres://qzhzootzdkvfdi:19813b61af59c9711899304ccfe2db0cb0c402f317e90754788eb0770ff6aeb9@ec2-54-163-34-107.compute-1.amazonaws.com:5432/db4ejdhq0vnp5r

วิธีเพิ่มการเชื่อมต่อเซิร์ฟเวอร์ PostgreSQL ใหม่บน pgAdmin 4

จากนั้นกรอกข้อมูลรับรองจาก Heroku ตามด้านล่าง

การเชื่อมต่อกับเซิร์ฟเวอร์ Heroku PostgreSQL บน pgAdmin 4

จะมีฐานข้อมูลจำนวนมากบนเซิร์ฟเวอร์นั้น เราจะพบฐานข้อมูลที่มีชื่อในสตริงการเชื่อมต่อของเรา: db4ejdhq0vnp5r ในกรณีของเรา จากนั้นคลิกขวาที่มัน เลือกสำรองข้อมูล และบันทึกไฟล์สำรองข้อมูล

5.2. โยกย้ายฐานข้อมูล

ค้นหาข้อมูลรับรองฐานข้อมูล PostgreSQL ใหม่ของคุณบน CapRover ในเมนู App Configs ของแอป PostgreSQL ที่คุณสร้างไว้ด้านล่าง

คุณสามารถใช้ pgAdmin เพื่อเชื่อมต่อกับฐานข้อมูลนี้โดยใช้ข้อมูลประจำตัวเหล่านี้และที่อยู่ IP ของอินสแตนซ์ EC2 ของคุณ เช่นเดียวกับที่เราทำกับฐานข้อมูลบน Heroku อย่าลืมเปลี่ยนชื่อโฮสต์ด้วย IP หรือชื่อโฮสต์ของเซิร์ฟเวอร์ EC2 ของคุณ

การเชื่อมต่อกับเซิร์ฟเวอร์ PostgreSQL ใหม่ด้วย pgAdmin 4

เมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์ใหม่ มันจะปรากฏในคอลัมน์ด้านซ้าย ขยายและคลิกขวาที่เข้าสู่ระบบ/บทบาทกลุ่ม จากนั้นเลือก Create → Login/Group Role ตามด้านล่าง

การเพิ่มผู้ใช้ใหม่ในฐานข้อมูล PostgreSQL จาก pgAdmin 4

ตั้งชื่อผู้ใช้ในแท็บทั่วไป ตั้งรหัสผ่านในแท็บคำจำกัดความ เปิดใช้งาน “สามารถเข้าสู่ระบบได้หรือไม่” ตัวเลือกภายใต้แท็บสิทธิ์ และคลิกบันทึก

ตอนนี้เราสามารถสร้างฐานข้อมูลสำหรับแอปพลิเคชันของเราได้โดยคลิกขวาที่ฐานข้อมูลแล้วเลือกสร้าง→ฐานข้อมูลตามด้านล่าง

การเพิ่มฐานข้อมูลใหม่ไปยังเซิร์ฟเวอร์ PostgreSQL จาก pgAdmin 4

ในแท็บ General ให้ตั้งชื่อฐานข้อมูล และเลือกผู้ใช้ที่สร้างขึ้นใหม่เป็น Owner จากดรอปดาวน์ ดังด้านล่าง

การเลือกเจ้าของฐานข้อมูล PostgreSQL บน pgAdmin 4

หากคุณมีฐานข้อมูลที่ต้องการใช้ต่อ ให้คลิกขวาที่ฐานข้อมูลที่คุณสร้างแล้วเลือกกู้คืน

จากนั้นเลือกไฟล์ที่คุณส่งออกจากฐานข้อมูล Heroku PostgreSQL ก่อนหน้านี้ด้วยตัวเลือกการสำรองข้อมูล จากนั้นคลิกที่ปุ่มกู้คืน จากนั้นคลิกขวาที่ฐานข้อมูล เลือก Properties จากนั้นเลือกแท็บ Default Privilege ที่นี่ ตรวจสอบให้แน่ใจว่าผู้ใช้ที่สร้างขึ้นใหม่ของคุณได้รับการกำหนดสิทธิ์ที่จำเป็น

ตอนนี้ เว็บแอปพลิเคชันของคุณควรสามารถเชื่อมต่อกับฐานข้อมูลใหม่นี้ได้ อย่าลืมเปลี่ยนการตั้งค่าแอปพลิเคชันเพื่อเชื่อมต่อกับฐานข้อมูลใหม่

แอปทดสอบนี้ใช้ข้อมูลประจำตัวแบบฮาร์ดโค้ด (ที่ไม่ได้ใช้งานแล้ว) แต่คุณควรตั้งค่าเป็นตัวแปรสภาพแวดล้อมที่การตั้งค่า → Config Var บน CapRover และให้แอปของคุณอ่านข้อมูลรับรองจากตัวแปรสภาพแวดล้อม

6. พิเศษ

6.1. แล้วแอพพลิเคชั่น PHP ล่ะ?

หากแอปพลิเคชันของคุณไม่มีสถานะ คุณสามารถทำตามขั้นตอนเดียวกันนี้เพื่อปรับใช้แอปของคุณ ยกเว้นกับ Dockerfile อื่น ตัวอย่างด้านล่างจะใส่เนื้อหาของที่เก็บของคุณลงในไดเร็กทอรี /var/www ของคอนเทนเนอร์ โดยสมมติว่าคุณต้องการให้แอปนี้อยู่ในไดเร็กทอรีรากของโดเมนนั้น

FROM php:7.3-apache-stretch

COPY . /var/www/html
WORKDIR /var/www/html
EXPOSE 80

เวิร์กโฟลว์การปรับใช้อย่างต่อเนื่องเหมาะสำหรับแอปไร้สถานะที่ทำการประมวลผลเท่านั้น หากไฟล์ในที่เก็บของคุณเปลี่ยนไปเมื่อแอปของคุณทำงาน (เช่น หากแอปพลิเคชันของคุณจัดเก็บไฟล์ที่อัปโหลดไว้ในโฟลเดอร์ย่อย) ไฟล์เหล่านั้นจะถูกเขียนทับในครั้งต่อไปที่แอปของคุณถูกปรับใช้จากที่เก็บ เพื่อป้องกันสิ่งนี้ คุณสามารถปรับใช้แอปของคุณเพียงครั้งเดียวและเปิดใช้งานตัวเลือก "มีข้อมูลถาวร" สำหรับแอปของคุณบน CapRover อ่านเพิ่มเติมเกี่ยวกับแอพถาวรบน CapRover ที่นี่