Skip to content

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

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages