Cài đặt WordPress với Docker, Nginx, MariaDB trên Ubuntu 22

Giới thiệu

Ở bài viết này chúng ta sẽ tiến hành tạo một website WordPress thông qua Docker Compose, Nginx, MariaDB trên Ubuntu 22.04. Về phần Docker mình sẽ sử dụng Portainer để quản lý container.

Cài đặt Docker và Portainer

Cài đặt Docker trên Ubuntu

sudo apt update
sudo apt upgrade
sudo apt install docker.io -y

Tự động bật Docker khi máy chủ khởi động

sudo -i
systemctl start docker
systemctl enable docker

Cài đặt Portainer

docker volume create portainer_data
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
docker ps

Truy cập Portainer

Sau khi cài đặt xong, bạn hãy lên web và truy cập vào http://localhost:9000 để vào giao diện của Portainer

image - quochung.cyou PTIT

Vào lần truy cập đầu tiên, bạn sẽ được hỏi để tạo mật khẩu truy cập Portainer.

Vì mình quản lý từ local nên mình sẽ chọn Local ở bước tiếp theo

02 connect local - quochung.cyou PTIT

Cài đặt WordPress

Cài đặt Nginx

Bạn vào mục Container và tạo một container cho nginx như sau

image 1 - quochung.cyou PTIT
+ Name: nginx (Tùy ý bạn chọn để đặt tên cho container)
+ Image: nginx
+ Manual network port publishing:
Chọn port truy cập cho nginx, mặc định ở phần container phải là 80, và host là port bạn truy cập đến nginx
Hoặc bật Publish all exposed network ports to random host ports để tự động chọn port ngẫu nhiên 

Ở đây mình chọn 80:80

Chọn Deploy Container để tiếp tục

Tiếp theo thử truy cập localhost:(cổng bạn chọn) để kiểm tra xem nginx đã hoạt động chưa?

welcome to nginx window 5x3 2 - quochung.cyou PTIT

Cài đặt MariaDB

Tiếp tục tạo Container cho MariaDB như sau

image 2 - quochung.cyou PTIT
+ Name: mariadb (Tùy ý bạn chọn để đặt tên cho container)
+ Image: mariadb 
+ Manual network port publishing:
Chọn port truy cập cho mariadb , mặc định ở phần mariadb phải là 3306, và host là port bạn truy cập đến nginx
Hoặc bật Publish all exposed network ports to random host ports để tự động chọn port ngẫu nhiên 

Ở đây mình chọn 4166:3306

Chọn Deploy Container để tiếp tục

Sau đó truy cập vào Console và tạo database cho wordpress

mysql -u root -p
create database wordpress;

Cài đặt WordPress

Tạo container wordpress như sau

image 3 - quochung.cyou PTIT
+ Name: wordpress (Tùy ý bạn chọn để đặt tên cho container)
+ Image: wordpress 
+ Manual network port publishing:
Chọn port truy cập cho wordpress, mặc định ở phần container phải là 80, và host là port bạn truy cập đến wordpress
Hoặc bật Publish all exposed network ports to random host ports để tự động chọn port ngẫu nhiên 

Ở đây mình chọn 4167:80

Chọn Deploy Container để tiếp tục

Cấu hình Nginx

Truy cập vào Console nginx và gõ lệnh sau

apt -y update
apt -y install nano
nano /etc/nginx/conf.d/wordpress.conf

Bạn tạo config file theo mẫu sau với ip, port theo bạn tạo

