ติดตั้ง Local Github ด้วย Forgejo ด้วย Docker

เห็นว่ามันใช้ฟรี 100%

ทำงานเหมือนเราต่อกับ Github เลย เพียงแต่ run บน local computer ได้

แต่เราก็ต้อง backup เครื่องเราเอง เกิดมันพังไปอะไรไป

ขั้นตอนตรงนี้ได้มาจาก Gemini

แต่ลองแล้ว ทำงานได้อยู่

เพียงแต่ตอนนี้มันทำงานด้วย SQLite มั้ง อาจจะยังรับกับ project ใหญ่ๆไม่ดี (หรือเปล่า)

เอาไว้ทดลองเพิ่มกับ Database ตัวอื่น

จากรูปนี้คือทดลอง access ผ่านจากอีกเครื่องใน network มาได้เลย
แต่ยังไม่ได้ลองทาง cmd line ผ่านทาง SSH

1. เตรียมไฟล์ docker-compose.yml

สร้างโฟลเดอร์สำหรับเก็บข้อมูล (เช่น forgejo) แล้วสร้างไฟล์ชื่อ docker-compose.yml ไว้ข้างใน โดยคัดลอกการตั้งค่านี้ไปวาง:

YAML

services:
  server:
    image: codeberg.org/forgejo/forgejo:10 # แนะนำให้ระบุเวอร์ชัน หรือใช้ :latest
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - forgejo
    volumes:
      - ./forgejo-data:/data
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000" # พอร์ตสำหรับหน้าเว็บ (HTTP)
      - "222:22"    # พอร์ตสำหรับ SSH (Git clone)

networks:
  forgejo:
    external: false

2. เริ่มการทำงาน (Startup)

เปิด Terminal ในโฟลเดอร์ที่มีไฟล์นั้นอยู่ แล้วรันคำสั่ง:

Bash

docker compose up -d

3. การตั้งค่าครั้งแรก (Initial Setup)

  1. เปิดเบราว์เซอร์ไปที่ http://localhost:3000
  2. คุณจะพบกับหน้า Install Page:
    • Database Type: หากต้องการอะไรง่ายๆ สำหรับใช้ส่วนตัว ให้เลือก SQLite3 (ไม่ต้องตั้งค่าฐานข้อมูลเพิ่ม) แต่ถ้าใช้จริงจังแนะนำให้เพิ่มบริการ PostgreSQL ใน Docker Compose ครับ
    • SSH Port: เปลี่ยนจาก 22 เป็น 222 (ตามที่เราตั้งไว้ในไฟล์ Compose)
    • HTTP Port: ยังคงเป็น 3000
  3. เลื่อนลงมาด้านล่างสุดเพื่อสร้าง Admin Account (สำคัญมาก) แล้วกด Install Forgejo

ข้อควรทราบเพิ่มเติม

  • การใช้ฐานข้อมูลภายนอก: หากคุณต้องการใช้ PostgreSQL หรือ MariaDB คุณต้องเพิ่ม Service นั้นๆ ลงใน docker-compose.yml และเชื่อมต่อผ่าน Network เดียวกัน
  • Environment Variables: คุณสามารถตั้งค่าคอนฟิกเกอร์ล่วงหน้าได้ผ่าน Env เช่น FORGEJO__database__DB_TYPE=sqlite3 เป็นต้น
  • Forgejo Runner: หากต้องการใช้ระบบ CI/CD (Actions) คุณจะต้องติดตั้ง forgejo-runner แยกต่างหากเป็นอีกหนึ่ง Container ครับ

เมื่อคุณติดตั้ง Forgejo เรียบร้อยแล้ว ขั้นตอนต่อไปคือการสร้างโปรเจกต์และเชื่อมโยงโค้ดในเครื่องของคุณ (Local) เข้ากับ Server ครับ

นี่คือขั้นตอนการทำงานแบบ Step-by-Step:

1. สร้าง Repository บน Forgejo

  1. เข้าไปที่หน้าเว็บ Forgejo ของคุณ (เช่น http://localhost:3000)
  2. กดปุ่ม + ที่มุมขวาบน แล้วเลือก New Repository
  3. ตั้งชื่อโปรเจกต์ (เช่น my-awesome-app) และตั้งค่าความเป็นส่วนตัว (Public/Private)
  4. กดปุ่ม Create Repository

2. เชื่อมต่อจากเครื่องของคุณ (Local)

หลังจากสร้างในเว็บแล้ว คุณจะได้ URL สำหรับเชื่อมต่อ (เช่น http://localhost:3000/username/my-awesome-app.git) ให้เลือกทำตามสถานการณ์ของคุณดังนี้:

กรณีที่ 1: มีโค้ดอยู่ในเครื่องอยู่แล้ว

เปิด Terminal ในโฟลเดอร์โปรเจกต์ของคุณแล้วรันคำสั่ง:

Bash

# เริ่มใช้งาน Git ในโฟลเดอร์
git init

# เพิ่มไฟล์ทั้งหมดเข้าสู่การติดตาม
git add .

# บันทึกการเปลี่ยนแปลงครั้งแรก
git commit -m "Initial commit"

# เชื่อมต่อกับ Forgejo Server (เปลี่ยน URL เป็นของคุณ)
git remote add origin http://localhost:3000/username/my-awesome-app.git

# ส่งโค้ดขึ้นไปบน Server
git push -u origin main

กรณีที่ 2: เริ่มจากศูนย์ (Clone ลงมา)

หากคุณสร้างไฟล์ README หรือไฟล์อื่นๆ บนเว็บไว้ก่อนแล้ว ให้ใช้วิธี Clone ลงมาที่เครื่อง:

Bash

git clone http://localhost:3000/username/my-awesome-app.git
cd my-awesome-app

3. การใช้งานในโปรแกรมเขียนโค้ด (VS Code)

หากคุณใช้ VS Code จะทำงานได้ง่ายขึ้นมาก:

  1. เปิดโฟลเดอร์โปรเจกต์ด้วย VS Code
  2. ไปที่แถบ Source Control (ไอคอนรูปง่ามทางซ้าย หรือกด Ctrl+Shift+G)
  3. คุณสามารถกดปุ่ม Commit และ Push/Pull ได้ผ่านหน้าจอ UI โดยไม่ต้องพิมพ์คำสั่ง

💡 ทริคแนะนำ: การใช้ SSH Key

ถ้าคุณไม่อยากกรอก Username/Password ทุกครั้งที่ Push โค้ด แนะนำให้ตั้งค่า SSH Key:

  1. สร้าง Key ในเครื่องด้วยคำสั่ง ssh-keygen
  2. คัดลอกเนื้อหาในไฟล์ .pub (ปกติอยู่ที่ ~/.ssh/id_rsa.pub)
  3. ไปที่ Forgejo: Settings > SSH / GPG Keys > Add Key แล้ววางลงไป
  4. เวลา Clone ให้ใช้ URL แบบ SSH (เช่น git@localhost:222:username/my-awesome-app.git)