Câu hỏi 1: Chúng đang đề cập đến người dùng trên máy chủ từ xa.
Câu hỏi 2: Điều này phụ thuộc, hai tình huống: 1. Bạn sẽ cần phải thêm khóa công khai của người dùng cục bộ để đẩy tới máy chủ từ xa của bạn. 2. Bạn sẽ cần phải thêm một khóa công khai cho một người dùng cục bộ chạy hook sau khi nhận nếu một ssh được yêu cầu triển khai đến một máy chủ khác. Nhiều khả năng chỉ có 1 là mối quan tâm của bạn và 2 không phải vì máy chủ từ xa sẽ chứa repo git từ xa và máy chủ www.
Điều này có nghĩa là bạn thêm khóa công khai vào tệp authorized_keys trong môi trường linux/unix. Tệp này thường nằm trong /home/$USER/.ssh/authorized_keys Tệp authorized_keys nằm trong cùng thư mục với tệp known_hosts cho người dùng.
Câu hỏi 3: Họ đang giải thích cách thiết lập kho lưu trữ git từ xa. Nó không cần phải ở cùng một đường dẫn như kho lưu trữ cục bộ của bạn.
OK - bây giờ để làm rõ những gì đang thực sự xảy ra ở đây. Hướng dẫn này dạy bạn cách thiết lập kho lưu trữ từ xa sẽ triển khai cài đặt jekyll mỗi khi nó được đẩy tới.
Điều này có nghĩa là nếu bạn có repo github, bạn không thể thiết lập móc phía máy chủ ở đó. Thay vào đó bạn sẽ thiết lập một điều khiển từ xa mới trên máy chủ từ xa của bạn. Vì vậy, nói rằng bạn đăng nhập vào máy chủ của bạn (với ssh thường), chạy pwd
học đường dẫn đầy đủ của bạn hoặc đặt nó trong một biến môi trường:
$DIR=`pwd`
Bây giờ bạn có thể tạo một repo trần trên máy chủ này:
git init --bare $DIR/<SOMEDIRNAME>.git
Bây giờ bạn có kho lưu trữ git trống từ xa trên máy chủ của mình. Tiếp theo, bạn cần phải thêm móc cho phép nó triển khai trang web Jekyll của bạn khi nhận được một cú đẩy. Trang web bạn đã liệt kê có triển khai khá đơn giản, nhưng về cơ bản tất cả những gì nó làm là tạo trang _site cho các trang html được phân phát, bạn có thể thực hiện theo một số cách, tôi khuyên bạn nên làm điều đó mà không làm gián đoạn người dùng của bạn càng nhiều càng tốt, tại đây là một tập lệnh mẫu có thể làm một việc như vậy:
#!/bin/bash
# Assuming a directory structure for www:
# $www_root/releases
# $www_root/shared
# $www_root/current
# all releases go in releases dir as timestamps dirs
# any logs or other shared items go in shared dir - shared/logs
# current is a symlink to latest release
unset GIT_DIR
WWW_ROOT=/PATH/TO/WWW
REPO_PATH=/PATH/TO/REPO
REPO_BRANCH=master
SITE_DIR=/PATH/TO/_SITE/DIR/IN/REPO
DATE=$(date +"%Y%m%d%H%M")
# get code
if [ ! -d $WWW_ROOT/shared/git_maint ]; then
mkdir -p $WWW_ROOT/shared/git_maint
cd $WWW_ROOT/shared/git_maint
git clone $REPO_PATH $WWW_ROOT/shared/git_maint
git checkout master
else
cd $WWW_ROOT/shared/git_maint
git pull
git checkout master
fi
# do deploy
if [ ! -d $WWW_ROOT/releases/$DATE ]; then mkdir $WWW_ROOT/releases/$DATE; fi
cp -ar $WWW_ROOT/shared/git_maint/$SITE_DIR $WWW_ROOT/releases/$DATE
ln -s $WWW_ROOT/new_current $WWW_ROOT/releases/$DATE && mv $WWW_ROOT/new_current $WWW_ROOT/current
exit 0
Điều gì đó tương tự sẽ là triển khai tốt. Nếu bạn lưu tập lệnh này trên máy chủ từ xa của mình trong tập tin móc/sau khi gửi lại, thì nó sẽ chạy mỗi khi kho lưu trữ được đẩy đến. Chỉ cần nhớ để làm cho nó thực thi: chmod 755 hooks/post-receive
Vì vậy, nếu bạn thêm từ xa mới này để repo git của bạn với:
git remote add DEPLOY_PROD [email protected]:/path/to/bare/repo
Sau đó git push DEPLOY_PROD
- nó sẽ đẩy tới của bạn từ xa và sau đó repo từ xa của bạn sẽ cháy của nó sau khi nhận móc và sau đó sao chép các repo trần xuống một thư mục bảo trì có thể được thổi bay đi tại hầu như bất kỳ điểm nào. Thư mục này sau đó được sử dụng để cp các trang web dir đến một thư mục phát hành và sau đó được liên kết đến thư mục chính.
Tất nhiên tất cả điều này có khả năng là quá mức cần thiết và bạn chỉ có thể tạo tập lệnh triển khai chạy từ máy chủ lưu trữ cục bộ để thực hiện tất cả điều này qua ssh.
Vấn đề là bạn không thể chạy móc máy chủ trực tiếp từ github cho phương pháp này để bạn phải làm việc xung quanh nó. Tôi sẽ đề nghị bạn kiểm tra capistrano như một chiến lược triển khai - hiện tại/phát hành/chia sẻ dirs và git_maint dir được lấy từ lược đồ của họ, nó hoạt động tốt.
Hãy cho tôi biết nếu bạn muốn được trợ giúp ở đây, tôi có rất nhiều kinh nghiệm trong việc triển khai các chiến lược triển khai và tự động triển khai, do đó tùy thuộc vào hoàn cảnh của bạn, mọi thứ sẽ thay đổi.
Cảm ơn, tôi sẽ thử và cho bạn biết cách hoạt động. Đánh giá cao sự giúp đỡ của bạn. – Leahcim
không có tệp sau khi nhận trong thư mục móc trong git repo. Chỉ có 'applypatch-msg.sample post-update.sample pre-commit.sample pre-rebase.sample commit-msg.sample pre-applypatch.sample chuẩn bị-commit-msg.sample update.sample' – Leahcim
bạn có thể tạo tập tin này - nó chỉ là một tập lệnh sẽ chạy sau khi git nhận được gói. Chỉ cần đặt tên cho nó sau khi nhận - git sẽ làm phần còn lại. – Michael