Tự cài đặt (self-host)
Chạy The Collective trên máy chủ của bạn bằng Docker. Dữ liệu nằm hoàn toàn trong hạ tầng của bạn.
Yêu cầu
- Máy chủ Linux x64, tối thiểu 2 CPU, 4 GB RAM, 20 GB ổ đĩa.
- Docker Engine và Docker Compose v2.
- Một tên miền trỏ về máy chủ, nginx trên máy chủ để giữ HTTPS.
- Tài khoản SMTP để gửi email (xác minh tài khoản, quên mật khẩu).
Thành phần
Stack gồm các container: ứng dụng PHP, nginx, worker hàng đợi, scheduler, Reverb (realtime), MySQL, Redis và phpMyAdmin (tuỳ chọn). Chỉ nginx (cổng 18000), Reverb (18002) và phpMyAdmin (18001) mở ra 127.0.0.1 để nginx của máy chủ chuyển tiếp vào; MySQL và Redis không mở cổng ra ngoài.
1. Lấy mã nguồn
git clone [ĐIỀN: URL repository] the-collective
cd the-collective
2. Cấu hình
cp .env.production.example .env
chmod 600 .env
Điền mọi giá trị CHANGE_ME trong .env:
| Biến | Giá trị |
|---|---|
APP_KEY |
Sinh bằng docker run --rm php:8.5-cli php -r "echo 'base64:'.base64_encode(random_bytes(32));" |
APP_URL |
https://<tên-miền> |
DB_PASSWORD, MYSQL_ROOT_PASSWORD |
Mật khẩu mạnh, khác nhau |
REVERB_APP_KEY, REVERB_APP_SECRET |
Chuỗi ngẫu nhiên |
VITE_REVERB_APP_KEY |
Trùng REVERB_APP_KEY |
VITE_REVERB_HOST |
<tên-miền> |
PMA_ABSOLUTE_URI |
https://<tên-miền>/phpmyadmin/ |
MAIL_HOST, MAIL_USERNAME, MAIL_PASSWORD, MAIL_FROM_ADDRESS |
Thông tin SMTP |
Lưu ý: các biến VITE_* được nhúng vào giao diện lúc build. Đổi chúng thì phải build lại image.
3. Build và khởi động
docker compose -f compose.prod.yaml build docker compose -f compose.prod.yaml run --rm -u www-data app php artisan passport:keys --no-interaction docker compose -f compose.prod.yaml run --rm -u www-data app php artisan migrate --force docker compose -f compose.prod.yaml up -d docker compose -f compose.prod.yaml exec -u www-data app php artisan db:seed --class=RequireSeeder --force
Lệnh db:seed chỉ chạy một lần ở lần cài đầu tiên, để nạp danh mục bắt buộc (vai trò, quyền, trạng thái, độ ưu tiên).
Kiểm tra: curl -fsS http://127.0.0.1:18000/up phải trả về thành công.
4. Nginx và HTTPS trên máy chủ
Mã nguồn có sẵn file mẫu docker/nginx/vps.conf:
sudo cp docker/nginx/vps.conf /etc/nginx/sites-available/the-collective.conf sudo sed -i 's/<ten-mien>/ten-mien-cua-ban.com/g' /etc/nginx/sites-available/the-collective.conf sudo ln -s /etc/nginx/sites-available/the-collective.conf /etc/nginx/sites-enabled/
Cấp chứng chỉ HTTPS (Let's Encrypt), rồi tạo mật khẩu bảo vệ phpMyAdmin:
sudo apt install -y certbot apache2-utils sudo mkdir -p /var/www/letsencrypt sudo certbot certonly --webroot -w /var/www/letsencrypt -d ten-mien-cua-ban.com sudo htpasswd -c /etc/nginx/.htpasswd-phpmyadmin <tên-đăng-nhập> sudo chown root:www-data /etc/nginx/.htpasswd-phpmyadmin sudo chmod 640 /etc/nginx/.htpasswd-phpmyadmin sudo nginx -t && sudo systemctl reload nginx
Lưu ý: khối server cổng 443 trong file mẫu tham chiếu tới chứng chỉ. Nếu nginx -t báo thiếu chứng chỉ ở lần đầu, tạm tắt khối 443, cấp chứng chỉ qua khối cổng 80 rồi bật lại.
File mẫu đã ẩn phiên bản phần mềm, chặn các đường dẫn hay bị dò quét và có sẵn hai dòng (đang tắt) để khoá cả site bằng mật khẩu trong giai đoạn thử nghiệm.
5. Cập nhật phiên bản mới
git pull docker compose -f compose.prod.yaml build docker compose -f compose.prod.yaml run --rm -u www-data app php artisan migrate --force docker compose -f compose.prod.yaml up -d --remove-orphans
Xem có gì mới ở trang Phiên bản trước khi cập nhật.
6. Sao lưu
Dữ liệu cần sao lưu định kỳ: database và volume storage (file tải lên, khoá OAuth).
# Database docker compose -f compose.prod.yaml exec -T mysql \ mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --single-transaction the_collective \ | gzip > backup-$(date +%F).sql.gz # File tải lên + khoá OAuth docker run --rm -v the-collective-prod_storage:/data -v "$PWD":/backup alpine \ tar czf /backup/storage-$(date +%F).tar.gz -C /data .
Lưu ý: mất volume storage thì mất khoá OAuth - mọi agent phải đăng nhập lại.