A Go-based backend application with WebSocket support, PostgreSQL database, and JWT authentication.
- RESTful API with Gorilla Mux router
- WebSocket support using Socket.IO
- PostgreSQL database with GORM ORM
- JWT authentication for secure API access
- CORS support for cross-origin requests
- Static file serving
- Environment configuration with dotenv
- Go 1.23.0 or higher
- PostgreSQL 15+ with PostGIS extension
- Git
git clone <repository-url>
cd coreUbuntu/Debian:
sudo apt-get install postgresql-15-postgis-3
# or for PostgreSQL 17
sudo apt install postgis postgresql-17-postgis-3macOS:
brew install postgresql postgisbrew install golangci-lintcp env.sample .env
# Edit .env with your database credentials and other settingsgo mod downloadgo run .go run . -migratego run . -seedgo run . -installgolangci-lint run ./...go run github.com/google/wire/cmd/wire ./applicationgo test -race -covergo test ./...core/
βββ constants/ # Application constants and error definitions
βββ models/ # Data models
βββ routes/ # HTTP route handlers and middleware
βββ services/ # Business logic and external services
β βββ db/ # Database operations and repositories
β βββ socket/ # WebSocket server implementation
βββ static/ # Static files served by the application
βββ types/ # Custom type definitions
βββ utils/ # Utility functions and helpers
βββ main.go # Application entry point
βββ go.mod # Go module dependencies
GET /- Home endpointPOST /packet- Main packet handler for authentication and other actionsGET /static/*- Static file serving
The application uses JWT tokens for authentication. Include the token in the Authorization header:
Authorization: <your-jwt-token>
WebSocket server runs alongside the HTTP server and handles real-time communication.
To run the application in development mode:
go run main.goThe server will start on the port specified in your .env file.
- Fiberv3 - HTTP router and URL matcher
- GORM - ORM library for Go
- PostgreSQL Driver - Database driver for PostgreSQL
- Socket.IO - WebSocket library
- JWT - JSON Web Token implementation
- CORS - Cross-Origin Resource Sharing middleware
- Chats.go PinnedMsg *Message
gorm:"foreignKey:PinnedMsgID;references:ID"
This project is free to use, open for everyone, and can be developed by anyone.
brew update
brew install postgresql
brew install postgis
brew services start postgresql
brew services list
brew services start postgresql
psql postgres
ALTER ROLE postgres WITH PASSWORD 'yourownpassword';
brew services restart postgresqlserver { listen 80; server_name socket.coolvibes.lgbt socket.coolvibes.app socket.coolvibes.io;
location /socket.io/ {
proxy_pass http://127.0.0.1:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
location /health {
return 200 "OK";
}
}
sudo systemctl reload nginx
Test:
go test ./...