Lưu trữ danh mục: Small ERP

Server ubuntu RASPBERRY PI 4

Server Ubuntu Raspberry Pi 4
Nội dung

    Sau khi cấp nguồn Raspberry Pi, hãy đợi quá trình khởi động hoàn tất và bạn sẽ thấy thông báo sau trên cửa sổ.

    Ubuntu 20.04. LTS ubuntu tty1

    ubuntu login:

    Đăng nhập với người dùng mặc định. Thông tin đăng nhập mặc định là:

    login: ubuntu

    password: ubuntu

    Lần đầu tiên bạn đăng nhập, bạn sẽ được yêu cầu thay đổi mật khẩu này.

    Wifi

    Raspberry Pi 4 đã có sẵn thẻ WiFi phần cứng, Đầu tiên hãy xác định các giao diện trong hệ thống.

    sudo ls /sys/class/net

    eth0 lo wlan0

    Trong trường hợp của chúng tôi, chúng tôi có 1 thẻ WiFi và tên giao diện làwlan0.

    Mở tệp cấu hình Netplan bằng bất kỳ trình soạn thảo văn bản nào (nano, vim):

    sudo nano /etc/netplan/50-cloud-init.yaml
    network:
        ethernets:
            eth0:
                dhcp4: true
                optional: true
        wifis:
            wlan0:
                dhcp4: true
                access-points:
                    "WIFI SSID":
                        password: "WiFi Password"
        version: 2
    Sau đó lưu và đóng tệp.
    Để áp dụng netplan trong Ubuntu, hãy thực thi:
    sudo netplan --debug try
    sudo netplan --debug generate
    sudo netplan --debug apply
    Và khởi động lại bằng lệnh: sudo reboot
    Sau khi khởi động lại, Raspberry Pi của bạn với Ubuntu đã cài đặt sẽ tự động kết nối với điểm truy cập WiFi của bạn.

    Update

    Nếu bạn muốn tải phiên bản phần mềm mới nhất: sudo apt-get update

    sudo apt-get upgrade

    sudo apt update

    sudo apt full-upgrade

    sudo apt autoremove

    OpenSSH

    sudo apt install openssh-server && sudo ufw enable openssh && sudo ufw reload

    sudo service ssh enable

    sudo service ssh start

    Sử dụng ứng dụng PuTTYgen client trên windows

    ssh -p 22 pi@raspberypi.local

    Command

    MỘT SỐ LỆNH THÔNG DỤNG TRONG LINUX

    1.ls -lah /abc Liệt kê chi tiết tất cả thư mục, file con trong /abc

    2.cd /abc Chuyển đến thư mục /abc

    3.cat /xyz.123 Đọc nội dung file xyz.123

    4.nano /xyz.123 Sửa nội dung file xyz.123

    5.sudo <command> Thực thi <command> với quyền root

    6.cp /xyz.123/abc/ Copy file xyz.123 đến thư mục /abc

    7.mv /xyz.123 /abc/ Chuyển file xyz.123 đến /abc/

    8.wget http://konnected.vn/index.html -o xyz.123 Tải file từ liên kết http://konnected.vn/index.html và lưu thành xyz.123

    9.bash /abc/xyz.sh Chạy đoạn mã xyz.sh tại /abc/ bằng trình biên dịch bash

    10.sudo apt-get update Sử dụng quyền root để cập nhật danh sách phần mềm

    11.sudo apt-get upgrade Sử dụng quyền root để cập nhật tất cả phần mềm

    12. unzip archive_file.zip -d /target/folder/destination

    Cách thực hiện trích xuất một phần cho các tệp hoặc thư mục cụ thể: unzip file_archive.zip file1.txt

    Mở cổng port firewall

    sudo ufw app list

    sudo ufw allow http
    sudo ufw allow https

    sudo ufw deny 25

    sudo ufw status

    sudo ufw status numbered

    sudo ufw delete 5

    NoIP

    Bạn có thể trở thành người dùng root từ dòng lệnh bằng cách nhập “sudo -s” theo sau là mật khẩu root trên máy của bạn.

    1. cd /usr/local/src/
    2. wget http://www.noip.com/client/linux/noip-duc-linux.tar.gz
    3. tar xf noip-duc-linux.tar.gz
    4. sudo apt-get update
    5. sudo apt-get -y install make (-y= answer ‘yes’ to any prompts)
    6. Check the installed version: make -v
    7. cd noip-2.1.9-1/
    8. make install

    Sau đó, bạn sẽ được nhắc đăng nhập bằng tên người dùng và mật khẩu tài khoản No-IP của mình.

    Auto configuration for Linux client of no-ip.com.

    Multiple network devices have been detected.

    Please select the Internet interface from this list.

    By typing the number associated with it.
    0 eth0
    1 tun0
    0
    Please enter the login/email string for no-ip.com ########@gmail.com
    Please enter the password for user ‘########@gmail.com’ ************

    3 hosts are registered to this account.
    Do you wish to have them all updated?[N] (y/N) y
    Please enter an update interval:[30] 30
    Do you wish to run something at successful update?[N] (y/N) y
    Please enter the script/program name /mnt/dietpi_userdata/wan-ip-update.sh

    New configuration file ‘/usr/local/etc/no-ip2.conf’ created.

    Press any key to continue…

    Nếu bạn nhận được thông báo “không tìm thấy” hoặc “thiếu gcc” thì bạn không có công cụ biên dịch gcc trên máy của mình. Bạn sẽ cần cài đặt chúng để tiếp tục. Với quyền root một lần nữa (hoặc với Sudo), hãy đưa ra lệnh bên dưới:

    /usr/local/bin/noip2 -C

    Sau đó, bạn sẽ được nhắc nhập tên người dùng và mật khẩu No-IP, cũng như tên máy chủ bạn muốn cập nhật. Hãy cẩn thận, một trong những câu hỏi là “Bạn có muốn cập nhật TẤT CẢ máy chủ không.” Nếu trả lời sai, điều này có thể ảnh hưởng đến tên máy chủ trong tài khoản của bạn đang trỏ đến các vị trí khác.

    Giờ đây, ứng dụng khách đã được cài đặt và định cấu hình, bạn chỉ cần khởi chạy nó. Chỉ cần đưa ra lệnh cuối cùng này để khởi chạy ứng dụng khách trong nền:

    /usr/local/bin/noip2

    sudo nano /etc/systemd/system/noip2.service
    [Unit]
    Description=noip2 service
    
    [Service]
    Type=forking
    ExecStart=/usr/local/bin/noip2
    Restart=always
    
    [Install]
    WantedBy=default.target

    sudo systemctl daemon-reload
    sudo systemctl status noip2
    sudo systemctl start noip2

    Chạy ứng dụng khách khi khởi động

    systemctl enable noip2.service (start on boot)

    Quản lý usb

    Trước khi có thể định dạng ổ USB, bạn phải tìm đúng thiết bị. Cắm USB của bạn vào cổng mong muốn và chạy lệnh lsblkđể tìm ra tên thiết bị cho ổ đĩa của bạn. ls /dev/sd*

    Định dạng USB mới.

    Quy trình bao gồm ba bước:

    1. Xác định vị trí ổ USB. lsblk -f ta thấy FSTYPE không có thông tin gì hết => usb chưa định dạng (bỏ qua bước 2).

    2. Ngắt kết nối và định dạng ổ USB. sudo umount /dev/[device_name]

    3. Tùy thuộc vào hệ thống tệp ưa thích của bạn, hãy chọn một trong các lệnh sau:

    FAT32 : sudo mkfs.vfat /dev/[device_name]

    NTFS : sudo mkfs.ntfs /dev/[device_name]

    exFAT : sudo mkfs.exfat /dev/[device_name]

    sudo mkfs.ext4 /dev/sdb

    ext4 có tốc độ lên tới 130MB/giây. Trong khi đó, FAT32 hoặc NTFS sẽ chậm hơn, vì vậy hãy sử dụng ext4 nếu bạn không cần khả năng tương thích với Windows. Nếu bạn muốn khả năng tương tác tối đa giữa Ms, OS X và Linux thì bạn nên sử dụng exfat vì nó không chỉ có thể xử lý được khối lượng lưu trữ lớn hơn mà còn có khả năng tương tác tốt nhất giữa các hệ điều hành hiện đại ngày nay. Cấp quyền sudo chown www-data:www-data /media/usb

    Tạo điểm gắn kết

    sudo  mkdir /media/usb
    sudo mount /dev/sdb1 /media/usb

    Ngắt kết nối:

    sudo umount /media/usb

    Để khắc phục lỗi umount target is busy, một cách bài bản là umount -l. Nó ngắt kết nối điểm gắn kết khỏi hệ thống tập tin Linux. Để loại bỏ dần dần tất cả các tiến trình được gắn vào thiết bị (không được sử dụng), bạn có thể sử dụng giải pháp này.

    Tiếp theo, bạn sẽ phải ngắt kết nối phân vùng USB. Chúng tôi sẽ giả định tên thiết bị là/ dev / sdbvà phân vùng đĩa/ dev / sdb1cho phần còn lại của hướng dẫn này. sudo umount /dev/sdb1

    Bạn cũng có thể tự động gắn các thiết bị USB trên Ubuntu Server

    sudo apt-get update && sudo apt-get upgrade

    cài đặt USBmount :

    sudo apt-get install usbmount

    gắn tất cả các ổ USB vào/media/usb*(usb0, usb1, usb2 …)

    Để xác minh xem ổ USB đã được gắn chính xác hay chưa, bạn có thể sử dụngdf -h để xem tất cả các ổ có sẵn và các điểm gắn tương ứng của chúng

    Để hủy gắn ổ đĩa, bạn có thể sử dụng umount.

    sudo umount /media/usb0

    Tự động gắn ổ đĩa ngoài USB

    xác định đĩa: sudo fdisk -l

    Tạo điểm gắn kết: sudo mkdir /home/your_ubuntu_user/Public/HDD # Bạn có thể đặt bất kỳ tên nào bằng cách thay đổi HDD

    Sử dụng lệnh sau để lấy UUID của tất cả các thiết bị lưu trữ được cắm vào hệ thống của bạn.
    # sudo blkid

    Ví dụ: /dev/sdX: UUID= “1234-5678-90ab-cdef” TYPE= “ext4”
    Sau khi xác định được số của UUID, hãy chỉnh sửa tệp sudo nano /etc/fstab và thêm dòng sau:
    UUID=17c1210c /media/usb exfat defaults 0 0

    Ví dụ: UUID=uuid-đĩa-của-bạn /home/your_ubuntu_user/Public/HDD ext4 defaults 0 0

    Gắn ổ đĩa: sudo mount -a

    Tất nhiên, hãy thay thế UUID mẫu bằng UUID của riêng bạn và bạn cũng có thể sử dụng một thư mục khác ngoài /media/usb mà bạn muốn gắn phân vùng ở nơi khác. Thiết bị USB của bạn bây giờ sẽ tự động gắn kết khi khởi động (giả sử nó được cắm vào). Nếu không, chỉ cần chạy lệnh sau để gắn kết bất kỳ lúc nào: mount -a

    Lưu ý: lúc khởi động không có thiết bị này kết nối thì hệ thống không login vô được, chuyển qua chế độ bảo trì. Nên tự gắn kết nối bằng systemd.

    Gắn hệ thống tập tin cục bộ
    Tạo tệp systemd “/etc/systemd/system/mnt-data.mount”. Tên tệp đơn vị phải phản ánh đến đường dẫn điểm gắn kết. Ví dụ: đường dẫn “/mnt/data” có tên tệp đơn vị “mnt-data.mount” (Bắt buộc mới chạy được).

    [Unit]
    Description = mount /dev/sda to /mnt/data

    [Mount]
    What = /dev/sda
    Where = /mnt/data
    Type = ext4
    Options = defaults

    [Install]
    WantedBy = local-fs.target

    systemctl start mnt-data.mount

    systemctl status mnt-data.mount

    df -h

    Gắn hệ thống tập tin mạng (NFS)
    /etc/systemd/system/mnt-nfs.mount

    [Unit]
    Description = Mount NFS volume

    [Mount]
    What = m900:/mnt/data
    Where = /mnt/nfs
    Type = nfs
    Options = defaults

    [Install]
    WantedBy = multi-user.target
    with automount (for mnt-nfs.mount)
    /etc/systemd/system/mnt-nfs.automount

    [Unit]
    Description = Auto mount NFS volume

    [Automount]
    Where = /mnt/nfs

    [Install]
    WantedBy = multi-user.target

    automount không tự động gắn kết khi khởi động, nó gắn kết hệ thống tập tin khi điểm gắn kết được truy cập. Trước tiên, bạn cần tạo tệp đơn vị gắn kết.
    Đối với mỗi tệp đơn vị gắn kết tự động, phải có một tệp đơn vị gắn kết phù hợp (xem https://hackmd.io/@yujungcheng/BJ8ezKAQ6) được kích hoạt khi truy cập đường dẫn gắn kết tự động.

    Dùng HỆ ĐIỀU HÀNH RASPBIAN 64bit

    Dùng IO này thì máy thấy quá nóng!

    https://konnected.vn/tech/khoi-dong-boot-pi4b-tu-usb-ssd-2020-06-08

    Update Raspberry Pi Firmware

    https://www.freva.com/raspberry-pi-firmware-update/

    Mở Raspberry Pi Imager.

    Nhấp vào nút bên trái “CHOOSE OS” để chọn công cụ chúng tôi sẽ cài đặt để cập nhật chương trình cơ sở.
    Cuộn xuống và nhấp vào “Misc utility images >”, trong menu tiếp theo, nhấp vào “Bootloader >”. Và trong menu cuối cùng, bạn có thể chọn giữa 3 loại khởi động:
    – Khởi động bằng thẻ SD: Khởi động ‘cổ điển’: Raspberry Pi của bạn khởi động từ thẻ SD
    – Khởi động qua USB: Nếu bạn muốn khởi động từ ổ SSD được kết nối với USB- cổng chẳng hạn
    – Network Boot : Để khởi động từ máy chủ từ xa qua mạng của bạn

    Bây giờ hãy nhấp vào nút giữa “CHOOSE STORAGE” để chọn thẻ SD của bạn. Khi quá trình ghi kết thúc, bạn có thể tháo thẻ SD khỏi PC và lắp nó vào Raspberry Pi. Kết nối màn hình với cổng HDMI. Và cuối cùng, cắm cáp nguồn vào đầu nối USB-C trên bo mạch của bạn. Bây giờ bạn chỉ cần đợi khoảng 10 giây cho đến khi màn hình của bạn chuyển sang màu xanh hoàn toàn. Màu xanh lá cây có nghĩa là cập nhật bootloader đã thành công. Bây giờ bạn có thể tháo cáp nguồn và thẻ SD. Trong lần khởi động tiếp theo, chương trình cơ sở mới nhất sẽ được cài đặt trên bo mạch của bạn.

    Quản lý user

    Liệt kệ user: sudo -l

    Thay đổi password: sudo passwd root

    Truy cập user: su – username

    thoát user: exit

    Gán quyền truy cập: sudo chmod 755 /etc/systemd/system/odoo.service
    Xem tiến trình chạy: htop
    

    Cài odoo 12 trên ubuntu

    Chỉ thấy ubuntu 20 mới sử dụng python phù hợp cho odoo12. Cài PostegreSQL qua câu lệnh: sudo apt-get install postgresql -y.

    Chuyển qua quyền root: sudo -su

    Cài đặt kho lưu trữ Odoo và tiến hành cài đặt:

    $ wget -O – https://nightly.odoo.com/odoo.key | apt-key add –

    $ echo “deb http://nightly.odoo.com/12.0/nightly/deb/ ./” >> /etc/apt/sources.list.d/odoo.list

    exit

    sudo apt-get install odoo -y

    Wkhtmltopdf là một phần mềm tùy chọn cho phép Odoo tạo bản in ở định dạng PDF. Mặc dù nó không phải là một yêu cầu thiết yếu cho hoạt động chính xác của Odoo, nhưng nên cài đặt nó, bởi vì sớm hay muộn chắc chắn sẽ cần phải in, như trong trường hợp hóa đơn được in.

    sudo apt-get install wkhtmltopdf sudo nano /etc/odoo/odoo.conf cập nhật thư mục chứa addon: addons_path = /opt/odoo12/odoo/addons,/opt/odoo12/odoo-addons khởi động lại dịch vụ Odoo: sudo /etc/init.d/odoo restart sudo systemctl daemon-reload sudo systemctl start odoo (for running always odoo12 on the startup service) sudo service odoo start (for running odoo12 manualy, service stop automatic while restart) sudo service odoo status (check log status service odoo) sudo service odoo stop (stop service odoo12) sudo service odoo restart (restart service odoo12) Nên thêm những modules python yêu cầu của odoo: pip3 install wheel pip3 install -r odoo12/odoo/requirements.txt sudo python -m pip install html2text sudo systemctl restart odoo sudo journalctl -u odoo

    Bật đa xử lý

    Theo mặc định, Odoo đang hoạt động ở chế độ đa luồng. Để triển khai sản xuất, nên thay đổi sang máy chủ đa xử lý vì nó làm tăng tính ổn định và sử dụng tài nguyên hệ thống tốt hơn.

    Để kích hoạt đa xử lý, bạn cần chỉnh sửa cấu hình Odoo và đặt số lượng quy trình thợ không bằng không. Số lượng thợ được tính dựa trên số lõi CPU trong hệ thống và bộ nhớ RAM khả dụng.

    Theotài liệu chính thức của Odoo, để tính toán số lượng công nhân và kích thướcbộ nhớ RAMcần thiết, bạn có thể sử dụng các công thức và giả định sau:

    Tính toán số lượng công nhân

    • Số lượng công nhân tối đa lý thuyết = (system_cpus * 2) + 1
    • 1 worker có thể phục vụ ~= 6 người dùng đồng thời
    • Công nhân Cron cũng yêu cầu CPU

    Tính toán kích thước bộ nhớ RAM

    • Chúng tôi sẽ xem xét rằng 20% tất cả các yêu cầu là yêu cầu nặng và 80% là yêu cầu nhẹ hơn. Các yêu cầu nặng đang sử dụng khoảng 1 GB RAM trong khi các yêu cầu nhẹ hơn đang sử dụng khoảng 150 MB RAM
    • RAM cần thiết =number_of_workers * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )

    Nếu bạn không biết mình có bao nhiêu CPU trên hệ thống của mình, hãy sử dụng lệnhgrepsau: grep -c ^processor /proc/cpuinfo

    Giả sử bạn có một hệ thống với 4 lõi CPU, bộ nhớ RAM 8 GB và 30 người dùng Odoo đồng thời.

    • 30 users / 6 = **5**(5 là số lượng công nhân lý thuyết cần thiết)
    • (4 * 2) + 1 = **9**( 9 là số lượng công nhân tối đa theo lý thuyết)

    Dựa trên cách tính trên, bạn có thể sử dụng 5 công nhân + 1 công nhân cho công nhân cron là tổng cộng 6 công nhân.

    Tính toán mức tiêu thụ bộ nhớ RAM dựa trên số lượng công nhân:

    • RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM

    Tính toán cho thấy cài đặt Odoo sẽ cần khoảng 2GB RAM.

    Để chuyển sang chế độ đa xử lý, hãy mở tệp cấu hình và nối thêm các giá trị được tính toán:

    limit_memory_hard = 2684354560
    limit_memory_soft = 2147483648
    limit_request = 8192
    limit_time_cpu = 600
    limit_time_real = 1200
    max_cron_threads = 1
    workers = 5

    Khởi động lại dịch vụ Odoo để các thay đổi có hiệu lực: sudo systemctl restart odoo

    Cài đặt Nginx

    sudo apt install nginx

    sudo systemctl status nginx

    sudo ufw allow ‘Nginx Full’

    sudo nano /etc/nginx/sites-enabled/example.com.conf

    # Odoo servers
    upstream odoo {
     server 127.0.0.1:8069;
    }
    
    upstream odoochat {
     server 127.0.0.1:8072;
    }
    
    # HTTP -> HTTPS
    server {
        listen 80;
        server_name www.example.com example.com;
    
        include snippets/letsencrypt.conf;
        return 301 https://example.com$request_uri;
    }
    
    # WWW -> NON WWW
    server {
        listen 443 ssl http2;
        server_name www.example.com;
    
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
        include snippets/ssl.conf;
        include snippets/letsencrypt.conf;
    
        return 301 https://example.com$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name example.com;
    
        proxy_read_timeout 720s;
        proxy_connect_timeout 720s;
        proxy_send_timeout 720s;
    
        # Proxy headers
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    
        # SSL parameters
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
        include snippets/ssl.conf;
        include snippets/letsencrypt.conf;
    
        # log files
        access_log /var/log/nginx/odoo.access.log;
        error_log /var/log/nginx/odoo.error.log;
    
        # Handle longpoll requests
        location /longpolling {
            proxy_pass http://odoochat;
        }
    
        # Handle / requests
        location / {
           proxy_redirect off;
           proxy_pass http://odoo;
        }
    
        # Cache static files
        location ~* /web/static/ {
            proxy_cache_valid 200 90m;
            proxy_buffering on;
            expires 864000;
            proxy_pass http://odoo;
        }
    
        # Gzip
        gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
        gzip on;
    }
    

    sudo systemctl restart nginx

    Cấu hình lại ngôn ngữ trong Raspberry Pi

    Chỉnh sửa /etc/locale.gen và bỏ chú thích dòng bằng en_US.UTF-8 ví dụ sudo nano /etc/locale.gen
    bỏ chú thích dòng bằng cách xóa phần đầu #

    Chạy sudo locale-gen en_US.UTF-8

    Chạy sudo update-locale en_US.UTF-8

    Thêm font unicode

    Font chữTimes New Romanlà font tiêu chuẩn mà bất cứ văn bản nào đều sử dụng: từ văn phòng, hành chính, các công ty, siêu thị, shop đều sử dụng. sudo apt update
    sudo apt install ttf-mscorefonts-installer Chọn OK, rồi Yes.

    Sau đó, update font lên hệ thống sudo fc-cache -f -v

    Download and uncompress in /path/to/your/python/site-packages/reportlab/fonts these file

    http://www.reportlab.com/ftp/fonts/pfbfer.zip

    Restart server and try

    Chuyển thẻ nhớ sang ssd

    https://beebom.com/how-clone-raspberry-pi-sd-card-windows-linux-macos/

    Windows thì dùng Win32DiskImager. Linux và Mac dùng câu lệnh.

    saochép hoặc sao lưuthẻ micro SD Raspberry Pi vào một tệp hình ảnh vàkhôi phụchình ảnh sau khi chúng tôi thử nghiệm xong. Lưu ý: Phương pháp này sẽ tạo một tệp hình ảnh có kích thước chính xác bằng tổng dung lượng của thẻ SD. Ví dụ: nếu bạn có thẻ SD 16 GB, thì tệp hình ảnh thu được cũng sẽ là 16 GB, bất kể cài đặt của bạn đang thực sự sử dụng bao nhiêu dung lượng.Có một phương pháp để thu nhỏ kích thước hình ảnh, nhưng phương pháp này chỉ hoạt động trên Linux.

    Windows

    Sao lưu thẻ SD Raspberry Pi

    1.Lắp thẻ micro SD mà bạn muốn sao chép vào PC bằng USB hoặc đầu đọc thẻ tích hợp. 2.Tải xuốngvà cài đặt Win32DiskImager rồi chạy nó.3.Trong phầnThiết bịở góc trên cùng bên phải,hãy chọn ổ đĩa thẻ SD của bạn. Đó làD:trong trường hợp của tôi. Bây giờ hãy nhấp vào biểu tượng thư mục ở bên trái của nó, rồichọn vị trí và tên tệpnơi tệp hình ảnh sẽ được lưu. Tôi đã chọn tên tệpraspbian_backup_19_oct.img. Bạn có thể chọn bất kỳ tên tệp nào bạn thích, nhưng tốt hơn là nên có.imgphần mở rộng. Sau khi hoàn tất, nhấp vào nútĐọc.

    Server ubuntu RASPBERRY PI 4

    4.Điều này sẽ tạo một bản sao của thẻ SD ở vị trí bạn đã chỉ định. Quá trình sao chépsẽ mất một lúcđể hoàn thành, vì vậy đừng tắt hoặc đặt PC của bạn ở chế độ ngủ trong khoảng thời gian này. Sau khi hoàn tất, bạn sẽ nhận được thông báo “Đã đọc thành công”.

    Giờ đây, bạn có thể tự do lắp lại thẻ vào Raspberry Pi của mình và phá vỡ mọi thứ hoặc cài đặt một bản phân phối mới. Sau khi chơi xong và muốn khôi phục ảnh đã sao lưu, hãy làm theo các bước trong phần tiếp theo.

    Khôi phục thẻ SD Raspberry Pi

    Lắp thẻ micro SD vào PC của bạn và mở Win32DiskImager.Chọn tệp hình ảnhbạn đã tạo trước đó vàổ đĩathích hợp trong phầnThiết bị. Bây giờ, bấm vào nútViết. Hình ảnh sẽ được lưu vào thẻ SD, chính xác như thế nào, tại thời điểm bạn sao chép nó.

    Server ubuntu RASPBERRY PI 4

    Một lần nữa, quá trình này sẽ mất một lúc tùy thuộc vào kích thước của thẻ SD. Khi quá trình khôi phục hoàn tất, bạn có thể tháo thẻ khỏi PC và lắp lại vào Raspberry Pi.

    Hướng dẫn Linux

    Sao lưu thẻ SD Raspberry Pi

    1.Lắp thẻ SD vào PC của bạn bằng USB hoặc đầu đọc thẻ tích hợp. Bây giờ hãy mở cửa sổTerminalvà nhập lệnhsudo fdisk -l. Điều này sẽ liệt kê tất cả các hệ thống tập tin có trên hệ thống của bạn.

    2.Cố gắng tìmtên thiết bịtrên thẻ SD của bạn. Tôi có thẻ SD 16 GB, vì vậy nó dễ dàng được xác định là thiết bị/dev/sdbcó kích thước 14,9 GB. Điều này là do dung lượng lưu trữ thực tế trên thiết bị luôn thấp hơn một chút so với quảng cáo.Ghi lại tên thiết bị này.

    Server ubuntu RASPBERRY PI 4

    3.Sử dụngddlệnh để ghi hình ảnh vào đĩa cứng của bạn. Ví dụ: sudo dd if=/dev/sdb of=~/raspbian_backup.img

    Ở đây, tham sốif(tệp đầu vào) chỉ định tệp cần sao chép. Trong trường hợp của tôi, đó/dev/sdblà tên thiết bị của thẻ SD của tôi. Thay thế nó bằng tên thiết bị của bạn. Tham sốof(tệp đầu ra) chỉ định tên tệp để ghi vào. Tôi đã chọnraspbian_backup.imgtrong thư mục nhà của tôi.

    Lưu ý:Hãy cẩn thận và kiểm tra kỹ các tham số trước khi thực hiệnddlệnh, vì nhập sai tham số ở đây có khả năng phá hủy dữ liệu trên ổ đĩa của bạn.

    Bạn sẽ không thấy bất kỳ đầu ra nào từ lệnh cho đến khi quá trình sao chép hoàn tất và quá trình này có thể mất một lúc, tùy thuộc vào kích thước thẻ SD của bạn. Sau khi hoàn thành, bạn sẽ thấy một đầu ra như sau.

    Server ubuntu RASPBERRY PI 4

    Bây giờ bạn có thể tháo thẻ SD và sử dụng nó trong Pi của mình. Khi bạn đã sẵn sàng khôi phục ảnh đã sao lưu, hãy làm theo hướng dẫn bên dưới:

    Khôi phục thẻ SD Raspberry Pi

    1.Lắp thẻ SD vào PC của bạn. Trước khi chúng tôi khôi phục hình ảnh, điều quan trọng là đảm bảo rằng các phân vùng của thẻ SD không đượcđếm. Để xác minh điều này, hãy mởTerminalvà thực hiện lệnhsudo mount | grep sdb. Tại đây, hãy thay thếsdbbằng tên thiết bị của thẻ SD của bạn.

    Nếu bạn thấy đầu ra trống, bạn không cần phải làm gì cả. Nếu bạn thấy một số phân vùng được gắn kết,hãy ngắt kết nốinhững phân vùng được liệt kê. Ví dụ:

    sudo umount /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
    2. Sử dụng lệnh dd để ghi tệp hình ảnh vào thẻ SD: Sudo dd if=~/raspbian_backup.img of=/dev/sdb
    Đây giống như lệnh chúng tôi đã sử dụng để tạo một bản sao, nhưng đảo ngược . Lần này, tệp đầu vào if là hình ảnh sao lưu, trong khi tệp đầu ra of là thiết bị thẻ SD.
    
    Một lần nữa, xác minh và xác minh lại các tham số tại đây , vì nhập sai lệnh tại đây sẽ gây mất dữ liệu vĩnh viễn.
    Sau khi ghi xong, bạn sẽ thấy xác nhận từ dd. Sau đó, bạn có thể tháo thẻ khỏi PC và lắp lại vào Raspberry Pi.
    
    hướng dẫn macOS
    Sao lưu thẻ SD Raspberry Pi
    1. Lắp thẻ SD vào máy Mac của bạn bằng USB hoặc đầu đọc thẻ tích hợp. Bây giờ hãy mở cửa sổ Terminal và nhập lệnh  diskutil list. Cố gắng xác định ID thiết bị của thẻ SD của bạn. Ví dụ: của tôi hiển thị dưới dạng /dev/disk3.
    
    Server ubuntu RASPBERRY PI 4

    2.Tháo thẻ SD của bạn: diskutil unmountDisk /dev/disk3

    Tại đây, hãy thay thếdisk3bằng tên thẻ SD mà bạn đã xác định ở bước 1.

    3.Sử dụngddlệnh để ghi hình ảnh vào đĩa cứng của bạn. Ví dụ:

    sudo dd if=/dev/disk3 of=~/raspbian_backup.img

    Ở đây,iftham số (tệp đầu vào) chỉ định tệp cần sao chép. Trong trường hợp của tôi, đó/dev/disk3là tên thiết bị của thẻ SD của tôi. Thay thế nó bằng tên thiết bị của bạn. Thamofsố (tệp đầu ra) chỉ định tên tệp để ghi vào. Tôi đã chọnraspbian_backup.imgtrong thư mục nhà của tôi.

    Lưu ý: Hãy cẩn thận và kiểm tra kỹ các tham số trước khi thực hiện dd lệnh, vì nhập sai tham số ở đây có khả năng phá hủy dữ liệu trên ổ đĩa của bạn.

    Bạn sẽ không thấy bất kỳ đầu ra nào từ lệnh cho đến khi quá trình sao chép hoàn tất và quá trình này có thể mất một lúc, tùy thuộc vào kích thước thẻ SD của bạn. Sau đó, bạn có thể tháo thẻ SD và sử dụng nó trong Pi của mình. Khi bạn đã sẵn sàng khôi phục ảnh đã sao lưu, hãy làm theo hướng dẫn bên dưới:

    Lưu ý điện áp cấp cho ssd sẽ không chạy được.

    Boot Ubuntu Server 22.04 LTS from USB SSD on Raspberry Pi 4

    Boot Raspberry Pi 4 từ SSD

    Khởi động Raspberry Pi của bạn bằng SSD rất được khuyến khích vì nó nhanh hơn và đáng tin cậy hơn nhiều so với thẻ nhớ microSD. Bạn có thể sử dụng bất kỳ ổ SSD ngoài nào có sẵn trên thị trường. Điều này bao gồm SSD M.2, SATA và NVMe/PCIe.

    Chuẩn bị thẻ nhớ dung lượng thấp để nạp thiết lập boot usb.

    Nhấp vào nútChoose OSvà sau đó nhấp vàoMisc Utility Images>Bootloader>USBBoot

    Phần mềm Raspberry Pi Imager tự download nạp vào thẻ. Xong tháo thẻ gắn vào máy.

    1. Kết nối nguồn điện với Raspberry Pi để bật nó lên. Pi sẽ tự động đọc và flash bộ nạp khởi động USB từ thẻ nhớ microSD được kết nối. Quá trình này mất vài giây.
    2. Khi đèn flash thành công, đèn LED màu xanh lá cây trên Raspberry Pi bắt đầu nhấp nháy đều đặn. Để xác nhận thêm, hãy kết nối cổng HDMI với màn hình. Nếu màn hình hiển thị màn hình màu xanh lá cây, điều đó cho biết quá trình flash đã hoàn tất.
    3. Tắt Raspberry Pi và ngắt kết nối hoặc tháo thẻ nhớ microSD.

    Để khởi động Raspberry Pi Zero, Raspberry Pi 3, Raspberry Pi 4 hoặc Raspberry Pi 400 qua SSD, bạn phải cài đặt hệ điều hành, chẳng hạn như Raspberry Pi OS trên SSD bằng cách sử dụng Raspberry Pi Imager (hoặc công cụ Balena Etcher). Sau khi viết HĐH, bạn có thể kết nối SSD với Raspberry Pi thông qua cổng USB và khởi động HĐH từ SSD.

    Sử dụng SSD làm bộ lưu trữ cho Raspberry Pi

    Sau khi khởi động hệ điều hành từ ổ SSD ngoài, bạn có thể sử dụng không gian còn lại trong SSD làm bộ lưu trữ vĩnh viễn để lưu trữ dữ liệu khác. Để kiểm tra dung lượng lưu trữ khả dụng, hãy chạy lệnh sau trong ứng dụng Terminal.

    df -h
    Hiện nay OS rasp là chạy trên ssd được.
    https://computingforgeeks.com/how-to-install-odoo-on-debian-linux/

    Xây dựng cloud server cho cá nhân

    Image
    Nội dung

      Lưu trữ đám mây là dữ liệu của bạn được lưu trữ trên các máy chủ từ xa bởi một công ty vô danh mà bạn phải tin tưởng để trao quyền riêng tư và bảo mật của các tài liệu và ảnh quý giá của mình.

      Tuy nhiên, có một tùy chọn khác: Host file của bạn trên máy chủ đám mây của riêng bạn, chạy trên máy tính ở nhà hoặc văn phòng do bạn sở hữu. Một trong những dịch vụ phổ biến nhất để đạt được điều này là Nextcloud.

      Cài mới lại Nextcloud, thì client bắt buộc phải xóa tài khoản trên app trên máy nếu muốn giữ lại file đang tồn tại!

      Xem tài liệu: https://docs.nextcloud.com/server/latest/Nextcloud_Server_Administration_Manual.pdf

      Cài trực tiếp lên máy

      Để Next Cloud chạy thành công, chúng ta cần cài đặt PHP và các phần phụ thuộc khác. Để đạt được điều này, hãy thực hiện lệnh:

      sudo apt update -y
      sudo apt upgrade -y
      # Install nginx & PHP
      sudo apt install -y nginx php8.2
      sudo apt-get install -y php8.2-{fpm,cgi,mysql,curl,xsl,gd,common,xml,zip,xsl,soap,bcmath,mbstring,gettext,imagick,sqlite3,intl}
      sudo nano /etc/nginx/sites-available/default
      # Add the following / update the file to contain it:
      # location ~ \.php$ {
      # include snippets/fastcgi-php.conf;
      # fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
      # }
      # Install MariaDB
      sudo apt install -y mariadb-server
      sudo mariadb-secure-installation
      sudo systemctl start mariadb
      sudo systemctl enable mariadb
      # Install Certbot
      sudo apt install -y certbot python3-certbot-nginx
      sudo certbot –nginx -d mydomain.com
      # Restart nginx
      sudo systemctl restart nginx
      sudo systemctl enable nginx

      Cài toàn bộ php và thư viện php: apt install php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-intl php-curl php-xml php-mbstring php-bcmath php-gmp

      Để xác minh phiên bản PHP bạn đã cài đặt, hãy chạy lệnh: php -v
      Xóa apche2 có sẳn trên debian12: sudo apt purge apache2 apache2-utils
      sudo apt remove apache2 apache2-utils
      Tìm các thư mục: whereis apache2
      Thực hiện xóa sudo rm -r <apache2 file location>
      sau đó kiểm tra lại lần nữa, không còn thư mục coi như xong.
      Để xem thông tin: php --ini

      Cần điều chỉnh php: nano /etc/php/8.2/fpm/php.ini

      max_execution_time = 300
      memory_limit = 512M
      post_max_size = 128M
      upload_max_filesize = 128M

      khởi dộng lại: systemctl restart php8.2-fpm

      Sau khi cài đặt hoàn tất, đăng nhập vào MySQL nếu không có mysql thì cài MariaDB database server.

      apt install mariadb-server mariadb-client

      systemctl status mariadb

      mysql_secure_installation

      – Set root password? [Y/n] Y
      – Remove anonymous users? [Y/n] Y
      – Disallow root login remotely? [Y/n] Y
      – Remove test database and access to it? [Y/n] Y
      – Reload privilege tables now? [Y/n] Y

      systemctl restart mariadb

      Rồi bây giờ vô thực hiện tạo database: mysql -u root -p


      Tiếp theo tạo cơ sở dữ liệu cho Next Cloud và gán cho 1 user khác.

      CREATE DATABASE nextclouddb;
      GRANT ALL ON nextclouddb.* TO 'nextcloud_user'@'localhost' IDENTIFIED BY 'strong password';
      FLUSH PRIVILEGES;
      EXIT;

      Download và cài nextcloud

      Php 7.4 thì dùng ver 25: https://download.nextcloud.com/server/releases/

      Tốt nhất nên xem yêu cầu phần cứng để lựa chọn version phù hợp: https://docs.nextcloud.com/server/26/admin_manual/installation/system_requirements.html

      Tải xuống tệp zip Nextcloud bằng lệnh:wget https://download.nextcloud.com/server/releases/nextcloud-16.0.1.zip
      Tiếp theo giải nén file nén bằng lệnh: unzip nextcloud-16.0.1.zip

      unzip latest.zip -d /var/www/

      Tiếp theo di chuyển thư mục vừa giải nén vào thư mục webroot: mv nextcloud /var/www/
      Điều hướng đến thư mục gốc của tài liệu và thay đổi quyền sở hữu tệp thành www-data. cd /var/www
      sudo chown -R www-data:www-data nextcloud

      chown -R www-data:www-data /var/www/nextcloud

      Ngoài ra, thay đổi quyền của tệp: sudo chmod -R 755 nextcloud

      How to install NextCloud on Debian 10

      Cấu hình nginx theo hướng dẫn https://www.howtoforge.com/tutorial/how-to-install-nextcloud-with-nginx-on-ubuntu-20.04.

      https://docs.nextcloud.com/server/25/admin_manual/installation/nginx.html

      nano /etc/nginx/conf.d/nextcloud.conf

      server { listen 80; server_name your-domain.com www.your-domain.com; root /var/www/nextcloud; index index.php index.html; charset utf-8; location / { try_files $uri $uri/ /index.php?$args; } location ~ .php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

      Nếu muốn chạy http thôi thì bỏ dòng: fastcgi_params HTTPS on

      sudo systemctl restart nginx

      Cấu hình theo trang https://github.com/nextcloud/server/blob/master/config/config.sample.php

      Xem chi tiết: https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html

      /**
      * Thời gian tồn tại của cookie ghi nhớ đăng nhập. Giá trị này phải lớn hơn
      * session_lifetime. Nếu được đặt thành 0, tính năng ghi nhớ tôi sẽ bị vô hiệu hóa.
      *
      * Mặc định là “60*60*24*15“ giây (15 ngày)
      */
      ‘remember_login_cookie_lifetime’ => 60*60*24*15,

      /**
      * Thời gian tồn tại của một phiên sau khi không hoạt động.
      *
      * Thời gian tối đa có thể bị giới hạn bởi cài đặt php.ini session.gc_maxlifetime
      * sẽ ghi đè tùy chọn này nếu nó nhỏ hơn giá trị trong config.php
      *
      * Mặc định là “60*60*24“ giây (24 giờ)
      */
      ‘session_lifetime’ => 60 * 60 * 24,

      /**
      * Thời gian chờ tính bằng giây đối với các yêu cầu đến máy chủ do thành phần DAV thực hiện (ví dụ: cần thiết cho các chia sẻ liên kết).
      */
      ‘davstorage.request_timeout’ => 30,

      config.php file:

      $CONFIG = array (
      ‘instanceid’ => ‘xxx’,
      ‘passwordsalt’ => ‘xxx’,
      ‘secret’ => ‘xxx’,
      ‘trusted_domains’ =>
      array (
      0 => ‘192.168.24.32’,
      1 => ‘xxx’,
      ),
      ‘trusted_proxies’ =>
      array (
      0 => ‘192.168.24.30’,
      1 => ‘127.0.0.1’,
      2 => ‘::1’,
      ),
      ‘datadirectory’ => ‘/home/data/’,
      ‘dbtype’ => ‘mysql’,
      ‘version’ => ‘29.0.2.2’,
      ‘overwrite.cli.url’ => ‘http://192.168.24.32’,
      ‘forwarded_for_headers’ =>
      array (
      0 => ‘HTTP_X_FORWARDED’,
      1 => ‘HTTP_FORWARDED_FOR’,
      ),
      ‘dbname’ => ‘xxx’,
      ‘dbhost’ => ‘localhost’,
      ‘dbport’ => ”,
      ‘dbtableprefix’ => ‘oc_’,
      ‘mysql.utf8mb4’ => true,
      ‘dbuser’ => ‘xxx’,
      ‘dbpassword’ => ‘xxx’,
      ‘installed’ => true,
      ‘mail_domain’ => ‘xx’,
      ‘mail_smtpmode’ => ‘smtp’,
      ‘mail_sendmailmode’ => ‘smtp’,
      ‘mail_from_address’ => ‘xxx’,
      ‘mail_smtphost’ => ‘xxx’,
      ‘mail_smtpport’ => ‘465’,
      ‘mail_smtpauth’ => 1,
      ‘mail_smtpname’ => ‘xxx’,
      ‘mail_smtppassword’ => ‘xxx’,
      ‘default_phone_region’ => ‘DE’,
      ‘default_language’ => ‘de’,
      ‘default_locale’ => ‘de_DE’,
      ‘memcache.local’ => ‘\\OC\\Memcache\\APCu’,
      ‘filelocking.enabled’ => true,
      ‘memcache.locking’ => ‘\\OC\\Memcache\\Redis’,
      ‘redis’ =>
      array (
      ‘host’ => ‘/var/run/redis/redis.sock’,
      ‘port’ => 0,
      ‘timeout’ => 0.0,
      ),
      ‘maintenance’ => false,
      ‘maintenance_window_start’ => 1,
      ‘theme’ => ”,
      ‘loglevel’ => 0,
      ‘mail_smtpsecure’ => ‘ssl’,
      ‘versions_retention_obligation’ => ‘auto, 60’,
      ‘trashbin_retention_obligation’ => ‘auto, 30’,
      );

      Thêm ứng dụng RichDocument ARM64

      Thêm app vào bằng cách truy cập vào thư mục nextcloud. Nhập câu lệnh thêm

      sudo -u www-data php -d memory_limit=512M ./occ app:install richdocumentscode_arm64

      Trường hợp không cài vô được thì download:

      wget https://github.com/CollaboraOnline/richdocumentscode/releases/download/23.5.502/richdocumentscode_arm64.tar.gz

      bun nén và chép vào thư mục:

      tar -zxvf richdocumentscode_arm64.tar.gz

      sudo mv richdocumentscode_arm64 www/nextcloud/apps

      thay quyền truy cập: sudo chown -R www-data:www-data www/nextcloud/apps/richdocumentscode_arm64

      Nâng lên vùng nhớ: sdo nano /etc/php/7.4/fpm/php.ini

      Bấm ctrl+w tìm: memory_limit cho thành 1G; upload_max_filesize thì 1G

      Vào sudo nano /etc/php/7.4/fpm/pool.d/www.conf chỉnh xóa ; trước các dòng:

      ;env[HOSTNAME] = $HOSTNAME
      ;env[PATH] = /usr/local/bin:/usr/bin:/bin
      ;env[TMP] = /tmp
      ;env[TMPDIR] = /tmp
      ;env[TEMP] = /tmp
      clear_env = no

      Sau đó: sudo systemctl restart php7.4-fpm.service && systemctl restart nginx

      Cập nhật có thể được thực hiện như thế này: sudo -u www-data php -d memory_limit=512M ./occ app:update --all
      Xem danh sách app:sudo u wwwdata php occ app:list

      Xóa app dùng lệnh:sudo -u www-data php occ app:remove richdocuments
      https://docs.nextcloud.com/server/20/admin_manual/configuration_server/occ_command.html

      Nếu bạn chạy richdoumentscode trên ARM64 (gói richdoumentscode_arm64), bạn phải thay đổi richdocumentscode\/proxy thành richdocumentscode_arm64\/proxy trong cài đặt NGINX:

      Ví dụ:
      location ~ \.php(?:$|/) {
      # Required for legacy support
      rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|oc[ms]\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode_arm64\/proxy) /index.php$request_uri;

      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      set $path_info $fastcgi_path_info;

      try_files $fastcgi_script_name =404;

      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $path_info;
      fastcgi_param HTTPS on;

      fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
      fastcgi_param front_controller_active true; # Enable pretty urls
      fastcgi_pass php-handler;

      fastcgi_intercept_errors on;
      fastcgi_request_buffering off;

      fastcgi_max_temp_file_size 0;
      }

      Nếu chưa được xem lại port: http://127.0.0.1:9980

      Tạo bộ nhớ trên máy cục bộ.

      Cài thêm các sudo apt-get install redis-server php-redis -y

      Kiểm tra nó chạy chưa: ps ax | grep redis

      Vào thư mục www/nextcloud/config thêm nội dung vào file config.php:

      ‘memcache.locking’ => ‘\\OC\\Memcache\\Redis’,

      ‘memcache.distributed’ => ‘\\OC\\Memcache\\Redis’,

      ‘memcache.local’ => ‘\\OC\\Memcache\\Redis’,

      ‘redis’ => array ( ‘host’ => ‘localhost’, ‘port’ => 6379, ),

      Đồng thời thêm dòng cấu hình số điên thoại VN: ‘default_phone_region’ => ‘vi’,

      Xong, lưu lại vào web Admistrator overview để xem kết quả. Tài liệu https://apps.nextcloud.com/apps/richdocumentscode và https://nextcloud.com/blog/how-to-install-collabora-online-in-nextcloud-hub/

      Failed to load Nextcloud Office: sửa bằng cách thêm 0.0.0.0/0 vào danh sách Cho phép đối với Yêu cầu WOPI trong /settings/admin/richdocuments

      ’allow_local_remote_servers’ => true, trong config.php, sau đó: sudo systemctl restart nginx

      /tmp/coolwsd.*/coolwsd.log (trên máy chủ của bạn hoặc trong /tmp của vùng chứa nếu có)

      ‘app_install_overwrite’ =>
      array (
      0 => ‘files_external_ipfs’,
      1 => ‘calendar’,
      2 => ‘cookbook’,
      3 => ‘dicomviewer’,
      4 => ‘files_frommail’,
      ),

      ‘onlyoffice’ =>
      array (
      ‘verify_peer_off’ => true,
      ),

      Printer bằng hệ sinh thái in CUPS/LPR.

      https://github.com/e-alfred/nextcloud-printer/

      https://github.com/CGessinger/nextcloud-skyprint

      Bạn cần thiết lập CUPS hoạt động với máy in tương thích được thiết lập làm máy in mặc định và chương trình nền LPR được cài đặt trên máy chủ của bạn.

      Trên Debian, bạn có thể cài đặt các gói cups và cups-bsd cấu hình máy in mặc định trong CUPS (vui lòng tham khảo tài liệu CUPS về cách thực hiện). Bạn có thể xác minh cài đặt bằng lpstat -pvà lpstat -dsau khi bạn cấu hình CUPS đúng cách.

      Bạn cần một máy chủ CUPS có máy in IPP dùng chung chạy trong mạng cục bộ của bạn.

      apt-get update && apt-get install -y cups-client cups-daemon cups-bsd

      service cups start

      lpadmin -p HP_M281_docker -E -v ipp://$ip$:631/printers/$printer_name$ -m everywhere
      lpoptions -d HP_M281_docker

      Kiểm tra cấu hình lpstat -p -d

      in tệp thử nghiệm từ dòng lệnh: sudo -u www-data lpr testfile.pdf

      Để cài đặt ứng dụng trên phiên bản của bạn, chỉ cần điều hướng đến »Ứng dụng« trong giao diện web Nextcloud, chọn danh mục »Công cụ«, tìm ứng dụng Máy in và bật ứng dụng đó.

      Cách sử dụng: Chỉ cần mở chế độ xem chi tiết của tệp (Thanh bên). Sẽ có một tab mới có tên là “Máy in”. Chọn Hướng in của bạn và nó sẽ cố gắng thực thi LPR (Line Printing Daemon) trên CLI để gửi tác vụ đến máy in được cấu hình trong CUPS. Hiện tại, chỉ có thể sử dụng máy in được đặt làm mặc định để in.

      Các hướng có thể là “Phong cảnh” và “Chân dung”. Các tùy chọn khác sẽ được thêm vào trong tương lai.

      Khả năng tương thích
      Tôi chỉ thử nghiệm ứng dụng cho phiên bản Nextcloud hiện tại (14 trở lên).
      Tôi đã cố gắng sử dụng api hiện tại nhiều nhất có thể. Nó sẽ an toàn cho các phiên bản sau.
      Hiện tại chỉ các tệp được CUPS hỗ trợ gốc mới được hỗ trợ để in. Bao gồm Hình ảnh, PDF, tệp văn bản và có thể là các tệp khác. Không phải tất cả các loại tệp đều được CUPS hỗ trợ.
      Ứng dụng hiện tại thiếu rất nhiều tính năng sẽ được thêm vào trong các phiên bản ứng dụng trong tương lai. Nếu bạn muốn giúp đỡ phát triển, chúng tôi rất hoan nghênh bạn tham gia PR.

      Two-Factor Email

      Ứng dụng này cho phép người dùng thiết lập email làm yếu tố thứ hai cho thông tin đăng nhập web. Ứng dụng này yêu cầu địa chỉ email được đặt trong ‘Thông tin cá nhân’. Hiện tại, ứng dụng này không thể sử dụng khi đăng nhập lần đầu khi xác thực hai yếu tố được thực thi (chưa triển khai).

      Chạy lệnh OCC trong một thiết bị đầu cuối web

      Ứng dụng này không phải là một terminal tương tác thực sự và không hỗ trợ các tác vụ chạy dài. Vì vậy, nếu phiên bản của bạn khá lớn, các lệnh như occ files:scansẽ hết thời gian chờ và không thành công.
      Không sử dụng occ maintenance:mode –on, rõ ràng là…

      https://github.com/adphi/occweb

      Snapshots

      Cho phép sử dụng ảnh chụp nhanh hệ thống tệp (từ btrfs, zfs, v.v.) làm phiên bản thông qua giao diện web Nextcloud.

      ng dụng này không tự động tạo ảnh chụp nhanh, vì vậy ứng dụng có thể không có ảnh chụp nhanh cho mọi thay đổi được thực hiện trên tệp.

      Vì ứng dụng không tạo bất kỳ ảnh chụp nhanh nào nên khi khôi phục tệp, mọi thay đổi được thực hiện đối với tệp kể từ ảnh chụp nhanh cuối cùng sẽ bị mất.

      Để truy cập ảnh chụp nhanh, hai điều cần được cấu hình trong phần cài đặt quản trị.

      định dạng ảnh chụp nhanh: nơi có thể tìm thấy ảnh chụp nhanh của thư mục dữ liệu Nextcloud

      Ví dụ: thư mục dữ liệu Nextcloud /srv/http/.zfs/snapshot/%snapshot%/nextcloud/data/
      ở đâu và là thư mục đang được chụp nhanh vào ./srv/http/nextcloud/data
      /srv/http/srv/http/.zfs/snapshot

      Ngoài ra, nếu ảnh chụp nhanh của bạn được sắp xếp trên nhiều thư mục như

      /.snapshots/hourly/2020-02-07_00:00/…
      /.snapshots/hourly/2020-02-07_01:00/…
      /.snapshots/daily/2020-02-06_00:00/…
      /.snapshots/daily/2020-02-07_00:00/…
      bạn có thể sử dụng glob để /.snapshots/*/%snapshot%/khiến ứng dụng tìm kiếm ảnh chụp nhanh trong nhiều thư mục.

      định dạng ngày của thư mục ảnh chụp nhanh: Cách định dạng ngày của ảnh chụp nhanh trong tên ảnh chụp nhanh

      Ví dụ: *Y-m-d_H:i:s*sẽ khớp chính xác các ảnh chụp nhanh có tênautosnap_2017-05-27_00:00:01_hourly

      Gợi ý: Mỗi * sẽ chỉ khớp cho đến khi có dấu phân cách hoặc chữ số tiếp theo

      Ví dụ: *-*-*-Y-m-d-Hi sẽ khớp chính xác các ảnh chụp nhanh có tênzfs-auto-snap_frequent-2017-06-23-1930

      Thêm quét vi rut

      Bạn có thể định cấu hình máy chủ Nextcloud của mình để tự động quét vi-rút trên các tệp mới tải lên bằng ứng dụng Chống vi-rút cho Tệp. ClamAV phát hiện tất cả các dạng phần mềm độc hại bao gồm ngựa Trojan, vi rút và sâu, đồng thời nó hoạt động trên tất cả các loại tệp chính bao gồm tệp Windows, Linux và Mac, tệp nén, tệp thực thi, tệp hình ảnh, Flash, PDF và nhiều loại khác. Daemon Freshclam của ClamAV tự động cập nhật cơ sở dữ liệu chữ ký phần mềm độc hại theo các khoảng thời gian đã lên lịch. Cài app lên máy tính: apt-get install clamav clamav-daemon

      https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/antivirus_configuration.html

      Sau đó thực hiện tắt mở để nó chạy:

      sudo systemctl stop clamav-daemon.service

      sudo rm /var/log/clamav/freshclam.log (sometimes it gets locked)

      sudo systemctl start clamav-daemon.service

      sudo systemctl status clamav-daemon.service

      sudo freshclam and check the log file (or console output)

      Xác minh có thực thi:

      netstat -a|grep clam

      Kích hoạt ứng dụng Files_antivirus trong app. Sau đó cấu hình trong Administrator setting / Bảo mật, Chọn Daemon (Socket): ClamAV đang chạy trên cùng máy chủ với Nextcloud. Giá trị đặt số byte được đọc trong một lần truyền. 10485760 byte hoặc 10 megabyte là mặc định. Giá trị này không được lớn hơn cài đặt PHP hoặc bộ nhớ vật lý nếu được đặt thành -1 (không giới hạn). Cuối cùng, lựa chọn ghi nhật ký bất kỳ cảnh báo nào mà không xóa tệp hoặc xóa ngay các tệp bị nhiễm.

      Trình quét nền không yêu cầu bất kỳ sự can thiệp thủ công nào. Tuy nhiên, đôi khi bạn có thể muốn kiểm tra nó hoặc thực hiện các tác vụ trên nó.

      sudo -u www-data php occ files_antivirus:status [-v]

      • Bạn có thể tắt tính năng quét nền bằng occ để chỉ quét tệp trong khi tải lên:

      cd /var/www/nextcloud

      sudo -u www-data php occ config:app:set files_antivirus av_background_scan –value=”off”

      Để kiểm tra bằng tay:

      /var/www/nextcloud# clamscan /opt/nextcloud/data/admin/files/testfile.zip
      Bây giờ, hãy thực hiện điều tương tự bằng cách sử dụng lệnh occ vì nó sẽ được chạy từ cronjob quét nền trong khi theo dõi thời gian chạy tập lệnh:

      /var/www/nextcloud# time sudo -u www-data php occ files_antivirus:scan /admin/files/testfile.zip

      Nó thực hiện đúng 1 phút thì dừng lại. Kiểm tra cat /etc/php/8.1/cli/php.ini | grep socket_timeout

      Thấy default_socket_timeout = 60 có nghĩa Nó được đặt thành 60 theo mặc định. Hãy thử 10 phút. sudo nano /etc/php/8.1/cli/php.ini chỉnh default_socket_timeout = 600. và kiểm tra lại nó không hết thời gian nữa. Tôi khuyên bạn nên nắm bắt thời gian chờ nếu có thể và đưa ra thông báo lỗi chính xác hơn. Ngoài ra, có thể sửa đổi thời gian chờ trong thời gian chạy tập lệnh bằng cách sử dụng streaming_set_timeout()? Tôi hy vọng thông tin này hữu ích để khắc phục vấn đề.

      Xem cấu hình https://www.inmotionhosting.com/support/website/antivirus-for-files-nextcloud-clamav/

      G DATA Antivirus

      Ứng dụng G DATA Antivirus là lớp bảo mật bổ sung cho máy chủ Nextcloud của bạn. Dễ dàng quét tệp để tìm nội dung độc hại. https://github.com/GDATASoftwareAG/nextcloud-gdata-antivirus

      Tích hợp với ứng dụng Flow! Sử dụng các thẻ để kích hoạt luồng
      Chặn việc tải lên các tệp độc hại! Ngăn chặn việc tải lên các tệp độc hại bằng cách quét chúng khi tải lên
      Thông báo cho người dùng! Người dùng được thông báo về kết quả quét
      Quét tự động! Tự động quét tất cả các tệp trong nền
      Tùy chỉnh những gì nên và không nên quét! Cấu hình thông qua Block- và Allowlist
      Sử dụng ứng dụng hoạt động! Xem những gì đã xảy ra trong phiên bản Nextcloud của bạn
      không cần phần mềm bổ sung! Ứng dụng sử dụng API G DATA Verdict as a Service (VaaS) để quét tệp

      Ứng dụng này dựa trên API G DATA Verdict as a Service (VaaS). Để bắt đầu sử dụng ứng dụng, bạn phải đăng ký quatrang đăng kýcủa chúng tôi hoặc tự lưu trữ phần phụ trợ. https://apps.nextcloud.com/apps/gdatavaas

      Đặc trưng

      Quét tệp tự động: Tệp từ người dùng được quét tự động 24/7 ở chế độ nền.
      Bảo vệ trong quá trình tải lên: Các tập tin được quét trong quá trình tải lên và được gắn thẻ phán quyết.
      Quét thủ công: Người dùng có thể quét tệp thủ công bất cứ lúc nào.
      Hoạt động của Nextcloud: Hành vi của phần mềm diệt vi-rút có thể được theo dõi trong ứng dụng Hoạt động thông qua chức năng ghi nhật ký thông minh.
      Đánh dấu tệp: Tệp được gắn thẻ phán quyết, cung cấp phản hồi ngay lập tức cho người dùng.
      Không cần phần mềm bổ sung: Ứng dụng hoạt động ngay lập tức với dịch vụ đám mây G DATA VaaS.
      Quy tắc quét: Ứng dụng cung cấp cả danh sách chặn và danh sách cho phép để dễ dàng thiết lập những gì nên và không nên quét.
      Cách ly: Nếu các tệp độc hại đã được tìm thấy trong môi trường Nextcloud hiện có, chúng có thể được chuyển đến khu vực cách ly của người dùng bị ảnh hưởng.

      Tag

      Clean: Máy quét không tìm thấy bất kỳ nội dung độc hại nào trong tệp.
      Malicious Độc hại: Máy quét tìm thấy vi-rút hoặc nội dung độc hại khác trong tệp.
      Pup: Máy quét tìm thấy một chương trình có khả năng không mong muốn trong tệp. Có thể là phần mềm quảng cáo, phần mềm gián điệp, v.v.
      Unscanned Chưa quét: Tệp tin vẫn chưa được quét.
      Won’t Scan Không quét được: Tệp không được quét vì quá lớn hoặc ở định dạng không thể quét được.

      Cài đặt

      Ứng dụng cung cấp nhiều cài đặt khác nhau để tùy chỉnh hành vi của phần mềm diệt vi-rút. Các cài đặt có thể được tìm thấy trong trang cài đặt quản trị Nextcloud trong phần “Verdict-as-a-Service”.

      Phương pháp xác thực: Nếu bạn đã tạo tài khoản của riêng mình trên https://vaas.gdata.de/login , hãy chọn ‘Luồng mật khẩu chủ sở hữu tài nguyên’ tại đây. Nếu bạn đã nhận được dữ liệu truy cập từ nhà cung cấp của mình (ID và bí mật của khách hàng), hãy chọn ‘Luồng thông tin xác thực của khách hàng’. Bạn chỉ cần để trống các trường khác.
      Chỉ quét cái này: Tương đương với danh sách cho phép. Nếu các giá trị ở đây được phân tách bằng dấu phẩy, ví dụ “Documents, .exe, Scan”, chỉ những giá trị chứa các giá trị tương ứng trong đường dẫn mới được quét. Trong ví dụ này, các tệp *.exe và nội dung của thư mục Documents/ và Scan/ sẽ được quét.
      Không quét mục này: Tương đương với danh sách chặn. Nếu có các giá trị được phân tách bằng dấu phẩy, ví dụ “Documents, .exe, Scan”, thì các giá trị này sẽ không được quét.
      Chiều dài hàng đợi quét: Xác định số lượng tệp được quét trên mỗi tác vụ nền của phiên bản Nextcloud, hãy xem Cài đặt cơ bản. Giúp cân bằng tải máy chủ và thời gian cho đến khi tất cả các tệp được quét. Khuyến nghị các giá trị từ 10 đến 100.
      Thiết lập nâng cao: Điểm cuối mã thông báo và URL VaaS xác định backend quét. Theo mặc định, G DATA Cloud công khai được sử dụng để quét. Nếu backend VaaS tự lưu trữ, các giá trị tương ứng cho phiên bản tự lưu trữ phải được nhập vào đây.

      Disable app

      Trước khi vô hiệu hóa app hãy xóa các ghi chú tag. Vô trang cài đặt quản trị Nextcloud trong phần “Verdict-as-a-Service” bấm vào nút “Reset all tags” . Sau đó mới disable app.

      Các lệnh sau đây có sẵn để quản lý và tương tác với ứng dụng G DATA VaaS trong phiên bản Nextcloud của bạn:

      gdatavaas:remove-tag
      Mô tả : Xóa thẻ đã chỉ định.
      Cách sử dụng :php occ gdatavaas:remove-tag <tag-name>
      Sử dụng Docker :docker exec –user www-data nextcloud-container php occ gdatavaas:remove-tag <tag-name>
      Lập luận :
      <tag-name>: Tên của thẻ cần xóa.
      Chi tiết : Lệnh này xóa thẻ đã chỉ định khỏi hệ thống. Nếu thẻ không tồn tại, lỗi sẽ được ghi lại.

      App backup

      Cấu hình như link https://github.com/nextcloud/backup

      Đây là danh sách những gì có thể được khôi phục và những gì không thể khôi phục khi sử dụngỨng dụng sao lưu:

      Một điểm khôi phục sẽ lưu trữ:

      • Nextcloud hiện tại của bạn,
      • Cấu hình trong ,config/config.php
      • Thư mục và bất kỳ thư mục nào khác ,apps/custom_apps/
      • Địa phương của bạn , được xác định bởi in ,data/'datadirectory'config/config.php
      • Một cơ sở dữ liệu đầy đủ của bạn,sqldump
      • Danh sách các tệp và bản địa hóa trong bản sao lưu,
      • Siêu dữ liệu về phiên bản.

      Điểm khôi phục sẽKHÔNGlưu trữ:

      • Dữ liệu từ Bộ lưu trữ bên ngoài, ngay cả khi hệ thống tệp được gắn có sẵn cục bộ.

      Nếu bạn không có dung lượng ổ đĩa, bạn có thể định cấu hình ứng dụng để sử dụng bộ nhớ ngoài để lưu trữ tất cả. Dữ liệu được tạo trong lần chuyển 1 không được mã hóa, Dữ liệu của bạn rời khỏi thư mục dữ liệu nội bộ từ phiên bản của bạn và hiện có sẵn trên bộ nhớ ngoài,Lần 1st pass sẽ yêu cầu nhiều tài nguyên hơn và phiên bản của bạn sẽ ở chế độ bảo trì lâu hơn Thời gian
      Nếu bộ nhớ ngoài của bạn không phải là thư mục cục bộ, sẽ cần tài nguyên mạng lớn, Trong quá trình cấu hình, các điểm khôi phục cũ từ bộ nhớ trước đó sẽ bị xóa.
      Chạy lệnh:sudo -u www-data php occ backup:external:appdata trước khi cấu hình trong trang quản lý.

      External storage: local::/media/usb/mybackup/

      Restoring point location Actions: backup/points

      Set as App Data: Choose where the backup app will initially store the restoring points. local::/media/usb/backup/ đặt tên thư mục chứa app_data
      Sau khi cấu hình xong, bắt buộc phải xuất cấu hình của ứng dụng vì nó chứa các khóa mã hóa cho Sao lưu được mã hóa và bạn sẽ không thể khôi phục các bản sao lưu của mình từ dữ liệu bị mất. Bạn có thể làm điều đó từ trang Cài đặt quản trị viên hoặc sử dụng lệnh:occ

      ./occ backup:setup:export [–key] > ~/backup.setup

      Để khôi phục cấu hình đã xuất: ./occ backup:setup:import [–key encryption_key] < ~/backup.setup

      Tạo Điểm Khôi phục mới

      Mặc dù điều này được quản lý bởi một tác vụ nền, bạn vẫn có thể tạo điểm khôi phục theo cách thủ công:

      ./occ backup:point:create [–differential]
      Tùy chọn sẽ tạo một bản sao lưu vi sai.–differential

      Tải lên điểm khôi phục

      ./occ backup:point:upload <pointId>
      Thao tác này sẽ yêu cầu tất cả các phiên bản từ xa được định cấu hình để kiểm tra tính tỉnh táo của bất kỳ lần tải lên nào trước đó cho việc này Điểm khôi phục và sẽ chỉ tải lên tệp bị thiếu / bị lỗi.

      Liệt kê các điểm khôi phục có sẵn: backup:point:list

      Nếu bạn bắt đầu sử dụng ứng dụng, tại một thời điểm, bạn sẽ phải đối mặt với một tình huống mà Điểm khôi phục quan trọng là sẵn dùng ở đâu đó nhưng không thể tìm thấy trong cơ sở dữ liệu của bạn. Ví dụ: khi khôi phục Bản sao lưu, tất cả Điểm khôi phục được tạo sau bản sao lưu này sẽ không còn trong cơ sở dữ liệu nữa. Điều này là bình thường như khôi phục Sao lưu hoàn toàn ghi đè lên cơ sở dữ liệu của bạn. Trong trường hợp đó, bạn có thể chạy lệnh này:

      ./occ backup:point:scan <pointId>
      Nếu không thể tìm thấy, bạn sẽ cần sao chép thủ công thư mục chứa Điểm khôi phục trong Thư mục AppData: .data/appdata_qwerty123/backup/

      Xác minh tính toàn vẹn của Điểm khôi phục

      ./occ backup:point:details <pointId>

      Để khôi phục bản sao lưu:

      ./occ backup:point:unpack 20211031232710-full-Tu4H6vOtxKoLLb9

      ./occ backup:point:restore 20211031232710-full-Tu4H6vOtxKoLLb9

      Tải lên điểm khôi phục đã đóng gói của bạn trên một (hoặc nhiều) bộ nhớ ngoài là giải pháp hoàn hảo khi Đối mặt với sự mất mát lớn dữ liệu từ đĩa của bạn cho dù đó là nguồn gốc của con người hay phần cứng. Cấu hình được thực hiện theo 2 bước:

      Bước đầu tiên là thiết lập một thư mục từ Trang cài đặt bộ nhớ ngoài, nó được khuyên dùng Để giới hạn tính khả dụng của thư mục chỉ dành cho nhóm:admin
      Bước thứ hai được thực hiện trong Trang cài đặt sao lưu, Bộ nhớ ngoài được định cấu hình phải là Hiển thị trong danh sách vị trí lưu trữ khả dụng:
      Đặt thư mục lưu trữ các tệp sao lưu của bạn trên bộ nhớ ngoài và nhấp vào ‘Thêm mới vị trí bên ngoài’.

      App kho lưu trữ bên ngoài

      Ứng dụng Hỗ trợ lưu trữ ngoài cho phép bạn gắn bộ nhớ ngoài dịch vụ và thiết bị như thiết bị lưu trữ phụ. https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/external_storage_configuration_gui.html

      Các chương trình phụ trợ sau đây được cung cấp bởi ứng dụng lưu trữ bên ngoài như: Amazon S3, FTP / FTPS, Local, Nextcloud, Lưu trữ đối tượng OpenStack, SFTP, SMB / CIFS, WebDAV

      Menu Tràn (ba dấu chấm) hiển thị các cài đặt và thùng rác. Nhấp vào thùng rác để xóa điểm gắn kết. Nút cài đặt cho phép bạn định cấu hình từng ngàm lưu trữ riêng lẻ với các tùy chọn sau:

      • Mã hóa. Hộp kiểmMã hóachỉ hiển thị khi ứng dụng Mã hóa được bật. Lưu ý rằng phía máy chủ mã hóa không khả dụng cho các máy chủ Nextcloud khác được sử dụng làm bộ nhớ ngoài.

      • Xem trước

      • Bật chia sẻ.Bật Chia sẻcho phép quản trị viên Nextcloud bật hoặc tắt chia sẻ trên các điểm gắn riêng lẻ. Khi tính năng chia sẻ bị tắt, các chia sẻ được giữ lại trong nội bộ để bạn có thể bật lại tính năng chia sẻ và các cổ phiếu trước đó sẽ có sẵn trở lại. Chia sẻ bị tắt theo mặc định.

      • Tần suất kiểm tra hệ thống tệp (Không bao giờ, Một lần cho mỗi lần truy cập trực tiếp)

      • Khả năng tương thích với Mac NFD

      • Chỉ đọc

      Thêm tệp vào kho lưu trữ bên ngoài không qua web. Chúng tôi khuyên bạn nên định cấu hình tác vụ nền Webcron hoặc Cron để bật Nextcloud tự động phát hiện các tệp được thêm vào bên ngoài của bạn lưu trữ. Nextcloud có thể không phải lúc nào cũng có thể tìm ra những gì đã được thay đổi từ xa (các tệp thay đổi mà không thông qua Nextcloud), đặc biệt là khi nó nằm rất sâu trong hệ thống phân cấp thư mục của bộ nhớ ngoài.

      Bạn có thể cần thiết lập tác vụ cron chạy (hoặc thay thế bằng tên người dùng, xem thêm Sử dụng lệnh occ) để kích hoạt quét lại các tệp của người dùng theo định kỳ (ví dụ: cứ sau 15 phút), bao gồm bộ nhớ ngoài được gắn.sudo -u www-data php occ files:scan –all–all

      App Preview Generator

      Đã thử nghiệm và hoạt động các định dạng tập tin avi, doc, bmp, gif, jpg, md, mkv, mp3, mp4, odp, ods, odt, pdf, png, psd, svg, tif, ttf, txt, xls.

      Cài đặt ứng dụng Preview Generator của cửa hàng ứng dụng Nextcloud: apps.nextcloud.com/apps/previewgenerator

      Cài đặt LibreOffice
      sudo apt install libreoffice libreoffice-l10n-de libreoffice-help-vi
      Cài đặt ffmpeg, ImageMagick và Ghostscript
      apt install ffmpeg imagemagick ghostscript
      Thêm nhà cung cấp bản xem trước
      Thêm vào/var/www/nextcloud/config/config.php

      ‘preview_libreoffice_path’ => ‘/usr/bin/libreoffice’,
      ‘enable_previews’ => true,
      ‘enabledPreviewProviders’ =>
      array (
      0 => ‘OC\\Preview\\TXT’,
      1 => ‘OC\\Preview\\MarkDown’,
      2 => ‘OC\\Preview\\OpenDocument’,
      3 => ‘OC\\Preview\\PDF’,
      4 => ‘OC\\Preview\\MSOffice2003’,
      5 => ‘OC\\Preview\\MSOfficeDoc’,
      6 => ‘OC\\Preview\\Image’,
      7 => ‘OC\\Preview\\Photoshop’,
      8 => ‘OC\\Preview\\TIFF’,
      9 => ‘OC\\Preview\\SVG’,
      10 => ‘OC\\Preview\\Font’,
      11 => ‘OC\\Preview\\MP3’,
      12 => ‘OC\\Preview\\Movie’,
      13 => ‘OC\\Preview\\MKV’,
      14 => ‘OC\\Preview\\MP4’,
      15 => ‘OC\\Preview\\AVI’,
      ),
      Tạo thư mục .cache trên máy chủ ISPConfig trong thư mục gốc của máy chủ ảo để ngăn chặn unable to create directory ‘/var/www/clients/client1/web1/.cache/dconf’: Operation not permitted. dconf will not work properly
      Chỉ cần thiết cho các tài liệu văn phòng như .ods và .odt.

      Sửa PolicyMap cho ImageMagick để ngăn chặn lỗi ImagickException: not authorized . Cần thiết cho các tệp PDF.

      • Lần chạy đầu tiên cho toàn bộ
        sudo -u www-run php /var/www/nextcloud/occ preview:generate-all -vvv

      preview:generate-all [–path=PATH …] [user_id …] Nếu một hoặc nhiều ID người dùng được cung cấp, nó sẽ chỉ lặp lại các tệp của những người dùng đó. Bạn cũng có thể giới hạn việc tạo thành một hoặc nhiều đường dẫn bằng cách sử dụng –path=”/[username]/files/[folder path]”, e.g. –path=”/alice/files/Photos” Lưu ý rằng tất cả các user_id đã cho sẽ bị bỏ qua nếu ít nhất một đường dẫn được chỉ định.
      Thêm Cronjob
      crontab -u www-run -e
      */10 * * * * php /var/www/nextcloud/occ preview:pre-generate -vvv

      Tôi không muốn tạo tất cả các kích thước xem trước
      Điều này có thể thực hiện được kể từ phiên bản 1.0.8. Chỉ cần đặt các giá trị chính xác thông qua dòng lệnh

      ./occ config:app:set –value=”64 256 1024″ previewgenerator squareSizes
      ./occ config:app:set –value=”64 256 1024″ previewgenerator widthSizes
      ./occ config:app:set –value=”64 256 1024″ previewgenerator heightSizes
      Điều này sẽ chỉ tạo ra:

      bản xem trước hình vuông của: 64×64, 256×256 và 1024×1024
      xem trước tỷ lệ khung hình với chiều rộng: 64, 256 và 1024
      xem trước tỷ lệ khung hình với chiều cao: 64, 256 và 1024
      Ghi chú:

      kích thước bản xem trước luôn là lũy thừa của 4.
      Kích thước nhỏ nhất là 64
      Kích thước tối đa được xác định bởi cài đặt xem trước của bạn trong config.php


      Hoàn thành.

      Tôi muốn thiết lập lại/tạo lại tất cả các bản xem trước
      CẢNH BÁO: Tính năng này không được hỗ trợ nhưng đã được nhiều người dùng xác nhận là có hiệu quả. Tiến hành với rủi ro của riêng bạn. Luôn sao lưu.

      Xóa thư mụcyour-nextcloud-data-directory/appdata_*/preview
      Tùy chọn: thay đổi các tham số preview_max_x và preview_max_y trong config.php (ví dụ, thành 512), và thay đổi previewgenerator các tham số ứng dụng heightSizes, squareSizesvà widthSizes theo README (hoặc tốt hơn nữa, thành một giá trị thấp cho từng tham số, ví dụ 512, 256 và 512tương ứng)
      Chạy occ files:scan-app-data (điều này sẽ thiết lập lại bản xem trước đã tạo trong cơ sở dữ liệu)
      Chạy occ preview:generate-all [user-id](sẽ chạy rất nhanh nếu bạn thực hiện bước 2)

      App Music

      https://apps.nextcloud.com/apps/music

      Trên các trình duyệt hiện đại, hỗ trợ các loại âm thanh .mp3, .ogg, .m4a, .m4b, .flac, .wav, v.v. Hỗ trợ danh sách phát với việc nhập từ các tệp m3u, m3u8 và pls.

      Phát kênh radio internet và podcast.

      Tìm thêm RSS

      Find A Podcast RSS Feed

      Radio thêm https://github.com/mikepierce/internet-radio-streams

      Phụ trợ tương thích với các giao thức Subsonic và Ampache, cho phép phát lại và duyệt thư viện của bạn trên nhiều ứng dụng bên ngoài, ví dụ như trên Android hoặc iPhone

      Kích hoạt bộ nhớ đệm PHP và thêm thư viện

      Để cải thiện đáng kể hiệu suất máy chủ Nextcloud của mình bằng bộ nhớ đệm, nơi các đối tượng thường được yêu cầu được lưu trữ trong bộ nhớ để truy xuất nhanh hơn. Có hai loại bộ nhớ đệm để sử dụng: bộ nhớ đệm mã lệnh PHP, thường được gọi là opcache và bộ nhớ đệm dữ liệu cho máy chủ web của bạn, thường được gọi là “memcache”.

      PHPopcachelưu trữ các tập lệnh PHP đã biên dịch, do đó không cần phải biên dịch lại mỗi khi chúng được gọi. PHP đóng gói Zend OPcache trong lõi kể từ phiên bản 5.5, do đó bạn không cần phải cài đặt opcache theo cách thủ công.

      nano /etc/php/7.4/fpm/conf.d/10-opcache.ini

      Sau đó, ở cuối tệp thêm cấu hình sau::

      opcache.memory_consumption=256
      opcache.interned_strings_buffer=64
      opcache.max_accelerated_files=32531
      opcache.validate_timestamps=0
      opcache.enable_cli=1

      systemctl restart php7.4-fpm.service

      Bộ nhớ đệm dữ liệu được cung cấp bởi người dùng. Nextcloud hỗ trợ nhiều bộ nhớ đệm backend, do đó bạn có thể chọn loại memcache phù hợp nhất với nhu cầu của mình. Bộ đệm được khuyến nghị là APCu bộ đệm cục bộ và Redis bộ đệm phân tán. Các bước như sau: Cài đặt theo phiên bản php (php -v)

      sudo apt install php8.2-apcu

      Liệt kê các extension mở rộng: php -m

      và kích hoạt memcache (bộ đệm dữ liệu) đã chọn, hãy xác minh rằng nó đang hoạt động bằng cách chạy

      ps ax | grep redis
      Xuất ra dòng: /usr/bin/redis-server 127.0.0.1:6379

      thêm các mục thích hợp vào config.php và khởi động lại máy chủ web của bạn làm mới trang quản trị Nextcloud của bạn.
      ‘memcache.local’ => ‘\OC\Memcache\APCu’,
      ‘memcache.distributed’ => ‘\OC\Memcache\Redis’,
      ‘memcache.locking’ => ‘\OC\Memcache\Redis’,
      ‘redis’ => [
      ‘host’ => ‘localhost’,
      ‘port’ => 6379,
      ],
      APCu nhanh hơn Redis trong việc lưu trữ đệm cục bộ. Sử dụng Redis cho bộ nhớ đệm cục bộ trên thiết lập nhiều máy chủ có thể gây ra sự cố. Nếu bạn có đủ bộ nhớ, hãy sử dụng APCu cho bộ nhớ đệm và Redis cho khóa tệp. Nếu bạn thiếu bộ nhớ, hãy sử dụng Redis cho cả hai. ‘memcache.local’ =>’\OC\Memcache\Redis’ ,

      APCu bị vô hiệu hóa theo mặc định trên CLI, điều này có thể gây ra sự cố với cron job của nextcloud. /etc/php/8.2/fpm/php.ini thêm dòng apc.enable_cli=1

      hoặc extension=apcu.so
      apc.enabled=1

      nano /etc/php/x.x/cli/php.ini
      (x.x is your php Version e.g. 7.4 or 8.1)
      write the next line into this file:
      apc.enable_cli=1

      apt-get install libmagickcore-6.q16-6-extra

      apt install php-imagick imagemagick

      Cập nhật app

      sudo -u www-data php occ app:update –all

      cập nhật tất cả

      cd <path-to nextcloud-document-root>/apps

      Xóa thư mục ứng dụng cũ của ứng dụng bạn muốn cập nhật:
      rm -rf ./<app-to-remove>
      Giải nén ứng dụng mới vào thư mục ứng dụng:
      tar xvzf <app-archive>.tar.gz -C <path-to nextcloud-document-root>/apps
      ls -ald <installed-app-folder>
      thay đổi quyền sở hữu và quyền truy cập thư mục ứng dụng:
      find ./<installed-app-folder> -type d -exec chmod 0750 {} \;
      find ./<installed-app-folder> -type f -exec chmod 0640 {} \;
      chown <web-server-user>: ./<installed-app-folder>
      Bật ứng dụng nếu chưa thực hiện:
      sudo <web-server-user> php <path-to nextcloud-document-root>/occ app:enable <updated-app-name>
      Buộc cập nhật thông tin ứng dụng trong cơ sở dữ liệu Nextcloud:
      sudo <web-server-user> php <path-to nextcloud-document-root>/occ app:update <updated-app-name>
      Cảm ơn bạn đã trả lời! Tôi đã thử nhưng không được.

      Sau đây là các bước của tôi:

      sudo find <path-to nextcloud-document-root>/apps/<app-name> -type d -exec chmod 0750 {} \;
      sudo find <path-to nextcloud-document-root>/apps/<app-name> -type f -exec chmod 0640 {} \;
      sudo chown -R www-data: <path-to nextcloud-document-root>/apps/<app-name>
      sudo -u www-data php <path-to nextcloud-document-root>/occ app:enable <app-name>

      Điều này chỉ cần thiết nếu bạn muốn cập nhật lên phiên bản mới nhất:
      sudo -u www-data php <path-to nextcloud-document-root>/occ app:update <app-name>

      xóa tất cả các phiên bản cho tất cả: sudo -u www-data php occ versions:cleanup

      xóa phiên bản cho 2 ứng dụng cụ thể trong danh sách phân:sudo -u www-data php occ versions:cleanup freda molly

      Bật utf8mb4 cho MySQL

      Bật chế độ bảo trì:

      sudo -u www-data php occ maintenance:mode --on

      Thay đổi đặc điểm database:

      ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

      Set cho file config.php:

      sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"

      Chuyển đổi bảng:

      sudo -u www-data php occ maintenance:repair

      Tắt chế độ bảo trì:

      sudo -u www-data php occ maintenance:mode --off

      Xem tại trang https://docs.nextcloud.com/server/26/admin_manual/configuration_database/mysql_4byte_support.html

      Uploading files lớn > 512MB

      Chỉnh sửa file/etc/php/7.4/fpm/php.ini

      upload_max_filesize = 16G
      post_max_size = 16G

      upload_tmp_dir = “/var/www/nextcloud/data/tmp”

      sys_temp_dir = “/var/www/nextcloud/data/tmp”
      Và chỉnh file /usr/share/nginx/nextcloud/config/config.php
      ‘tempdirectory’ => ‘/var/www/nextcloud/data/tmp’,
      và chỉnh quyền truy cập
      drwxr-xr-x 2 www-data www-data 4096 Mar 12 21:01 tmp

      Để cải thiện hiệu suất tải lên trong môi trường có băng thông tải lên cao, kích thước đoạn tải lên của máy chủ có thể được điều chỉnh:

      sudo -u www-data php occ config:app:set files max_chunk_size –value 20971520

      Đặt một giá trị tính bằng byte (trong ví dụ này là 20MB). Mặc định là 10485760 (10 MiB).

      Xem thêm: https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html

      Dùng Nextcloud trên Raspberry Pi, gắn bộ nhớ ngoài

      NextCloudPi là phiên bản thiết kế để chạy trên Raspberry Pi 3 hoặc 4. Trước tiên, hãy tải xuống file image hệ điều hành NextCloudPi mới nhất từ ​​repo GitHub. Chọn phiên bản cho Raspberry Pi. Sau khi tải xuống, hãy giải nén file bằng công cụ giải nén, bạn sẽ có một thư mục chứa file IMG.

      https://opensource.com/article/23/3/nextcloudpi-nextcloud-raspberry-pi

      Sử dụng ứng dụng Raspberry Pi Imager để flash file (image hệ điều hành) này vào thẻ nhớ microSD đã lắp – thẻ có dung lượng 8GB trở lên.

      Đặt thẻ nhớ microSD vào Raspberry Pi và bật nguồn. Sau vài giây hiển thị trình tự khởi động, bạn sẽ được nhắc đăng nhập. Tên người dùng mặc định làpivà mật khẩu làraspberry.Nó sẽ hỏi có cần thay đổi tên user và password luôn lúc này.

      Nhậpsudo raspi-configvà chọn2 Network Options, sau đó chọnN2 Wireless LAN. Chọn quốc gia, theo sau làSSID (tên)và mật khẩu của router. ChọnFinishđể quay lại dòng lệnh.

      Để khám phá địa chỉ IP của Raspberry Pi, hãy nhập:

      ip addr

      Ghi lại địa chỉ inet dưới wlan0: Đây là địa chỉ IP của Raspberry Pi. Một số router sẽ dành cùng một địa chỉ cho nó mỗi khi nó khởi động. Nếu không, bạn sẽ muốn thiết lập mộtđịa chỉ IP tĩnhcho Raspberry Pi của mình.

      Tại thời điểm này, bạn cũng có thể bật SSH để truy cập từ xa từ một máy tính khác nếu không muốn giữ Raspberry Pi của mình kết nối với màn hình trong khi tiếp tục thiết lập. Để làm như vậy, sử dụng lệnh:

      sudo service ssh start

      Từ dòng lệnh hoặc terminal của một máy tính khác, sau đó bạn có thể nhậpssh pi@[địa chỉ IP của Pi]để truy cập dòng lệnh của Raspberry Pi.

      4. Kích hoạt giao diện web Nextcloud

      Nhậpsudo ncp-configvà chọnYesnếu được nhắc cập nhật. Trong menu tiếp theo, chọnCONFIGvà sử dụng mũi tên xuống để cuộn xuống cuối danh sách.

      Tại đây chọnnc-webui, sau đó xóanovà gõyes.NhấnEnterrồi nhấn phím bất kỳ. ChọnBack and Finishđể thoát khỏi công cụ cấu hình.

      5. Kích hoạt và cấu hình Nextcloud

      Trong trình duyệt web trên một máy tính khác, hãy nhập địa chỉhttps://[địa chỉ IP của Pi]:4443.

      Nếu bạn thấy cảnh báo rằng kết nối của bạn không riêng tư hoặc an toàn, hãy chọn bỏ qua cảnh báo đó (bằng cách chọnAdvancedtrong Chrome hoặc Firefox) và tiếp tục truy cập trang web.

      Bạn sẽ được nhắc đăng nhập. Tên người dùng mặc định làncpvà mật khẩu làownyourbits.

      Xây dựng cloud server cho cá nhân
      Màn hình kích hoạt NextCloudPi hiển thị hai mật khẩu

      bạn cần sao chép và dán vào tài liệu để lưu giữ an toàn. Đầu tiên là mật khẩu cho web panel NextCloudPi cho phép bạn cấu hình cài đặt máy chủ. Thứ hai là dành cho chính giao diện web Nextcloud. Bạn có thể thay đổi các mật khẩu này sau nếu muốn.

      Với những mật khẩu được ghi lại, hãy chọnActivate.Sau vài giây, bạn sẽ được nhắc đăng nhập vào web panel NextCloudPi. Tuy nhiên, bây giờ hãy bỏ qua điều đó và đăng nhập vào giao diện web Nextcloud.

      Truy cập web Nextcloudhttps://[địa chỉ IP của Pi](không có hậu tố:4443) và đăng nhập bằng tên người dùngncpvà mật khẩu thứ hai mà bạn đã ghi lại.

      Sau khi tiếp tục qua màn hình chào mừng, bạn sẽ thấy bảng điều khiển web chính. Đây là máy chủ đám mây Raspberry Pi 4 của riêng bạn!

      trên cùng bên phải để truy cập menu drop-down với các tùy chọn choSettings(toàn bộ – cá nhân và quản trị viên),Users(bạn có thể thêm và quản lý người dùng) vàAppsđể cài đặt (chẳng hạn như bộ ứng dụng office Collabora Online và máy chủ ARM64).

      Trong thanh công cụ trên cùng là các biểu tượng cho những phần nhưFiles, Photos, Contacts, CalendarTasks. Ngoài ra còn có một biểu tượng NextCloudPi đưa bạn đến web panel. Nhấp vào nó và bạn sẽ được nhắc đăng nhập bằng tên người dùng ncp và mật khẩu đầu tiên bạn đã ghi lại.

      Một trình hướng dẫn sẽ xuất hiện với các tùy chọn để cấu hình bộ lưu trữ USB và quyền truy cập bên ngoài qua Internet.

      7. Thêm bộ nhớ ngoài USB

      Thẻ nhớ microSD của bạn sẽ có dung lượng hạn chế, vì vậy tốt nhất bạn nên thêm bộ lưu trữ USB cho máy chủ Nextcloud Raspberry Pi của mình. Kết nối thiết bị lưu trữ của bạn với một trong các cổng USB của Raspberry Pi.

      Trước khi tiếp tục, bạn cần tạo một thư mục cho nó trong dòng lệnh trên Raspberry Pi (hoặc quaSSH). Nhập lệnh sau:

      sudo mkdir /media/USBdrive

      Truy cập web panel NextCloudPi trong trình duyệt web trên máy tính khác của bạn. Trong trình hướng dẫn xuất hiện (bạn có thể mở nó bằng biểu tượng cây đũa phép ở thanh công cụ trên cùng), chọnUSB Configuration. Trả lờiYescho câu hỏi đầu tiên, sau đó nhấp vàoContinue.

      Sau đó, bạn sẽ được hỏi có muốn format USB không. Nếu bạn chắc chắn không có file quan trọng nào trên đó mà bạn muốn giữ lại, hãy chọnFormat USB. Cuối cùng, nhấnMove data to USB.

      Bạn có thể truy cập trang tổng quan của nó bằng trình duyệt web trên thiết bị khác. Thậm chí còn có một ứng dụng Nextcloud dành cho iOS và Android mà bạn có thể sử dụng.

      Chạy trên Docker

      https://henrynavarro.org/how-to-configure-your-own-private-cloud-with-nextcloud-%EF%B8%8F-8956459ec74c

      Tạo một thư mục/opt/NextCloudvà filedocker-compose.yaml

      version: '2'
      
      volumes:
        nextcloud:
        db:
      
      services:
        db:
          image: mariadb
          restart: always
          command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
      
          volumes:
            - db:/var/lib/mysql
          environment:
            - MYSQL_ROOT_PASSWORD=Bund7zXeVz7YnFknLGcnUjHtk #change this
            - MYSQL_PASSWORD=HFdMe9rn5kf7A8Pqc8v86Pre5 #change this
            - MYSQL_DATABASE=nextcloud
            - MYSQL_USER=nextcloud
      
        app:
          image: nextcloud
          restart: always
          ports:
            - 8888:80
          links:
            - db
          volumes:
            - nextcloud:/var/www/html
          environment:
            - MYSQL_PASSWORD=HFdMe9rn5kf7A8Pqc8v86Pre5  #change this to match the mysql_password above
            - MYSQL_DATABASE=nextcloud
            - MYSQL_USER=nextcloud
            - MYSQL_HOST=db
            - TZ=Europe/Copenhagen
      

      docker-compose up -d

      Vào trình duyệt và tiến hành thiết lậpNextcloudhttp://ip:8888

      https://www.51sec.org/2021/01/23/install-nextcloud-docker-and-integrate-with-nginx-and-letsencrypt-ssl-certificate/

      Thêm web-based office

      Bạn có thể mở trực tiếp các file word, excel, … trực tiếp trên NextCloud bằng dùng 1trong 2 ứng Collaboravà OnlyOffice. Bạn vào phần app để install và enable plugin NextCloud office của collabora hoặc onlyofffice. Collaborathì cho chạy internal và ko có ssl.

      https://techoverflow.net/2021/08/19/how-to-run-collabora-office-for-nextcloud-using-docker-compose/

      Với onlyoffice thì các bạn bắt buộc phải có ssl để có thể integrate với Nextcloud được.

      https://nimtechnology.com/2022/03/02/onlyoffice-collabora-install-open-source-web-based-office-for-nextcloud

      Cài tất cả trong 1

      https://nextcloud.com/blog/how-to-install-the-nextcloud-all-in-one-on-linux/

      https://nextcloud.com/blog/your-guide-to-the-nextcloud-all-in-one-on-windows-10-11/

      docker run --sig-proxy=false --name nextcloud-aio-mastercontainer --restart always --publish 80:80 --publish 8080:8080 --publish 8443:8443 --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config --volume //var/run/docker.sock:/var/run/docker.sock:ro -e NEXTCLOUD_DATADIR="/run/desktop/mnt/host/c/ncdata" nextcloud/all-in-one:latest

      Đảm bảo điều chỉnh/run/desktop/mnt/host/c/ncdata theo nhu cầu của bạn. Đường dẫn này tương đương vớiC:\ncdatatrên máy chủ Windows của bạn nên bạn cần chỉnh đường dẫn cho phù hợp. Gợi ý: đường dẫn bạn nhập cần bắt đầu bằng/run/desktop/mnt/host/. Nối vào đó vị trí chính xác trên máy chủ lưu trữ windows của bạn, ví dục/ncdata: tương đương vớiC:\ncdata.

      Sau đó, bạn có thể mở giao diện AIO tạihttps://localhost:8080. Bạn cần chấp nhận chứng chỉ Tự ký.

      Nhấp vàoOpen Nextcloud AIO login và dán mật khẩu của bạn: mannish sullen closure paging operator groin passing budding

      Nếu quên pass, dùng câu lệnh

      sudo cat /var/lib/docker/volumes/nextcloud_aio_mastercontainer/_data/data/configuration.json | grep password

      Mở cmd nhập : docker exec nextcloud-aio-mastercontainer grep password /mnt/docker-aio-config/data/configuration.json

      Tiếp theo, nhập miền công khai mà bạn đã thiết lập trước khi bắt đầu hướng dẫn này. Giao diện sẽ giúp bạn tìm ra các bước chính xác. (Thiết lập DDNS cho miền của bạn để trỏ đến IP công cộng của bạn, chuyển tiếp ít nhất các cổng 443/tcp và 3478/udp và 3478/tcp tới máy Windows của bạn.)

      time zones=Asia/Ho_Chi_Minh

      Sau khi bạn đã thiết lập chính xác, nó sẽ cho phép bạn chuyển sang bước tiếp theo, nơi bạn có thể định cấu hình các addon tùy chọn mong muốn và múi giờ, đồng thời nhấp vàoStart containers để tải xuống và khởi động chúng.

      Bây giờ bạn sẽ thấy một công cụ quay vòng sẽ mất một lúc (tùy thuộc vào tốc độ internet của bạn, khoảng 10 phút trở lên). Giờ đây, bạn có thể mở phiên bản Nextcloud mới của mình và đăng nhập bằng thông tin đăng nhập quản trị viên đã cho.

      Bạn cũng nên mởBackup and restore phần gõ trong một đường dẫn như ví dụ/run/desktop/mnt/host/c/backup và gửi nó. Đường dẫn này tương đương vớiC:\backuptrên máy chủ Windows của bạn nên bạn cần chỉnh đường dẫn cho phù hợp. Gợi ý: đường dẫn bạn nhập cần bắt đầu bằng/run/desktop/mnt/host/. Nối vào đó vị trí chính xác trên máy chủ lưu trữ windows của bạn, ví dục/backup: tương đương vớiC:\backup.

      Đó là nó! Bây giờ mọi thứ đã được thiết lập và sẵn sàng để sản xuất.

      Giữ dữ liệu của bạn, thông qua AIO mới của bạn!

      Lưu ý: Hệ thống chạy yêu cầu ram 23G dể duy trì

      Ứng dụng chạy ngầm Vmmen 14.88,1 MB CPU thì thấp 1.3%, Ethernet receive 6Mbps.

      Sao lưu Nextcloud

      Để sao lưu cài đặt Nextcloud, bạn cần giữ lại bốn điều chính:

      1. Thư mục cấu hình

      2. Thư mục dữ liệu

      3. Thư mục chủ đề

      4. Kho dữ liệu

      Đầu tiên bật chế độ bảo trì. khóa phiên của người dùng đã đăng nhập và ngăn chặn các lần đăng nhập mới nhằm ngăn chặn sự không nhất quán trong dữ liệu của bạn. Dùng câu lệnh

      sudo -u www-data php occ maintenance:mode –on
      Hoặc thay đổi trong file config. Vào config/config.php.
      Thay đổi:”maintenance” => falsethành”maintenance” => true

      Đừng quên thay đổi nó trở lại false khi bạn hoàn thành.

      Chỉ cần sao chép các thư mục cấu hình, dữ liệu và chủ đề của bạn (hoặc thậm chí toàn bộ thư mục dữ liệu và cài đặt Nextcloud của bạn) sang một nơi bên ngoài môi trường Nextcloud của bạn. Bạn có thể sử dụng lệnh này:

      rsync -Aavx nextcloud/ nextcloud-dirbkp_`date +”%Y%m%d”`/

      Câu lệnh rsync chỉ đơn giản là bản sao một-một của tất cả các tệp từ nguồn sang đích, đồng thời là một bản sao. Ví dụ: nếu bạn muốn sao lưu thư mục chính có dung lượng 100G trong 7 ngày trong tuần, phương tiện sao lưu của bạn sẽ cần 700G dung lượng trống. Sao lưu gia tăng hoặc Sao lưu khác biệt bắt đầu bằng một bản sao lưu đầy đủ, sau đó tạo lịch sử phiên bản trong đó chỉ những thay đổi trong tệp của bạn được lưu trữ. Điều này dẫn đến việc giảm đáng kể dung lượng ổ đĩa cần thiết.

      Nếu bạn chưa có bất kỳ kinh nghiệm nào với Rsync, bạn có thể biết việc sao chép các tệp quan trọng của mình sang vị trí sao lưu thật dễ dàng đến kinh ngạc. Như ví dụ đơn giản bên dưới cho thấy, logic không thực sự thay đổi nhiều nếu bạn đang sử dụng ổ đĩa ngoài, máy chủ từ xa chạy rsyncd hoặc chạy rsync qua ssh:

      Giả sử bạn muốn sao chép thư mục /home/user/documents sang thư mục /mnt/backup, bạn có thể sử dụng câu lệnh sau:

      sudo rsync -Aavx /home/user/documents /mnt/backup

      • Nếu thư mục đích chưa tồn tại, rsync sẽ tạo thư mục đó.
      • rsync sẽ chỉ sao chép các tệp và thư mục đã thay đổi kể từ lần đồng bộ hóa trước đó (nếu có). Điều này giúp tiết kiệm thời gian và băng thông.

      Sao chép một thư mục và loại trừ các tệp có đuôi .tmp:*

      rsync -avz –exclude=“*.tmp” /home/user/documents/ /mnt/backup/documents/

      Sao chép một thư mục và xóa các tệp ở đích mà không có ở nguồn:

      rsync -avz –delete /home/user/documents/ /mnt/backup/documents/

      Đồng bộ hóa dữ liệu giữa các máy tính khác nhau qua SSH

      sudo rsync -avz -e ssh user@remote_host:/remote/path/ /local/path/

      chỉ sao chép đè lên các tệp mới hơn ở nguồn so với đích

      rsync -auv /home/user/source/ /mnt/backup/

      Đây là giải pháp cơ bản nhất và mặc dù nó hoàn thành công việc nhưng nó vẫn chưa phải là một giải pháp mạnh mẽ. bạn có thể thiết lập một mảng cho các thư mục bạn muốn sao lưu và lặp qua chúng:

      #!/bin/bash

      readonly BACKUP_DIRS=(/etc /home/$USER /root /var/www)
      readonly RSYNC_PROFILE=”user@backup.perfacilis.com::profile”
      readonly RSYNC_DEFAULTS=”-avz”

      backup_folders() {
      local DIR TARGET

      for DIR in ${BACKUP_DIRS[@]}; do
      TARGET=${DIR/#\//}
      TARGET=${TARGET//\//_}
      rsync $RSYNC_DEFAULTS $DIR/ $RSYNC_PROFILE/$TARGET
      done
      }

      main() {
      backup_folders
      }

      main

      Sửa đổi BACKUP_DIRS mảng theo nhu cầu của bạn, chỉ cần tách từng thư mục bằng một khoảng trắng, lưu văn bản dưới dạng backup.sh, và chỉ cần chạy nó từ dòng lệnh: bash backup.sh và bản sao lưu của bạn sẽ chạy. Tùy chọn, bạn có thể làm cho tệp có thể chạy được chmod +x backup.sh, bạn có thể chạy tệp này mà không cần gọi bash: ./backup.sh.

      Đừng quên dòng cuối cùng main được gọi, nếu không sẽ không có gì xảy ra. Nếu tập lệnh của bạn có vấn đề, hãy sử dụng bash -x ./backup.sh để gỡ lỗi.

      Sao lưu cơ sở dữ liệu. Để sao lưu MySQL/MariaDB:

      mysqldump –single-transaction -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +”%Y%m%d”`.bak

      mysqldump -u username -p database_name > /thumuc/nextcloud_backup.sql

      nhập password vô.

      SQLite

      sqlite3 data/owncloud.db .dump > nextcloud-sqlbkp_`date +”%Y%m%d”`.bak

      PostgreSQL

      PGPASSWORD=”password” pg_dump [db_name] -h [server] -U [username] -f nextcloud-sqlbkp_`date +”%Y%m%d”`.bak
      Khôi phục bản sao lưu

      Nextcloud không phải là một giải pháp sao lưu, đó là một cách đồng bộ hóa dữ liệu của bạn nhưng không phải là bản sao lưu. Hãy suy nghĩ mà xem, nếu bạn xóa một tập tin khỏi máy tính A, việc xóa đó sẽ ngay lập tức được đồng bộ hóa ở mọi nơi thông qua Nextcloud. Có các biện pháp bảo vệ tại chỗ, chẳng hạn như thùng rác và kiểm soát phiên bản, nhưng Nextcloud không phải là giải pháp sao lưu. Chỉ cần sao chép thư mục dữ liệu và cấu hình của bạn (hoặc thậm chí toàn bộ thư mục dữ liệu và cài đặt Nextcloud của bạn) vào môi trường Nextcloud của bạn. Bạn có thể sử dụng lệnh này:

      rsync -Aax nextcloud-dirbkp/ nextcloud/

      Khôi phục cơ sở dữ liệu. Trước khi khôi phục bản sao lưu, bạn cần đảm bảo xóa tất cả các bảng cơ sở dữ liệu hiện có. Cách dễ nhất để thực hiện việc này là xóa và tạo lại cơ sở dữ liệu. SQLite thực hiện việc này một cách tự động.

      MySQL là công cụ cơ sở dữ liệu được khuyên dùng. Để khôi phục MySQL:

      mysql -h [server] -u [username] -p[password] -e “DROP DATABASE nextcloud”
      mysql -h [server] -u [username] -p[password] -e “CREATE DATABASE nextcloud”

      PostgreSQL:

      PGPASSWORD=”password” psql -h [server] -U [username] -d template1 -c “DROP DATABASE \”nextcloud\”;”
      PGPASSWORD=”password” psql -h [server] -U [username] -d template1 -c “CREATE DATABASE \”nextcloud\”;”
      Tiến hành khôi phục data, giả định rằng bản sao lưu trước đó của bạn có tên là “nextcloud-sqlbkp.bak”

      Để khôi phục MySQL:

      mysql -h [server] -u [username] -p[password] [db_name] < nextcloud-sqlbkp.bak


      SQLite

      rm data/owncloud.db
      sqlite3 data/owncloud.db < nextcloud-sqlbkp.bak


      PostgreSQL

      PGPASSWORD=”password” psql -h [server] -U [username] -d nextcloud -f nextcloud-sqlbkp.bak

      Tính lỗi thời trên máy chủ.

      Nếu dữ liệu trên máy chủ và máy khách khác nhau, máy khách sẽ mặc định tìm nạp dữ liệu từ máy chủ.

      Nếu bản sao lưu được khôi phục đã lỗi thời thì trạng thái của máy khách có thể cập nhật hơn trạng thái của máy chủ. Trong trường hợp này, hãy đảm bảo chạy lệnh maintenance:data-fingerprint sau đó. Nó thay đổi logic của thuật toán đồng bộ hóa để cố gắng khôi phục càng nhiều dữ liệu càng tốt. Do đó, các tệp bị thiếu trên máy chủ sẽ được khôi phục từ máy khách và trong trường hợp có nội dung khác, người dùng sẽ được hỏi.

      Xem trực tiếp tại trang https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html
      Ngoài ra có thể dùng câu lệnh nhân bản ảnh của ổ đĩa bằng rpi-clone
      https://github.com/billw2/rpi-clone
      Dùng script để sao lưu và phục hồi https://github.com/DecaTec/Nextcloud-Backup-Restore
      Dùng app trong nextcloud https://github.com/nextcloud/backup
      https://kevquirk.com/how-to-backup-nextcloud/

      Tăng thời gian nhớ đang nhập ở máy client

      Khi đăng nhập vào Nextcloud trên giao diện web, máy chủ không bao giờ tự động đăng xuất người dùng sau bất kỳ khoảng thời gian nào.

      ‘remember_login_cookie_lifetime’ => 1296000,

      ‘session_lifetime’ => 43200,

      ‘session_keepalive’ => false,

      ‘auto_logout’ => false,

      Có cách nào để khắc phục sự cố này để nếu người dùng không hoạt động trên giao diện web, hệ thống sẽ đăng xuất họ sau 30 phút không hoạt động không? Bật hoặc tắt tính năng tự động đăng xuất sau session_lifetime, ngay cả khi session keepalive được bật. Điều này sẽ đảm bảo rằng trình duyệt không hoạt động sẽ được đăng xuất ngay cả khi các yêu cầu đến máy chủ có thể kéo dài thời gian tồn tại của phiên.

      ‘remember_login_cookie_lifetime’ => 1296000,
      ‘session_lifetime’ => 1800,
      ‘session_keepalive’ => false,
      ‘auto_logout’ => true,

      Reset mật khẩu của admin

      Dùng câu lệnh:

      sudo -u www-data php /var/www/nextcloud/occ user:resetpassword admin
      sau đó nhập mật khẩu mới. Nếu user admin không có, bạn có thể thử các user khác.

      Cấu hình nginx cho cả 3 ứng dụng.

      upstream php-handler {
      server unix:/var/run/php/php8.1-fpm.sock;
      }
      map $arg_v $asset_immutable {
      “” “”;
      default “immutable”;
      }
      server {
      listen xxxx0;
      listen [::]:xxxx0;
      server_name domain;
      ssl on;
      ssl_certificate /home/orangepi/ssl/bundle.crt;
      ssl_certificate_key /home/orangepi/ssl/domain.key;
      server_tokens off;
      client_max_body_size 1G;
      client_body_timeout 300s;
      fastcgi_buffers 64 4K;
      gzip on;
      gzip_vary on;
      gzip_comp_level 4;
      gzip_min_length 256;
      gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
      gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
      client_body_buffer_size 512k;
      add_header Referrer-Policy “no-referrer” always;
      add_header X-Content-Type-Options “nosniff” always;
      add_header X-Download-Options “noopen” always;
      add_header X-Frame-Options “SAMEORIGIN” always;
      add_header X-Permitted-Cross-Domain-Policies “none” always;
      add_header X-Robots-Tag “noindex, nofollow” always;
      add_header X-XSS-Protection “1; mode=block” always;
      add_header Strict-Transport-Security “max-age=15552000; includeSubDomains” always;
      fastcgi_hide_header X-Powered-By;
      include mime.types;
      types {
       text/javascript js mjs;
      application/wasm wasm;
       }
      root /var/www/nextcloud;
      index index.php index.html /index.php$request_uri;
      charset utf-8;
      location / {
      try_files $uri $uri/ /index.php?$args;
      }
      location ~ .php$ {
      fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      }
      location = / {
      if ( $http_user_agent ~ ^DavClnt ) {
      return 302 /remote.php/webdav/$is_args$args;
      }
      }
      location = /robots.txt {
      allow all;
      log_not_found off;
      access_log off;
      }
      location ^~ /.well-known {
      location = /.well-known/carddav { return 301 /remote.php/dav/; }
      location = /.well-known/caldav { return 301 /remote.php/dav/; }
      location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
      location /.well-known/pki-validation { try_files $uri $uri/ =404; }
      return 301 /index.php$request_uri;
      }
      location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
      return 404;
      }
      location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
      return 404;
      }
      location ~ \.php(?:$|/) {
      # Required for legacy support
      rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      set $path_info $fastcgi_path_info;
      try_files $fastcgi_script_name =404;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $path_info;
      fastcgi_param HTTPS on;
      fastcgi_param modHeadersAvailable true;
      fastcgi_param front_controller_active true;
      fastcgi_pass php-handler;
      fastcgi_intercept_errors on;
      fastcgi_request_buffering off;
      fastcgi_max_temp_file_size 0;
      }
      location ~ ^\/(?:updater|ocs-provider)(?:$|\/) {
      try_files $uri/ =404;
      index index.php;
      }
      location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map|html|ttf|jpeg|bcmap|mp4|webm)$ {
      try_files $uri /index.php$request_uri;
      add_header Cache-Control “public, max-age=15778463, $asset_immutable”;
      add_header Referrer-Policy “no-referrer” always;
      add_header X-Content-Type-Options “nosniff” always;
      add_header X-Download-Options “noopen” always;
      add_header X-Frame-Options “SAMEORIGIN” always;
      add_header X-Permitted-Cross-Domain-Policies “none” always;
      add_header X-Robots-Tag “none” always;
      add_header X-XSS-Protection “1; mode=block” always;
      add_header Strict-Transport-Security “max-age=15552000; includeSubDomains” always;
      access_log off;
      }
      location ~ \.woff2?$ {
      try_files $uri /index.php$request_uri;
      expires 7d; # Cache-Control policy borrowed from `.htaccess`
      access_log off; # Optional: Don’t log access to assets
      }
      # Rule borrowed from `.htaccess`
      location /remote {
      return 301 /remote.php$request_uri;
      }
      }
      #odoo server
      upstream odoo {
      server 127.0.0.1:8069;
      }
      upstream odoochat {
      server 127.0.0.1:8072;
      }
      map $http_upgrade $connection_upgrade {
      default upgrade;
      ” close;
      }
      server {
      listen xxxx2;
      listen [::]:xxxx2;
      server_name domain;
      ssl on;
      ssl_certificate /home/orangepi/ssl/bundle.crt;
      ssl_certificate_key /home/orangepi/ssl/domain.key;
      proxy_read_timeout 720s;
      proxy_connect_timeout 720s;
      proxy_send_timeout 720s;
      gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
      gzip on;
      gzip_min_length 1000;
      location /websocket {
      proxy_pass http://odoochat;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      add_header Strict-Transport-Security “max-age=31536000; includeSubDomains”;
      }
      location / {
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_redirect off;
      proxy_pass http://odoo;
      add_header Strict-Transport-Security “max-age=31536000; includeSubDomains”;
      }
      }
      #erp next
      server {
      listen xxxx1;
      listen [::]:xxxx1;
      server_name domain;
      ssl on;
      ssl_certificate /home/orangepi/ssl/bundle.crt;
      ssl_certificate_key /home/orangepi/ssl/domain.key;
      proxy_read_timeout 720s;
      proxy_connect_timeout 720s;
      proxy_send_timeout 720s;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      location / {
      proxy_pass http://localhost:8000;
      }
      }

      Khắc phục lỗi

      Khi gặp sự cố khi đăng nhập lần đầu, trước tiên bạn nên kiểm tra các tệp này:

      tail /var/www/nextcloud/data/nextcloud.log
      tail /var/log/nginx/access.log
      tail /var/log/nginx/error.log

      Nếu bạn chỉ thấy một số yêu cầu đúng trong nhật ký truy cập, nhưng không có đăng nhập nào xảy ra, bạn hãy kiểm tra quyền truy cập cho phiên php và thư mục wsdlcache. Hãy thử kiểm tra quyền và thực hiện thay đổi nếu cần:

      chown nginx:nginx /var/lib/php/session/
      chown root:nginx /var/lib/php/wsdlcache/
      chown root:nginx /var/lib/php/opcache/

      Một số tác vụ nền chỉ chạy một lần một ngày. Khi một giờ được xác định (múi giờ là UTC) cho cấu hình này. Giá trị 1 eg sẽ chỉ chạy các tác vụ nền này trong khoảng thời gian từ 01:00 sáng UTC đến 05:00 sáng UTC: ‘maintenance_window_start’ => 1,

      hoặc chạy câu lệnh sudo -u www-data php occ config:system:set maintenance_window_start –type=integer –value=1

      Sau đó: sudo systemctl restart nginx, sudo systemctl restart php8.2-fpm

      Cách hiệu quả với tôi là thay đổi thời gian chờ của curl tại thời điểm gọi nó bằng trình cài đặt phần mềm trong: [đường dẫn đến nextcloud]/lib/private/Installer.php. Bạn sẽ thấy một dòng có nội dung như sau:

      // Download the release
      $tempFile = $this->tempManager->getTemporaryFile(‘.tar.gz’);
      $timeout = $this->isCLI ? 0 : 120;
      $client = $this->clientService->newClient();
      Thay đổi giá trị 120 (giây) và đặt giá trị lớn hơn hoặc xóa điều kiện và luôn để ở mức 0 (không giới hạn, nhưng có lẽ không phải là ý tưởng hay nhất).

      • Máy chủ web của bạn không được thiết lập đúng cách để giải quyết: “/ocm-provider/”

      Vào /etc/nginx/conf.d/nextcloud.conf:
      location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34]).php(?:$|/) {

      replace ocs-provider/ by oc[ms]-provider/

      và:

      location ~ ^/(?:updater|ocs-provider)(?:$|/) {
      try_files $uri/ =404;
      index index.php;

      Thay ocs-provider thành oc[ms]-provider

      Sau đó reload: nginx -t
      sudo systemctl reload nginx.service

      • upgrades Nextcloud by running:

      sudo -u www-data php /var/www/nextcloud/updater/updater.phar

      Một hệ thống như Nextcloud đôi khi yêu cầu các tác vụ phải được thực hiện thường xuyên mà không cần sự tương tác của người dùng hoặc cản trở hiệu suất của Nextcloud. lên lịch công việc định kỳ theo ba cách – sử dụng AJAX, Webcron hoặc cron. Tuy nhiên, phương pháp được khuyến nghị là sử dụng cron. Phương pháp này cho phép thực hiện các công việc theo lịch trình mà không gặp phải những hạn chế cố hữu mà máy chủ Web có thể có.

      Để chạy một cron job trên hệ thống *nix, cứ 5 phút một lần, với người dùng máy chủ Web mặc định (thường xuyên www-data hoặc wwwrun), bạn phải thiết lập cron job sau để gọi tập lệnh cron.php :

      sudo -u www-data crontab -e

      Và nối thêm dòng này:

      */5 * * * * php8.2 -f /var/www/nextcloud/cron.php
      Bạn có thể xác minh xem cron job đã được thêm và lên lịch chưa bằng cách thực thi:

      # crontab -u www-data -l
      Trả về:

      [snip]
      */5 * * * * php -f /var/www/nextcloud/cron.php
      Ghi chú

      Bạn phải thay thế đường dẫn /var/www/nextcloud/cron.php bằng đường dẫn đến bản cài đặt Nextcloud hiện tại của bạn.

      • The “Strict-Transport-Security” HTTP header is not set to at least “15552000” seconds.

      location / {
      allow x.x.x.x;
      allow 10.0.x.x/24;
      deny all;

      proxy_pass http://172.24.8.5:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      add_header Strict-Transport-Security “max-age=15552000; includeSubDomains” always;

      }

      location /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
      }

      location /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
      }

      • Cấu hình nginx cho đúng.

      https://docs.nextcloud.com/server/stable/admin_manual/installation/nginx.html#nginx-config

      https://raw.githubusercontent.com/nextcloud/server/v19.0.0/.htaccess

      PHP không hỗ trợ SVG: cần cài thêm apt-get install libmagickcore-6.q16-6-extra

      Ver 28 có lỗi Máy chủ không có cấu hình thời gian bắt đầu thời gian bắt đầu bảo trì. Điều này có nghĩa là các công việc nền hàng ngày sử dụng nhiều tài nguyên cũng sẽ được thực thi trong thời gian sử dụng chính của bạn. Trong file config.php thêm dòng: ‘Maintenance_window_start’ => 17,

      Hoặc dùng câu lệnh: sudo -u www-data php /var/www/nextcloud/occ config:system:set Maintenance_window_start –value=”17″ –type=integer

      Sau đó reboot: systemctl reload nginx.service

      systemctl restart php8.1-fpm.service

      • Lỗi tải file quá lớn báo network err 499. Chỉnh tham số trong /etc/php/8.2/fpm/php.ini

      memory_limit = 16G

      max_execut_time = 600

      max_input_time = 600

      default_socket_timeout = 360

      post_max_size = 8G

      upload_max_filesize = 8G

      Trong /etc/php/7.4/fpm/pool.d/www.conf

      request_terminate_timeout = 600

      Trong /etc/nginx/sites-enables/nextcloud.conf (ở vị trí location ~ .php). Thêm fastcgi_read_timeout 360; fastcgi_send_timeout 360; fastcgi_connect_timeout 1200;

      • Trình duyệt đang đăng: 504 Gateway Time-out. Điều này là do quá trình cài đặt rất chậm trên một số thiết bị ARM nên fastcgi/proxy hết thời gian chờ. Các dòng mới nên được thêm vào trong location ~ \.php(?:$|/)phần:

      fastcgi_read_timeout 600;
      fastcgi_send_timeout 600;
      fastcgi_connect_timeout 600;
      proxy_connect_timeout 600;
      proxy_send_timeout 600;
      proxy_read_timeout 600;
      send_timeout 600;

      Sau khi thực hiện thay đổi này, quá trình cài đặt đã diễn ra mà không gặp bất kỳ sự cố nào.

      Trường hợp máy Debian 12 thì làm theo https://www.linuxtuto.com/how-to-install-nextcloud-on-debian-12/

      Trường hợp máy có apache2: netstat -a | grep tcp

      1. sudo service apache2 stop

      2. systemctl status apache2
      3. sudo apt-get purge apache2

      4. sudo apt-get update

      5. sudo apt-get install nginx

      6. sudo service nginx restart

      Đặt lại mật khẩu cho root: su passwd root
      Thiếu thư viện php: sudo apt-get install php-imagick kiểm tra có hay chưa php -m | grep imagick
      • Allow list for WOPI requests

      sudo -u www-data php ./occ app:enable richdocumentscode_arm64

      sudo -u www-data php ./occ config:app:get richdocumentscode_arm64 wopi_allowlist

      sudo -u www-data php ./occ config:app:set richdocumentscode_arm64 wopi_allowlist

      Nếu máy office nằm riêng: # adopt to your system e.g. add sudo, www user etc..

      occ config:app:set richdocuments wopi_url –value ${CODE_URL}

      occ richdocuments:activate-config

      CODE nó có nghĩa là “dịch vụ chạy trên máy chủ CODE” đơn giảnhttp://office:9980 về mặt kỹ thuật, có thể chạy toàn bộ ngăn xếp mà không cần TLS nhưng bạnkhông bao giờnên đưa hệ thống của mình lên internet mà không có TLS.

      • Xóa thông báo của nextcloud office. sử dụng 172.18.0.0/16 trong khai báo WOPI. Trích từ https://docs.cloudron.io/apps/collabora/

      Xem log: sudo tail -f /var/www/nextcloud/data/nextcloud.log | jq

      Xoa log: sudo -u www-data truncate /var/www/nextcloud/data/nextcloud.log –size 0

      occ files:cleanup

      Nextcloud không bao giờ xóa bất cứ thứ gì theo mặc định nếu nó không nghĩ rằng nó cần không gian. Nếu bạn muốn nó tự động xóa các phiên bản tệp cũ và các mục rác cũ, bạn phải thêm lệnh vào config.php

      ‘trashbin_retention_obligation’ => ’30, 60′,
      ‘versions_retention_obligation’ => ’30, 180′,

      sudo -u apache php /usr/share/nextcloud/occ files:cleanup

      Upload file bị báo lỗi

      Gán quyền truy cập: chown -R www-data:www-data /var/www/nextcloud/data/tmp

      Thêm nội dung: /var/www/nextcloud/config/config.php

      ‘tempdirectory’ => ‘/var/www/nextcloud/data/tmp’,

      Might check value of sys_temp_dir in /etc/php/7.3/fpm/php.ini

      /etc/php/8.2/cli/php.ini and /etc/php/8.2/apache2/php.ini

      changing the following settings to higher values:
      upload_max_filesize = 4G
      max_execution_time = 3600
      max_input_time = 3600

      upload_tmp_dir = “/var/www/nextcloud/data/tmp”
      sys_temp_dir = “/var/www/nextcloud/data/tmp”

      Cài ứng dụng trên máy khách

      Kết nối với Nextcloud của bạn từ Windows, macOS hoặc Linux, ứng dụng Nextcloud Desktop Sync cho phép bạn:

      Chỉ định một hoặc nhiều thư mục trên máy tính mà bạn muốn đồng bộ hóa với máy chủ Nextcloud.
      Luôn đồng bộ hóa các tập tin mới nhất, bất kể chúng được lưu trữ ở đâu.
      Các tập tin của bạn luôn được tự động đồng bộ hóa giữa máy chủ Nextcloud và PC cục bộ.

      Phiên bản 3.14 của ứng dụng đồng bộ hóa máy tính để bàn Nextcloud có nhiều tính năng và cải tiến mới.

      -Hộp thoại chính sẽ là cửa sổ thông thường nếu biểu tượng khay không có sẵn trên hệ thống.
      -Tệp ảo sẽ là tùy chọn. Điều đó cho phép máy khách chạy trên phiên bản Windows cũ hơn.
      -Cải tiến cho các tập tin ảo trên Windows
      -Cải thiện hiệu suất lưu lượng mạng
      -Cải tiến cho công cụ đồng bộ

      Install

      https://github.com/nextcloud-releases/desktop/releases

      Yêu cầu hệ thống
      Windows 10+ (chỉ 64-bit)
      macOS 11.4+ (chỉ 64-bit)
      Linux (ubuntu 22.04 hoặc openSUSE 15.5 hoặc …) (chỉ 64-bit)

      Trình cài đặt MSI cung cấp một số tính năng có thể được cài đặt hoặc gỡ bỏ riêng lẻ, bạn cũng có thể điều khiển chúng thông qua dòng lệnh, nếu bạn đang tự động hóa quá trình cài đặt, hãy chạy lệnh sau: https://docs.nextcloud.com/desktop/latest/installing.html

      • Bạn có thể điều chỉnh thư mục cài đặt bằng cách chỉ định thuộc tính INSTALLDIR như sau:

      msiexec /passive /i Nextcloud-x.y.z-x64.msi INSTALLDIR=”C:\Program Files\Non Standard Nextcloud Client Folder”

      • Để tắt cập nhật tự động, bạn có thể truyền thuộc tínhSKIPAUTOUPDATE.:

      msiexec /passive /i Nextcloud-x.y.z-x64.msi SKIPAUTOUPDATE=”1″

      Ứng dụng OCR

      Đầu tiên, hãy tải xuống và cài đặt ứng dụng Nextcloud Workflow OCR từ Nexcloud-appstore chính thức hoặc tải xuống tệp tarball phù hợp từ trang phát hành .

      cd /var/www/<NEXTCLOUD_INSTALL>/apps
      wget https://github.com/R0Wi/workflow_ocr/releases/download/<VERSION>/workflow_ocr.tar.gz
      tar -xzvf workflow_ocr.tar.gz
      rm workflow_ocr.tar.gz
      Công việc nền tảng Nextcloud
      Vì quá trình xử lý thực tế của các tệp được thực hiện không đồng bộ thông qua công cụ công việc nền của Nextcloud, hãy đảm bảo bạn đã thiết lập đúng chức năng cron như mô tả tại đây . Nếu có thể, hãy sử dụng crontab phương pháp này để có độ tin cậy cao hơn.

      Trong backend OCRmyPDF được sử dụng để xử lý các tệp PDF. Đảm bảo bạn đã cài đặt công cụ dòng lệnh này. Đảm bảo bạn có phiên bản phù hợp (xem bên dưới, Thư viện đã sử dụng).

      apt-get install ocrmypdf
      CLI ocrmypdfcũng có thể chuyển đổi các tệp hình ảnh đơn ( jpg/ png) sang PDF trước khi xử lý qua OCR. Chế độ này cũng được ứng dụng này hỗ trợ. Bạn có thể đọc thêm về nó trong tài liệu chính thức .

      Ngoài ra, nếu bạn muốn sử dụng cài đặt ngôn ngữ cụ thể , vui lòng cài đặt các gói tương ứng tesseract .

      # English
      apt-get install tesseract-ocr-eng

      # German
      apt-get install tesseract-ocr-deu

      # Chinese – Simplified
      apt-get install tesseract-ocr-chi-sim

      Cách sử dụng: https://github.com/R0Wi-DEV/workflow_ocr/blob/master/README.md

      Cập nhật phiên bản Nextcloud

      Bạn có thể sử dụng trình cập nhật dòng lệnh: sudo -u www-data php updater/updater.phar

      Điều này sẽ tìm kiếm, tải xuống và trích xuất mã của phiên bản mới. Cuối cùng, nó sẽ hỏi bạn có muốn thực hiện lệnh occ upgrade để chạy bản cập nhật hay không. Nó phải tôn trọng đường dẫn nâng cấp được hỗ trợ. Điều đó đúng khi thiết lập đơn giản. Nếu có thứ gì đó trong nền cho gói, đường dẫn nâng cấp có thể khác và bạn phải thông qua trình quản lý gói của gói bạn đang sử dụng.

      Steps that will be executed:
      [ ] Check for expected files
      [ ] Check for write permissions
      [ ] Create backup
      [ ] Downloading
      [ ] Verify integrity
      [ ] Extracting
      [ ] Enable maintenance mode
      [ ] Replace entry points
      [ ] Delete old files
      [ ] Move new files in place
      [ ] Done

      Cơ sở dữ liệu bị thiếu một số chỉ mục. Do thực tế là việc thêm các chỉ mục vào các bảng lớn có thể mất một thời gian nên chúng không được thêm tự động. Bằng cách chạy “occ db:add-missing-indices”, các chỉ mục bị thiếu đó có thể được thêm thủ công trong khi phiên bản vẫn tiếp tục chạy. Sau khi các chỉ mục được thêm vào, các truy vấn đến các bảng đó thường nhanh hơn nhiều. Thiếu chỉ mục tùy chọn “textstep_session” trong bảng “text_steps”. Thiếu chỉ mục tùy chọn “fs_parent” trong bảng “filecache”. Thiếu chỉ mục tùy chọn “mounts_user_root_path_index” trong bảng “mounts”. Thiếu chỉ mục tùy chọn “systag_by_tagid” trong bảng “systemtag_object_mapping”.

      Chạy sudo -u www-data php /path/to/nextcloud/occ db:add-missing-indices. Hầu hết các cảnh báo về Bảo mật & thiết lập đã được giải quyết.

      Chuyển địa chỉ và cuộc hẹn từ iCloud sang Nextcloud

      Giống như các thiết bị Android , trước tiên bạn phải chuyển dữ liệu hiện có từ iCloud của Apple sang Nextcloud. Sau đó, bạn có thể thiết lập hai tài khoản mới cho các thiết bị Apple của mình để đồng bộ hóa hoàn toàn tự động sổ địa chỉ và cuộc hẹn. Apple hỗ trợ CalDAV cho lịch và CardDAV cho danh bạ, vì vậy bạn thậm chí không cần phải cài đặt thêm ứng dụng nào.

      https://opensource.com/article/23/3/switch-icloud-nextcloud

      Đầy đủ hướng dẫn cài docker odoo có ssl và timezero trên windows 10

      Tài liệu tham khảo triển khai odoo
      Nội dung

        Nạp IP lên noip bằng DUC, SSL mua dịch vụ của noip 19,99$ (520K).

        Dùng cloudflare thì tạo file bat để nó chạy

        @ECHO OFF 
        
        :: This batch file details networking configuration.
        
        TITLE Update IP to Cloudflare.
        
        ECHO Please wait... Update IP to Cloudflare.
        
        G:\docker\odoo14\cloudflare-sync.exe -api-token eVzLcWs3yrSF-bIaT -records-file-name odoo.json -zone-id 0c8761ac1fbd -frequency 10000
        

        odoo.json thì có nội dung:

        [
        {
        "type": "A",
        "name": "pkp.vn",
        "proxied": false,
        "ttl": 1200,
        "priority": 1
        }
        ]

        Còn SSL thì mua dùng, sử dụng zerossl chỉ cho 3 lần gia hạn.

        Nội dung trong file docker-compose.yml: Nội dung thay đổi trong file yml, dùng câu lệnh để update: docker compose up –build Để cập nhật ver mới phải xóa image odoo rồi cho build lại. Chạy lệnh: docker compose up -d docker compose down
        version: "3.9"
        services:
            db:
                image: postgres:13
                user: root
                environment:
                    - POSTGRES_PASSWORD=odoo
                    - POSTGRES_USER=odoo
                    - POSTGRES_DB=postgres
                    - TZ=Asia/Ho_Chi_Minh
                    - PGTZ=Asia/Ho_Chi_Minh
                    - DEBIAN_FRONTEND=noninteractive
                restart: always             # run as a service
                volumes:
                    - ./postgresql:/var/lib/postgresql/data
        
            odoo14:
                image: odoo:14
                user: root
                depends_on:
                    - db
                ports:
                    - 80:8069
                    - 8072:8072
                tty: true
                command: --
            #    command: odoo scaffold /mnt/extra-addons/custom_module
                environment:
                    - HOST=db
                    - USER=
                    - PASSWORD=
                    - TZ=Asia/Ho_Chi_Minh
                    - PGTZ=Asia/Ho_Chi_Minh
                    - DEBIAN_FRONTEND=noninteractive
                volumes:
                    #- /etc/timezone:/etc/timezone:ro
                    #- /etc/localtime:/etc/localtime:ro
                    #- ./entrypoint.sh:/entrypoint.sh   # if you want to install additional Python packages, uncomment this line!
                    - ./addons:/mnt/extra-addons
                    - ./etc:/etc/odoo
                
                restart: always             # run as a service
        
            nginx:
                container_name: nginx
                image: nginx:latest
                restart: always
                depends_on:
                    - odoo14
                ports:            
                    - 443:443
                volumes:
                    - ./nginx/conf:/etc/nginx/conf.d
                    - ./ssl:/etc/ssl
                    - ./nginx/site:/usr/share/nginx/html
           

        Các câu lệnh chạy trong Terminal:

        pip3 install html2text
        

        Set timezore trực tiếp trong command

        apt-get update && \
        apt-get install -yq tzdata && \ 
        ln -fs /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime && \ 
        dpkg-reconfigure -f noninteractive tzdata
        
        ENV TZ="Asia/Ho_Chi_Minh"

        Nội dung trong file conf của nginx:

        upstream odoo {
        server odoo14:8069 weight=1 fail_timeout=0;
        }
        
        server {
        
        listen 443 ssl;
        charset         utf-8;
        server_name pkp.vn www.pkp.vn;
        root /usr/share/nginx/html;
        index index.html index.htm;
        
        # log files
            access_log  /usr/share/nginx/html/openerp.access.log;
            error_log   /usr/share/nginx/html/openerp.error.log;
        
            ssl_certificate /etc/ssl/certificate.crt; 
            ssl_certificate_key /etc/ssl/private.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
                ssl_ciphers         HIGH:!aNULL:!MD5;
         
        proxy_read_timeout 3000s;
        proxy_connect_timeout 3000s;
        proxy_send_timeout 3000s;
        
        # Add Headers for odoo proxy mode
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
         
        
        
            location / {        
        proxy_redirect     off;
                proxy_pass http://odoo;
              
            }
        location ~* /web/static/ {
                   proxy_cache_valid 200 90m;
                   proxy_buffering    on;
                   expires 864000;
                   proxy_pass http://odoo;
               }
        #  common gzip
        gzip_types text/css text/scss text/plain text/xml application/xml application/json applicat$
        gzip on;
        client_max_body_size 3G;
        }
        server {
        
        listen 443 ssl;
        charset         utf-8;
        server_name phankienphat.net www.phankienphat.net;
        root /usr/share/nginx/html;
        index index.html index.htm;
        
        # log files
            access_log  /usr/share/nginx/html/openerp.access.log;
            error_log   /usr/share/nginx/html/openerp.error.log;
        
        ssl_certificate /etc/ssl/phankienphat.net.pem;
        ssl_certificate_key /etc/ssl/phankienphat.net.key;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
        
           ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
           ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
           ssl_prefer_server_ciphers on;
        
           add_header Strict-Transport-Security max-age=15768000;
        
         
        proxy_read_timeout 3000s;
        proxy_connect_timeout 3000s;
        proxy_send_timeout 3000s;
        
        # Add Headers for odoo proxy mode
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
         
        
            location / {        
        proxy_redirect     off;
                proxy_pass http://odoo;
              
            }
        location ~* /web/static/ {
                   proxy_cache_valid 200 90m;
                   proxy_buffering    on;
                   expires 864000;
                   proxy_pass http://odoo;
               }
        #  common gzip
        gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
        gzip on;
        client_max_body_size 3G;
        }

        Do proxy cho odoo chat không mở cho phương thức http, nên cho post 8072 và 80 nên cho chạy bình thường. Để app Discuss nhận tin và chuông.

        Cấu hình cho odoo

        [options]
        addons_path = /mnt/extra-addons
        admin_passwd = $pbQ
        csv_internal_sep = ,
        data_dir = /etc/odoo
        db_host = db
        db_maxconn = 1064
        db_name = False
        db_password = odoo
        db_port = 5432
        db_sslmode = prefer
        db_template = template0
        db_user = odoo
        dbfilter = 
        demo = {}
        email_from = False
        geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb
        http_enable = True
        http_interface = 
        http_port = 8069
        import_partial = 
        limit_memory_hard = 3221225472
        limit_memory_soft = 2684354560
        limit_request = 8192
        limit_time_cpu = 600
        limit_time_real = 1200
        limit_time_real_cron = -1
        list_db = True
        log_db = False
        log_db_level = warning
        log_handler = :INFO
        log_level = info
        logfile = /etc/odoo/odoo-server.log
        logrotate = False
        longpolling_port = 8072
        max_cron_threads = 1
        max_connections = 800
        osv_memory_age_limit = False
        osv_memory_count_limit = False
        pg_path = None
        pidfile = False
        proxy_mode = True
        reportgz = False
        screencasts = 
        screenshots = /tmp/odoo_tests
        server_wide_modules = base,web
        smtp_password = False
        smtp_port = 25
        smtp_server = localhost
        smtp_ssl = False
        smtp_user = False
        syslog = False
        test_enable = False
        test_file = False
        test_tags = None
        transient_age_limit = 1.0
        translate_modules = ['all']
        unaccent = False
        upgrade_path = 
        without_demo = False
        workers = 2
        timezone = Asia/Ho_Chi_Minh
        

        Kết nối data bị Scheduled Actions kích hoạch dưới 5s, đôi khi do workers = 2. Nên phải set timezero. workers = 0.

        cài đặt Internet Information Services (IIS) chuyển hướng cho odoo

        Iis
        Nội dung

          Chương trình web server cũng rất phổ biến của Microsoft là Internet Information Services (IIS)
          Bật các tính năng trong IIS

          Iis

          Bật Proxy

          Mở bảng điều khiển quản lý IIS >> định tuyến yêu cầu ứng dụng

          theo hướng dẫn của trang https://shyju.wordpress.com/2019/04/10/enable-iis-redirect-and-https-for-odoo-on-windows-server/

          https://www.odoo.com/vi_VN/forum/tro-giup-1/access-openerp-using-iis-8927

          https://shyju.wordpress.com/2019/04/10/enable-iis-redirect-and-https-for-odoo-on-windows-server/

          https://wiki.matbao.net/kb/huong-dan-cai-dat-ssl-tren-may-chu-windows/

          Nap file vo bang mmc:

          Step 1: Open up a Run window and type “mmc”

          Step 2: Click File > Add/Remove Snap In

          Step 3: Add > Certificates, Click OK

          Step 4: Choose “Computer Account”, then “Local Computer” and proceed.

          Step 5: Hit OK

          Step 6: Right click the Certificates folder on: Console Root > Certificates (Local Computer) > Personal > Certificates

          Step 7: Select All Tasks > Import (Please note that the “Local Machine” is selected on the next window)

          Step 8: Browse your .pfx file

          Step 9: Then go to the IIS and create https binding

           

          Cập nhật ip cho dns cloudflare trên docker

          Tro Ten Mien Ve May Nha
          Nội dung

            Truy cập mạng gia đình của bạn từ xa thông qua một tên miền tùy chỉnh mà không cần IP tĩnh!
            Tập lệnh này được viết cho nền tảng Raspberry Pi để cho phép tự lưu trữ đơn giản, chi phí thấp nhằm thúc đẩy một mạng internet phi tập trung hơn. Khi thực thi, tập lệnh tìm nạp các địa chỉ IPv4 và IPv6 công khai, đồng thời tạo/cập nhật các bản ghi DNS cho các miền phụ trong Cloudflare. Các bản ghi DNS cũ, trùng lặp sẽ bị xóa để quản lý.

            Chỉnh sửaconfig.jsonvà thay thế các giá trị bằng giá trị của riêng bạn.
            {
            “cloudflare”: [
            {
            “authentication”: {
            “api_token”: “api_token_here”,
            “api_key”: {
            “api_key”: “api_key_here”,
            “account_email”: “your_email_here”
            }
            },
            “zone_id”: “your_zone_id_here”,
            “subdomains”: [
            {
            “name”: “”,
            “proxied”: false
            },
            {
            “name”: “remove_or_replace_with_your_subdomain”,
            “proxied”: false
            }
            ]
            }
            ],
            “a”: true,
            “aaaa”: true,
            “purgeUnknownRecords”: false,
            “ttl”: 300
            }
            Chi tiết xem trang https://github.com/timothymiller/cloudflare-ddns/blob/master/config-example.json
            Triển khai với Docker Compose
            https://github.com/timothymiller/cloudflare-ddns
            Sửa đổi đường dẫn tệp máy chủ của config.json bên trong phần ổ đĩa của docker-compose.yml.
            Từ thư mục gốc của dự án
            docker-compose up -d

             

            Chạy WordPress với Docker Compose với Nginx và SSL

            Nội dung

              Hướng dẫn này sẽ tiến hành tạo một website WordPress thông qua Docker Compose, Nginx, PHP 8.1, MariaDB và Let’s Encrypt trên Windows. Trước hết tạo một thư mục chứa dự án mới. Ở đây mình sẽ đặt tên dự án là wp-project. Bạn có thể thay thế tên này bằng tên mà bạn muốn.
              Tạo một file docker-compose.yml

              Trước thử nginx chạy được hay không?

              version: “3”
              services:
              client:
              image: nginx
              ports:
              – 8000:80
              volumes:
              – ./site:/usr/share/nginx/html
              Tạo thư mục site chứa file index.html
              docker-compose up –detach
              Mở web lên xem thử: $ chromium http://localhost:8000

              Tạo bộ mã chứng thực ssl

              từ https://manage.sslforfree.com/certificates
              Chỉnh lại file docker-compose.yml

              version: "3.9"
              services:
              nginx:
              container_name: nginx
              image: nginx:latest
              restart: unless-stopped
              ports:
              - 80:80
              - 443:443
              volumes:
              - ./nginx/conf:/etc/nginx/conf.d
              - ./ssl:/etc/ssl
              - ./nginx/site:/usr/share/nginx/html

              Tạo file default.conf trong thư mục \nginx\conf

              server {
              listen [::]:80;
              listen 80;

              server_name odoo.wpvn.xyz;
              return 301 https://odoo.wpvn.xyz$request_uri;
              }
              server {

              listen 443 ssl;
              charset utf-8;
              server_name odoo.wpvn.xyz;
              root /usr/share/nginx/html;
              index index.html index.htm;

              ssl on;
              ssl_certificate /etc/ssl/certificate.crt;
              ssl_certificate_key /etc/ssl/private.key;

              location ~ /.well-known/acme-challenge {
              allow all;
              root /usr/share/nginx/html;
              }
              }

              Và 1 file options-ssl-nginx.conf nội dung search tìm trên mạng.
              Trong thư mục ssl có 2 file certificate.crt (copy thêm nội dung của ca_bundle.crt vào), private.key
              Giờ ssl đã chạy giữa client và server. Kết quả thấy có https và nội dung trang web.
              Thực hiện cập nhật docker, bằng câu lệnh trong cmd:
              docker-compose down
              cảnh báo: Nó loại bỏ các thùng chứa, khối lượng và mạng.
              sau đó, cập nhật lại bằng câu lệnh.
              docker-compose up
              Bạn không cần phải tạo lại hình ảnh bộ chứa mới khi thay đổi trong tệp YAML. Docker đủ khả năng để xác định những thay đổi trong tệp YAML sẽ tạo ra một hình ảnh được cập nhật khi bạn chạy lệnh trên. Đây là bước phổ biến mà tôi đã từng làm theo trong công việc của mình. Lệnh trên sẽ tạo lại các vùng chứa khi tìm thấy các thay đổi trong tệp YAML.

              Thử làm cho odoo

              như sau:

              version: "3.9"
              services:
              db:
              image: postgres:13
              user: root
              environment:
              - POSTGRES_PASSWORD=odoo
              - POSTGRES_USER=odoo
              - POSTGRES_DB=postgres
              restart: always # run as a service
              volumes:
              - ./postgresql:/var/lib/postgresql/data

              odoo14:
              image: odoo:14
              user: root
              depends_on:
              - db
              tty: true
              command: --
              # command: odoo scaffold /mnt/extra-addons/custom_module
              environment:
              - HOST=db
              - USER=odoo
              - PASSWORD=odoo
              volumes:
              #- /etc/timezone:/etc/timezone:ro
              #- /etc/localtime:/etc/localtime:ro
              # - ./entrypoint.sh:/entrypoint.sh # if you want to install additional Python packages, uncomment this line!
              - ./addons:/mnt/extra-addons
              - ./etc:/etc/odoo

              restart: always # run as a service

              nginx:
              container_name: nginx
              image: nginx:latest
              restart: unless-stopped
              depends_on:
              - odoo14
              ports:
              - 80:80
              - 443:443
              volumes:
              - ./nginx/conf:/etc/nginx/conf.d
              - ./ssl:/etc/ssl
              - ./nginx/site:/usr/share/nginx/html

              Cấu hình default.conf để nginx nhận như sau:

              upstream odoo {
              server odoo14:8069 weight=1 fail_timeout=0;
              }
              upstream odoochat {
              server odoo14:8072 weight=1 fail_timeout=0;
              }
              server {

              listen 443 ssl;
              charset utf-8;
              server_name odoo.wpvn.xyz;
              root /usr/share/nginx/html;
              index index.html index.htm;

              # log files
              access_log /usr/share/nginx/html/openerp.access.log;
              error_log /usr/share/nginx/html/openerp.error.log;

              ssl on;
              ssl_certificate /etc/ssl/certificate.crt;
              ssl_certificate_key /etc/ssl/private.key;

              proxy_read_timeout 720s;
              proxy_connect_timeout 720s;
              proxy_send_timeout 720s;

              # Add Headers for odoo proxy mode
              proxy_set_header X-Forwarded-Host $host;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_set_header X-Real-IP $remote_addr;

              location /longpolling {
              proxy_pass http://odoochat;
              }
              location / {
              proxy_redirect off;
              proxy_pass http://odoo;

              }
              location ~* /web/static/ {
              proxy_cache_valid 200 90m;
              proxy_buffering on;
              expires 864000;
              proxy_pass http://odoo;
              }
              # common gzip
              gzip_types text/css text/scss text/plain text/xml application/xml application/json applicat$
              gzip on;
              }

              ## http redirects to https ##
              server {
              listen 80;
              server_name odoo.wpvn.xyz;

              # Strict Transport Security
              add_header Strict-Transport-Security max-age=2592000;
              rewrite ^/.*$ https://$host$request_uri? permanent;
              }

              Tiếp theo mình cấu hình wordpress.


              version: "3.9"
              services:
              wordpress:
              container_name: wordpress
              image: wordpress:php8.1-apache
              restart: always
              stdin_open: true
              tty: true
              environment:
              WORDPRESS_DB_HOST: mariadb
              WORDPRESS_DB_USER: db_user
              WORDPRESS_DB_PASSWORD: db_user_pass
              WORDPRESS_DB_NAME: db_name
              volumes:
              - wordpress_data:/var/www/html
              - ./wordpress:/var/www/html
              mariadb:
              container_name: mariadb
              image: mariadb
              restart: always
              environment:
              MYSQL_DATABASE: db_name
              MYSQL_USER: db_user
              MYSQL_PASSWORD: db_user_pass
              MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
              volumes:
              - db_data:/var/lib/mysql
              nginx:
              container_name: nginx
              image: nginx:latest
              restart: unless-stopped
              ports:
              - 80:80
              - 443:443
              volumes:
              - ./nginx/conf:/etc/nginx/conf.d
              - ./certbot/conf:/etc/nginx/ssl
              - ./certbot/data:/var/www/html
              certbot:
              container_name: certbot
              image: certbot/certbot:latest
              command: certonly --webroot --webroot-path=/var/www/html --email youremail@domain.com --agree-tos --no-eff-email -d domain.com -d www.domain.com
              volumes:
              - ./certbot/conf:/etc/letsencrypt
              - ./certbot/logs:/var/log/letsencrypt
              - ./certbot/data:/var/www/html
              volumes:
              db_data:
              wordpress_data:

              Theo như nội dung cấu hình của File docker-compose.yml, thì chúng ta sẽ cần tạo file default.conf bên trong đường dẫn nginx/conf

              server {
              listen [::]:80;
              listen 80;

              server_name domain.com www.domain.com;

              root /var/www/html;
              index index.php;

              location ~ /.well-known/acme-challenge {
              allow all;
              root /var/www/html;
              }

              location / {
              try_files $uri @apache;
              }

              location ~ ^/.user.ini {
              deny all;
              }

              location ~* .(svg|svgz)$ {
              types {}
              default_type image/svg+xml;
              }

              location = /favicon.ico {
              log_not_found off;
              access_log off;
              }

              location = /robots.txt {
              allow all;
              log_not_found off;
              access_log off;
              }

              location @apache {
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_set_header Host $host;
              proxy_pass http://wordpress:80;
              }

              location ~[^?]*/$ {
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_set_header Host $host;
              proxy_pass http://wordpress:80;
              }

              location ~ .php$ {
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_set_header Host $host;
              proxy_pass http://wordpress:80;
              }

              location ~/. {
              deny all;
              access_log off;
              log_not_found off;
              }
              }

              Tiếp theo có hai thư mục certbot và wordpress được tạo ra và nằm cùng với file docker-compose.yml
              cerbot: Chứa các file liên quan đến chứng chỉ SSL của bạn.
              wordpress: Chứa mã nguồn website WordPress của bạn.

               

               
              Khi bạn có chứng chỉ SSL Let’s Encrypt, bạn có thể cấu hình HTTPS và chuyển hướng trang web sang HTTPS bằng cách chỉnh sửa file cấu hình default.conf

              server {
              listen [::]:80;
              listen 80;

              server_name domain.com www.domain;

              return 301 https://domain.com$request_uri;
              }

              server {
              listen [::]:443 ssl http2;
              listen 443 ssl http2;

              server_name domain.com;

              ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
              ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

              return 301 https://www.domain.com$request_uri;
              }

              server {
              listen [::]:443 ssl http2;
              listen 443 ssl http2;

              server_name www.domain.com;

              ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
              ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

              root /var/www/html;
              index index.php;

              location ~ /.well-known/acme-challenge {
              allow all;
              root /var/www/html;
              }

              location / {
              try_files $uri @apache;
              }

              location ~ ^/.user.ini {
              deny all;
              }

              location ~* .(svg|svgz)$ {
              types {}
              default_type image/svg+xml;
              }

              location = /favicon.ico {
              log_not_found off;
              access_log off;
              }

              location = /robots.txt {
              allow all;
              log_not_found off;
              access_log off;
              }

              location @apache {
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_set_header Host $host;
              proxy_pass http://wordpress:80;
              }

              location ~[^?]*/$ {
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_set_header Host $host;
              proxy_pass http://wordpress:80;
              }

              location ~ .php$ {
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $remote_addr;
              proxy_set_header X-Forwarded-Proto $scheme;
              proxy_set_header Host $host;
              proxy_pass http://wordpress:80;
              }

              location ~/. {
              deny all;
              access_log off;
              log_not_found off;
              }
              }

               
              https://huongdan.azdigi.com/cai-da-wordpress-docker-compose-nginx-apache-ssl/
              https://blog.jarrousse.org/2022/04/09/an-elegant-way-to-use-docker-compose-to-obtain-and-renew-a-lets-encrypt-ssl-certificate-with-certbot-and-configure-the-nginx-service-to-use-it/
              https://thana.in.th/2019/10/15/how-to-set-up-free-ssl-certificates-from-lets-encrypt-using-docker-and-nginx/
              https://blog.emtwo.ch/2022/08/home-assistant-in-docker-with-ngix-and.html
              https://www.bogotobogo.com/DevOps/Docker/Docker-Compose-Nginx-Reverse-Proxy-Multiple-Containers.php

              Tài liệu tham khảo triển khai odoo

              Tài liệu tham khảo triển khai odoo
              Nội dung

                https://www.odoobooks.com/en/14.0/odoo/index.html này dành riêng cho doanh nhân muốn triển khai ứng dụng kinh doanh ngay lập tức cho doanh nghiệp của mình. Nó là một cuốn sách trực tuyến được viết dựa trên Phiên bản Cộng đồng và Doanh nghiệp. Cuốn sách này bao gồm thực tiễn triển khai tốt nhất cho hầu hết các ứng dụng được sử dụng như Bán hàng, Mua hàng, Hàng tồn kho, Kế toán tài chính và Sản xuất.

                https://viindoo.com/documentation/14.0/ gồm 3 Tài liệu :

                viindoo.com/documentation/14.0/applications.html Người dùng (Khám phá hướng dẫn của chúng tôi để giúp bạn sử dụng và định cấu hình nền tảng theo ứng dụng).

                viindoo.com/documentation/14.0/vi/developer.htmlTài liệu dành cho nhà phát triển (Tài liệu kỹ thuật cho nhà phát triển. Hướng dẫn chi tiết cách phát triển framework Odoo)

                Cuối cùng là Đóng góp (Bạn muốn đóng góp cho Viindoo nhưng không biết bắt đầu từ đâu? Các hướng dẫn và nguyên tắc luôn sẵn sàng giúp bạn cải thiện Viindoo tốt hơn nữa.)

                Phiên bản 15 cũng như vậy https://viindoo.com/documentation/15.0/

                Sách online https://www.odoobooks.com/en/15.0/odoo/index.html và bản in https://www.odoobooks.com/_/downloads/en/15.0/pdf/

                Tài liệu tham khảo triển khai odoo

                https://skyerp.net/blog/phan-mem-erp-ung-dung-erp-trong-quan-tri-doanh-nghiep-1

                Các tài liệu chính thức và chất lượng để học Odoo, cả cho Functional và Technical.
                https://www.odoo.com/page/docs
                https://www.odoo.com/slides/all

                8 loại hoạt động trong kinh doanh dạng game: https://www.odoo.com/web/content/36251299

                Triển khai VOIP

                https://telefoncek.si/2021/11/17/raspbx-installation/ bản gốc ở https://github.com/MatejKovacic/RasPBX-install/blob/main/english.md

                https://pbxbook.com/voip/raspbxmac.html

                https://pimylifeup.com/raspberry-pi-asterisk/

                https://brezular.com/2019/01/02/asterisk-on-raspberry-pi/

                Cài đặt chi tiết câu lệnh: http://mghadam.blogspot.com/2021/03/install-asterisk-18-freepbx-15-on.html

                https://dallasrpi.org/Files/DallasRPI/Raspberry%20Asterisk%20Configuration%20-%20Part%201.pdf

                https://dallasrpi.org/Files/DallasRPI/Raspberry%20Asterisk%20Configuration%20-%20Part%201%20%26%202.pdf

                https://dallasrpi.org/Files/DallasRPI/Raspberry%20Asterisk%20Configuration%20-%20Part%203.pdf

                https://dallasrpi.org/Files/DallasRPI/Raspberry%20Asterisk%20Configuration%20-%20Part%204.pdf

                https://dallasrpi.org/Files/DallasRPI/

                Những app gợi ý thêm vào

                Automatic Database Backup To Local Server, Remote Server,Google Drive, Dropbox, Onedrive, Nextcloud and Amazon S3 Odoo17

                https://apps.odoo.com/apps/modules/17.0/auto_database_backup

                Mô-đun này giúp tạo bản sao lưu cơ sở dữ liệu của bạn tự động theo các khoảng thời gian đều đặn. Các bản sao lưu được tạo có thể được lưu trữ trong bộ nhớ cục bộ, trên máy chủ FTP, máy chủ SFTP, Dropbox, Nextcloud, Google Drive, OneDrive và Amazon S3. Ngoài ra, còn có các tính năng tự động xóa các bản sao lưu cũ và bật thông báo qua email.
                Mô-đun này sử dụng ‘dropbox’ phụ thuộc python bên ngoài. Trước khi cài đặt mô-đun, hãy cài đặt gói python trước. Gói python cần thiết có thể được cài đặt bằng lệnh sau,
                pip install dropbox
                Mô-đun này sử dụng phụ thuộc python bên ngoài ‘nextcloud’. Trước khi cài đặt mô-đun, hãy cài đặt gói python trước. Gói python cần thiết có thể được cài đặt bằng lệnh sau,
                pip install pyncclient
                Mô-đun này sử dụng phụ thuộc python bên ngoài ‘nextcloud-api-wrapper’. Trước khi cài đặt mô-đun, hãy cài đặt gói python trước. Gói python cần thiết có thể được cài đặt bằng lệnh sau,
                pip install nextcloud-api-wrapper
                Mô-đun này sử dụng phụ thuộc python bên ngoài ‘Boto3’. Trước khi cài đặt mô-đun, hãy cài đặt gói python trước. Gói python cần thiết có thể được cài đặt bằng lệnh sau,
                pip install boto3
                Mô-đun này sử dụng phụ thuộc python bên ngoài ‘paramiko’. Trước khi cài đặt mô-đun, hãy cài đặt gói python trước. Gói python cần thiết có thể được cài đặt bằng lệnh sau,
                pip install paramiko

                Vào Cài đặt --> Kỹ thuật --> Cấu hình sao lưu để cấu hình sao lưu.

                Tạo cấu hình sao lưu cơ sở dữ liệu mới.
                Nhập Tên cơ sở dữ liệu và Mật khẩu chính. Chỉ định Điểm đến sao lưu. Nhập đường dẫn thư mục sao lưu, nếu thư mục không tồn tại, thư mục mới sẽ được tạo.

                Lưu trữ bản sao lưu vào Nextcloud.

                Chọn đích sao lưu là Nextcloud. Nhập Tên miền, Tên người dùng, Mật khẩu và Tên thư mục nơi bạn muốn lưu trữ bản sao lưu của mình trên máy chủ NextCloud. Kiểm tra nút Kết nối để kiểm tra xem kết nối có thành công không.

                Mỗi ngày, một Hành động theo lịch trình sẽ diễn ra để lưu trữ bản sao lưu trên Máy chủ Nextcloud. Bản sao lưu sẽ được lưu trữ dưới dạng tên thư mục được cung cấp trong trường ID thư mục trong Odoo.

                Khung Odoo Mobile với Flutter

                Dự án này hỗ trợ tất cả các phiên bản Odoo Community và Enterprise . Nó có thể không hoạt động tốt với các phiên bản Odoo cũ hơn.

                Nền tảng được hỗ trợ
                -> Android
                -> iOS

                https://github.com/mustafal/Odoo-JsonRpc-with-Flutter

                Tên miền trỏ về máy tính nhà

                Tro Ten Mien Ve May Nha
                Nội dung

                  Nếu không có tên miền thì dùng no-ip làm là nhanh nhất, nhưng phải theo dõi mail báo gia hạn tên miền. Còn có tên miền rồi thì dùng cách ClouFlare cho đảm bảo chứ một số nhà cung cấp tool Việt Nam như pavietnam để update lên DNS thì đừng chớ mong gì.
                  CloudFlare có mạng lưới máy chủ toàn cầu (có cả Việt Nam) phục vụ cho DNS nên lúc nào cũng đảm bảo thời gian look-up cực nhanh khi truy cập từ mọi nơi trên thế giới. Hơn nữa, tốc độ cập nhật DNS ở đây gần như là ngay lập tức luôn.
                  https://canhme.com/kinh-nghiem/huong-dan-su-dung-cloudflare/

                  1. Đăng ký tài khoản CloudFlare

                  Để dùng được CloudFlare, bạn cần phải có một tài khoản. Thủ tục đăng ký rất nhanh gọn.
                  – Đầu tiên bạn truy cập vào https://www.cloudflare.com, click Sign Up

                  – Thông tin đăng ký chỉ cần nhập Email và Password là xong.

                  – Đăng ký xong, bạn hãy Login để sử dụng.

                  2. Thêm Website vào CloudFlare

                  2.1. Add Site
                  – Đầu tiên bạn click link Add a Site để thêm website mới vào hệ thống CloudFlare.
                  – Nhập tên miền rồi click Add Site.

                  Bạn có thể thêm nhiều tên miền cùng một lúc, hãy nhấn vào Learn how. Sau khi được chuyển sang tab mới, đọc và làm theo hướng dẫn cụ thể nhé.

                  2.2. Lựa chọn Plan
                  CloudFlare có khá nhiều plan với các chức năng cao cấp, tuy nhiên chúng ta chỉ cần dùng Free là đủ rồi.

                  – Chọn Free rồi nhấn Confirm Plan.

                  – Đợi vài giây để CloudFlare scan toàn bộ các bản ghi hiện có. Đây là một chức năng rất hay, bạn không cần tốn thời gian để chuyển các bản ghi DNS cũ sang nữa.

                  2.3. Xác nhận các bản ghi cho tên miền
                  – Nếu tên miền đang hoạt động, toàn bộ các bản ghi sẽ được CloudFlare quét và hiển thị bên dưới, hầu hết đều chuẩn nên bạn chỉ cần duyệt qua mà thôi.

                  – Có thể xuất hiện trường hợp không có bản ghi nào cả, nếu tên miền vừa được đăng ký xong.

                  Bạn có thể cập nhật các bản ghi ngay bây giờ hoặc cập nhật sau, ở bước III. Quản lý DNS mình có nói chi tiết bên dưới.
                  Nhấn nút Continue để tiếp tục.

                  2.4. Trỏ Name servers về CloudFlare
                  Cuối cùng, CloudFlare cung cấp 2 bản ghi Name servers, hãy trỏ tên miền về Name servers mới này. Nhấn Done, check nameservers để hoàn tất.

                  Bước tiếp theo là một số gợi ý tối ưu website (Quick Start Guide) của CloudFlare, bạn có thể tham khảo thêm hoặc nhấn Summary > Finish để hoàn tất.

                  Đợi một lúc chờ tên miền cập nhật Name servers xong thì CloudFlare sẽ tự động gửi một email thông báo thành công. Tên miền đã xuất hiện trong tài khoản của bạn và có Status là Active.

                  Vậy là xong, website hoạt động rồi đó.

                  Xem thêm series: Hướng dẫn quản lý tên miền để thay đổi Nameserver.

                  3. Quản lý DNS

                  Đây là thao tác quan trọng nhất khi sử dụng CloudFlare bạn phải nắm vững.

                  Nếu muốn thay đổi các bản ghi của tên miền, sau khi đăng nhập, bạn hãy click vào tên miền muốn sửa. Giao diện chính sẽ xuất hiện như sau:

                  Giao dien chinh CloudFlare

                  Nhấn vào link DNS ở hàng trên cùng, bạn sẽ thấy tất cả các bản ghi DNS như ở bước 2 bên trên.

                  Click bản ghi tương ứng để hiện thông tin và cập nhật hoặc xóa bỏ. Để website có thể hoạt động được bạn sẽ cần ít nhất 2 bản ghi như hình bên dưới, trong đó bản ghi loại A trỏ về IP, còn bản ghi CNAME trỏ về địa chỉ domain.

                  Với trạng thái Proxy status,

                  Đám mây màu vàng + Proxied: kích hoạt các chức năng miễn phí của CloudFlare như CDN, ẩn IP gốc, Firewall chống DDoS…
                  Đám mây màu xám + DNS only: tắt toàn bộ chức năng của CloudFlare, chỉ dùng làm DNS.
                  Để thay đổi trạng thái Proxy, bạn chọn dòng có record tương ứng và click biểu tượng đám mây rồi nhấn nút Save.
                  Do mình không thích sử dụng CDN nên thường chọn Off CloudFlare, tắt hết các service đi, chỉ dùng làm DNS trung gian mà thôi. Khi gặp vấn đề mới bật lên để dùng Firewall hạn chế DDoS. Tuy nhiên, mình khuyên các bạn nên bật các service.
                  Một số nhà mạng trong nước cấm Blogspot không truy cập được, khi bật Proxy bạn sẽ dễ dàng vượt qua. Xem thêm hướng dẫn cài đặt tên miền cho Blogspot.

                  Tạo subdomain
                  Nếu muốn thêm subdomain, bạn hãy nhấn nút + Add record nhập bản ghi A với Name là subdomain cần tạo và IPv4 nhập vào địa chỉ IP muốn trỏ đến, chọn trạng thái Proxy, rồi click Save là được.

                  Nếu muốn tạo wildcard record subdomain (tất cả subdomain mặc định trỏ về 1 IP), trong ô Name bạn hãy điền ký tự *.

                  4. Kích hoạt các dịch vụ nâng cao

                  Ngoài chức năng căn bản DNS trung gian, CloudFlare còn có một số chức năng nâng cao nữa như Firewall, CDN (trong phần Caching), Free SSL (trong phần Crypto), Minify (trong phần Speed), URL Forwarding (trong phần Page Rules)… Để sử dụng được bạn phải kích hoạt đám mây màu vàng Proxy với record chính trỏ về IP và record www.

                  Firewall và CDN mặc định sẽ được kích hoạt nếu các bản ghi được bật đám mây màu vàng Proxied.

                  4.1. SSL/TLS – Chứng chỉ SSL miễn phí
                  CloudFlare cung cấp dịch vụ SSL miễn phí, thao tác cài đặt vô cùng đơn giản, tự động gia hạn, đơn giản hơn cả dùng Let’s Encrypt luôn. Tất cả thao tác trong tab SSL/TLS.

                  Các loại certificate ở CloudFlare như sau:

                  Flexible: cung cấp SSL miễn phí, nhưng dữ liệu gửi từ CloudFlare về máy chủ sẽ không được mã hóa. Bạn không cần cài chứng chỉ SSL trên server. Sau vài click là chạy, tất cả các loại website đều sử dụng được. Nên dùng nếu bạn chưa có nhiều kinh nghiệm.
                  Full: dữ liệu từ CloudFlare gửi về máy chủ sẽ được mã hóa, do đó bạn phải có một chứng chỉ SSL được cài đặt trước trên server. Có thể sử dụng chứng chỉ tự ký, hoặc tạo chứng chỉ của CloudFlare.
                  Full (strict): tương tự kiểu Full nhưng CloudFlare sẽ xác thực chứng chỉ này, chứng chỉ của bạn phải mua hoặc sử dụng Let’s Encrypt.
                  Mình sẽ hướng dẫn các bạn kích hoạt Flexible SSL, dùng miễn phí luôn.

                  – Ở menu trên cùng, bạn nhấn vào biểu tượng SSL/TLS, sau đó chọn Flexible ở dòng SSL ngay phía dưới:

                  Đợi một lúc để CloudFlare cập nhật là bạn có thể truy cập thẳng vào đường dẫn https://domain.com, nếu truy cập được là thành công.

                  – Tiếp theo, bạn hãy vào tab Edge Certificates bên dưới SSL/TLS, kích hoạt dòng Always Use HTTPS thành On để CloudFlare tự động redirect link http sang https.

                  – Lần đầu truy cập có thể gặp lỗi vỡ giao diện, hoặc không hiển thị thanh địa chỉ màu xanh, nguyên nhân do chúng ta chưa chỉnh toàn bộ link bài viết, ảnh, file css, file js từ http sang https.

                  Nếu bạn dùng WordPress, hãy cài đặt và kích hoạt plugin Really Simple SSL để tự động chuyển toàn bộ link http sang https, xóa cache nếu cần thiết nữa.

                  Chi tiết hướng dẫn cài plugin bạn có thể xem ở bài hướng dẫn cài đặt Let’s Encrypt.

                  Nếu không muốn dùng thêm plugin, để tự động chuyển toàn bộ link http sang https, thêm đoạn code sau lên trên cùng của file wp-config.php:

                  # SSL
                  if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
                  $_SERVER['HTTPS']='on';

                  4.2. Page Rules: URL Forwarding – Redirect tên miền
                  Page Rules là chức năng dùng để tạo link redirect của CloudFlare. Mỗi tên miền được tạo tối đa 3 rule free.

                  Trong ví dụ này mình sẽ redirect tên miền canhme.net sang canhme.com mà không cần hosting, chỉ cần dùng name server của CloudFlare.

                  Bạn hãy click vào biểu tượng Page Rules ở menu trên cùng rồi chọn Create Page Rule và điền thông tin tương tự như sau:

                  Rule trên sẽ redirect luôn cả những trang con nữa, ví dụ https://canhme.net/godaddy/ sẽ tự động chuyển thành https://canhme.com/godaddy/

                  Nhấn Save and Deploy để lưu lại.

                  – Tạo thêm một rule nữa với URL là www.canhme.net, kết quả cuối cùng của bạn sẽ tương tự như sau:

                  Đợt vài giây để CloudFlare cập nhật là bạn có thể kiểm tra ngay kết quả rồi đó.

                  5. Một số vấn đề khi sử dụng CloudFlare

                  5.1. Lấy IP gốc visitor
                  Với Shared Hosting, các bạn không có quyền can thiệp nhiều vào hệ thống. Để lấy IP gốc của visitor thay vì IP proxy của CloudFlare, chỉ có duy nhất cách cài plugin tương ứng với hệ thống CMS đang sử dụng bên dưới:
                  WordPress Plugin: hiển trị IP thật của người dùng khi truy cập, ngoài ra plugin này còn hỗ trợ optimize database và trực tiếp report spam users từ blog.
                  Joomla Extension: hiển trị IP thật của người dùng khi truy cập, ngoài ra không có thêm chức năng nào khác.
                  Drupal Extension: hiển trị IP thật của người dùng khi truy cập, ngoài ra không có thêm chức năng nào khác.
                  Nếu dùng VPS/Server với Nginx hoặc Webserver khác, hãy tham khảo hướng dẫn Lấy IP thật khi dùng CloudFlare trên blog Học VPS.

                  5.2. File bị cache nội dung quá lâu
                  Nội dung những file .css, .js thường được CloudFlare cache khá lâu trên server, dẫn đến tình trạng dở khóc dở cười khi bạn đã thay đổi nội dung mà F5 refresh mãi vẫn ra nội dung cũ.

                  Theo hướng dẫn từ CloudFlare, bạn có thể sử dụng tên file có chứa version, ví dụ style-05.css hoặc styles.css?v=1234 hoặc xóa cache trong tab Caching > Configuration.

                  Custome Purge: và nhập danh sách đường dẫn từng file muốn xóa.
                  Purge Everything để xóa toàn bộ cache luôn.
                  Chờ một lúc rồi quay trở lại trình duyệt và nhấn F5 một lần nữa, bạn sẽ thấy nội dung mới sẽ xuất hiện.

                  5.3. Tắt CloudFlare trong WP-Admin hoặc trang quản trị
                  Trong một số ít trường hợp, CloudFlare sẽ gây ra lỗi khi thao tác trong trang quản trị WP-Admin chẳng hạn, khi đó bạn cần tắt CloudFlare đi với những khu vực không cần thiết. Thực hiện điều này bằng cách thao tác trong tab Page Rules. Tài khoản Free add được tối đa 3 rule thôi nhé.

                  Nhấn Create Page Rules, URL bạn điền *canhme.com/wp-admin/*, thay canhme.com bằng địa chỉ của bạn. Setting chọn Cache Level rồi Bypass. Tiếp theo chọn Disable Performance và Disable Security như bên dưới, nhấn Save and Deploy là xong.

                  Khi có sẵn tên miền (sử dụng phải là loại trả phí (.com, .net, .org, .me, …), không thể sử dụng các loại tên miền miễn phí (.tk, .ga, .ml, .cf, .gq, …) vì Cloudflare không hỗ trợ.) và đã có tài khoản Cloudflare. https://thuanbui.me/cap-nhat-ip-dong-cho-ten-mien-qua-cloudflare-de-truy-cap-homelab-tai-nha/
                  Tên miền đã được chuyển về CloudFlare quản lý
                  Máy tính / máy ảo chạy Linux (Ubuntu / Arch / CentOS / …) hoặc Raspberry Pi (đời nào cũng được)
                  Bạn cần truy cập SSH vào máy tính để thiết lập script.
                  Tạo file cloudflare.sh trong thư mục $HOME
                  cd ~
                  mkdir cloudflare
                  cd cloudflare
                  nano cloudflare.sh
                  Nhập vào nội dung sau:
                  #!/bin/bash

                  # Forked from benkulbertis/cloudflare-update-record.sh
                  # CHANGE THESE

                  # API Token (Recommended) #####
                  auth_token=”xxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”

                  # Domain and DNS record for synchronization
                  zone_identifier=”f1nd7h3fuck1n6z0n31d3n71f13r4l50″ # Can be found in the “Overview” tab of your domain
                  record_name=”ipv4.example.org” # Which record you want to be synced

                  # DO NOT CHANGE LINES BELOW

                  # SCRIPT START
                  echo -e “Check Initiated”

                  # Check for current external network IP
                  ip=$(curl -s4 https://icanhazip.com/)
                  if [[ ! -z “${ip}” ]]; then
                  echo -e ” > Fetched current external network IP: ${ip}”
                  else
                  >&2 echo -e “Network error, cannot fetch external network IP.”
                  fi

                  # The execution of update
                  if [[ ! -z “${auth_token}” ]]; then
                  header_auth_paramheader=( -H ‘”Authorization: Bearer ‘${auth_token}'”‘ )
                  else
                  header_auth_paramheader=( -H ‘”X-Auth-Email: ‘${auth_email}'”‘ -H ‘”X-Auth-Key: ‘${auth_key}'”‘ )
                  fi

                  # Seek for the record
                  seek_current_dns_value_cmd=( curl -s -X GET ‘”https://api.cloudflare.com/client/v4/zones/’${zone_identifier}’/dns_records?name=’${record_name}’&type=A”‘ “${header_auth_paramheader[@]}” -H ‘”Content-Type: application/json”‘ )
                  record=`eval ${seek_current_dns_value_cmd[@]}`

                  # Can’t do anything without the record
                  if [[ -z “${record}” ]]; then
                  >&2 echo -e “Network error, cannot fetch DNS record.”
                  exit 1
                  elif [[ “${record}” == *'”count”:0’* ]]; then
                  >&2 echo -e “Record does not exist, perhaps create one first?”
                  exit 1
                  fi

                  # Set the record identifier from result
                  record_identifier=`echo “${record}” | sed ‘s/.*”id”:”//;s/”.*//’`

                  # Set existing IP address from the fetched record
                  old_ip=`echo “${record}” | sed ‘s/.*”content”:”//;s/”.*//’`
                  echo -e ” > Fetched current DNS record value : ${old_ip}”

                  # Compare if they’re the same
                  if [ “${ip}” == “${old_ip}” ]; then
                  echo -e “Update for A record ‘${record_name} (${record_identifier})’ cancelled.\\n Reason: IP has not changed.”
                  exit 0
                  else
                  echo -e ” > Different IP addresses detected, synchronizing…”
                  fi

                  # The secret sause for executing the update
                  json_data_v4=”‘”‘{“id”:”‘${zone_identifier}'”,”type”:”A”,”proxied”:true,”name”:”‘${record_name}'”,”content”:”‘${ip}'”,”ttl”:120}'”‘”
                  update_cmd=( curl -s -X PUT ‘”https://api.cloudflare.com/client/v4/zones/’${zone_identifier}’/dns_records/’${record_identifier}'”‘ “${header_auth_paramheader[@]}” -H ‘”Content-Type: application/json”‘ )

                  # Execution result
                  update=`eval ${update_cmd[@]} –data $json_data_v4`

                  # The moment of truth
                  case “$update” in
                  *'”success”:true’*)
                  echo -e “Update for A record ‘${record_name} (${record_identifier})’ succeeded.\\n – Old value: ${old_ip}\\n + New value: ${ip}”;;
                  *)
                  >&2 echo -e “Update for A record ‘${record_name} (${record_identifier})’ failed.\\nDUMPING RESULTS:\\n${update}”
                  exit 1;;
                  esac
                  Bạn cần phải điền thông tin vào các dòng sau:

                  auth_token: Cloudflare API Token
                  zone_identifier: Zone ID
                  record_name: Tên miền

                  3. Tạo Cloudflare API Token
                  Truy cập vào trang Cloudflare API Token để tạo Token mới. Bấm vào nút Create Token. Chọn Use Template ở mục Edit Zone DNS. Kéo xuống mục Zone Resources, chọn tên miền bạn muốn sử dụng để cập nhật IP sau đó bấm Continue to Summary. Bấm Create Token.

                  Cloudflare Create Auth Key

                  Token đã tạo xong.
                  Bạn cần lưu lại Token vừa mới tạo để lưu vào script đã tạo. Token này sẽ không hiện ra lại trên Cloudflare vì lý do bảo mật. Nếu bạn quên lưu, cần phải xoá Token và tạo lại cái mới.
                  4. Tìm thông tin Zone ID
                  Từ trang chủ Cloudflare, bạn bấm vào tên miền muốn sử dụng để cập nhật IP. Sau đó kéo xuống dưới sẽ thấy mục Zone ID. Lưu lại thông số này để điền vào script
                  Lưu lại thông tin Zone ID
                  5. Tạo A Record cho tên miền
                  Ví dụ mình muốn sử dụng tên miền alibaba.thuanbui.me để truy cập đến homelab ở nhà. Bấm vào Add record và tạo một A record mới.

                  Name: điền vào alibaba
                  IPv4: điền tạm 1.1.1.1, thông số này sẽ được tự động cập nhật về IP của modem sau khi chạy script. Tạo A Record cho subdomain alibaba.thuanbui.me

                  6. Cập nhật script

                  Thông tin cần thiết đã có đầy đủ, mình cập nhật lại vào file cloudflare.sh và lưu lại
                  #!/bin/bash

                  # Forked from benkulbertis/cloudflare-update-record.sh
                  # CHANGE THESE

                  # API Token (Recommended) #####
                  auth_token=”LrAB–xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”

                  # Domain and DNS record for synchronization
                  zone_identifier=”48bxxxxxxxxxxxxxxxxxxxx60″ # Can be found in the “Overview” tab of your domain
                  record_name=”alibaba.thuanbui.me” # Which record you want to be synced

                  # DO NOT CHANGE LINES BELOW

                  # SCRIPT START
                  echo -e “Check Initiated”

                  # Check for current external network IP
                  ip=$(curl -s4 https://icanhazip.com/)
                  if [[ ! -z “${ip}” ]]; then
                  echo -e ” > Fetched current external network IP: ${ip}”
                  else
                  >&2 echo -e “Network error, cannot fetch external network IP.”
                  fi

                  # The execution of update
                  if [[ ! -z “${auth_token}” ]]; then
                  header_auth_paramheader=( -H ‘”Authorization: Bearer ‘${auth_token}'”‘ )
                  else
                  header_auth_paramheader=( -H ‘”X-Auth-Email: ‘${auth_email}'”‘ -H ‘”X-Auth-Key: ‘${auth_key}'”‘ )
                  fi

                  # Seek for the record
                  seek_current_dns_value_cmd=( curl -s -X GET ‘”https://api.cloudflare.com/client/v4/zones/’${zone_identifier}’/dns_records?name=’${record_name}’&type=A”‘ “${header_auth_paramheader[@]}” -H ‘”Content-Type: application/json”‘ )
                  record=`eval ${seek_current_dns_value_cmd[@]}`

                  # Can’t do anything without the record
                  if [[ -z “${record}” ]]; then
                  >&2 echo -e “Network error, cannot fetch DNS record.”
                  exit 1
                  elif [[ “${record}” == *'”count”:0’* ]]; then
                  >&2 echo -e “Record does not exist, perhaps create one first?”
                  exit 1
                  fi

                  # Set the record identifier from result
                  record_identifier=`echo “${record}” | sed ‘s/.*”id”:”//;s/”.*//’`

                  # Set existing IP address from the fetched record
                  old_ip=`echo “${record}” | sed ‘s/.*”content”:”//;s/”.*//’`
                  echo -e ” > Fetched current DNS record value : ${old_ip}”

                  # Compare if they’re the same
                  if [ “${ip}” == “${old_ip}” ]; then
                  echo -e “Update for A record ‘${record_name} (${record_identifier})’ cancelled.\\n Reason: IP has not changed.”
                  exit 0
                  else
                  echo -e ” > Different IP addresses detected, synchronizing…”
                  fi

                  # The secret sause for executing the update
                  json_data_v4=”‘”‘{“id”:”‘${zone_identifier}'”,”type”:”A”,”proxied”:true,”name”:”‘${record_name}'”,”content”:”‘${ip}'”,”ttl”:120}'”‘”
                  update_cmd=( curl -s -X PUT ‘”https://api.cloudflare.com/client/v4/zones/’${zone_identifier}’/dns_records/’${record_identifier}'”‘ “${header_auth_paramheader[@]}” -H ‘”Content-Type: application/json”‘ )

                  # Execution result
                  update=`eval ${update_cmd[@]} –data $json_data_v4`

                  # The moment of truth
                  case “$update” in
                  *'”success”:true’*)
                  echo -e “Update for A record ‘${record_name} (${record_identifier})’ succeeded.\\n – Old value: ${old_ip}\\n + New value: ${ip}”;;
                  *)
                  >&2 echo -e “Update for A record ‘${record_name} (${record_identifier})’ failed.\\nDUMPING RESULTS:\\n${update}”
                  exit 1;;
                  esac
                  Mặc định, script này sẽ kích hoạt chế độ proxy trên Cloudflare nhằm mục đích ẩn IP của modem, giảm nguy cơ bị tấn công vào mạng nhà. Nếu vì lý do nào đó không muốn ẩn IP của mình thì có thể thay đổi thông số “proxied”:true thành “proxied”:false

                  7. Chạy thử nghiệm
                  Thiết lập quyền thực thi cho file cloudflare.sh
                  chmod +X cloudflare.sh
                  Chạy thử xem nào

                  ./cloudflare.sh
                  Quay lại Cloudflare, tên miền alibaba.thuanbui.me, mình thấy đã được tự động cập nhật với IP mới. Ngon lành!
                  8. Thiết lập cron tự động
                  Việc cuối cùng cần làm là thiết lập cron để script tự động chạy 24/7. Sau đó, không cần bận tâm đến nó nữa.

                  crontab -e
                  Mình chỉnh cho script tự động chạy sau mỗi 10 phút bằng cách thêm dòng này vào dưới cùng

                  */10 * * * * /bin/bash /home/thuanbui/cloudflare/cloudflare.sh
                  Chú ý nhớ thay /home/thuanbui/cloudflare/cloudflare.sh thành đường dẫn đến nơi lưu file cloudflare.sh của bạn.

                  Tự động cập nhật IP từ Windows lên CLOUDFLARE DYNAMIC DNS

                  Đây là ứng dụng Client Windows DNS động Cloudflare miễn phí, Cloudflare-Sync mà bạn có thể sử dụng để cập nhật địa chỉ IP trong cài đặt DNS của miền sau một khoảng thời gian nhất định. Hiện tại, điều này chạy trong thiết bị đầu cuối của bạn sau khi bạn định cấu hình nó để cập nhật địa chỉ IP. Tất cả những gì nó cần từ bạn là ID vùng và khóa API cùng với tệp cấu hình. Nó sử dụng tệp cấu hình để nhận thông tin chi tiết như tên miền và tên bản ghi mà bạn muốn nó thay đổi. Lệnh này rất đơn giản và thậm chí bạn có thể sử dụng nó trên các nền tảng khác với sự trợ giúp của Docker.

                  Có rất nhiều nhà cung cấp dịch vụ DNS động mà bạn có thể sử dụng và họ làm rất tốt việc đó. Các dịch vụ DDNS đó cung cấp cho bạn một công cụ chuyên dụng để cập nhật địa chỉ IP. Tuy nhiên, nếu bạn muốn sử dụng Cloudflare cho mục đích tương tự thì bạn không thể có công cụ máy khách để cập nhật IP từ PC hoặc máy chủ của mình. Nhưng họ đã mở API của mình để thực hiện điều đó theo chương trình. Bạn chỉ cần chạy nó từ dòng lệnh và sau đó để nó làm phần còn lại. Nó sẽ tự động cập nhật IP công cộng hiện được chỉ định cho máy chủ hoặc PC trong tài khoản Cloudflare của bạn.
                  Sử dụng Máy khách Windows DNS động Cloudflare miễn phí này:
                  Bạn có thể tải xuống từ đây https://github.com/Suleman-Elahi/cloudflare-sync/releases . Nó dành cho Windows và sau khi tải xuống, bạn chỉ cần giữ nó trong một thư mục rồi mở dấu nhắc lệnh trong thư mục đó. Bạn cũng sẽ cần tạo một tệp cấu hình JSON trong cùng một thư mục vì nó sẽ được yêu cầu để lấy tên miền mà bạn muốn thay đổi IP. Vì vậy, bạn tạo một tệp JSON như sau.

                  [
                  {
                  “type”: “A”,
                  “name”: “suleman.ga”,
                  “proxied”: true,
                  “ttl”: 120,
                  “priority”: 1
                  }
                  ]

                  Trong tệp, bạn có thể thay đổi tên miền và loại bản ghi dựa trên tên miền mà bạn đã định cấu hình trong tài khoản của mình. Sau đó, bạn chỉ cần quay lại cửa sổ lệnh và sau đó chạy lệnh theo cú pháp sau.

                  Tên miền trỏ về máy tính nhà

                  Cú pháp :cloudflare-sync.exe -api-token CloudflareAPI_Token -records-file-name ConfigFile -zone-id YourZoneID
                  Ví dụ :cloudflare-sync.exe -api-token aDwDIxxxxmkH -records-file-name ilfs.json -zone-id 22xxxx4aada
                  Bạn có thể xem cú pháp của lệnh trên và cách thức hoạt động của nó để cập nhật địa chỉ IP trong ảnh chụp màn hình của dấu nhắc lệnh ở trên. Bạn luôn có thể chạy nó theo cách này và sau đó xem phản hồi trong thiết bị đầu cuối. Nếu nó phát hiện bất kỳ thay đổi nào trong địa chỉ IP thì nó sẽ ngay lập tức đẩy nó vào tài khoản Cloudflare của bạn.

                  Tên miền trỏ về máy tính nhà

                  Để chạy lệnh này thành công, bạn cần có khóa API và sau đó là ID vùng. Nếu bạn đã thêm miền vào tài khoản Cloudflare của mình thì bạn có thể dễ dàng tạo mã thông báo API. Chỉ cần đảm bảo rằng bạn đã cấp quyền truy cập DNS trong khi cấp khóa API mới.
                  Đây là tất cả về công cụ dòng lệnh đơn giản này mà bạn có thể sử dụng trong Windows. Giờ đây, bạn có thể sử dụng Cloudflare làm nhà cung cấp DNS động với sự trợ giúp của công cụ đơn giản này. Trong Windows, bạn có thể dễ dàng sử dụng nó với sự trợ giúp của lệnh tôi đã đề cập ở trên.

                  Gói (lại…
                  Nếu bạn đang nghĩ đến việc sử dụng Cloudflare làm dịch vụ DNS động thì đây sẽ là một công cụ rất hữu ích cho bạn. Chỉ cần lấy nó và bắt đầu sử dụng nó trên máy Windows của bạn. Ngoài ra, bạn có thể sử dụng nó với các ứng dụng của mình mà bạn thường phải cập nhật địa chỉ IP. Ngoài Windows, bạn cũng có thể dễ dàng sử dụng nó trên Linux và MAC bằng cách tự xây dựng nó. Mã nguồn của nó có sẵn trên GitHub và bạn có thể dễ dàng biên dịch nó bằng Go Lang. Hoặc, bạn có thể sử dụng Docker cho đơn giản và hướng dẫn được đề cập trên trang GitHub. https://www.ilovefreesoftware.com/06/windows/free-cloudflare-dynamic-dns-windows-client-to-update-ip-automatically.html
                  Câu lệnh chạy: cloudflare-sync.exe -api-token Trong_trang_API_Tokens -records-file-name odoo.json -zone-id mã trong trang Overview
                  file odoo.json khai báo:
                  [
                  {
                  “type”: “A”,
                  “name”: “odoo.wpvn.xyz”,
                  “proxied”: true,
                  “ttl”: 120,
                  “priority”: 1
                  }
                  ]
                  https://miketabor.com/how-to-install-a-lets-encrypt-ssl-cert-on-microsoft-iis/

                  Cài Docker trên Raspberry Pi OS 64 bit

                  Odoo Apps Dn Vua Va Nho
                  Nội dung

                    Cài Docker

                    Install using the script written at the bottom of Docker official website procedure.
                    $ curl -fsSL https://get.docker.com -o get-docker.sh
                    $ sudo sh get-docker.sh

                    Install docker-compose
                    Đầu tiên cài thư viện libffi-dev
                    $ sudo apt install libffi-dev
                    Sau khi cài xong libffi-dev, bạn có thể cài docker-compose từ pip3.

                    $ sudo pip3 install docker-compose
                    

                    Kiểm tra việc cài đặt.

                    $ docker-compose version

                    docker-compose version 1.26.2, build unknown
                    docker-py version: 4.2.2
                    CPython version: 3.7.3
                    OpenSSL version: OpenSSL 1.1.1d 10 Sep 2019

                    Thêm người dùng hiện tại vào nhóm docker để tránh cần sudo chạy lệnh docker:

                    sudo usermod -aG docker $USER
                    
                    

                    Cap quyen de chay

                    systemctl start docker
                    systemctl enable docker
                    sudo chmod 666 /var/run/docker.sock

                    Tao thu muc chua file chay

                    MKDIR docker
                    CD docker
                    NANO docker-compose.yml

                    Noi dung:

                    version: '3.1'
                    services:
                      web:
                        image: arm64v8/odoo:14.0
                        depends_on:
                          - db
                        ports:
                          - "8069:8069"
                      db:
                        image: postgres:13
                        environment:
                          - POSTGRES_DB=postgres
                          - POSTGRES_PASSWORD=odoo
                          - POSTGRES_USER=odoo

                    Hien chi co arm64v8/odoo chay tren docker la odoo 12

                    https://hub.docker.com/r/arm64v8/odoo/tags

                    docker pull arm64v8/odoo:latest

                    Cách sử dụng hình ảnh nay

                    https://hub.docker.com/r/arm64v8/odoo/

                    Khởi động máy chủ PostgreSQL

                     docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:13

                    Bắt đầu một phiên bản Odoo

                    docker run -p 8069:8069 --name odoo --link db:db -t arm64v8/odoo

                    Bí danh của vùng chứa đang chạy Postgres phải là db để Odoo có thể kết nối với máy chủ Postgres.

                    Dừng và khởi động lại phiên bản Odoo

                    docker stop odoo
                    docker start -a odoo

                    Sử dụng các tập đã đặt tên để bảo toàn dữ liệu
                    Khi vùng chứa Odoo được tạo như mô tả ở trên, vùng chứa odoo được tạo bên trong vùng chứa. Nếu hộp chứa bị loại bỏ, kho chứa sẽ bị mất. Cách ưu tiên để ngăn chặn điều đó là sử dụng một tập có tên Docker .

                    docker run -v odoo-data:/var/lib/odoo -d -p 8069:8069 --name odoo --link db:db -t odoo

                    Với lệnh trên, ổ đĩa được đặt tên odoo-datasẽ vẫn tồn tại ngay cả khi vùng chứa bị xóa và có thể được sử dụng lại bằng cách đưa ra lệnh tương tự.

                    Đường dẫn /var/lib/odoođược sử dụng làm điểm gắn kết của ổ đĩa phải khớp với odoo data_dirtrong tệp cấu hình hoặc dưới dạng các tham số CLI.

                    Lưu ý rằng nguyên tắc tương tự cũng áp dụng cho vùng chứa Postgresql và một ổ đĩa được đặt tên có thể được sử dụng để bảo vệ cơ sở dữ liệu khi vùng chứa bị xóa. Vì vậy, vùng chứa cơ sở dữ liệu có thể được bắt đầu như thế này (trước vùng chứa odoo):

                     docker run -d -v odoo-db:/var/lib/postgresql/data -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:13

                    Dừng và khởi động lại máy chủ PostgreSQL
                    Khi máy chủ PostgreSQL được khởi động lại, các phiên bản Odoo được liên kết với máy chủ đó cũng phải được khởi động lại vì địa chỉ máy chủ đã thay đổi và do đó liên kết bị hỏng.

                    Khởi động lại máy chủ PostgreSQL không ảnh hưởng đến cơ sở dữ liệu đã tạo.

                    Chạy Odoo với cấu hình tùy chỉnh
                    Tệp cấu hình mặc định cho máy chủ (đặt tại /etc/odoo/odoo.conf) có thể được ghi đè khi khởi động bằng cách sử dụng ổ đĩa. Giả sử bạn có cấu hình tùy chỉnh /path/to/config/odoo.conftại

                     docker run -v /path/to/config:/etc/odoo -p 8069:8069 --name odoo --link db:db -t arm64v8/odoo

                    Vui lòng sử dụng mẫu cấu hình này để viết cấu hình tùy chỉnh của bạn vì chúng tôi đã đặt một số đối số để chạy Odoo bên trong vùng chứa Docker.

                    Bạn cũng có thể chỉ định trực tiếp các đối số Odoo trong dòng. Các đối số đó phải được đưa ra sau từ khóa –trong dòng lệnh, như sau

                     docker run -p 8069:8069 --name odoo --link db:db -t arm64v8/odoo -- --db-filter=odoo_db_.*

                    Gắn kết các addon tùy chỉnh
                    Bạn có thể gắn các addon Odoo của riêng mình trong vùng chứa Odoo, tại/mnt/extra-addons

                     docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t arm64v8/odoo

                    Chạy nhiều phiên bản Odoo

                     docker run -p 8070:8069 --name odoo2 --link db:db -t arm64v8/odoo
                    docker run -p 8071:8069 --name odoo3 --link db:db -t arm64v8/odoo

                    Xin lưu ý rằng để sử dụng đơn giản các chức năng của thư và báo cáo, khi cổng máy chủ và cổng chứa khác nhau (ví dụ: 8070 và 8069), người ta phải đặt, trong Odoo, Cài đặt-> Thông số-> Thông số hệ thống (yêu cầu tính năng kỹ thuật), web. base.url đến cảng container (ví dụ: 127.0.0.1:8069).

                     

                    Cách 2

                    curl -sSL https://get.docker.com | sh

                    Cài Docker trên Raspberry Pi OS 64 bit

                    sudo apt update sudo apt install docker.io

                    sudo docker version

                    Sudo systemctl enable docker sudo systemctl start docker.

                    Something is a bit odd there. runc version 1.0.0~rc6… or later should be available. I can’t check at the moment as most of my Pi systems are running bullseye, not buster. I only have one 32-bit one that is running buster still. I could set up a test one in the morning.

                    Meanwhile, what do you get from the output ofapt policyandapt policy runc?

                    Just follow the steps at:https://docs.docker.com/engine/install/debian/

                    The above will give you:
                    policy docker-ce
                    docker-ce:
                    Installed: 5:20.10.8~3-0~debian-bullseye
                    Candidate: 5:20.10.8~3-0~debian-bullseye

                     

                    Nginx

                    Mở http://dev.minhng.info hoặc https://dev.minhng.info để truy cập dịch vụ đang chạy tại http://0.0.0.0:8445/ trên máy từ xa (máy chủ).
                    Ánh xạ: dev.minhng.info -> http://0.0.0.0:8445/
                    Chúng tôi sẽ sử dụng docker-compose để thiết lập dễ dàng/nhanh chóng kiến ​​trúc này.
                    Nginx proxy HTTP
                    Tạo file web.conf với nội dung để ánh xạ: http://dev.minhng.info -> http://0.0.0.0:8445/:
                    server {
                    listen 80;
                    server_name dev.minhng.info;

                    sendfile on;

                    charset utf-8;
                    # max upload size
                    client_max_body_size 50G; # adjust to taste

                    location / {
                    proxy_pass http://0.0.0.0:8445/;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection “upgrade”;
                    proxy_set_header Host $host;
                    }
                    }
                    File docker-compose.yml:
                    version: ‘3.3’
                    services:
                    nginx:
                    image: nginx:stable-alpine
                    volumes:
                    – ./web.conf:/etc/nginx/conf.d/default.conf
                    network_mode: host
                    ipc: host
                    restart: unless-stopped # or “always”
                    command: /bin/sh -c “nginx -g ‘daemon off;'”
                    Đặt hai tệp này ( web.conf và docker-compose.yml ) vào cùng một thư mục và chạy lệnh sau để thiết lập:docker-compose up -d
                    Khởi động lại nginx: docker-compose restart
                    Lưu ý : sửa đổi web.conf để phù hợp với yêu cầu của bạn.
                    Nginx proxy HTTPS (an toàn)
                    Ánh xạ: https://dev.minhng.info -> http://0.0.0.0:8445/
                    web.conf
                    server {
                    listen 80;
                    listen [::]:80;
                    server_name dev.minhng.info;
                    return 301 https://$server_name$request_uri;
                    }

                    server {
                    listen 443 ssl;
                    server_name dev.minhng.info;
                    ssl_certificate /root/ssl/official/gveyes_net.crt;
                    ssl_certificate_key /root/ssl/official/gveyes.net.private_key;

                    sendfile on;

                    charset utf-8;
                    # max upload size
                    client_max_body_size 50G; # adjust to taste

                    location / {
                    proxy_pass http://0.0.0.0:8445/;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection “upgrade”;
                    proxy_set_header Host $host;
                    }
                    }
                    docker-compose.yml
                    version: ‘3.3’
                    services:
                    nginx:
                    image: nginx:stable-alpine
                    volumes:
                    – ./web.conf:/etc/nginx/conf.d/default.conf
                    – /root/ssl/official/gveyes_net.crt:/root/ssl/official/gveyes_net.crt
                    – /root/ssl/official/gveyes.net.private_key:/root/ssl/official/gveyes.net.private_key
                    network_mode: host
                    ipc: host
                    restart: unless-stopped # or “always”
                    command: /bin/sh -c “nginx -g ‘daemon off;'”
                    Đặt hai tệp này ( web.conf và docker-compose.yml ) vào cùng một thư mục và chạy lệnh sau để thiết lập:
                    docker-compose up -d
                    Khởi động lại nginx:

                    $ docker-compose restart
                    Lưu ý : sửa đổi web.conf để phù hợp với yêu cầu của bạn.

                    Docker-compose.yml mẫu cho nginx, nội dung giải thích như sau:

                    Nginx config @ tập tin web.conf
                    Tệp tĩnh trong thư mục html
                    Chứng chỉ SSL trong thư mục ssl
                    Đăng nhập vào thư mục nhật ký
                    version: ‘3.3’
                    services:
                    nginx:
                    image: nginx:stable-alpine
                    volumes:
                    – ./web.conf:/etc/nginx/conf.d/default.conf
                    – ./html/:/usr/share/nginx/html/
                    – ./ssl/:/root/ssl/official/
                    – ./log/:/var/log/nginx/
                    network_mode: host
                    ipc: host
                    restart: unless-stopped # or “always”
                    command: /bin/sh -c “nginx -g ‘daemon off;'”
                    Tham khảo; https://hub.docker.com//nginx/ https://minhng.info/docker/docker-compose-for-nginx.html

                    https://mindsers.blog/post/https-using-nginx-certbot-docker/

                    https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71

                    Các bước quy trình quản lý quán nước

                    Các bước quy trình quản lý quán nước
                    Nội dung

                      Quy trình này gồm 3 giai đoạn để mở quán cafe nhượng quyền : đầu vào, vận hành và kiểm tra kết hợp thông số kết quả.

                      1. Giai đoạn đầu vào khi quyết định mở quán cafe
                      Nguồn hàng :
                      Tìm các đối tác, nhà phân phối uy tín. Vì họ thì có giá cả, chứng nhận nguồn hàng, thời gian, địa điểm giao hàng tiện kiểm soát. Ví dụ nguồn hàng từ xa Tây Nguyên, hoặc gần hơn NGUYEN CHAT COFFEE, Metro,…

                      Thống kê hàng hóa :
                      Chia ra làm hai loại tài sản cố định (tài khoản khấu hao lớn) và tài sản nhỏ.

                      Kho bảo quản :
                      Phải có kho để dự trữ bảo quản. Nếu không có thì có thể tận dụng một nơi phù hợp để quản lý bảo quản hàng hóa.

                      Kiểm soát hàng hóa theo hóa đơn :
                      Khi nhập hàng về, khi nhập vào phần mềm quản lý bán hàng. Lưu ý nhập vào phần mềm cũng phải có đơn vị : nhập kho là thùng, nhập phần mềm quản lý bán hàng là lon.

                      Khai báo phần mềm quản lý bán hàng :
                      Danh mục kho hàng, danh mục thu – chi, danh mục khu vực bán hàng, giá cả, tên từng loại hàng hóa, phân quyền tài khoản,…

                      2. Giai đoạn vận hành
                      Khai báo thông tin số lượng chi tiết hàng hóa : kiểm soát số lượng (ví dụ 1kg cà phê = 35 ly).
                      Nhập hết hàng hóa vào phần mềm để dễ quản lý.
                      Thực hiện các thao tác phục vụ, thu ngân, pha chế một cách linh hoạt.
                      3. Giai đoạn kiểm soát
                      3.1 Kiểm soát quy trình tác nghiệp
                      – Dựa trên bảng mô tả công việc, quy trình tác nghiệp để kiểm soát & đánh giá nhân sự thực hiện có đúng quy trình đưa ra không.

                      – Linh hoạt điều chỉnh cho phù hợp với tình hình thực tế kinh doanh.

                      3.2 Kiểm soát thu/chi hàng ngày
                      – Phân quyền cho việc chi hàng ngày (nên tạo quyền cho thu ngân với những khoản chi nhỏ, với khoản chi lớn thì cấp quản lý): phải có đầy đủ chữ ký.

                      – Phần thu gồm doanh thu từ bán hàng & thu khác: kiểm tra dựa trên thực tế kiểm tra tiền cuối ngày (hoặc cuối ca) & trên phần mềm. Nếu chia nhiều ca thu ngân thì cần tạo file để bàn giao ca cho rõ ràng.

                      – Tạo danh mục khoản thu/chi cho phần mềm để thuận tiện cho quản lý chi tiết (ví dụ: danh mục chi như: chi lương, chi trái cây, chi café, chi nước ngọt, chi sữa, chi điện/nước …)

                      – Phần mềm quản lý sẽ đóng vai trò người lấy dữ liệu khách quan & chính xác nhất.

                      3.3 Kiểm soát hàng hóa kho hàng
                      – Định kỳ hàng tuần kiểm kho 1 lần (thường vào sáng thứ 2 hàng tuần) theo mẫu kiểm kho.

                      – Đối chiếu số liệu thực tế kiểm kho với số liệu trên phần mềm để đánh giá.

                      3.4 Báo cáo phân tích: một số bảng báo cáo phân tích mà người quản lý cần nắm
                      – Báo cáo doanh thu theo ngày/tháng/năm.

                      – Báo cáo chi phí: chi tiết theo danh mục chi phí.

                      – Báo cáo về thất thoát: đổ vỡ, mất mát, hàng hóa hỏng.

                      – Dựa trên các báo cáo để nắm rõ tỷ trọng với doanh thu như nguyên vật liệu, lương nhân sự, khấu hao…, để có phương án kinh doanh hiệu quả hơn.
                       

                      1. Quy trình quản lý nhân sự

                      Có thể nói bất kỳ một lĩnh vực kinh doanh nào đi chăng nữa thì hình ảnh nhân viên được coi là bộ mặt của mỗi doanh nghiệp và cũng là người trực tiếp giao tiếp với khách hàng từ lúc bước vào cho đến khi ra về. Chính vì thế một trong nhữngquy trình quản lý quán cafechính là quản lý nhân viên.

                      Bạn sẽ gặp không ít khó khăn trong vấn đề quản lý như:

                      • Nghỉ việc thường xuyên
                      • Nghỉ việc đột xuất
                      • Nhân viên không nhiệt tình,…

                      Vậy nên, khi gặp những tình trạng này bạn cần khắc phục kịp thời để giúp nhân viên có thể gắn bó lâu dài hơn với cửa hàng. Khi gặp phải tình trạng này bạn cần làm gì?

                      • Thứ nhất, hãy dùng việc chi trả tiền lương làm công cụ để đảm bảo rằng nhân viên không nghỉ việc đột xuất. Cách làm khá đơn giản, hãy giữ ít nhất 5 ngày lương của nhân viên để “phòng bị” cho mức phạt khi nhân viên nghỉ đột xuất.
                      • Thứ hai, đưa ra phương pháp trả lương công bằng nhất, chính xác nhất.
                      • Thứ ba, cần xây dựng một bộ tài liệu đào tạo nhân viên thật đơn giản, chính xác và cố gắng chỉ làm trong một 1 trang giấy A4 và chắc chắn thông tin phải được mô tả công việc thật đầy đủ, quy trình tác nghiệp và văn hóa phục vụ phải thật chi tiết. Càng đơn giản càng giúp cho nhân viên dễ nắm bắt được công việc và thực hiện đúng.

                      Các bước quy trình quản lý quán nước

                      1. Quy trình tuyển dụng nhân sự cho quán cafe
                      Để có được một đội ngũ nhân viên phục vụ cà phê chất lượng với thái độ làm việc chăm chỉ và tinh thần trách nhiệm cao thì điều đầu tiên mà chủ quán cần làm là phải nắm rõ quy trình tuyển dụng nhân sự cho quán cafe của mình.

                      Tuyển nhân viên quán cà phê như thế nào hiệu quả?

                      Vậy quy trình tuyển nhân viên quán cafe được thực hiện như thế nào? Cụ thể như sau:

                      1.1. Lập kế hoạch tuyển dụng
                      Trong bất kỳ lĩnh vực, ngành nghề nào thì việc tuyển dụng chưa bao giờ là dễ dàng. Nếu bạn là một chủ quán cafe thì chắc chắn bạn sẽ phải đối mặt với 2 vấn đề lớn trong quá trình tuyển dụng.

                      Thứ nhất là không tuyển dụng được nhân viên theo đúng mong muốn của mình.
                      Thứ hai là nhân viên sẽ bỏ việc sau khi đi làm thực tế từ 1 – 2 tháng.
                      Làm sao để tránh được những trường hợp này? và làm thế nào để tuyển được nhân viên phù hợp đáp ứng được nhu cầu kinh doanh của quán cũng như mong muốn của khách hàng.

                      Để có được đội ngũ nhân viên chất lượng trước khi bắt đầu tuyển dụng bạn cần lập cho mình kế hoạch tuyển dụng nhân sự một cách bài bản. Cụ thể:

                      Vị trí cần tuyển dụng là gì? Là nhân viên phục vụ, pha chế, thu ngân, quản lý, bảo vệ,….
                      Mục đích tuyển dụng là để làm gì? Phục vụ khách hàng, pha chế đồ uống hay bảo vệ,…
                      Mô tả chính xác công việc cần tuyển dụng: Vì mỗi vị trí công việc sẽ đòi hỏi yêu cầu riêng chính về trách nhiệm, quyền hạn và nhiệm vụ cần phải làm,… chính vì thế bạn cần mô tả chính xác vị trí công việc sẽ tuyển dụng để giúp cho người ứng tuyển dễ dàng hình dung được công việc của mình sẽ nộp đơn.
                      Có quy trình tuyển dụng cụ thể bao gồm: Phỏng vấn, thử việc, quyết định tuyển dụng.
                      1.2. Tiến hành phỏng vấn nhân sự cho quán cafe
                      Sau khi đã có một bản kế hoạch hoàn chỉnh về quá trình tuyển dụng nhân sự cho quán cafe của mình thì bước tiếp theo bạn sẽ làm đó là phỏng vấn sau khi có người nộp đơn ứng tuyển.

                      cách tuyển nhân viên quán cafe

                      Cho dù là kinh doanh quán cafe bạn cũng cần có sự chuẩn bị chu đáo về câu hỏi để đảm bảo nắm được những thông tin cần thiết về chính nhân sự mà mình sẽ tuyển dụng. Và cần lưu ý rằng mỗi vị trí tuyển dụng đề có những yêu cầu khác nhau về trình độ, kinh nghiệm và khả năng ứng xử vì thế mà câu hỏi trong quá trình phỏng vấn cũng có sự khác biệt.

                      Ngoài việc chuẩn bị bộ câu hỏi cho các ứng viên bạn cần chuẩn bị thêm thang đo đánh giá (đây chính là tiêu chí cho điểm các ứng viên). – Xây dựng phương pháp đánh giá nhân viên (cùng 12 biểu mẫu đánh giá có sẵn) (1)

                      Để có được thang đo đánh giá chính xác bạn cần dựa vào yêu cầu công việc thực tiễn và khả năng đáp ứng của các ứng viên. Sau khi kết thúc buổi phỏng vấn bộ phận nhân sự sẽ dựa vào số điểm của cùng của ứng viên để đưa ra quyết định cho việc tuyển dụng.

                      Việc dựa vào thang đo đánh giá sẽ giúp bạn có được quyết định dễ dàng trong quá trình tuyển dụng, đồng thời đánh giá được năng lực cơ bản của nhân viên trong buổi phỏng vấn.

                      1.3. Tìm hiểu luật lao động
                      Là một chủ quán bạn cần hiểu về luật lao động. Cho dù bạn tuyển nhân viên quán cà phê ở bất cứ vị trí nào đi nữa thì điều bạn cần phải đảm bảo là trả cho họ một mức lương cơ bản, có chế độ đãi ngộ và quyền lợi theo đúng quy định của luật lao động Việt Nam.

                      Cách tính lương nhân viên quán cafe

                      Trước khi bắt đầu công việc hai bên cần ký hợp đồng lao động với nhân viên của mình, điều này sẽ tạo sự ràng buộc giữa 2 bên. Việc ký kết hợp đồng lao động sẽ giúp bạn một chủ quán cafe có thể dễ dàng quản lý tốt nhân viên của mình, đồng thời tránh được tình trạng mâu thuẫn có thể xảy ra trong tương lai.

                      Bộ luật lao động quy định tiêu chuẩn lao động; quyền, nghĩa vụ, trách nhiệm của người lao động, người sử dụng lao động, tổ chức đại diện tập thể lao động, tổ chức đại diện người sử dụng lao động trong quan hệ lao động và các quan hệ khác liên quan trực tiếp đến quan hệ lao động; quản lý nhà nước về lao động. (2)

                      2. Tiêu chí tuyển dụng nhân viên cho quán cafe của bạn
                      Mỗi vị trí tuyển dụng đều có từng tiêu chí khác nhau, vì thế nếu bạn là một chủ quán cafe cần biết được tiêu chí tuyển dụng nhân viên của từng bộ phận mà mình cần tuyển dụng, cụ thể:

                      2.1. Tuyển quản lý quán cà phê
                      Nếu vị trí bạn tuyển dụng là quản lý thì cần hiểu rõ tiêu chí của vị trí này là gì. Quản lý là người có vai trò, vị trí vô cùng quan trọng trong quán cafe. Do đó vị trí này đòi hỏi cao trong quá trình tuyển dụng nhân viên quán cafe.

                      Các kỹ năng cần có của một người quản lý là: khả năng ăn nói trước đám đông, lãnh đạo, có nhiệt huyết, tận tâm, biết xử lý tình huống, có kinh nghiệm, giao tiếp tốt đồng thời phải có được mối quan hệ với các nhà cung cấp thực phẩm.

                      Xem thêm: Quy trình quản lý quán cà phê hiệu quả

                      Đặc biệt các tiêu chí quan trọng cần có đối với vị trí quản lý như:

                      Kinh nghiệm quản lý quán cafe
                      Khả năng lãnh đạo
                      Khả năng giám sát nhân viên và giải quyết xung đột của nhân viên
                      Khả năng giao tiếp tốt
                      Thật thà, trung thực và nhiệt tình với công việc của mình.
                      Dĩ nhiên nếu bạn muốn có được một người quản lý chất lượng thì phải trả cho họ một mức lương hấp dẫn. Còn nếu không bạn có thể thỏa thuận để chia lợi nhuận.

                      Mẫu tuyển nhân viên quán cafe

                      Thỏa thuận để chia lợi nhuận là một trong những cách làm hay giúp bạn có được người quản lý giỏi đồng thời thúc đẩy họ góp sức trong quá trình trình phát triển quán cafe của mình.

                      Vừa tuyển được quản lý giỏi vừa giúp cho hoạt động kinh doanh được ổn định và đem lại hiệu quả hơn.

                      2.2. Nhân viên pha chế
                      Thành công của quá trình kinh doanh quán cafe còn đến từ các món đồ uống chất lượng và để làm được điều đó đòi hỏi quán cafe của bạn phải có được một nhân viên pha chế giỏi.

                      Nhân viên pha chế chính là cốt lõi giúp quán cafe phát triển. Một nhân viên pha chế giỏi phải biết được cách pha cafe sao cho ngon, đồng thời điều chỉnh, cân đo liều lượng sao cho phù hợp nhất với từng loại và dĩ nhiên phải am hiểu về trình tự pha chế.

                      Điều đặc biệt là nhân viên pha chế phải có phong cách riêng, cách cầm chai rượu hay dùng cục lắc, cách lắc trộn hỗn hợp hay cách di chuyển khi pha chế đều phải chuyên nghiệp. Đây cũng là cách giúp bạn dễ dàng đánh giá được tài năng và tay nghề của từng nhân viên.

                      Một nhân viên pha chế tốt cần có những tiêu chí như sau:

                      Nhân viên pha chế phải có vị giác tốt
                      Có óc sáng tạo, khéo tay
                      Nhanh nhẹn và linh hoạt
                      Có kinh nghiệm và khả năng giao tiếp tốt
                      2.3. Nhân viên phục vụ quán cafe
                      Đội ngũ nhân viên cần phải có thái độ thân thiết, gần gũi với khách hàng khi đến quán. Do đó, nhân viên phục vụ đòi hỏi phải tạo được ấn tượng tốt, không khí thoải mái, dễ chịu tuy nhiên cũng cần phải tuân thủ đúng các quy định của quán đặc biệt trong giờ cao điểm.

                      Vì nhân viên phục vụ là những người tiếp xúc trực tiếp với khách hàng vì thế mà họ cần phải tạo được ấn tượng tốt, và có thể chịu được áp lực lớn trong quá trình làm việc. Mặc dù phục vụ nhiều bàn nhưng vẫn tỏ thái độ niềm nở, nhiệt tình khi phục vụ.

                      hướng dẫn tuyển nhân viên quán cà phê

                      Nhân viên phục vụ cần có những tố chất như sau:

                      Nhanh nhẹ, luôn tỏ thái độ niềm nở, tươi cười với khách hàng của mình
                      Có khả năng xử lý được các tình huống phát sinh
                      Nhiệt tình và có tinh thần trách nhiệm cao trong công việc
                      Là người thật thà, chịu khó.
                      Ngoài nhưng tố chất trên thì nhân viên phục vụ còn phải là những người có kỹ năng giao tiếp tốt, nắm rõ được các loại đồ uống để tư vấn và giúp khách hàng chọn đồ nhanh chóng.

                      Vì kinh doanh mặt hàng đồ uống vì thế mà số lượng khách hàng sẽ đông hơn so với những lĩnh vực kinh doanh khác. Do đó mà nhân viên phục vụ cần có trách nhiệm cao trong công việc, đặc biệt là phong cách và nụ cười tươi đối với khách hàng khi đến quán.

                      2.4. Nhân viên bảo vệ, giữ xe
                      Bảo vệ và giữ xe đóng một vai trò quan trọng trong việc trông coi quán cafe của bạn. Vị trí này đòi phải là người có cơ thể khỏe mạnh, có thân thế lai lịch rõ ràng, thật thà, trung thực và đặc biệt là thân thiện, nhiệt tình trong công việc.

                      Cách tuyển nhân viên phục vụ quán cafe

                      Đội ngũ nhân viên đóng một vai trò hết sức quan trọng trong quá trình quyết định sự thành công của quán. Nếu quán cafe của bạn có được đội ngũ nhân viên năng động, nhiệt huyết, tận tình thì nhất định quá trình kinh doanh sẽ thành công.

                      3. Khâu chuẩn bị vận hành nhân sự
                      Sau khi đã hoàn tất quá trình tuyển dụng nhân viên cho quán cafe của mình thì việc tiếp theo bạn cần làm trước khi bắt đầu kinh doanh chính thức là phổ biến nội quy, chuẩn bị đồng phục và đào tạo cho nhân viên của mình.

                      3.1. Lập và phổ biến nội quy cho nhân viên
                      Ngoài những điều khoản được nhắc đến khi thỏa thuận giữa bạn và cá nhân nhân viên trong buổi phỏng vấn tuyển dụng thì bạn cũng cần phổ biến những nội quy, quy định của quán để tất cả mọi người nghiêm chỉnh chấp hành đúng.

                      Đào tạo nhân viên quán cafe

                      Hãy phổ biến tất cả nội quy cho nhân viên mới để tránh tình trạng vướng mắc trong công việc. Rõ ràng tất cả mọi việc ngay từ ban đầu sẽ tránh được rắc rối cho sau này.

                      3.2. Chuẩn bị đồng phục cho nhân viên quán cafe
                      Đồng phục là vật dụng hết sức quan trọng và cần thiết mà bạn một chủ quán cafe cần quan tâm. Bởi nếu để nhân viên mặc đồ tùy ý thì quán cafe của bạn sẽ trở nên rối rắm, lộn xộn và thiếu đi sự chuyên nghiệp.

                      Xem thêm: Top 3 Mẫu Tạp Dề Cho Quán Cafe Đẹp Mà Bạn Không Nên Bỏ Lỡ

                      Hơn thế nữa, nếu quán cafe của bạn có được những bộ đồng phục đẹp. bắt mắt thì đây chính là điểm cộng trong mắt khách hàng. Đây sẽ là cách marketing gián tiếp hết sức hiệu quả. Vì thế, bạn nên đầu tư kỹ càng hơn trong thiết kế đồng phục để tạo được sự đồng bộ trong phong cách quán cafe của mình.

                      Cách tuyển nhân viên quán cà phê

                      3.3. Đào tạo nhân viên quán cafe của bạn
                      Nhân viên mới là những người nhiệt tình, chăm chỉ và luôn học hỏi cũng như tiếp thu những ý kiến từ cấp trên. Tuy nhiên họ cũng là những người chưa quen việc, chưa có được phong cách của quán cafe.

                      Vậy nên, để giúp cho nhân viên của mình được chuyên nghiệp hơn, tác phong nhanh nhẹn hơn thì chủ quán cần đào tạo bài bản trước khi làm việc. quá trình đào tạo diễn ra với nhiều hình thức khác nhau như: học lý thuyết trước, thực hành sau.

                      Hoặc trao đổi và học hỏi trực tiếp trong công việc, nhân viên cũ hướng dẫn nhân viên mới. Đây là cách làm việc hay giúp cho nhân viên mới dễ dàng tiếp cận công việc.

                      Bài viết tuyển nhân viên quán cafe

                      Trong quá trình đào tạo, nội dung của buổi đào tạo cần tập trung vào các lĩnh vực như: phổ biến nội quy, quy định của quán cafe. Đồng thời hướng dẫn quy trình làm việc cụ thể đối với từng vị trí khác nhau.

                      Có thể nói, đào tạo nhân viên là một quá trình dài hạn, được thực hiện liên tục, nhằm hoàn thiện những kỹ năng làm việc cho toàn bộ nhân viên của quán cafe mình. Từ đó giúp cho quán cafe hoạt động hiệu quả hơn, thành công hơn.

                      4. 6 Điều mà nhân viên cafe cần tránh
                      Xem thêm: Tìm hiểu Quy trình phục vụ tại quán cà phê

                      Dưới đây là một số điều mà nhân viên cần tránh trong quá trình làm việc, cụ thể:

                      4.1. Tránh dọn ly, cốc đã dùng 1 cách thiếu tế nhị
                      Ở một số nhà hàng, khi nhân viên thất khách hàng đã sử dụng hết đồ uống họ sẽ chủ động dọn ly cốc của khách hàng trên bàn để. Đây là điều đáng ghi nhận, tuy nhiên trong một số trường hợp khách hàng sẽ để ý và cảm thấy khó chịu một chút khi nhân viên dọn đồ uống đi.

                      Trong một số trường hợp khách hàng muốn thêm đồ uống miễn phí như trà đá, nước lọc, nhưng vô tình nhân viên đã dọn đi điều này khiến họ không hài lòng và đánh giá chất lượng dịch vụ của quán.

                      kinh nghiệm thuyển nhân viên cho quán cafe

                      Để tạo ra sự tinh tế hãy chú ý sau khi khách hàng dùng hết đồ uống hãy chủ động đề nghị rót thêm nước nếu họ cần dùng. Điều này sẽ giúp khách hàng cảm thấy mình sử dụng dịch vụ tốt, chuyên nghiệp.

                      4.2. Tránh chạm tay vào miệng ly/cốc
                      Một trong những điều tế nhị mà mọi nhân viên phục vụ đều phải chú ý chính là không được chạm tay vào miệng ly/cốc. Cho dù nhân viên có sạch sẽ đến đâu thì khách hàng không hề muốn bạn chạm vào miệng ly mà họ sắp dùng để uống.

                      Phỏng vấn tại quán cà phê

                      Đây là một trong số những lỗi nhỏ, tiểu tiết và không thường được để ý nhưng lại khá quan trọng tới cảm nhận của khách hàng. Hầu hết khách hàng đều cảm thấy khó chịu về điều này dẫn đến việc thưởng thức đồ uống không ngon miệng.

                      Vậy nên bạn cần lưu ý những điều trên và nhắc nhở cho nhân viên của mình cần chú ý trong suốt quá trình phục vụ khách hàng của mình.

                      4.3. Tránh việc thiếu giao tiếp bằng mắt
                      Eye-contact là một trong số những khái niệm quan trọng mà phục vụ cần nắm trong quá trình phục vụ khách hàng.

                      Hãy chắc rằng bạn luôn mỉm cười và nhìn vào ánh mắt của khách hàng tối thiểu từ 3 – 5p để cuộc trò chuyện giữa hai bên thêm phần ý nghĩa và khách hàng cảm thấy họ được tôn trọng.

                      Cho khách hàng thấy rằng mình luôn được lắng nghe và ghi nhớ từ phía nhân viên phục vụ. Trong một số trường hợp quán quá đông khách hàng điều này có thể sẽ không được lưu tâm.

                      Tuy nhiên để khách hàng có được sự hài lòng và đánh giá khách quan về quán của bạn thì hãy biến những điều nhỏ nhất trở thành thói quen cho nhân viên của mình.

                      4.4. Tránh quá nghiệt tình, suồng sã
                      Trái ngược với thái độ thờ ơ chính là thân thiện, nhưng nếu quán thân thiện thì vô tình sẽ trở thành sự suồng sã.

                      Cụ thể khách hàng thân quen thường xuyên lui tới quán, nhân viên sẽ muốn tỏ ra thân thiện hoặc giao tiếp có phần vui vẻ hơn. Nhưng thực tế khách hàng là người trả tiền để sử dụng dịch vụ và họ muốn được phục vụ một cách chuyên nghiệp.

                      Do đó, hãy cố gắng thân thiện nhưng trong khuôn khổ cho phép, nên tiết chế và hành xử đúng chuẩn mực. Đừng quá suồng sã như thế sẽ dẫn đến thiếu chuyên nghiệp, một số khách hàng khó tính sẽ cảm thấy khó chịu và không hài lòng.

                      Kỹ năng làm phục vụ cafe

                      4.5. Tránh dùng nước hoa nặng mùi
                      Điều cần tránh tiếp theo trong quá trình phục vụ mà nhân viên cần đặc biệt chú ý là không nên sử dụng những loại nước hoa nặng mùi. Bởi khách hàng sẽ cảm thấy khó chịu nếu mùi nước hoa quá nồng hoặc đơn giản là mùi nước hoa họ không thích.

                      Chỉ nên sử dụng mùi thơm nhẹ để giảm mùi mồ hôi từ cơ thể hay quần áo. Việc sử dụng nước hoa quá nặng mùi có thể làm ảnh hưởng đến hương vị đồ uống mà họ muốn thưởng thức.

                      Do đó cần tinh tế trong cách sử dụng hương thơm để tránh làm ảnh hưởng đến khách hàng khi đến quán cafe.

                      4.6. Tránh đón tiếp thiếu thân thiện
                      Việc nhân viên hời hợt, kém thân thiện trong quá trình phục vụ khách hàng khi đến quán là một trong số những điều cần tránh mà nhân viên phục vụ cần chú ý. Nghề phục vụ đòi hỏi phải chuyên nghiệp trong công việc, ngay cả khi không thích.

                      mẫu tuyển nhân viên cafe

                      Do đó, chỉ một cái nhau mày nhẹ ngày hôm đó có thể đánh mất doanh thu quán cafe của bạn. Nghiên cứu cho thấy có 38% ấn tượng ban đầu bị ảnh hưởng bởi ngữ điệu giọng nói và 93% cảm nhận thuộc vào yếu tố phi ngôn ngữ.

                      Vậy nên, hãy đảm bảo nhân viên của bạn luôn có thái độ niềm nở, ánh nhìn rạng rỡ và nụ cười thân thiện trên môi. Để nhân viên có thể chủ động trong công việc bạn cần trao quyền cho nhân viên của mình nhiều hơn.

                      Đây sẽ là điều giúp nhân viên của bạn cảm thấy tự tin và chuyên nghiệp hơn trong việc đón tiếp khách hàng.

                      2. Xây dựng quy trình phục vụ chuyên nghiệp

                      Dĩ nhiên, để có được sự chuyên nghiệp trong tác phong làm việc thì cần phải có mộtcách quản lý quán cafecụ thể. Do đó, bạn cần xây dựng quy trình phục vụ chuyên nghiệp cho chính nhân viên của mình. Cụ thể:

                      • Bước 1: Order thức uống

                      Nhân viên phục vụ sẽ tiến hàng order đồ uống của khách hàng lên phiếu order (cần ghi rõ thông tin như: nhân viên lập phiếu, số bàn gọi đồ uống, tên đồ uống, số lượng đồ uống; phiếu này dùng để lưu trữ khi có sai sót, gian lận có thể sử dụng để xử lý)

                      • Bước 2: Nhập vào phần mềm và in phiếu

                      Ở bước này, sau khi nhân viên phục đã order xong sẽ chuyển đến thu ngân, thu ngân sẽ tiếp nhận phiếu vào nhập thông tin và máy tính theo đúng yêu cầu. Cuối cùng, in phiếu và chuyển cho người pha chế.

                      • Bước 3: Xuất hàng hóa

                      Sau khi tiếp nhận phiếu order sẽ thực hiện pha chế, khi pha chế xong sẽ chuyển lại cho nhân viên phục vụ, lúc này nhân viên phục vụ sẽ sắp xếp đồ uống và đưa ra đúng số bàn đã order.

                      • Bước 4: Kiểm tra đồ uống

                      Nhân viên đem đồ uống ra cho khách, trước khi đưa cho khách nên kiểm tra xem đồ uống đã đủ chưa.

                      • Bước 5: In bill thanh toán và tính tiền

                      Nhân viên phục vụ sẽ tiếp nhận nhu cầu thanh toán từ phía khách hàng, sau đó đến quầy thu ngân để yêu cầu in bill, thu ngân sẽ in phí tính tiền và tiền thối (nếu có). Sau khi đã xác nhận chính xác thì bàn giao cho khách hàng.

                      Ngoài ra, trong quá trình phục vụ nhân viên cần lưu ý đến một số trường hợp phát sinh trong quá trình làm việc như:

                      • Khách hàng đổi/trả thức uống
                      • Khách hàng gọi thêm nước uống
                      • Khách hàng chuyển bàn/chuyển khu vực
                      • Khách hàng gộp nhiều bàn lại làm một
                      • Khách hàng tác một bàn thành nhiều bàn…

                      3. Quản lý hàng hóa và điều hành quán

                      Với giai đoạn quản lý hàng hóa và điều hành quán bạn cần thực hiện theo từng giai đoạn cụ thể:

                      Quy trình quản lý quán cafe giai đoạn đầu vào

                      • Tìm mua nguyên liệu: Nên lựa chọn những địa chỉ uy tín, chất lượng, có chính sách giá cả, hàng hóa, giao hàng rõ ràng, khi mua cần có chứng từ cụ thể để tiện cho việc kiểm soát nguồn nguyên liệu khi nhập.
                      • Thống kê hàng hóa để quản lý: tài sản cố định, tài sản nhỏ.
                      • Nên có kho hàng để dự trữ hàng hóa, đồng thời bảo quản và kiểm soát nguồn nguyên liệu được nhập cho quán một cách hiệu quả.
                      • Kiểm kê hàng hóa khi nhập vào file quản lý hoặc phần mềm quản lý.

                      Giai đoạn vận hành

                      • Cần xây dựng file cost đồ uống và lên giá thành giúp cho việc tính toán mua nguyên liệu thật chính xác.
                      • Thực hiện theo quy trình tác nghiệp ban đầu đã đưa ra phục vụ – thu ngân – pha chế

                      Tham khảo công thức tính cost thức uống

                      1. Cost đồ uống là gì ? Các yếu tố cấu thành nên giá sản phẩm
                      Cost đồ uống (theo tiếng anh là food cost hoặc drink cost) là thuật ngữ dùng để chỉ giá bán đồ uống khi kinh doanh cửa hàng cafe, nhà hàng,… Giá cost giữa các món không giống nhau, không cố định

                      cách tính cost đồ uống

                      Giá cost đồ uống không chỉ là chi phí nguyên vật liệu mà còn bao gồm nhiều khoản khác

                      Khi tính sẽ được dựa vào nhiều yếu tố như: thời gian, giá nguyên liệu thị trường, chiến dịch kinh doanh, độ hot,… Do đó, giá bán không chỉ là chi phí nguyên vật liệu mà còn bao gồm nhiều khoản khác. Vậy nên khi tăng giá cost đồ uống bạn cần chú ý đếm một số khoản chi phí như sau:

                      Chi phí trực tiếp là chi phí nguyên liệu, dụng cụ,… những vật dụng để pha chế đồ uống trong quán.
                      Chi phí thuê nhân viên là chi phí bạn không nên bỏ qua, bao gồm: người tạo ra đồ uống, phục vụ, dọn dẹp vệ sinh,… Nếu quán có quy mô lớn thì trong dịch vụ đồ uống sẽ có thêm phụ bar, bartender, barista, bar trưởng, tạp vụ…
                      Chi phí cho các khoản như giá trị thương hiệu, giá trị đồ uống, chất lượng dịch vụ,… tất cả đều ảnh hưởng đến cách tính giá cost đồ uống.
                      Chi phí phát sinh trong quá trình hoạt động là điều không tránh khỏi như bảo trì cơ sở vật chất, quảng cáo, khấu hao, tiền điện, nước, wifi, tiền thuê mặt bằng,…
                      Biến phí: Giá nguyên vật liệu tùy vào từng thời điểm nên sẽ không có mức giá cố định là bao nhiêu. Do đó, khó biến phí xuất hiện sẽ làm cho giá thành bị thay đổi những lúc thế này bạn cần điều chỉnh để phù hợp hơn với lợi nhuận trong mức cho phép.
                      >> Xem thêm: Tổng hợp các loại nước uống ngon trong menu quán cafe gây bão khách hàng

                      2. Lợi ích của việc tính giá cost đồ uống
                      Lợi ích của việc tính giá cost đồ uống là gì? Dưới đây là những lợi ích từ việc làm này:

                      file tính cost đồ uống

                      Lợi ích của việc tính cost đồ uống

                      Giúp chủ quán quản lý rõ ràng, chính xác các chi phí nguyên vật liệu đầu vào cho quán.
                      Định mức giá bán thức uống phù hợp, thu hút được khách hàng tới quán của bạn.
                      Dễ dàng hơn trong việc phân bổ nguồn vốn đúng đắn, dễ tái đầu tư trong quá trình sử dụng.
                      Giúp tạo tiền đề để khi bạn có nhu cầu phát triển quy mô quán cafe lớn hơn sẽ không bị mất cân bằng.
                      Chủ quán dễ dàng nắm bắt được tình hình kinh doanh lãi lỗ của quán ngay lập tức.
                      Một tìm kiếm nhanh trên Internet sẽ cho bạn biết rằng chi phí vốn nguyên liệu trung bình nên từ 25% đến 30%. Tuy nhiên, tỷ lệ phần trăm của bạn có thể thay đổi tùy thuộc vào loại mô hình bạn đang điều hành.

                      Với những lợi ích trên thì việc tính giá cost cho nguyên liệu pha chế đồ uống quán cafe của bạn là điều cần thiết.

                      3. Các phương pháp tính cost đồ uống phổ biến nhất
                      Phương pháp định giá đồ uống được thực hiện như thế nào? Nếu bạn đang thắc mắc về câu hỏi này thì hãy tham khảo ngay các cách định giá đồ uống mà chúng tôi chia sẻ ngay sau đây.

                      Cách 1 : Định giá theo đối thủ cạnh tranh
                      Là một trong những cách định giá đơn giản mà nhiều quán cafe áp dụng để tính cost đồ uống cho quán của mình. Cách định giá này được sử dụng để định giá dựa trên thị trường hoặc giá “chạy theo” đối thủ cạnh tranh.

                      cách tính giá cost đồ uống

                      Định giá cost theo đối thủ

                      Thường khi áp dụng cách định giá theo đối thủ cạnh tranh chủ quán có thể định giá ngang với đối thủ của mình hoặc định giá trượt nhẹ một chút so với đối thủ.

                      Cách làm này để thu hút khách hàng thích các đồ uống có chất lượng cao với những khách hàng có đồ uống mức giá hời hơn so với những quán cafe khác.

                      Tuy nhiên, cách định giá này rất dễ gây ra cuộc chiến về giá cả giữa hai quán và cả hai đều thua thiệt, chỉ có khách hàng là người được hưởng lợi trong chuyện này.

                      ** Lưu ý: Khi định giá menu quán cafe bạn không nên định giá thấp hơn đối thủ vì như thế sẽ tạo áp lực cho nhân viên của quán. Hơn thế nữa việc định giá thấp hơn cũng khiến cho quán khó thực hiện các chương trình khuyến mãi và chăm sóc khách hàng.

                      Cách 2 : Công thức tính cost – Định giá theo chi phí và lợi nhuận
                      Trước khi định giá theo chi phí và lợi nhuận bạn cần hiểu rõ hơn về các thuật ngữ liên qua đến cách định giá cụ thể:

                      Chi phí định giá trực tiếp tạo ra đồ uống: Là những chi phí liên quan đến việc tạo ra món ăn, bao gồm nguyên vật liệu, chi phí đồ uống theo khẩu phần, kể cả chi phí của đồ pha bỏ, đồ dư hoặc đồ bị hư trong quá trình chế biến chỉ lấy nguyên liệu ngon nhất.
                      Chi phí đồ uống gián tiếp: Là chi phí không bào gồm các thành phần thực tết tạo nên đồ uống mà là giá trị tăng thêm như thương hiệu, mô hình quán, chất lượng dịch vụ và độ ngon mà đồ uống đem lại. Chi phí này cho phép chủ quán tính giá cao hơn đối thủ cạnh tranh mà vẫn chiều được lòng khách hàng khi đến quán.
                      cách tính giá vốn thức uống

                      Tham khảo cách tính giá vốn đồ uống

                      Chi phí thuê nhân viên: Là chi phí thuê bartender những người có tài năng, chuyên nghiệp và có kinh nghiệm trong pha chế đồ uống để tạo nên những vị đồ uống thơm ngon, đặc biệt cho quán. Đây là chi phí gián tiếp giúp tăng giá trị cho quán của bạn và giúp bạn dễ dàng định mức giá cao hơn so với thị trường hiện nay.
                      Chi phí khác: Ngoài những chi phí trên còn có các chi phí khác như khấu hao mặt hàng, cho phí trang thiết bị, chi phí bán hàng, nhân sự vận hành (bảo vệ, phục vụ, thu ngân,…) Mặc dù đây đều là những chi phí hoạt động của quán nhưng nó lại tạo ra giá trị gia tăng quyết định đến giá đồ uống.
                      Biến phí: Tức là những chi phí có sự ảnh hưởng khi có sự khác biệt về chất lượng đồ uống dễ thay đổi theo mùa. Ví dụ khi trái mùa một số loại trái cây rất khan hiếm vì thế chi phí nhập nguyên vật liệu đầu vào khá cao. Vậy nên chủ quán cần thiết lập giá cao hơn cho những đồ uống có nguyên liệu giá dễ biến đổi.
                      Mức lợi nhuận mong muốn: Cần xác định được mức lợi nhuận mong muốn với từng món theo giá trị tương đối (tỷ lệ %) và giá trị tuyệt đối (lợi nhuận so với giá vốn/món)
                      Công thức định giá cho menu quán cafe:

                      P = C + (I + V)/m + X

                      Trong đó:

                      P: là mức giá bán trên menu
                      C: là chi phí giá vốn ly nước
                      I: chi phí quản lý + vận hành + marketing
                      V: số tiền thu hồi vốn và chi phí cơ hội/lãi NH
                      X: lợi nhuận mong muốn
                      m: hệ số dự trù mức doanh số mà bạn bán được trong tháng(m càng tăng thì lợi nhuận đem lại càng lớn)
                      định lượng đồ uống

                      Công thức định giá cho menu quán cafe

                      Để tính V bạn cần thực hiện theo công thức: V = (v+a.n.v)/n

                      Trong đó:

                      v: là vốn đầu tư ban đầu
                      a: lãi suất NH/lãi vay
                      n: dự trù số tháng hòa vốn (thường dựa vào số năm ký kết hợp đồng với chủ nhà)
                      Ví dụ: Định giá trà sữa truyền thống size L ( 700ml )

                      Chi phí 1 ly: 4.500 đồng
                      Tổng I : 18.000.000₫/tháng bao gồm chi phí mặt bằng, nhân viên, điện nước,thuế, wifi, chi phí marketing, chi phí hậu mãi, chi phí khác
                      Tổng chi phí đầu tư quán là 100 triệu (V), trong đó hoàn thành xong quán 80 triệu còn 20 triệu dùng để duy trì quán và chỉ trả các phát sinh khác có liên quan đến đầu tư quán (như mua thêm vài dụng cụ pha chế, sửa lại sân hoặc chống dột hệ thống mái)
                      Vay ngân hàng lãi suất 1%/ tháng (a), ở đây mình ko tính thêm chi phí cơ hội vì không có đầu tư lĩnh vực khác.
                      Kế đến n =24 tháng ( vì kí Hợp đồng 2 năm với chủ nhà ), nên trong 2 năm phải thu hồi vốn, vì thường sau khi hết hợp đồng bên cho thuê có quyền lấy lại ko cho thuê nữa. Các bạn nên chủ ý khoản này. Nếu đầu tư quá nhiều mà HĐ thuê ngắn là rất mạo hiểm nhé.=> V = (100.000.000₫ + 24.000.000₫)/24 =5.160.000/tháng
                      Xác định m ( dự trù doanh số ) ví dụ 70ly /ngày tương đương 2100 ly/tháng. Hệ số m rất quan trọng, nếu theo phân khúc bình dân bạn nên tăng hệ số này càng nhiều càng tốt. Nên dự trù m mức tối thiểu nhé các bạn
                      Hệ số x xác định x=0 vì phân khúc khách hàng mình rất nhiều cạnh tranh, quán mình ko có lợi thế để thêm x. Thay tất cả vào phương trình như ảnh :
                      P ( trà sữa TT size L ) = 14.500₫
                      Cách 3 : Cách tính giá bán đồ uống theo tiêu chuẩn thực phẩm
                      Cách thứ 3 khi được các quán lựa chọn để định giá cho menu chính là dựa vào tiêu chuẩn thực phẩm.

                      Đây được xem là một trong số những cách phổ biến được sử dụng để tính chi phí cấu thành đồ uống, tính ra rõ ràng giá thành của từng món ăn/ thức uống rồi sau đó định giá menu dựa trên tỉ lệ của giá thành.

                      công thức tính food cost

                      Định giá cho menu dựa vào tiêu chuẩn thực phẩm

                      Ví dụ:

                      Giá nguyên liệu của 1 ly sinh tố dâu là 8.000 đồng, chi phí nguyên liệu chiếm 25% thì giá bán lẻ của món sinh tố dâu trên menu = giá thành chi phí tạo ra món/tỉ lệ phần trăm chi phí thực phẩm tức là = 8000/25%. Do đó một lý sinh tố dâu sẽ bán với mức giá là 32.000 đồng.

                      Khi áp dụng cách tính theo tiêu chuẩn thực phẩm bạn sẽ dễ dàng tính được mức giá của một ly sinh tố là bao nhiêu chỉ qua các bước cực kỳ đơn giản.

                      Cách 4 : Định Giá Theo Cung – Cầu
                      Theo quy luật thực tiễn khi cung nhiều thì cầu sẽ giảm và ngược lại. Đặc biệt là những nhà hàng, quán cafe bán những món đồ uống “signature”, được pha chế theo phương pháp riêng, để tạo được sự khác biệt như thế giá thành sẽ cao hơn so với thị trường.

                      cach tinh cost nuoc uong

                      Tính giá vốn nguyên liệu theo tiêu chí cung – cầu

                      Với những loại đồ uống có “cung đường” đắt giá, nhiều đối thủ cạnh tranh thì mức giá bán ít nhiều sẽ bị ảnh hưởng. Vì thế việc tạo ra được sự khác biệt trong đồ uống của quán sẽ là cách mà chủ đầu tư đem lại lợi nhuận cao trong việc kinh doanh của mình.

                      Cách 5: Tính Theo “Tỷ Lệ Vàng
                      Như thế nào được coi là cách tính đồ uống theo tỷ lệ vàng, theo các chuyên gia tỷ lệ vàng ở đây là cách để tính food cost trong ngành nhà hàng, khách sạn chiếm 35%. Cách tính này hiện nay được nhiều cơ sở kinh doanh nhà hàng, khách sạn lựa chọn để tính cost đồ uống.

                      cach tinh gia cost nuoc uong

                      Công thức tính food cost theo “tỉ lệ vàng”

                      Cụ thể cách tính như sau:

                      Một ly cà phê Espresso (quán café) có giá nguyên liệu là 8.000 đồng, chi phí đi kèm khoảng 3.000 đồng. Khi tính giá cost món Espresso, bạn sẽ làm phép tính như sau:
                      Giá bán Espresso (VND): 8.000 + 3.000 = 11.000 => (11.000/35%) x 100% = khoảng 31.500.
                      Tính giá bán của một ly sinh tố bơ (take away): nguyên liệu: 5.000 đồng, chi phí khác (dụng cụ, ly đựng, ống hút…): 1.000 đồng.
                      Giá bán sinh tố bơ (VND): 5.000 + 1.000 = 6.000 => (6.000/35%) x 100% = khoảng 17.000.
                      Mời bạn tham khảo video: Cách tính giá cost thức uống, giá vốn thức uống quán cà phê

                      4. Tips tối đa lợi nhuận
                      Làm thế nào để tối đa lợi nhuận khi kinh doanh quán cafe? Đây là câu hỏi mà rất nhiều chủ quán cafe quan tâm. Dưới đây là một số tips tối đa lợi nhuận mà chúng tôi muốn chia sẻ đến bạn, cụ thể:

                      Quản lý giá bán trên menu quán cà phê
                      Một trong những cách tips tối đa lợi nhuận cho quán cafe của bạn chính là quản lý giá bán trên menu quán cafe của mình. Nên để giá lẻ thay vì giá chẵn, chẳng hạn một ly sinh tố bơ có giá 40.000 VND thì bạn chỉ nên để giá 39.000 VND.

                      cong thuc tinh cost

                      Nên để giá thức uống trên menu là số lẻ thay vì giá chẵn

                      Với mức giá này bạn vẫn có lời tương đương với giá 40.000 VND nhưng khách hàng sẽ thích như vậy vì con số 39.000 VND mang đến cảm giác thức uống rẻ hơn.

                      Đây là một trong những cách làm hiệu quả mà hầu hết các chủ quán đều áp dụng cho menu khi thiết kế cho quán cafe của mình.

                      Mở rộng thực đơn
                      Cách làm này tức là sẽ áp dụng mở rộng menu của quán kết hợp giữa đồ uống và điểm tâm sáng. Đây là cách hiệu quả để giúp quán cafe tăng doanh thu kinh doanh của mình.

                      Theo thống kế có hơn 50% khách hàng trong độ tuổi từ 18 – 24 có nhu cầu mua bữa sáng kết hợp với đồ uống. Chính vì thế mà những quán cafe có bữa sáng sẽ là ưu tiên đầu tiên mà họ lựa chọn.

                      menu quan

                      Mở rộng thực đơn với đa dạng món để tối đa lợi nhuận

                      Việc thêm vào menu của quán các món điểm tâm, bữa ăn nhẹ như bánh mì, trái cây, salad, bánh ngọt,… sẽ là cách giúp bạn thu hút được khách hàng đến quán của mình.

                      Để tạo sự khác biệt nhiều người lại lựa chọn các món đặc trưng như thực phẩm hữu cơ, món chay để kinh doanh.

                      Chương trình khuyến mãi
                      Các chương trình khuyến mãi luôn là điều làm cho khách hàng bị thu hút. Do đó, chương trình khuyến mãi là phần không thể thiếu trong quá trình triển khai kế hoạch kinh doanh của quán cafe.

                      khuyen mai thuc uong

                      Tham khảo chương trình khuyến mãi mua 2 tặng 1

                      Bạn nên lựa chọn vào các dịp đặc biệt trong năm như lễ tết, lễ tình nhân,… Tùy vào từng quán mà chương trình khuyến mãi sẽ khác nhau. Tuy nhiên phổ biến là hình thức mua 2 tính tiền hoặc giảm giá cho các cặp đôi. Đương nhiên, hình thức ưu đãi và quà tặng phải phù hợp với đặc điểm của chương trình khuyến mãi.

                      Với những quán cafe có quy mô lớn họ còn áp dụng chương trình khuyến mãi tri ân khách vào dịp nhân sinh nhật của khách hàng. Điều này giúp cho khách hàng cảm nhận được sự quan tâm, chu đáo của quán đến khách hàng. Đây sẽ là cách giúp quán của bạn thể hiện được ấn tượng tốt hơn từ đó quảng bá được hình ảnh quán tốt nhất.

                      Cân nhắc tăng giá trong mức “Có thể chấp nhận được”
                      Tăng giá là một trong những điều tất yếu của thị trường kinh doanh. Việc tăng giá phụ thuộc rất nhiều vào các yếu tố như: giá mặt bằng, giá nguyên liệu tăng, nguồn chi cho nhân sự cũng tăng,… Tuy nhiên khách hàng lại không quan tâm đến điều này. Cái mà họ quan tâm là chất lượng và giá thành sản phẩm.

                      cach tinh gia von

                      Khi tăng giá đồ uống bạn cần tăng một cách khéo léo để tránh mất điểm

                      Khi tăng giá đồ uống bạn cần cân nhắc thời gian nào thích hợp để tăng, vì nếu tăng quá nhiều lần trong một thời gian ngắn sẽ làm cửa hàng của bạn mất điểm trong mắt khách hàng của mình.

                      Vì vậy, khi tăng giá đồ uống bạn cần tăng một cách khéo léo, không tăng quá cao hoặc tăng quá nhiều lần để tránh mất điểm. Đồng thời khi tăng giá cần giải thích thật khéo léo đối với khách hàng để không gây mất thiện cảm đối với họ.

                      Để đảm bảo việc tăng giá là hợp lý khi tăng giá bạn cần trả lời được những câu hỏi sau:

                      Giá đồ uống bạn vừa tăng có phù hợp với chi tiêu của khách hàng trong khu vực?
                      Giá có cạnh tranh so với đối thủ của cửa hàng bạn?
                      Giá mới chênh lệch với mức giá cũ là bao nhiêu, mức giá đó có nằm trong tầm có thể chấp nhận của khách hàng hay không?
                      Mức giá bạn đưa ra cho quán của mình có phản ánh được chất lượng của sản phẩm và dịch vụ của quán bạn không?
                      cong thuc tinh beverage cost

                      Lựa chọn tips để tăng lợi nhuận tối đa sao cho phù hợp

                      Mỗi quán sẽ có cách tính tips lợi nhuận tối đa sao cho phù hợp, tùy vào từng quán mà mức tính phí sẽ có sự khác nhau. Tuy nhiên, khi tính tips bạn không nên nâng mức giá đồ uống quá cao mà chỉ ở mức độ cho phép và khách hàng có thể chấp nhận được.

                      Giai đoạn kiểm soát quy trình lý quán cà phê

                      Ở giai đoạn này bạn cần thực hiện việc kiểm soát thật chặt chẽ bao gồm:

                      Kiểm soát quy trình tác nghiệp:

                      • Dựa vào bảng mô tả công việc, quy trình nghiệp vụ để thực hiện quá trình kiểm soát, đánh giá nhân sự thực hiện có đúng với quy trình đã đưa ra hay không.
                      • Cần linh hoạt điều chỉ quy trình tác nghiệp sao cho phù hợp với tình hình thực tế hiện tại của cửa hàng.

                      Thực hiện kiểm soát thu chi hàng ngày

                      • Việc thu chi nhỏ nhặt hàng ngày sẽ được trao quyền cho nhân viên thu ngân, tuy nhiên cần phải có đầy đủ chữ ký. Chỉ với những khoản chi lớn mới cần cấp quản lý ký.
                      • Đối với doanh thu từ bán hàng và doanh thu từ các khoản khác cần thực hiện kiểm tra dựa trên thực tế, nên tiến hành kiểm tra tiền vào cuối ngày (hoặc cuối ca) song song trên file quản lý hoặc phần mềm nếu có sử dụng. Trường hợp nếu nhân viên thu ngân chia ca nên có file bàn giao rõ ràng. Để có thể thực hiện quy trìnhquản lý bán hàngdễ dàng hơn thì các doanh nghiệp nên mua phần mềm quản lí.
                      • Nhân viên cần thực hiện phân chia các khoản thu/chi tách riêng để quản lý có thể dễ dàng nắm rõ (lương nhân viên, trả tiền điện, mua trái cây, mua nước ngọt,…)

                      Kiểm soát hàng hóa kho hàng

                      • Cần kiểm tra kho hàng thường xuyên ít nhất 1 tuần lần theo mẫu kiểm kho (thường nên kiểm tra hàng vào sáng thứ 2 hàng tuần)
                      • Thực hiện đối chiếu số liệu thực tế kiểm kho với số liệu trên file quản lsy để có thể đánh giá chính xác số lượng hàng hóa nhập về còn lại trong kho.
                      • Lập báo cáo phân tích:
                      • Thực hiện báo cáo doanh thu theo ngày/tháng/năm
                      • Thực hiện báo cáo chi tiết theo từng danh mục về các chi phí thu/chi
                      • Thực hiện báo cáo về thất thoát vật dụng.

                      Dựa vào các báo cáo để biết được tỷ trọng doanh thu trong cửa hàng như nguyên vật liệu, lương nhân sự, khấu hao,… từ đó đưa ra được phương án kinh doanh như thế nào cho phù hợp.

                      Các bước quy trình quản lý quán nước

                      https://banghegiare.com.vn/quy-trinh-quan-ly-quan-cafe.html

                      Cafe Business Resources – Cafe Coach (cafe-coach.com.au)