Skip to content
/ chat Public

Full-stack realtime chat application built with Go and WebSocket. Features JWT authentication, MySQL persistence, and Redis for session management.

License

Notifications You must be signed in to change notification settings

n-nagmn/chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Go Realtime Chat Server

Go (Golang), WebSocket, MySQL, Redis, Nginx を使用した、フルスタック・リアルタイムチャットアプリケーションです。 JWT認証、チャンネル管理、メッセージの永続化、リアルタイム配信機能を備えています。

Features

  • 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

Requirements

  • OS: Ubuntu / Debian Linux
  • Language: Go 1.21+
  • Database: MySQL 8.0+
  • In-Memory DB: Redis
  • Web Server: Nginx

Installation

1. Setup Backend Environment

必要なミドルウェアと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/bin

2. Setup Database

MySQLにデータベースとテーブルを作成します。

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
);

3. Deploy Application

リポジトリをクローンし、ビルドします。

# 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.go

Configuration: main.go 内のMySQL接続情報(パスワード等)を環境に合わせて修正してください。

cfg := mysql.Config{
    User:   "chat_go_user",
    Passwd: "password", // ★ Change this
    // ...
}

4. Deploy Frontend

クライアント用HTMLをWeb公開ディレクトリに配置します。

sudo mkdir -p /var/www/html/chat
sudo cp index.html /var/www/html/chat/

Configuration & Deployment

Systemd Service (Auto Start)

# 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

Nginx (Reverse Proxy)

# 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

Usage

  1. ブラウザで http://your-server-ip/chat/ にアクセスします。
  2. 登録: ユーザー名とパスワードを入力してアカウントを作成します。
  3. ログイン: 作成したアカウントでログインします。
  4. チャット: チャンネルを選択し、リアルタイムチャットを開始します。

License

MIT License

About

Full-stack realtime chat application built with Go and WebSocket. Features JWT authentication, MySQL persistence, and Redis for session management.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published