Câu lệnh docker đơn giản nhất để chạy Neo4j
sudo mkdir -p /opt/neo4j
openssl rand -base64 1024 | tr -dc 'A-Za-z0-9' | head -c 32 | sudo tee /opt/neo4j/passwd.txt
sudo docker rm -f neo4j
sudo docker run -d \
--name neo4j \
-e NEO4J_AUTH=neo4j/$(cat /opt/neo4j/passwd.txt) \
neo4j:community
Chúc mừng bạn đã cài đặt thành công Neo4j, bài học đến đây là kết thúc !
Để chạy được câu lệnh trên cần cài đặt Docker. Nếu đã cài đặt rồi thì bỏ qua. Nếu chưa biết cách cài đặt Docker, hãy chạy câu lệnh sau
source /etc/os-release
NAME=docker
GPG=https://download.docker.com/linux/$ID/gpg
REPO="https://download.docker.com/linux/$ID $VERSION_CODENAME stable"
curl -fsSL $GPG | sudo gpg --dearmor -o /etc/apt/keyrings/$NAME.gpg
cat << EOF | sudo tee /etc/apt/sources.list.d/$NAME.list
deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/$NAME.gpg] $REPO
EOF
sudo apt update
sudo apt install -y \
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker --version
Port 7474: Website giao diện frontend vẽ đồ thị sơ đồ mạng lưới các nút, giao thức HTTP
Port 7473: Cũng là website như port 7474, nhưng giao thức là HTTPS
Port 7687: Data giữa client và server được vận chuyển qua đây
Port 6000: Tạo cluster Neo4j, các node trong cluster tìm thấy nhau qua port này. Chức năng cluster chỉ có trên phiên bản Enterprise
Chạy lệnh sau để tìm địa chỉ IP của container
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
neo4j
Ví dụ IP của container là: 172.17.0.2. Mở trình duyệt web truy cập vào container qua địa chỉ: http://172.17.0.2:7474. Lấy mật khẩu đăng nhập website bằng câu lệnh
cat /opt/neo4j/passwd.txt
Ví dụ mật khẩu là: zcvI6TLPHrp9k69VZzjpyouqWguQDuS5. Username mặc định là neo4j
Sau khi đăng nhập, ghi thử một bản ghi "Hello World" vào database
Query bản ghi vừa tạo
Tool client CLI để kết nối với Neoj4 database có tên là cypher-shell. Tool này không có gói lẻ, phải download về toàn bộ gói cài đặt Neo4j. Chạy lệnh sau để cài đặt cypher-shell
source /etc/os-release
NAME=neo4j
GPG=https://debian.neo4j.com/neotechnology.gpg.key
REPO="https://debian.neo4j.com stable latest"
sudo rm -rf /etc/apt/keyrings/$NAME.gpg
curl -fsSL $GPG | sudo gpg --dearmor -o /etc/apt/keyrings/$NAME.gpg
cat << EOF | sudo tee /etc/apt/sources.list.d/$NAME.list
deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/$NAME.gpg] $REPO
EOF
sudo apt update
sudo apt install -y \
neo4j
cypher-shell --version
Dùng lệnh sau để truy cập vào database
cypher-shell \
-a bolt://172.17.0.2:7687 \
-u neo4j \
-p zcvI6TLPHrp9k69VZzjpyouqWguQDuS5
Query thử bản ghi "Hello World"
MATCH (n1)-[r]->(n2) RETURN r, n1, n2 LIMIT 25;
Thoát ra bằng lệnh :exit
Chúng ta sẽ triển khai bằng Docker compose để tăng tính ổn định cho Neo4j database.
Cài đặt Docker compose, bỏ qua bước này nếu bạn đã cài đặt Docker compose
export VER=2.29.6
sudo curl -SL \
-o /usr/bin/docker-compose \
"https://github.com/docker/compose/releases/download/v${VER}/docker-compose-linux-x86_64"
sudo chmod +x /usr/bin/docker-compose
docker-compose --version
sudo docker rm -f neo4j
cat << EOF | sudo tee /opt/neo4j/neo4j.yml
networks:
neo4j_net:
driver: bridge
services:
neo4j:
image: neo4j:community
container_name: neo4j
hostname: neo4j
networks:
- neo4j_net
volumes:
- /data/neo4j:/data:rw
- /dump/log/neo4j:/logs:rw
environment:
- NEO4J_AUTH=neo4j/$(cat /opt/neo4j/passwd.txt)
deploy:
resources:
limits:
memory: 1G
healthcheck:
test: /var/lib/neo4j/bin/cypher-shell -u neo4j -p $(cat /opt/neo4j/passwd.txt) --encryption false --fail-fast "RETURN 1" || exit 1
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
logging:
driver: json-file
options:
max-size: 10m
max-file: 3
restart: always
EOF
docker-compose -f /opt/neo4j/neo4j.yml -d
/data/neo4j : lưu trữ data lâu dài vào thư mục của máy host
/dump/log/neo4j: lưu trữ log lâu dài vào thư mục của máy host
memory: 1G : phòng tránh tràn bộ nhớ RAM
logging : phòng tránh tràn ổ đĩa do console log
healthcheck : không chỉ cho biết trạng thái của container mà còn kiểm tra app database trong container có thực sự sống tốt hay không. Định kỳ kiểm tra 10s/lần, quá 3 lần đánh dấu unhealthy thì docker khẳng định container này là unhealthy
restart: always : tự phục hồi khi gặp lỗi bằng cách tự restart
Chúng ta sẽ mã hóa SSL cho data port 7687, và chuyển HTTP sang HTTPS hoạt đổng ở port 7473 (bỏ đi port 7474).
Giả sử tên miền là quang.pro
export fqdn=quang.pro
Nguyên liệu cần có là bộ 3 file: cert.pem, privkey.pem, dhparam.pem. Lưu các file này vào thư mục /etc/tls/quang.pro
Chú ý: Neo4j cần các file SSL được phân quyền 777
Bỏ qua các bước tạo SSL nếu bạn đã có đủ các file trên.
Dùng certbot chạy bằng docker để lấy chứng chỉ miễn phí từ Letsencrypt.
Hãy đảm bảo rằng
Câu lệnh lấy chứng chỉ và lưu vào thư mục /etc/tls/quang.pro
sudo rm -rf /tmp/letsencrypt
mkdir -p /tmp/letsencrypt
sudo mkdir -p /etc/tls/$fqdn
sudo docker run -it --rm \
-v /tmp/letsencrypt:/etc/letsencrypt \
-p 80:80 \
certbot/certbot certonly \
--email no@thanks.com --agree-tos --no-eff-email \
--redirect --hsts \
--key-type ecdsa --elliptic-curve secp384r1 \
--force-renew -d $fqdn --cert-name $fqdn \
--standalone
sudo cp /tmp/letsencrypt/live/$fqdn/cert.pem /etc/tls/$fqdn/cert.pem
sudo cp /tmp/letsencrypt/live/$fqdn/privkey.pem /etc/tls/$fqdn/privkey.pem
sudo cp /tmp/letsencrypt/live/$fqdn/chain.pem /etc/tls/$fqdn/chain.pem
sudo chmod -R 777 /etc/tls/$fqdn
sudo openssl dhparam -out /etc/tls/$fqdn/dhparam.pem 2048
sudo chmod 777 /etc/tls/$fqdn/dhparam.pem
Cấu hình Docker compose với SSL. Mượn port 7374 và port 7687 của host để expose ra internet
cat << EOF | sudo tee /opt/neo4j/neo4j.yml
networks:
neo4j_net:
driver: bridge
services:
neo4j:
image: neo4j:community
container_name: neo4j
hostname: neo4j
networks:
- neo4j_net
volumes:
- /data/neo4j:/data:rw
- /dump/log/neo4j:/logs:rw
- /etc/tls/quang.pro:/etc/tls:ro
environment:
- NEO4J_AUTH=neo4j/$(cat /opt/neo4j/passwd.txt)
- NEO4J_server_https_enabled=true
- NEO4J_dbms_connector_bolt_tls__level=OPTIONAL
- NEO4J_dbms_ssl_policy_https_enabled=true
- NEO4J_dbms_ssl_policy_bolt_enabled=true
- NEO4J_dbms_connector_bolt_enabled=true
- NEO4J_dbms_connector_https_enabled=true
- NEO4J_dbms_ssl_policy_https_base__directory=/etc/tls
- NEO4J_dbms_ssl_policy_bolt_base__directory=/etc/tls
- NEO4J_dbms_ssl_policy_https_private__key=privkey.pem
- NEO4J_dbms_ssl_policy_bolt_private__key=privkey.pem
- NEO4J_dbms_ssl_policy_https_public__certificate=cert.pem
- NEO4J_dbms_ssl_policy_bolt_public__certificate=cert.pem
- NEO4J_dbms_ssl_policy_https_dh__param=dhparam.pem
- NEO4J_dbms_ssl_policy_bolt_dh__param=dhparam.pem
- NEO4J_dbms_ssl_policy_https_tls__versions=TLSv1.3
- NEO4J_dbms_ssl_policy_bolt_tls__versions=TLSv1.3
ports:
- 7473:7473
- 7687:7687
deploy:
resources:
limits:
memory: 1G
healthcheck:
test: /var/lib/neo4j/bin/cypher-shell -u neo4j -p $(cat /opt/neo4j/passwd.txt) --encryption false --fail-fast "RETURN 1" || exit 1
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
logging:
driver: json-file
options:
max-size: 10m
max-file: 3
restart: always
EOF
Dùng systemd để giúp Neo4j tự động khởi động cùng với hệ điều hành
cat << EOF | sudo tee /etc/systemd/system/neo4j_docker.service
[Unit]
Description=Neo4j Docker Compose Service
After=docker.service
Requires=docker.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/neo4j
ExecStop=/usr/bin/docker-compose -f /opt/neo4j/neo4j.yml down
ExecStart=/usr/bin/docker-compose -f /opt/neo4j/neo4j.yml up -d
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now neo4j_docker
Tạo tài khoản RAM Accesskey để truy cập Edge Object Storage (EOS)
Cài đặt Cluster Database MongoDB kiến trúc Replica Set bằng Docker Compose
quangnn - November 5, 2024
quangnn - November 5, 2024
Tran Phuc Hau - April 23, 2023
Regional Content Hub - November 4, 2024
Tran Phuc Hau - April 23, 2023
Nguyen Phuc Khang - June 4, 2024
Leverage cloud-native database solutions dedicated for FinTech.
Learn MoreMigrate your legacy Oracle databases to Alibaba Cloud to save on long-term costs and take advantage of improved scalability, reliability, robust security, high performance, and cloud-native features.
Learn MoreMigrating to fully managed cloud databases brings a host of benefits including scalability, reliability, and cost efficiency.
Learn MoreDBStack is an all-in-one database management platform provided by Alibaba Cloud.
Learn MoreMore Posts by quangnn