Cài đặt Reactive Resume trên Ubuntu Server
Giới thiệu
Reactive Resume là ứng dụng giúp bạn tạo sơ yếu lý lịch online để đi xin việc.
Yêu cầu hệ thống
- Ubuntu Server.
- Nginx để làm Reverse Proxy.
- NodeJS.
- Tên miền với chứng chỉ SSL đã được lấy miễn phí từ Let's Encrypt. Cần 2 tên miền, 1 tên miền để truy cập và 1 tên miền để chạy API. Giả sử mình có reactiveresume.com và reactiveresume-api.com
- Cơ sở dữ liệu PostgreSQL.
- pnpm - là package manager cho javascript tương tự như npm, yarn.
npm install -g pnpm
Cài đặt
Tạo cơ sở dữ liệu
Đăng nhập vào tài khoản root
sudo -u postgres psql
Tạo cơ sở dữ liệu reactiveresume và tài khoản reactiveresumedb, tên cơ sở dữ liệu và tài khoản cũng như mật khẩu tùy bạn
create database reactiveresumedb;
create user reactiveresume with encrypted password 'password';
grant all privileges on database reactiveresumedb to reactiveresume;
exit;
Tạo tài khoản mới
Tiến hành tạo tài khoản mới, tránh sử dụng tài khoản hay ssh vào hệ thống.
sudo adduser reactiveresume
sudo usermod -aG sudo reactiveresume
Đăng nhập vào tài khoản đó
su - reactiveresume
Tiến hành cài đặt
Tải về phiên bản mới nhất
git clone https://github.com/AmruthPillai/Reactive-Resume
Đổi tên thư mục vừa tải về, dài quá (Reactive-Resume) mình đổi về rr cho dễ nhớ. Di chuyển vào thư mục đó
mv Reactive-Resume rr
cd rr
Tiến hành tải và cài các gói cần thiết
pnpm install
pnpm build
Copy tệp .env.example thành tệp .env, mở tệp .env và tiến hành điền các thông tin cần thiết.
cp .env.example .env
nano .env
Nội dung tệp .env
# Server + Client
TZ=UTC
PUBLIC_URL=http://localhost:3000
PUBLIC_SERVER_URL=http://localhost:3100
PUBLIC_GOOGLE_CLIENT_ID=
# Server + Database
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
# Server
SECRET_KEY=
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_SSL_CERT=
JWT_SECRET=
JWT_EXPIRY_TIME=604800
GOOGLE_CLIENT_SECRET=
GOOGLE_API_KEY=
MAIL_FROM_NAME=
MAIL_FROM_EMAIL=
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
STORAGE_BUCKET=
STORAGE_REGION=
STORAGE_ENDPOINT=
STORAGE_URL_PREFIX=
STORAGE_ACCESS_KEY=
STORAGE_SECRET_KEY=
PDF_DELETION_TIME=345600000
# Client
PUBLIC_FLAG_DISABLE_SIGNUPS=false
Trong đó các phần SECRET_KEY, PUBLIC_URL, PUBLIC_SERVER_URL, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD, JWT_SECRET là bắt buộc. (xem ở đây để biết rõ hơn).
Sửa phần POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD với thông tin Cơ sở dữ liệu đã tạo ở trên.
Phần PUBLIC_URL chúng ta điền tên miền để truy cập (reactiveresume.com).
Phần PUBLIC_SERVER_URL chúng ta điền tên miền làm API (reactiveresume-api.my.to).
Cài đặt Reactive Resume khởi động bằng systemd
Tạo file reactiveresume.service ở thư mục /etc/systemd/system/
sudo nano /etc/systemd/system/reactiveresume.service
và nhập vào nội dung như sau
[Unit]
Description=reactiveresume
After=network.target
[Service]
Environment=NODE_ENV=production
Type=simple
ExecStart=pnpm start
User=reactiveresume
Group=reactiveresume
WorkingDirectory=/home/reactiveresume/rr
Restart=on-failure
[Install]
WantedBy=multi-user.target
Làm cho systemd nhận cấu hình mới, tải lại và khởi động Reactive Resume.
sudo systemctl daemon-reload
sudo systemctl enable --now reactiveresume.service
sudo systemctl start reactiveresume.service
Kiểm tra hoạt động chưa
systemctl status reactiveresume.service
Chú này chạy khá là ngốn ram 🤣🤣🤣.
Cấu hình Nginx
Tạo file cấu hình cho Nginx với tên miền làm API (reactiveresume-api.com):
sudo nano /etc/nginx/sites-available/reactiveresume-api.com
Và nhập vào nội dung sau
server {
listen 80;
server_name reactiveresume-api.com;
return 301 https://$server_name$request_uri;
}
server {
server_name reactiveresume-api.com;
listen 443 ssl http2;
access_log /var/log/nginx/reactiveresume-api.access.log;
error_log /var/log/nginx/reactiveresume-api.error.log;
client_max_body_size 20M;
location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff|)$ {
access_log off;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public, mustrevalidate, proxy-revalidate";
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://localhost:3100;
proxy_redirect off;
proxy_buffering off;
}
location / {
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://localhost:3100;
proxy_redirect off;
proxy_buffering off;
}
ssl_certificate /etc/letsencrypt/live/reactiveresume-api.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reactiveresume-api.com/privkey.pem;
}
Tạo file cấu hình cho Nginx với tên miền để truy cập (reactiveresume.com)
sudo nano /etc/nginx/sites-available/reactiveresume.com
Và nhập vào nội dung sau
server {
listen 80;
server_name reactiveresume.com;
return 301 https://$server_name$request_uri;
}
server {
server_name reactiveresume.com;
listen 443 ssl http2;
access_log /var/log/nginx/reactiveresume.access.log;
error_log /var/log/nginx/reactiveresume.error.log;
client_max_body_size 20M;
location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff|)$ {
access_log off;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public, mustrevalidate, proxy-revalidate";
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_buffering off;
}
location / {
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_buffering off;
}
ssl_certificate /etc/letsencrypt/live/reactiveresume.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reactiveresume.com/privkey.pem;
}
Ánh xạ, kiểm tra cấu hình không lỗi thì khởi động lại Nginx
sudo ln -s /etc/nginx/sites-available/reactiveresume.com /etc/nginx/sites-enabled/reactiveresume.com
sudo ln -s /etc/nginx/sites-available/reactiveresume-api.com /etc/nginx/sites-enabled/reactiveresume-api.com
sudo nginx -t
sudo systemctl restart nginx
OK, giờ thì truy cập vào trang web và tạo CV của mình thôi. Chúc các bạn sớm tìm được công việc ưng ý 😁😁😁.
Mở rộng
Do mình sử dụng Reactive Resume cho mục đích cá nhân, nên sau khi tạo tài khoản của mình, thì mình khóa chức năng đăng ký đi. Để khóa thì sửa file .env phần PUBLIC_FLAG_DISABLE_SIGNUPS đổi false thành true. Lưu và khởi động lại Reactive Resume.