Đăng bởi Để lại phản hồi

WINDOW – Cài MySQL bằng MySQL Installer

Bước 1: Tải MySQL Installer

Vào trang tải:
MySQL Installer for Windows → “Windows (x86, 64-bit), MSI Installer”.
(Trang chính thức từ Oracle.)

Chọn Download → chọn “No thanks, just start my download”.


Bước 2: Chạy file mysql-installer.msi

Chạy file cài đặt → chọn:

Developer Default

(gồm: MySQL Server, Workbench, Shell, connectors…)

Hoặc chọn Server Only nếu bạn chỉ cần MySQL Server.


Bước 3: Tiến hành cài đặt

Nhấn Next → Installer sẽ tự tải và cài.


Bước 4: Cấu hình MySQL Server

Bạn sẽ gặp các bước:

🔸 Kiểu cấu hình:

  • Standalone MySQL Server / Classic MySQL Replication → chọn Standalone.

🔸 Cổng (Port):

Giữ mặc định 3306 (nếu cần port khác có thể đổi).

🔸 Xác thực:

  • Use Legacy Authentication Method (MySQL 5.x)
  • Use Strong Password Encryption (Khuyến nghị)

🔸 Tạo mật khẩu root:

Nhập password cho user root (bạn phải nhớ!).

🔸 Tạo user mới (tùy chọn):

Ví dụ appuser với quyền DB Admin hoặc DB ReadWrite.


Bước 5: Hoàn tất

Click Execute → Finish.

Bây giờ MySQL đã chạy trên máy bạn.

Đăng bởi Để lại phản hồi

Build và chạy một ứng dụng Web .NET Core (.NET 6/7/8) trên CentOS

4️⃣ Chạy ứng dụng trên CentOS

Chạy trực tiếp

dotnet run
  • Mặc định ứng dụng sẽ chạy trên http://localhost:5000https://localhost:5001.
  • Bạn có thể mở firewall để truy cập từ bên ngoài:
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reload

Chạy ở chế độ production

dotnet publish -c Release -o /var/www/mywebapp
cd /var/www/mywebapp
dotnet MyWebApp.dll

5️⃣ Cài đặt dịch vụ systemd để chạy tự động

Tạo file dịch vụ:

sudo nano /etc/systemd/system/mywebapp.service

Nội dung ví dụ:

[Unit]
Description=My .NET WebApp

[Service]
WorkingDirectory=/var/www/mywebapp
ExecStart=/usr/bin/dotnet /var/www/mywebapp/MyWebApp.dll --urls "http://0.0.0.0:5000"
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-mywebapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

Sau đó kích hoạt:

sudo systemctl daemon-reload
sudo systemctl enable mywebapp.service
sudo systemctl start mywebapp.service
sudo systemctl status mywebapp.service

Ứng dụng của bạn bây giờ sẽ chạy như một service, tự khởi động cùng máy chủ.

Reload và restart service nếu cần:

sudo systemctl daemon-reload
sudo systemctl restart mywebapp.service

6. Xem log dịch vụ (rất quan trọng khi debug)

sudo journalctl -fu mywebapp.service

7. Các lệnh quản lý dịch vụ khác

Dừng dịch vụ:

sudo systemctl stop mywebapp.service

Khởi động lại:

sudo systemctl restart mywebapp.service

Xóa tự chạy:

sudo systemctl disable mywebapp.service

6️⃣ (Tuỳ chọn) Dùng Nginx làm reverse proxy

  • Cài Nginx:
sudo dnf install nginx -y
sudo systemctl enable --now nginx
  • Cấu hình reverse proxy cho .NET:
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass         http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  • Reload Nginx:
sudo nginx -s reload

Đăng bởi Để lại phản hồi

Cài .NET 8 trên CentOS Stream 9

✅I. Kiểm tra danh sách tất cả các repo đang bật

Nếu bạn đang sử dụng một môi trường desktop (GUI) như GNOME, bạn có thể mở Terminal dễ dàng qua các cách sau:

Phương pháp 1: Sử dụng Menu Ứng Dụng

  1. Nhấn vào “Activities” hoặc “Applications” (ở góc trên cùng bên trái của màn hình, tùy vào phiên bản CentOS của bạn).
  2. Tìm kiếm “Terminal” trong ô tìm kiếm.
  3. Nhấp vào Terminal để mở.

Phương pháp 2: Sử dụng phím tắt

  • Phím tắt mặc định: Bạn có thể nhấn Ctrl + Alt + T để mở Terminal.

II .Kiểm tra version kho lưu trữ trên máy chủ centos

✅II.1. Kiểm tra danh sách tất cả các repo đang bật

sudo dnf repolist