server {
    listen       80;
    server_name  wordpress.quochung.cyou; 

location / {
    proxy_pass       http://ip:4167;
    proxy_redirect             off;
    proxy_set_header Upgrade   $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Như vậy mình đã trỏ subdomain wordpress.quochung.cyou về IP của nginx trên cổng http 80. Sau đó nginx sẽ chuyển đến http://ip:4167 (Trang của wordpress)

Bạn save file và gõ

nginx -t

Để kiểm tra xem config đã đúng chưa

Sau khi xong khởi động lại container nginx, truy cập tên miền đã tạo để kiểm tra kết quả

WordPress setup wizard - quochung.cyou PTIT

[HomeAssistant] Thông báo thông tin thời tiết bằng Google Home Mini (Tiếng Việt)

Sử dụng AccuWeather lấy thông tin thời tiết và sensor covid19 lấy tình hình Covid 19

Bạn chỉ cần tải AccuWeather và thêm script dưới cho automation

Automation bên dưới chạy mỗi 3 tiếng và chỉ trong 7:00 – 23:00
alias: Hàng giờ
description: ''
trigger:
  - platform: time_pattern
    minutes: '00'
    hours: /3
    seconds: '00'
condition:
  - condition: time
    after: '07:00'
    before: '23:00'
action:
  - service: tts.google_translate_say
    data:
      entity_id: all
      message: >-
        {% set icon = {'clear-day':'ngày nắng', 'clear-night':'đêm trong',
        'rain':'có mưa', 'wind':'có gió mạnh', 'fog':'có sương mù',
        'cloudy':'nhiều mây', 'partly-cloudy-day':'tương đối nhiều mây',
        'partly-cloudy-night':'đêm nhiều mây' } %} {% set today_condition =
        icon[states('weather.nha_2')] %} Sau đây là thông tin dự báo thời tiết:
        hiện tại điều kiện thời tiết là {{
        states('sensor.openweathermap_weather') }}, độ ẩm tương đối khoảng
        {{state_attr('weather.nha_2', 'humidity')|replace('.',' phẩy ')}} phần
        trăm, nhiệt độ ngoài trời là {{state_attr('weather.nha_2',
        'temperature')|replace('.',' phẩy ')}} độ và mức gió ở mức
        {{state_attr('weather.nha_2', 'wind_speed')|replace('.',' phẩy ')}}
        kilomet mỗi giờ. Về tình hình Covid-19 tại Việt nam, hiện tại Bắc Ninh
        có tổng cộng {{state_attr('sensor.vn_covid19','tinh')['Bắc
        Ninh']['soCaNhiem']}} ca nhiễm, thêm
        {{"{:,.0f}".format(state_attr('sensor.vn_covid19','tinh')['Bắc
        Ninh']['soCaHomNay'])}} ca ngày hôm nay. Cả nước đã có {{
        state_attr('sensor.vn_covid19','binhPhuc')}} ca bình phục. Chúc bạn một
        ngày tốt lành!
      language: vi
mode: parallel
max: 10

[Visual Studio Code] Sửa lỗi “Error: Range-based ‘for’ loops are not allowed in C++98 mode”

a20ff224e8b36dac9fd0b2d1d0fe63e7622c1622 - quochung.cyou PTIT

Lỗi được báo khi bạn dùng auto trong for, nhưng VS Code báo trình biên dịch C++ của bạn đang quá cũ

Bạn hãy thử cập nhật Mingw theo hướng dẫn sau: http://quochung.cyou/cach-cai-dat-c-mingw-cho-vs-code-c-20/

Nếu bạn dùng Extension Code Runner để chạy code

  1. Vào Extensions (Ctrl Shift X), tìm Code Runner
  2. Ấn vào hình bánh răng => Extension Setting
  3. Tìm đến Code Runner – Executor map – > Edit in setting.json
  4. Ở mục cpp sẽ có dạng như này: cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt
  5. Bạn sửa thành cd $dir && g++ -std=c++11 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt (Thêm std=c++11 để ép trình compiler chạy code với c++11, bạn có thể sửa thành c++14 hoặc c++17 – có thể mingw của bạn không có 14/17, nếu lỗi hãy thử 11)

Nếu bạn dùng Extension CPH (Competitive Programming Helper) để chạy code

  1. Vào Extensions (Ctrl Shift X), tìm Competitive Programming Helper
  2. Ấn vào hình bánh răng => Extension Setting
  3. Tìm đến Code Runner – Executor map – > Edit in setting.json
  4. Ở mục “CPH > Language > Cpp: Args”
  5. Bạn cho vào std=c++11 (Thêm std=c++11 để ép trình compiler chạy code với c++11, bạn có thể sửa thành c++14 hoặc c++17 – có thể mingw của bạn không có 14/17, nếu lỗi hãy thử 11)

Cách cài đặt C++, MingW cho Visual Studio Code (C++ 20)

Video hướng dẫn

Video hướng dẫn

Hướng dẫn

Các bước thực hiện

  1. Cài Visual Studio Code.
  2. Tải extension C/C++ extension for VS Code. hỗ trợ C/C++. Hoặc bạn có thể tự vào mục Extension bằng Ctrl+Shift+X rồi tìm C++ C/C++ extension
  3. Tải Mingw để có thể compile code https://github.com/brechtsanders/winlibs_mingw/releases/, thông thường các máy sẽ dùng file có dạng “winlibs-x86_64-posix-seh-gcc-12.1.0-mingw-w64msvcrt-10.0.0-r3.zip” (winlibsx86_64…… ) (đuôi .zip)
  4. Bạn giải nén thư mục được 1 folder mingw, để folder này vào đâu đó trong ổ C. Trong folder mingw sẽ có một thư mục con tên “bin” , hãy nhớ thư mục này
  5. Dùng thanh tìm kiếm của Window, tìm chữ “path”, chọn lựa chọn Edit environment variables for your account.
    1. Chọn Path trong User variables và click Edit.
    2. Chọn New, bây giờ hãy paste đường dẫn vào folder mingw/bin bên trên (dẫn đến thư mục con bin) VD: C:\msys64\mingw64\bin
    3. Chọn OK và tắt tất cả cửa sổ cài đặt

Kiểm tra cài đặt thành công chưa

Mở CMD/Powershell của Window lên, gõ lệnh

g++ --version

Nếu trả về là phiên bản của GCC có dạng GCC 4.7.2 …. thì bạn đã cài thành công