Go (Golang), WebSocket, MySQL, Redis, Nginx を使用した、フルスタック・リアルタイムチャットアプリケーションです。 JWT認証、チャンネル管理、メッセージの永続化、リアルタイム配信機能を備えています。
- Realtime Messaging: WebSocketによる低遅延なメッセージ配信
- Authentication: JWT (JSON Web Token) を使用したセキュアな認証システム
- Channel System: 自由に作成・削除可能なチャットルーム機能
- Data Persistence:
- MySQL: ユーザー情報、チャンネル、メッセージ履歴の永続化
- Redis: オンラインユーザー管理、ルーム参加状況の高速な処理
- Full Stack:
- Backend: Go (Gorilla WebSocket, Mux, GORM-like SQL)
- Frontend: Vanilla JS (Single Page Application like UI)
- Infrastructure: Nginx Reverse Proxy + Systemd
- OS: Ubuntu / Debian Linux
- Language: Go 1.21+
- Database: MySQL 8.0+
- In-Memory DB: Redis
- Web Server: Nginx
必要なミドルウェアとGo言語をインストールします。
# Update System
sudo apt update && sudo apt upgrade -y
# Install MySQL & Redis & Nginx
sudo apt install mysql-server redis-server nginx -y
sudo systemctl enable redis-server
# Install Go (Example for Linux AMD64)
wget [https://go.dev/dl/go1.21.5.linux-amd64.tar.gz](https://go.dev/dl/go1.21.5.linux-amd64.tar.gz)
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/binMySQLにデータベースとテーブルを作成します。
CREATE DATABASE chat_db;
CREATE USER 'chat_go_user'@'localhost' IDENTIFIED BY 'password'; -- Change password!
GRANT ALL PRIVILEGES ON chat_db.* TO 'chat_go_user'@'localhost';
FLUSH PRIVILEGES;
USE chat_db;
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE channels (
channel_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO channels (name) VALUES ('general'), ('tech'), ('random');
CREATE TABLE messages (
message_id BIGINT AUTO_INCREMENT PRIMARY KEY,
channel_id INT NOT NULL,
user_id INT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (channel_id) REFERENCES channels(channel_id) ON DELETE CASCADE
);リポジトリをクローンし、ビルドします。
# Clone & Build
git clone [https://github.com/YOUR_USERNAME/go-chat-server.git](https://github.com/YOUR_USERNAME/go-chat-server.git) ~/go-chat-server
cd ~/go-chat-server
go mod tidy
go build -o chat-server main.goConfiguration: main.go 内のMySQL接続情報(パスワード等)を環境に合わせて修正してください。
cfg := mysql.Config{
User: "chat_go_user",
Passwd: "password", // ★ Change this
// ...
}クライアント用HTMLをWeb公開ディレクトリに配置します。
sudo mkdir -p /var/www/html/chat
sudo cp index.html /var/www/html/chat/# Copy service file
sudo cp conf/go-chat.service /etc/systemd/system/
# Enable & Start
sudo systemctl daemon-reload
sudo systemctl enable go-chat.service
sudo systemctl start go-chat.service# Copy nginx config
sudo cp conf/nginx.conf /etc/nginx/sites-available/go-chat
# Enable site
sudo ln -s /etc/nginx/sites-available/go-chat /etc/nginx/sites-enabled/
# Reload Nginx
sudo nginx -t
sudo systemctl reload nginx- ブラウザで
http://your-server-ip/chat/にアクセスします。 - 登録: ユーザー名とパスワードを入力してアカウントを作成します。
- ログイン: 作成したアカウントでログインします。
- チャット: チャンネルを選択し、リアルタイムチャットを開始します。
MIT License