Hoặc chi tiết hơn:

sudo dnf repolist all

✅II.2. Kiểm tra thông tin chi tiết về một repo cụ thể

Ví dụ kiểm tra repo của Microsoft (sau khi bạn cài để dùng .NET):

sudo dnf repoquery -a --info microsoft-*

Hoặc:

sudo dnf config-manager --dump | grep -i microsoft -A 5

✅ II.3. Kiểm tra file cấu hình repo trong thư mục /etc/yum.repos.d/

Danh sách file repo:

ls -l /etc/yum.repos.d/

Xem nội dung file repo cụ thể, ví dụ:

cat /etc/yum.repos.d/microsoft-prod.repo

✅ II.4. Kiểm tra phiên bản repo bằng dnf info

Ví dụ kiểm tra phiên bản repo GNU:

dnf info epel-release

II.5. Nếu bạn cần kiểm tra repo nào chứa gói .NET 8, dùng:

dnf repoquery dotnet-sdk-8.0 --repoid="*"

✅ III Cài .NET 8 trên CentOS Stream 9

CÁCH 1 — Cài .NET 8 bằng Microsoft RPM repo (Cách chuẩn, hỗ trợ CentOS Stream 9)

1. Cài đặt các gói phụ thuộc

sudo dnf install -y wget tar libicu zlib

2. Thêm kho Microsoft cho CentOS 9

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/9/prod.repo

CentOS 9 dùng chung repo RHEL 9, nên repo này hoạt động tốt.

3. Cài .NET SDK 8.0

sudo dnf install -y dotnet-sdk-8.0

4. Kiểm tra phiên bản

dotnet --version

Kết quả sẽ là:

8.0.x

CÁCH 2 — Cài đặt từ binary (nếu repo bị lỗi)

Thích hợp khi bạn không muốn dùng repo hoặc gặp lỗi dependency.

1. Tải SDK .NET 8

wget https://download.visualstudio.microsoft.com/download/pr/622ab06a-c3bc-4d57-b9b8-314b5a6403d7/0b86d37ba909eb56d32f45f8719c5e66/dotnet-sdk-8.0.100-linux-x64.tar.gz

2. Tạo thư mục cài đặt

sudo mkdir -p /usr/share/dotnet

3. Giải nén .NET vào thư mục

sudo tar -xzf dotnet-sdk-8.0.100-linux-x64.tar.gz -C /usr/share/dotnet/

4. Thêm lệnh dotnet vào PATH

sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
Đăng bởi Để lại phản hồi

Cài đặt rpm

1. Kiểm tra xem rpm đã cài chưa

which rpm

Nếu không có kết quả → chưa cài.


2. Cài gói rpm trên CentOS

sudo yum install rpm

Lưu ý: CentOS 8 có thể dùng dnf thay vì yum:

sudo dnf install rpm

3. Sau khi cài xong

Bạn có thể dùng:

rpm -ivh tên-gói.rpm

hoặc dùng dnf install tên-gói.rpm cho tiện, vì dnf sẽ tự cài các dependency.

Đăng bởi Để lại phản hồi

Hướng dẫn mở port trên CentOS, bao gồm firewall và SELinux

1️⃣ Mở port 5000 trên firewall

# Mở tạm thời (mất sau reboot)
sudo firewall-cmd --zone=public --add-port=5000/tcp

# Mở vĩnh viễn
sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
sudo firewall-cmd --reload

# Kiểm tra
sudo firewall-cmd --list-ports
  • Kết quả sẽ hiển thị 5000/tcp nếu mở thành công.

2️⃣Thêm port vào SELinux cho dịch vụ tùy chỉnh

SELinux cần biết port 5000 được phép sử dụng:

  1. Tạo type port mới (ví dụ myapp_port_t):
sudo semanage port -a -t myapp_port_t -p tcp 5000
  1. Kiểm tra port đã được SELinux ghi nhận chưa:
sudo semanage port -l | grep 5000
  • Kết quả ví dụ:
myapp_port_t  tcp  5000

Lưu ý: Nếu semanage chưa có, cài bằng:

sudo yum install policycoreutils-python-utils

3️⃣ Kiểm tra port từ ngoài mạng

Từ máy khác (hoặc máy ngoài Internet) chạy:

telnet <public-ip> 5000

hoặc

nc -vz <public-ip> 5000
  • Nếu kết nối thành công → port đã public ra Internet.

4️⃣ Lưu ý bảo mật

  • Chỉ mở port cần thiết.
  • Nếu dịch vụ nhạy cảm, cân nhắc VPN hoặc firewall nâng cao.
  • SELinux vẫn nên bật để bảo vệ server.

Script hoàn chỉnh

#!/bin/bash

# 1️⃣ Hiển thị IP nội bộ
IP_NOI_BO=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '^127')
echo "IP nội bộ: $IP_NOI_BO"

# 2️⃣ Hiển thị IP công cộng
IP_CONG_CONG=$(curl -s ifconfig.me)
echo "IP công cộng: $IP_CONG_CONG"

# 3️⃣ Mở port 5000 trên firewall
echo "Mở port 5000 trên firewall..."
sudo firewall-cmd --zone=public --add-port=5000/tcp
sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
sudo firewall-cmd --reload
echo "Port 5000 đã mở trên firewall."

# 4️⃣ Thêm port 5000 vào SELinux cho dịch vụ tùy chỉnh
echo "Thêm port 5000 vào SELinux..."
# Kiểm tra nếu semanage chưa cài, sẽ cài
if ! command -v semanage &> /dev/null
then
    echo "Cài semanage..."
    sudo yum install -y policycoreutils-python-utils
fi

# Thêm port mới nếu chưa tồn tại
if ! semanage port -l | grep -q 5000; then
    sudo semanage port -a -t myapp_port_t -p tcp 5000
    echo "Port 5000 đã thêm vào SELinux."
else
    echo "Port 5000 đã tồn tại trong SELinux."
fi

echo "Hoàn tất! Bạn có thể kiểm tra kết nối từ bên ngoài bằng:"
echo "telnet $IP_CONG_CONG 5000  hoặc nc -vz $IP_CONG_CONG 5000"

✅ Cách sử dụng

  1. Tạo file, ví dụ setup_port5000.sh
nano setup_port5000.sh
  1. Dán nội dung script vào, lưu lại.
  2. Cho phép chạy:
chmod +x setup_port5000.sh
  1. Chạy script:
./setup_port5000.sh
  • Script sẽ in ra IP nội bộ, IP công cộng, mở port 5000 và thêm vào SELinux.
Đăng bởi Để lại phản hồi

Giới thiệu SQLite

SQLite là một hệ quản trị cơ sở dữ liệu quan hệ, khác với các hệ quản trị CSDL khác nó không cần client–server database engine (một dịch vụ, ứng dụng cài đặt đầy đủ thông qua nó kết nối, tương tác với các CSDL), nó được nhúng vào rất nhiều chương trình khác nhau, từ destop, mobile đến website. Hầu hết ngôn ngữ lập trình có các thư viện hỗ trợ kết nối, truy vấn đến SQLite như: PHP CJavaC#JavaScript… Nó được nhúng vào các trình duyệt, vào các hệ thống nhúng, hệ điều hành như AndroidIOS … đều đã nhúng mặc định.

Vì SQLite không cần client–server database engine nên có thể hiểu file CSDL đã tích hợp mọi thứ, sử dụng ngay không cần phải cài đặt thêm thứ gì.

SQLite tương thích với chuẩn SQL

Việc kết nối và thi các lệnh SQL với SQLite thật sự rất đơn giản, ví dụ:

SQLite với PHP

Ví dụ bạn cần thi hành một lệnh SQL trên CSDL SQLite với file có tên db.sqlite. Giả sử câu lệnh đó là:

SELECT * FROM Danhmuc

Chạy thử

SQLite với .NET

Đối với .NET thư viên truy cập SQLite được cung cấp tại http://sqlite.org/download.html, vào đó tìm đúng phiên bản binary cho .NET cần dùng, tải về và cài đặt. Sau đó thêm System.Data.SQLite ở thư mục cài đặt C:\Program Files\SQLite.NET\bin vào dự án của bạn để sử dụng.

Cách thứ 2 cài System.Data.SQLite vào dự án bằng Package Manager Console trong Visual Studio

Mở cửa sổ lệnh Package Manager Console, rồi gõ lệnh sau để cài:

PM> Install-Package Microsoft.EntityFrameworkCore.Sqlite
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.Design

Add-Migration InitialCreate
Update-Database

Nếu cài đặt thành công, khai báo sử dụng thư viện trong file code:

using System.Data.SQLite;

Dưới đây là đoạn mã, kết nối và truy vấn đến SQLite bằng C#

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public string DbPath { get; }

    public BloggingContext()
    {
        var folder = Environment.SpecialFolder.LocalApplicationData;
        var path = Environment.GetFolderPath(folder);
        DbPath = System.IO.Path.Join(path, "blogging.db");
    }

    // The following configures EF to create a Sqlite database file in the
    // special "local" folder for your platform.
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlite($"Data Source={DbPath}");
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; } = new();
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}



using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;

using var db = new BloggingContext();

// Note: This sample requires the database to be created before running.
Console.WriteLine($"Database path: {db.DbPath}.");

// Create
Console.WriteLine("Inserting a new blog");
db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
await db.SaveChangesAsync();

// Read
Console.WriteLine("Querying for a blog");
var blog = await db.Blogs
    .OrderBy(b => b.BlogId)
    .FirstAsync();

// Update
Console.WriteLine("Updating the blog and adding a post");
blog.Url = "https://devblogs.microsoft.com/dotnet";
blog.Posts.Add(
    new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
await db.SaveChangesAsync();

// Delete
Console.WriteLine("Delete the blog");
db.Remove(blog);
await db.SaveChangesAsync();

SQLiteStudio - Giao diện trực quan làm việc với SQLite
Để thực hành, học về SQL nói chung bạn có thể sử dụng CSDL mẫu bằng SQLite để thực hành, với mục đích tương tác với CSDL mà chưa cần áp dụng cho loại ngôn ngữ lập trình nào. Bạn có thể cài đặt công cụ SQLiteStudio, bạn có thể tải về cho macOS, Windows hay Linux.

Sau đó tải luôn dữ liệu mẫu tôi chuẩn bị sẵn, lưu file dữ liệu mẫu tên db.sqlite CSDL SQLite mẫu vào folder nào bạn thích.
Chạy file: SQLiteStudio, giao diện chương trình có dạng

SQLite Studio
Giao diện SQLiteStudio
<img src="https://raw.githubusercontent.com/xuanthulabnet/sql-learning/master/docs/sql-001.png" alt="SQLite Studio">
Bạn bắt đầu có thể tạo mới CSDL SQLite, thi hành các lệnh SQL trên giao diện này, ở đây bạn đã có file dữ liệu mẫu db.sqlite nên chỉ việc thêm nó vào và thực hành

Nhấn CTRL-0 thêm file db.sqlite mẫu vừa tải về để làm việc
Nhấn ALT+E mở cửa sổ soạn thảo lệnh SQL ví dụ nhập lệnh select * from Danhmuc
Nhấn F9 để chạy lệnh SQL nhập vào, kết quả trả về được thông báo hiện thị trực quan trong cửa sổ chương trình.
Đây là cách mà các bài hướng dẫn về SQL gợi ý dùng để thực hành trên website này. Ngoài ra bạn có thể dùng thẳng các chương trình khác như: MySQL console

Bạn có thể cài đặt XAMPP hoặc wampserver để có luôn cơ sở dữ liệu MariaDB, MySQL và công cụ PHPAdmin để tương tác trực quan với CSD
Đăng bởi Để lại phản hồi

Bai 1: Vue là gì?

Vue (phát âm là /vjuː/, giống như view ) là một khuôn khổ JavaScript để xây dựng giao diện người dùng. Nó được xây dựng trên HTML, CSS và JavaScript chuẩn và cung cấp một mô hình lập trình dựa trên thành phần, khai báo giúp bạn phát triển hiệu quả giao diện người dùng ở mọi mức độ phức tạp.

Sau đây là một ví dụ tối thiểu:

js

import { createApp, ref } from 'vue'

createApp({
  setup() {
    return {
      count: ref(0)
    }
  }
}).mount('#app')

bản mẫu

<div id="app">
  <button @click="count++">
    Count is: {{ count }}
  </button>
</div>

Kết quảSố đếm là: 0

Ví dụ trên minh họa hai tính năng cốt lõi của Vue:

  • Kết xuất khai báo : Vue mở rộng HTML chuẩn với cú pháp mẫu cho phép chúng ta mô tả khai báo đầu ra HTML dựa trên trạng thái JavaScript.
  • Tính phản ứng : Vue tự động theo dõi các thay đổi trạng thái của JavaScript và cập nhật DOM một cách hiệu quả khi có thay đổi xảy ra.

Bạn có thể đã có thắc mắc – đừng lo lắng. Chúng tôi sẽ đề cập đến mọi chi tiết nhỏ trong phần còn lại của tài liệu. Bây giờ, vui lòng đọc tiếp để bạn có thể hiểu rõ hơn về những gì Vue cung cấp.

Tạo ứng dụng Vue

Điều kiện tiên quyết

Cài đặt Node.js phiên bản 18.3 trở lên

Làm quen với dòng lệnh

Hãy đảm bảo bạn đã cài đặt phiên bản Node.js mới nhất và thư mục làm việc hiện tại của bạn là nơi bạn định tạo dự án. Chạy lệnh sau trong dòng lệnh của bạn (không có $dấu):

$ npm create vue@latest
$ cd <your-project-name>
$ npm install
$ npm run dev

Khi bạn đã sẵn sàng đưa ứng dụng của mình vào sản xuất, hãy chạy lệnh sau:

$ npm run build